diff --git a/txexpr/core-predicates.rkt b/txexpr/core-predicates.rkt index 270fbaf..f13b10f 100644 --- a/txexpr/core-predicates.rkt +++ b/txexpr/core-predicates.rkt @@ -1,31 +1,28 @@ #lang racket/base -(require sugar/define (prefix-in xml: xml) racket/match) -(provide (all-defined-out) cdata? cdata xexpr->string xexpr?) +(require sugar/define xml racket/match) +(provide (all-defined-out) cdata? cdata valid-char? xexpr->string xexpr?) -; Section 2.2 of XML 1.1 -; (XML 1.0 is slightly different and more restrictive) -(define (valid-char? i) +;; Section 2.2 of XML 1.1 +;; (XML 1.0 is slightly different and more restrictive) +;; make private version of my-valid-char to get consistent results with 6.0 +(define (my-valid-char? i) (and (exact-nonnegative-integer? i) (or (<= #x1 i #xD7FF) (<= #xE000 i #xFFFD) (<= #x10000 i #x10FFFF)))) -(define (xexpr? x) - (or (txexpr? x) (xml:xexpr? x) (valid-char? x))) - -(define cdata xml:cdata) -(define cdata? xml:cdata?) -(define xexpr->string xml:xexpr->string) +(define (my-xexpr? x) + (or (txexpr? x) (xexpr? x) (my-valid-char? x))) (define (txexpr-short? x) (match x - [(list (? symbol? name) (? xexpr?) ...) #t] + [(list (? symbol? name) (? my-xexpr?) ...) #t] [else #f])) (define (txexpr? x) (or (txexpr-short? x) (match x - [(list (? symbol?) (list (list (? symbol?) (? string?)) ...) (? xexpr?) ...) #t] + [(list (? symbol?) (list (list (? symbol?) (? string?)) ...) (? my-xexpr?) ...) #t] [else #f]))) (define (txexpr-tag? x) @@ -44,7 +41,7 @@ (and (list? x) (andmap txexpr-attr? x))) (define (txexpr-element? x) - (xexpr? x)) + (my-xexpr? x)) (define (txexpr-elements? x) (and (list? x) (andmap txexpr-element? x))) diff --git a/txexpr/scribblings/txexpr.scrbl b/txexpr/scribblings/txexpr.scrbl index e68bed1..61cf594 100644 --- a/txexpr/scribblings/txexpr.scrbl +++ b/txexpr/scribblings/txexpr.scrbl @@ -3,7 +3,7 @@ @; for documentation purposes, use the xexpr? from xml. @; the one in txexpr is just to patch over an issue with @; `valid-char?` in Racket 6. -@(require scribble/eval (for-label racket (except-in txexpr xexpr?) xml (only-in typed/racket require/typed))) +@(require scribble/eval (for-label racket txexpr xml (only-in typed/racket require/typed))) @(define my-eval (make-base-eval)) @(my-eval `(require txexpr xml)) diff --git a/txexpr/tests.rkt b/txexpr/tests.rkt index 8d28317..ebb5292 100644 --- a/txexpr/tests.rkt +++ b/txexpr/tests.rkt @@ -57,8 +57,9 @@ (check-true (txexpr-element? "string")) (check-true (txexpr-element? 'amp)) (check-true (txexpr-element? '(p "string"))) - (check-true (txexpr-element? 65)) ;; a valid-char - (check-false (txexpr-element? 0)) ;; not a valid-char + (check-true (txexpr-element? 2)) ; a valid-char, but not in v6.0 xml:xexpr? + (check-true (txexpr-element? 65)) ; a valid-char + (check-false (txexpr-element? 0)) ; not a valid-char (check-true (txexpr-elements? '("p" "foo" "123"))) (check-true (txexpr-elements? '("p" "foo" 123))) ; includes number