diff --git a/pkgs/racket-pkgs/racket-doc/xml/xml.scrbl b/pkgs/racket-pkgs/racket-doc/xml/xml.scrbl index 9d2668020c..26c02de3c0 100644 --- a/pkgs/racket-pkgs/racket-doc/xml/xml.scrbl +++ b/pkgs/racket-pkgs/racket-doc/xml/xml.scrbl @@ -110,7 +110,7 @@ Represents an attribute within an element.} If @racket[(permissive-xexprs)] is @racket[#t], then equivalent to @racket[any/c], otherwise equivalent to @racket[(make-none/c 'permissive)]} @defproc[(valid-char? [x any/c]) boolean?]{ - Returns true if @racket[x] is an exact-nonnegative-integer whose character interpretation under UTF-8 is from the set (#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]), in accordance with section 2.2 of the XML 1.1 spec. + Returns true if @racket[x] is an exact-nonnegative-integer whose character interpretation under UTF-8 is from the set ([#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]), in accordance with section 2.2 of the XML 1.1 spec. } @defstruct[(entity source) ([text (or/c symbol? valid-char?)])]{ diff --git a/pkgs/racket-pkgs/racket-test/tests/xml/test.rkt b/pkgs/racket-pkgs/racket-test/tests/xml/test.rkt index 3b5aac2931..df7cc7f1e2 100644 --- a/pkgs/racket-pkgs/racket-test/tests/xml/test.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/xml/test.rkt @@ -563,9 +563,8 @@ END " ") (test-xexpr->string '(root () 40) "(") - (check-exn - exn:fail? - (λ () (xexpr->string "\f"))) + (test-xexpr->string '(root () "\f") + "\f") ; XXX more xexpr->string tests ) @@ -639,7 +638,7 @@ END (test-validate-xexpr '(a ([href "#"]) "string")) (test-validate-xexpr/exn #f #f) - (test-validate-xexpr/exn 4 4) + (test-validate-xexpr 4) (test-validate-xexpr/exn + +) (test-validate-xexpr/exn '(a ([href foo]) bar) 'foo) (test-validate-xexpr/exn '("foo" bar) '("foo" bar)) diff --git a/racket/collects/xml/private/core.rkt b/racket/collects/xml/private/core.rkt index 6260be4308..e20c836c73 100644 --- a/racket/collects/xml/private/core.rkt +++ b/racket/collects/xml/private/core.rkt @@ -25,12 +25,9 @@ (define-struct (cdata source) (string) #:transparent) ; Section 2.2 of XML 1.1 -; (XML 1.0 is slightly different and looks less restrictive) +; (XML 1.0 is slightly different and more restrictive) (define (valid-char? i) (and (exact-nonnegative-integer? i) - (or (= i #x9) - (= i #xA) - (= i #xD) - (<= #x20 i #xD7FF) - (<= #xE000 i #xFFFD) + (or (<= #x1 i #xD7FF) + (<= #xE000 i #xFFFD) (<= #x10000 i #x10FFFF)))) diff --git a/racket/collects/xml/private/writer.rkt b/racket/collects/xml/private/writer.rkt index bd56c006e8..ae87812be0 100644 --- a/racket/collects/xml/private/writer.rkt +++ b/racket/collects/xml/private/writer.rkt @@ -154,7 +154,7 @@ (let ([n (entity-text entity)]) (fprintf out (if (number? n) "&#~a;" "&~a;") n))) -(define escape-table #px"[<>&[:cntrl:]]") +(define escape-table #px"[<>&]") (define escape-attribute-table #rx"[<>&\"]") (define (replace-escaped s) @@ -164,18 +164,12 @@ [(#\>) ">"] [(#\&) "&"] [(#\") """] - [(#\newline) "\n"] - [else - (define i (char->integer c)) - (if (valid-char? i) - (format "&#~a;" i) - (error 'escape "illegal character, ~v" c))])) + [else c])) ;; escape : String -> String (define (escape x table) (regexp-replace* table x replace-escaped)) - ;; write-string/excape: String Regexp Output-Port -> Void ;; Writes the string to the output port, with a fast-path ;; that tries to avoid using string escapes unless necessary. @@ -185,7 +179,6 @@ [else (write-string str out)])) - (provide escape write-string/escape escape-table