diff --git a/collects/html/html-mod.ss b/collects/html/html-mod.ss new file mode 100644 index 0000000000..49a6f71b9e --- /dev/null +++ b/collects/html/html-mod.ss @@ -0,0 +1,137 @@ +#lang scheme +;; copyright by Paul Graunke June 2000 AD + +(require mzlib/file + mzlib/list + mzlib/etc + mzlib/include + "html-spec.ss" + "html-sig.ss" + (prefix-in sgml: "sgml-reader.ss") + xml) + +(provide-signature-elements html^) + + ;; Html-content = Html-element | Pc-data | Entity + + (include "html-structs.ss") + (include "case.ss") + + ;; xml->html : Document -> Html + (define (xml->html doc) + (let ([root (document-element doc)]) + (unless (eq? 'html (element-name root)) + (error 'xml->html "This is not an html document. Expected 'html, given ~a" (element-name root))) + (make-html (element-attributes root) (xml-contents->html (element-content root))))) + + + ;; xml-content->html : (listof Content) -> (listof Html-element) + (define (xml-contents->html contents) + (foldr xml-single-content->html + null + contents)) + + ;; read-xhtml : [Input-port] -> Html + (define read-xhtml (compose xml->html read-xml)) + + ;; peel-f : (Html-content -> Bool) (listof Html-content) (listof Html-content) -> (listof Html-content) + (define (peel-f toss? to-toss acc0) + (foldr (lambda (x acc) + (if (toss? x) + (append (html-full-content x) acc) + (cons x acc))) + acc0 + to-toss)) + + ;; repackage-html : (listof Html-content) -> Html + (define (repackage-html contents) + (let* ([html (memf html? contents)] + [peeled (peel-f html? contents null)] + [body (memf body? peeled)]) + (make-html (if html + (html-element-attributes (car html)) + null) + (append (filter head? peeled) + (list (make-body (if body + (html-element-attributes (car body)) + null) + (filter (compose not head?) (peel-f body? peeled null)))))))) + + ;; clean-up-pcdata : (listof Content) -> (listof Content) + ;; Each pcdata inside a tag that isn't supposed to contain pcdata is either + ;; a) appended to the end of the previous subelement, if that subelement may contain pcdata + ;; b) prepended to the front of the next subelement, if that subelement may contain pcdata + ;; c) discarded + ;; unknown tags may contain pcdata + ;; the top level may contain pcdata + (define clean-up-pcdata + ;; clean-up-pcdata : (listof Content) -> (listof Content) + (letrec ([clean-up-pcdata + (lambda (content) + (map (lambda (to-fix) + (cond + [(element? to-fix) + (recontent-xml to-fix + (let ([possible (may-contain (element-name to-fix))] + [content (element-content to-fix)]) + (if (or (not possible) (memq 'pcdata possible)) + (clean-up-pcdata content) + (eliminate-pcdata content))))] + [else to-fix])) + content))] + [eliminate-pcdata + ;: (listof Content) -> (listof Content) + (lambda (content) + (let ([non-elements (first-non-elements content)] + [more (memf element? content)]) + (if more + (let* ([el (car more)] + [possible (may-contain (element-name el))]) + (if (or (not possible) (memq 'pcdata possible)) + (cons (recontent-xml el (append non-elements (clean-up-pcdata (element-content el)) (eliminate-pcdata (first-non-elements (cdr more))))) + (or (memf element? (cdr more)) null)) + (cons (recontent-xml el (eliminate-pcdata (element-content el))) + (eliminate-pcdata (cdr more))))) + null)))]) + clean-up-pcdata)) + + ;; first-non-elements : (listof Content) -> (listof Content) + (define (first-non-elements content) + (cond + [(null? content) null] + [else (if (element? (car content)) + null + (cons (car content) (first-non-elements (cdr content))))])) + + ;; recontent-xml : Element (listof Content) -> Element + (define (recontent-xml e c) + (make-element (source-start e) (source-stop e) (element-name e) (element-attributes e) c)) + + ;; implicit-starts : Symbol Symbol -> (U #f Symbol) + (define (implicit-starts parent child) + (or (and (eq? child 'tr) (eq? parent 'table) 'tbody) + (and (eq? child 'td) (memq parent '(table tbody tfoot thead)) 'tr))) + + ;; may-contain : Kid-lister + (define may-contain + (sgml:gen-may-contain html-spec)) + + (define may-contain-anything + (sgml:gen-may-contain null)) + + (define use-html-spec (make-parameter #t)) + + ;; read-html-as-xml : [Input-port] -> (listof Content) + (define read-html-as-xml + (case-lambda + [(port) + ((if (use-html-spec) clean-up-pcdata values) + ((sgml:gen-read-sgml (if (use-html-spec) + may-contain + may-contain-anything) + implicit-starts) port))] + [() (read-html-as-xml (current-input-port))])) + + ;; read-html : [Input-port] -> Html + (define read-html + (compose repackage-html xml-contents->html read-html-as-xml)) \ No newline at end of file diff --git a/collects/html/html-sig.ss b/collects/html/html-sig.ss index d0b57a7e23..600cff884a 100644 --- a/collects/html/html-sig.ss +++ b/collects/html/html-sig.ss @@ -1,11 +1,9 @@ ;; copyright by Paul Graunke June 2000 AD +#lang scheme -(module html-sig mzscheme - (require mzlib/unitsig) +(define-signature html-structs^ ((struct html-element (attributes)) (struct html-full (content)) (struct html ()) (struct div ()) (struct center ()) (struct blockquote ()) (struct ins ()) (struct del ()) (struct dd ()) (struct li ()) (struct th ()) (struct td ()) (struct iframe ()) (struct noframes ()) (struct noscript ()) (struct style ()) (struct script ()) (struct basefont ()) (struct br ()) (struct area ()) (struct link ()) (struct img ()) (struct param ()) (struct hr ()) (struct input ()) (struct col ()) (struct isindex ()) (struct base ()) (struct meta ()) (struct option ()) (struct textarea ()) (struct title ()) (struct head ()) (struct tr ()) (struct colgroup ()) (struct thead ()) (struct tfoot ()) (struct tbody ()) (struct tt ()) (struct i ()) (struct b ()) (struct u ()) (struct s ()) (struct strike ()) (struct big ()) (struct small ()) (struct em ()) (struct strong ()) (struct dfn ()) (struct code ()) (struct samp ()) (struct kbd ()) (struct var ()) (struct cite ()) (struct abbr ()) (struct acronym ()) (struct sub ()) (struct sup ()) (struct span ()) (struct bdo ()) (struct font ()) (struct p ()) (struct h1 ()) (struct h2 ()) (struct h3 ()) (struct h4 ()) (struct h5 ()) (struct h6 ()) (struct q ()) (struct dt ()) (struct legend ()) (struct caption ()) (struct table ()) (struct button ()) (struct fieldset ()) (struct optgroup ()) (struct select ()) (struct label ()) (struct form ()) (struct ol ()) (struct ul ()) (struct dir ()) (struct menu ()) (struct dl ()) (struct pre ()) (struct object ()) (struct applet ()) (struct -map ()) (struct a ()) (struct address ()) (struct body ()))) - (define-signature html-structs^ ((struct html-element (attributes)) (struct html-full (content)) (struct html ()) (struct div ()) (struct center ()) (struct blockquote ()) (struct ins ()) (struct del ()) (struct dd ()) (struct li ()) (struct th ()) (struct td ()) (struct iframe ()) (struct noframes ()) (struct noscript ()) (struct style ()) (struct script ()) (struct basefont ()) (struct br ()) (struct area ()) (struct link ()) (struct img ()) (struct param ()) (struct hr ()) (struct input ()) (struct col ()) (struct isindex ()) (struct base ()) (struct meta ()) (struct option ()) (struct textarea ()) (struct title ()) (struct head ()) (struct tr ()) (struct colgroup ()) (struct thead ()) (struct tfoot ()) (struct tbody ()) (struct tt ()) (struct i ()) (struct b ()) (struct u ()) (struct s ()) (struct strike ()) (struct big ()) (struct small ()) (struct em ()) (struct strong ()) (struct dfn ()) (struct code ()) (struct samp ()) (struct kbd ()) (struct var ()) (struct cite ()) (struct abbr ()) (struct acronym ()) (struct sub ()) (struct sup ()) (struct span ()) (struct bdo ()) (struct font ()) (struct p ()) (struct h1 ()) (struct h2 ()) (struct h3 ()) (struct h4 ()) (struct h5 ()) (struct h6 ()) (struct q ()) (struct dt ()) (struct legend ()) (struct caption ()) (struct table ()) (struct button ()) (struct fieldset ()) (struct optgroup ()) (struct select ()) (struct label ()) (struct form ()) (struct ol ()) (struct ul ()) (struct dir ()) (struct menu ()) (struct dl ()) (struct pre ()) (struct object ()) (struct applet ()) (struct -map ()) (struct a ()) (struct address ()) (struct body ()))) +(define-signature html^ (read-xhtml read-html read-html-as-xml (open html-structs^) + use-html-spec)) - (define-signature html^ (read-xhtml read-html read-html-as-xml (open html-structs^) - use-html-spec)) - - (provide html^)) +(provide html^) \ No newline at end of file diff --git a/collects/html/html-unit.ss b/collects/html/html-unit.ss index ce4927b3dc..ae540f38cb 100644 --- a/collects/html/html-unit.ss +++ b/collects/html/html-unit.ss @@ -1,142 +1,141 @@ +#lang scheme ;; copyright by Paul Graunke June 2000 AD -(module html-unit mzscheme - (require mzlib/unitsig - mzlib/file - mzlib/list - mzlib/etc - mzlib/include - "html-spec.ss" - "html-sig.ss" - "sgml-reader-sig.ss" - xml/xml-sig) +(require mzlib/file + mzlib/list + mzlib/etc + mzlib/include + "html-spec.ss" + "html-sig.ss" + "sgml-reader-sig.ss" + xml/private/sig) - (provide html@) +(provide html@) - (define html@ - (unit/sig html^ - (import xml^ (sgml : sgml-reader^)) - - ;; Html-content = Html-element | Pc-data | Entity - - (include "html-structs.ss") - (include "case.ss") - - ;; xml->html : Document -> Html - (define (xml->html doc) - (let ([root (document-element doc)]) - (unless (eq? 'html (element-name root)) - (error 'xml->html "This is not an html document. Expected 'html, given ~a" (element-name root))) - (make-html (element-attributes root) (xml-contents->html (element-content root))))) - - - ;; xml-content->html : (listof Content) -> (listof Html-element) - (define (xml-contents->html contents) - (foldr xml-single-content->html - null - contents)) - - ;; read-xhtml : [Input-port] -> Html - (define read-xhtml (compose xml->html read-xml)) - - ;; peel-f : (Html-content -> Bool) (listof Html-content) (listof Html-content) -> (listof Html-content) - (define (peel-f toss? to-toss acc0) - (foldr (lambda (x acc) - (if (toss? x) - (append (html-full-content x) acc) - (cons x acc))) - acc0 - to-toss)) - - ;; repackage-html : (listof Html-content) -> Html - (define (repackage-html contents) - (let* ([html (memf html? contents)] - [peeled (peel-f html? contents null)] - [body (memf body? peeled)]) - (make-html (if html - (html-element-attributes (car html)) - null) - (append (filter head? peeled) - (list (make-body (if body - (html-element-attributes (car body)) - null) - (filter (compose not head?) (peel-f body? peeled null)))))))) - - ;; clean-up-pcdata : (listof Content) -> (listof Content) - ;; Each pcdata inside a tag that isn't supposed to contain pcdata is either - ;; a) appended to the end of the previous subelement, if that subelement may contain pcdata - ;; b) prepended to the front of the next subelement, if that subelement may contain pcdata - ;; c) discarded - ;; unknown tags may contain pcdata - ;; the top level may contain pcdata - (define clean-up-pcdata - ;; clean-up-pcdata : (listof Content) -> (listof Content) - (letrec ([clean-up-pcdata - (lambda (content) - (map (lambda (to-fix) - (cond - [(element? to-fix) - (recontent-xml to-fix - (let ([possible (may-contain (element-name to-fix))] - [content (element-content to-fix)]) - (if (or (not possible) (memq 'pcdata possible)) - (clean-up-pcdata content) - (eliminate-pcdata content))))] - [else to-fix])) - content))] - [eliminate-pcdata - ;: (listof Content) -> (listof Content) - (lambda (content) - (let ([non-elements (first-non-elements content)] - [more (memf element? content)]) - (if more - (let* ([el (car more)] - [possible (may-contain (element-name el))]) - (if (or (not possible) (memq 'pcdata possible)) - (cons (recontent-xml el (append non-elements (clean-up-pcdata (element-content el)) (eliminate-pcdata (first-non-elements (cdr more))))) - (or (memf element? (cdr more)) null)) - (cons (recontent-xml el (eliminate-pcdata (element-content el))) - (eliminate-pcdata (cdr more))))) - null)))]) - clean-up-pcdata)) - - ;; first-non-elements : (listof Content) -> (listof Content) - (define (first-non-elements content) - (cond - [(null? content) null] - [else (if (element? (car content)) - null - (cons (car content) (first-non-elements (cdr content))))])) - - ;; recontent-xml : Element (listof Content) -> Element - (define (recontent-xml e c) - (make-element (source-start e) (source-stop e) (element-name e) (element-attributes e) c)) - - ;; implicit-starts : Symbol Symbol -> (U #f Symbol) - (define (implicit-starts parent child) - (or (and (eq? child 'tr) (eq? parent 'table) 'tbody) - (and (eq? child 'td) (memq parent '(table tbody tfoot thead)) 'tr))) - - ;; may-contain : Kid-lister - (define may-contain - (sgml:gen-may-contain html-spec)) - - (define may-contain-anything - (sgml:gen-may-contain null)) - - (define use-html-spec (make-parameter #t)) - - ;; read-html-as-xml : [Input-port] -> (listof Content) - (define read-html-as-xml - (case-lambda - [(port) - ((if (use-html-spec) clean-up-pcdata values) - ((sgml:gen-read-sgml (if (use-html-spec) - may-contain - may-contain-anything) - implicit-starts) port))] - [() (read-html-as-xml (current-input-port))])) - - ;; read-html : [Input-port] -> Html - (define read-html - (compose repackage-html xml-contents->html read-html-as-xml))))) +(define-unit html@ + (import xml-structs^ reader^ (prefix sgml: sgml-reader^)) + (export html^) + + ;; Html-content = Html-element | Pc-data | Entity + + (include "html-structs.ss") + (include "case.ss") + + ;; xml->html : Document -> Html + (define (xml->html doc) + (let ([root (document-element doc)]) + (unless (eq? 'html (element-name root)) + (error 'xml->html "This is not an html document. Expected 'html, given ~a" (element-name root))) + (make-html (element-attributes root) (xml-contents->html (element-content root))))) + + + ;; xml-content->html : (listof Content) -> (listof Html-element) + (define (xml-contents->html contents) + (foldr xml-single-content->html + null + contents)) + + ;; read-xhtml : [Input-port] -> Html + (define read-xhtml (compose xml->html read-xml)) + + ;; peel-f : (Html-content -> Bool) (listof Html-content) (listof Html-content) -> (listof Html-content) + (define (peel-f toss? to-toss acc0) + (foldr (lambda (x acc) + (if (toss? x) + (append (html-full-content x) acc) + (cons x acc))) + acc0 + to-toss)) + + ;; repackage-html : (listof Html-content) -> Html + (define (repackage-html contents) + (let* ([html (memf html? contents)] + [peeled (peel-f html? contents null)] + [body (memf body? peeled)]) + (make-html (if html + (html-element-attributes (car html)) + null) + (append (filter head? peeled) + (list (make-body (if body + (html-element-attributes (car body)) + null) + (filter (compose not head?) (peel-f body? peeled null)))))))) + + ;; clean-up-pcdata : (listof Content) -> (listof Content) + ;; Each pcdata inside a tag that isn't supposed to contain pcdata is either + ;; a) appended to the end of the previous subelement, if that subelement may contain pcdata + ;; b) prepended to the front of the next subelement, if that subelement may contain pcdata + ;; c) discarded + ;; unknown tags may contain pcdata + ;; the top level may contain pcdata + (define clean-up-pcdata + ;; clean-up-pcdata : (listof Content) -> (listof Content) + (letrec ([clean-up-pcdata + (lambda (content) + (map (lambda (to-fix) + (cond + [(element? to-fix) + (recontent-xml to-fix + (let ([possible (may-contain (element-name to-fix))] + [content (element-content to-fix)]) + (if (or (not possible) (memq 'pcdata possible)) + (clean-up-pcdata content) + (eliminate-pcdata content))))] + [else to-fix])) + content))] + [eliminate-pcdata + ;: (listof Content) -> (listof Content) + (lambda (content) + (let ([non-elements (first-non-elements content)] + [more (memf element? content)]) + (if more + (let* ([el (car more)] + [possible (may-contain (element-name el))]) + (if (or (not possible) (memq 'pcdata possible)) + (cons (recontent-xml el (append non-elements (clean-up-pcdata (element-content el)) (eliminate-pcdata (first-non-elements (cdr more))))) + (or (memf element? (cdr more)) null)) + (cons (recontent-xml el (eliminate-pcdata (element-content el))) + (eliminate-pcdata (cdr more))))) + null)))]) + clean-up-pcdata)) + + ;; first-non-elements : (listof Content) -> (listof Content) + (define (first-non-elements content) + (cond + [(null? content) null] + [else (if (element? (car content)) + null + (cons (car content) (first-non-elements (cdr content))))])) + + ;; recontent-xml : Element (listof Content) -> Element + (define (recontent-xml e c) + (make-element (source-start e) (source-stop e) (element-name e) (element-attributes e) c)) + + ;; implicit-starts : Symbol Symbol -> (U #f Symbol) + (define (implicit-starts parent child) + (or (and (eq? child 'tr) (eq? parent 'table) 'tbody) + (and (eq? child 'td) (memq parent '(table tbody tfoot thead)) 'tr))) + + ;; may-contain : Kid-lister + (define may-contain + (sgml:gen-may-contain html-spec)) + + (define may-contain-anything + (sgml:gen-may-contain null)) + + (define use-html-spec (make-parameter #t)) + + ;; read-html-as-xml : [Input-port] -> (listof Content) + (define read-html-as-xml + (case-lambda + [(port) + ((if (use-html-spec) clean-up-pcdata values) + ((sgml:gen-read-sgml (if (use-html-spec) + may-contain + may-contain-anything) + implicit-starts) port))] + [() (read-html-as-xml (current-input-port))])) + + ;; read-html : [Input-port] -> Html + (define read-html + (compose repackage-html xml-contents->html read-html-as-xml))) diff --git a/collects/html/html.scrbl b/collects/html/html.scrbl index 9b7564591b..6dc7c7b514 100644 --- a/collects/html/html.scrbl +++ b/collects/html/html.scrbl @@ -78,7 +78,7 @@ Reads HTML from a port, producing an @xexpr compatible with the (code:comment #, @t{Pulls out the pcdata strings from an-html-element.}) (define (extract-pcdata-from-element an-html-element) (match an-html-element - [(struct h:html-full (content)) + [(struct h:html-full (attributes content)) (apply append (map extract-pcdata content))] [(struct h:html-element (attributes)) diff --git a/collects/html/html.ss b/collects/html/html.ss index de547502d4..381e05f8f7 100644 --- a/collects/html/html.ss +++ b/collects/html/html.ss @@ -1,30 +1,22 @@ +#lang scheme ;; copyright by Paul Graunke June 2000 AD -(module html mzscheme - (require mzlib/unitsig - "html-sig.ss" - "html-unit.ss" - "sgml-reader-sig.ss" - "sgml-reader-unit.ss" - xml/xml - xml/xml-sig - xml/private/sig - xml/xml-unit) +(require "html-mod.ss" "html-sig.ss" "sgml-reader.ss") - ;; To get read-comments from sgml-reader, we have to - ;; avoid the read-comments from XML, so we rename it - ;; to read-html-comments. +#;(require "html-sig.ss" + "html-unit.ss" + "sgml-reader-sig.ss" + "sgml-reader-unit.ss" + xml/private/structures + xml/private/reader + xml/private/sig) - (define-values/invoke-unit/sig - ((open html^) read-html-comments) - (compound-unit/sig - (import [x : xml^]) - (link - [s : sgml-reader^ (sgml-reader@ (x : xml-structs^))] - [h : html^ (html@ x s)]) - (export (open h) (var (s read-comments) read-html-comments))) - #f - xml^) +#;(define-compound-unit/infer the-html@ + (import) + (export html^ sgml-reader^) + (link html@ sgml-reader@ xml-structs@ reader@)) - (provide-signature-elements html^) - (provide read-html-comments)) +#;(define-values/invoke-unit/infer the-html@) + +(provide-signature-elements html^) +(provide read-html-comments) diff --git a/collects/html/sgml-reader-sig.ss b/collects/html/sgml-reader-sig.ss index 9ac150c2ac..3454b2ea4e 100644 --- a/collects/html/sgml-reader-sig.ss +++ b/collects/html/sgml-reader-sig.ss @@ -1,8 +1,6 @@ ;; copyright by Paul Graunke June 2000 AD +#lang scheme -(module sgml-reader-sig mzscheme - (require mzlib/unitsig) +(define-signature sgml-reader^ (read-html-comments trim-whitespace gen-may-contain gen-read-sgml)) - (define-signature sgml-reader^ (read-comments trim-whitespace gen-may-contain gen-read-sgml)) - - (provide sgml-reader^)) +(provide sgml-reader^) diff --git a/collects/html/sgml-reader-unit.ss b/collects/html/sgml-reader-unit.ss index 30be92f0b7..ee8403d257 100644 --- a/collects/html/sgml-reader-unit.ss +++ b/collects/html/sgml-reader-unit.ss @@ -1,296 +1,294 @@ ;; copyright by Paul Graunke June 2000 AD ;; warning - this was copied from the XML collection. ;; It needs to be abstracted back in. +#lang scheme +(require mzlib/list + mzlib/string + "sgml-reader-sig.ss" + xml/private/sig) -(module sgml-reader-unit mzscheme - (require mzlib/unitsig - mzlib/list - mzlib/string - "sgml-reader-sig.ss" - xml/private/sig) +(provide sgml-reader@) - (provide sgml-reader@) - - (define sgml-reader@ - (unit/sig sgml-reader^ - (import xml-structs^) - - ;; Start-tag ::= (make-start-tag Location Location Symbol (listof Attribute)) - (define-struct (start-tag source) (name attrs)) - - ;; End-tag ::= (make-end-tag Location Location Symbol) - (define-struct (end-tag source) (name)) - - ;; Token ::= Contents | Start-tag | End-tag | Eof - - (define read-comments (make-parameter #f)) - (define trim-whitespace (make-parameter #f)) - - ;; Kid-lister : (Symbol -> (U (listof Symbol) #f)) - - ;; gen-may-contain : Spec -> Kid-lister - (define (gen-may-contain spec) - (let ([table (make-hash-table)]) - (for-each (lambda (def) - (let ([rhs (cdr def)]) - (for-each (lambda (name) (hash-table-put! table name rhs)) - (car def)))) - spec) - (lambda (name) - (hash-table-get table name (lambda () #f))))) - - ;; gen-read-sgml : Kid-lister (Symbol Symbol -> (U #f Symbol)) -> [Input-port] -> (listof Content) - (define (gen-read-sgml may-contain auto-insert) - (case-lambda - [(in) (read-from-port may-contain auto-insert in)] - [() (read-from-port may-contain auto-insert (current-input-port))])) - - ;; read-from-port : Kid-lister (Symbol Symbol -> (U #f Symbol)) Input-port -> (listof Content) - (define (read-from-port may-contain auto-insert in) - (let loop ([tokens (let read-tokens () - (let ([tok (lex in)]) - (cond - [(eof-object? tok) null] - [else (cons tok (read-tokens))])))]) - (cond - [(null? tokens) null] - [else - (let ([tok (car tokens)] [rest-tokens (cdr tokens)]) - (cond - [(start-tag? tok) - (let-values ([(el more-tokens) (read-element tok null may-contain auto-insert rest-tokens)]) - (cons el (loop more-tokens)))] - [(end-tag? tok) (loop rest-tokens)] - [else (let ([rest-contents (loop rest-tokens)]) - (expand-content tok rest-contents))]))]))) - - ;; read-element : Start-tag (listof Symbol) Kid-lister (Symbol Symbol -> (U #f Symbol)) (listof Token) -> Element (listof Token) - ;; Note: How elements nest depends on their content model. - ;; If a kind of element can't contain anything, then its start tags are implicitly ended, and - ;; end tags are implicitly started. - ;; Unknown elements can contain anything and can go inside anything. - ;; Otherwise, only the subelements listed in the content model can go inside an element. - ;; more here - may-contain shouldn't be used to decide if an element is known or not. - ;; The edgar dtd puts tags in may-contain's range that aren't in its domain. - ;; more here (or not) - the (memq name context) test leaks for a worst case of O(n^2) in the - ;; tag nesting depth. However, this only should be a problem when the tag is there, - ;; but far back. That shouldn't happen often. I'm guessing n will be about 3. - (define (read-element start-tag context may-contain auto-insert tokens) - (let read-el ([start-tag start-tag] [context (cons (start-tag-name start-tag) context)] [tokens tokens]) - (let* ([start-name (start-tag-name start-tag)] - [ok-kids (may-contain start-name)]) - (let-values ([(content remaining) - (cond - [(null? ok-kids) (values null tokens)] - [else - ;; read-content : (listof Token) -> (listof Content) (listof Token) - (let read-content ([tokens tokens]) - (cond - [(null? tokens) (values null tokens)] - [else - (let ([tok (car tokens)] [next-tokens (cdr tokens)]) - (cond - [(start-tag? tok) - (let* ([name (start-tag-name tok)] - [auto-start (auto-insert start-name name)]) - (if auto-start - (read-content (cons (make-start-tag (source-start tok) (source-stop tok) auto-start null) tokens)) - (if (and ok-kids - (not (memq name ok-kids)) - (may-contain name)) - (values null tokens) - (let*-values ([(element post-element) - (read-el tok (cons name context) next-tokens)] - [(more-contents left-overs) (read-content post-element)]) - (values (cons element more-contents) left-overs)))))] - [(end-tag? tok) - (let ([name (end-tag-name tok)]) - (if (eq? name start-name) - (values null next-tokens) - (if (memq name context) - (values null tokens) - (read-content next-tokens))))] - [else ;; content - (let-values ([(more-contents left-overs) (read-content next-tokens)]) - (values - (expand-content tok more-contents) - left-overs))]))]))])]) - (values (make-element (source-start start-tag) - (source-stop start-tag) - start-name - (start-tag-attrs start-tag) - content) - remaining))))) - - ;; expand-content : Content (listof Content) -> (listof Content) - (define (expand-content x lst) - (cond - [(entity? x) (cons (expand-entity x) lst)] - [(comment? x) (if (read-comments) - (cons x lst) - lst)] - [else (cons x lst)])) - - ;; expand-entity : Entity -> (U Entity Pcdata) - ;; more here - allow expansion of user defined entities - (define (expand-entity x) - (let ([expanded (default-entity-table (entity-text x))]) - (if expanded - (make-pcdata (source-start x) (source-stop x) expanded) - x))) - - ;; default-entity-table : Symbol -> (U #f String) - (define (default-entity-table name) - (case name - [(amp) "&"] - [(lt) "<"] - [(gt) ">"] - [(quot) "\""] - [(apos) "'"] - [else #f])) - - ;; lex : Input-port -> Token - (define (lex in) - (when (trim-whitespace) - (skip-space in)) - (let ([c (peek-char in)]) - (cond - [(eof-object? c) c] - [(eq? c #\&) (lex-entity in)] - [(eq? c #\<) (lex-tag-cdata-pi-comment in)] - [else (lex-pcdata in)]))) - - ;; lex-entity : Input-port -> Token - ;; This might not return an entity if it doesn't look like one afterall. - (define (lex-entity in) - (let ([start (file-position in)]) - (read-char in) - (case (peek-char in) - ;; more here - read while it's numeric (or hex) not until #\; - [(#\#) - (read-char in) - (let* ([hex? (if (equal? #\x (peek-char in)) - (and (read-char in) #t) - #f)] - [str (read-until #\; in)] - [n (cond - [hex? - (string->number str 16)] - [else (string->number str)])]) - (if (number? n) - (make-entity start (file-position in) n) - (make-pcdata start (file-position in) (string-append "&#" str))))] - [else - (let ([name (lex-name/case-sensitive in)] - [c (peek-char in)]) - (if (eq? c #\;) - (begin (read-char in) (make-entity start (file-position in) name)) - (make-pcdata start (file-position in) (format "&~a" name))))]))) - - ;; lex-tag-cdata-pi-comment : Input-port -> Start-tag | Element | End-tag | Pcdata | Pi | Comment - (define (lex-tag-cdata-pi-comment in) - (let ([start (file-position in)]) - (read-char in) - (case (peek-char in) - [(#\!) - (read-char in) - (case (peek-char in) - [(#\-) (read-char in) - (let ([c (read-char in)]) - (cond - [(eq? c #\-) - (let ([data (lex-comment-contents in)]) - (make-comment data))] - [else (make-pcdata start (file-position in) (format " or whatever else is there - (make-end-tag start (file-position in) name))] - [else - (let ([name (lex-name in)] - [attrs (lex-attributes in)]) - (skip-space in) - (case (read-char in) - [(#\/) - (read-char in) ;; skip #\> or something - (make-element start (file-position in) name attrs null)] - [else (make-start-tag start (file-position in) name attrs)]))]))) - - - ;; lex-attributes : Input-port -> (listof Attribute) - (define (lex-attributes in) - (sort (let loop () - (skip-space in) - (cond [(name-start? (peek-char in)) - (cons (lex-attribute in) (loop))] - [else null])) - (lambda (a b) - (stringstring (attribute-name a)) - (symbol->string (attribute-name b)))))) - - ;; lex-attribute : Input-port -> Attribute - ;; Note: entities in attributes are ignored, since defacto html uses & in them for URL syntax - (define (lex-attribute in) - (let ([start (file-position in)] - [name (lex-name in)]) - (skip-space in) - (cond - [(eq? (peek-char in) #\=) - (read-char in) - (skip-space in) - (let* ([delimiter (read-char in)] - [value (list->string - (case delimiter - [(#\' #\") - (let read-more () - (let ([c (read-char in)]) - (cond - [(or (eq? c delimiter) (eof-object? c)) null] - [else (cons c (read-more))])))] - [else (cons delimiter (read-up-to (lambda (c) (or (char-whitespace? c) (eq? c #\>))) in))]))]) - (make-attribute start (file-position in) name value))] - [else (make-attribute start (file-position in) name (symbol->string name))]))) - - ;; skip-space : Input-port -> Void - ;; deviation - should sometimes insist on at least one space - (define (skip-space in) - (let loop () - (let ([c (peek-char in)]) - (when (and (not (eof-object? c)) (char-whitespace? c)) - (read-char in) - (loop))))) - - ;; lex-pcdata : Input-port -> Pcdata - ;; deviation - disallow ]]> "for compatability" with SGML, sec 2.4 XML spec - (define (lex-pcdata in) - (let ([start (file-position in)]) - ;; The following regexp match must use bytes, not chars, because - ;; `in' might not be a well-formed UTF-8 sequence. If it isn't, - ;; and it goes wrong with the first byte sequence, then a char-based - ;; pattern would match 0 characters. Meanwhile, the caller of this function - ;; expects characters to be read. - (let ([s (regexp-match #rx#"^[^&<]*" in)]) - (make-pcdata start - (file-position in) - (bytes->string/utf-8 - (if (trim-whitespace) - (regexp-replace* #rx#"[ \t\v\r\n]+" (car s) #"") - (car s)) - #\?))))) -#| +(define-unit sgml-reader@ + (import xml-structs^) + (export sgml-reader^) + + ;; Start-tag ::= (make-start-tag Location Location Symbol (listof Attribute)) + (define-struct (start-tag source) (name attrs)) + + ;; End-tag ::= (make-end-tag Location Location Symbol) + (define-struct (end-tag source) (name)) + + ;; Token ::= Contents | Start-tag | End-tag | Eof + + (define read-html-comments (make-parameter #f)) + (define trim-whitespace (make-parameter #f)) + + ;; Kid-lister : (Symbol -> (U (listof Symbol) #f)) + + ;; gen-may-contain : Spec -> Kid-lister + (define (gen-may-contain spec) + (let ([table (make-hash)]) + (for-each (lambda (def) + (let ([rhs (cdr def)]) + (for-each (lambda (name) (hash-set! table name rhs)) + (car def)))) + spec) + (lambda (name) + (hash-ref table name (lambda () #f))))) + + ;; gen-read-sgml : Kid-lister (Symbol Symbol -> (U #f Symbol)) -> [Input-port] -> (listof Content) + (define (gen-read-sgml may-contain auto-insert) + (case-lambda + [(in) (read-from-port may-contain auto-insert in)] + [() (read-from-port may-contain auto-insert (current-input-port))])) + + ;; read-from-port : Kid-lister (Symbol Symbol -> (U #f Symbol)) Input-port -> (listof Content) + (define (read-from-port may-contain auto-insert in) + (let loop ([tokens (let read-tokens () + (let ([tok (lex in)]) + (cond + [(eof-object? tok) null] + [else (cons tok (read-tokens))])))]) + (cond + [(null? tokens) null] + [else + (let ([tok (car tokens)] [rest-tokens (cdr tokens)]) + (cond + [(start-tag? tok) + (let-values ([(el more-tokens) (read-element tok null may-contain auto-insert rest-tokens)]) + (cons el (loop more-tokens)))] + [(end-tag? tok) (loop rest-tokens)] + [else (let ([rest-contents (loop rest-tokens)]) + (expand-content tok rest-contents))]))]))) + + ;; read-element : Start-tag (listof Symbol) Kid-lister (Symbol Symbol -> (U #f Symbol)) (listof Token) -> Element (listof Token) + ;; Note: How elements nest depends on their content model. + ;; If a kind of element can't contain anything, then its start tags are implicitly ended, and + ;; end tags are implicitly started. + ;; Unknown elements can contain anything and can go inside anything. + ;; Otherwise, only the subelements listed in the content model can go inside an element. + ;; more here - may-contain shouldn't be used to decide if an element is known or not. + ;; The edgar dtd puts tags in may-contain's range that aren't in its domain. + ;; more here (or not) - the (memq name context) test leaks for a worst case of O(n^2) in the + ;; tag nesting depth. However, this only should be a problem when the tag is there, + ;; but far back. That shouldn't happen often. I'm guessing n will be about 3. + (define (read-element start-tag context may-contain auto-insert tokens) + (let read-el ([start-tag start-tag] [context (cons (start-tag-name start-tag) context)] [tokens tokens]) + (let* ([start-name (start-tag-name start-tag)] + [ok-kids (may-contain start-name)]) + (let-values ([(content remaining) + (cond + [(null? ok-kids) (values null tokens)] + [else + ;; read-content : (listof Token) -> (listof Content) (listof Token) + (let read-content ([tokens tokens]) + (cond + [(null? tokens) (values null tokens)] + [else + (let ([tok (car tokens)] [next-tokens (cdr tokens)]) + (cond + [(start-tag? tok) + (let* ([name (start-tag-name tok)] + [auto-start (auto-insert start-name name)]) + (if auto-start + (read-content (cons (make-start-tag (source-start tok) (source-stop tok) auto-start null) tokens)) + (if (and ok-kids + (not (memq name ok-kids)) + (may-contain name)) + (values null tokens) + (let*-values ([(element post-element) + (read-el tok (cons name context) next-tokens)] + [(more-contents left-overs) (read-content post-element)]) + (values (cons element more-contents) left-overs)))))] + [(end-tag? tok) + (let ([name (end-tag-name tok)]) + (if (eq? name start-name) + (values null next-tokens) + (if (memq name context) + (values null tokens) + (read-content next-tokens))))] + [else ;; content + (let-values ([(more-contents left-overs) (read-content next-tokens)]) + (values + (expand-content tok more-contents) + left-overs))]))]))])]) + (values (make-element (source-start start-tag) + (source-stop start-tag) + start-name + (start-tag-attrs start-tag) + content) + remaining))))) + + ;; expand-content : Content (listof Content) -> (listof Content) + (define (expand-content x lst) + (cond + [(entity? x) (cons (expand-entity x) lst)] + [(comment? x) (if (read-html-comments) + (cons x lst) + lst)] + [else (cons x lst)])) + + ;; expand-entity : Entity -> (U Entity Pcdata) + ;; more here - allow expansion of user defined entities + (define (expand-entity x) + (let ([expanded (default-entity-table (entity-text x))]) + (if expanded + (make-pcdata (source-start x) (source-stop x) expanded) + x))) + + ;; default-entity-table : Symbol -> (U #f String) + (define (default-entity-table name) + (case name + [(amp) "&"] + [(lt) "<"] + [(gt) ">"] + [(quot) "\""] + [(apos) "'"] + [else #f])) + + ;; lex : Input-port -> Token + (define (lex in) + (when (trim-whitespace) + (skip-space in)) + (let ([c (peek-char in)]) + (cond + [(eof-object? c) c] + [(eq? c #\&) (lex-entity in)] + [(eq? c #\<) (lex-tag-cdata-pi-comment in)] + [else (lex-pcdata in)]))) + + ;; lex-entity : Input-port -> Token + ;; This might not return an entity if it doesn't look like one afterall. + (define (lex-entity in) + (let ([start (file-position in)]) + (read-char in) + (case (peek-char in) + ;; more here - read while it's numeric (or hex) not until #\; + [(#\#) + (read-char in) + (let* ([hex? (if (equal? #\x (peek-char in)) + (and (read-char in) #t) + #f)] + [str (read-until #\; in)] + [n (cond + [hex? + (string->number str 16)] + [else (string->number str)])]) + (if (number? n) + (make-entity start (file-position in) n) + (make-pcdata start (file-position in) (string-append "&#" str))))] + [else + (let ([name (lex-name/case-sensitive in)] + [c (peek-char in)]) + (if (eq? c #\;) + (begin (read-char in) (make-entity start (file-position in) name)) + (make-pcdata start (file-position in) (format "&~a" name))))]))) + + ;; lex-tag-cdata-pi-comment : Input-port -> Start-tag | Element | End-tag | Pcdata | Pi | Comment + (define (lex-tag-cdata-pi-comment in) + (let ([start (file-position in)]) + (read-char in) + (case (peek-char in) + [(#\!) + (read-char in) + (case (peek-char in) + [(#\-) (read-char in) + (let ([c (read-char in)]) + (cond + [(eq? c #\-) + (let ([data (lex-comment-contents in)]) + (make-comment data))] + [else (make-pcdata start (file-position in) (format " or whatever else is there + (make-end-tag start (file-position in) name))] + [else + (let ([name (lex-name in)] + [attrs (lex-attributes in)]) + (skip-space in) + (case (read-char in) + [(#\/) + (read-char in) ;; skip #\> or something + (make-element start (file-position in) name attrs null)] + [else (make-start-tag start (file-position in) name attrs)]))]))) + + + ;; lex-attributes : Input-port -> (listof Attribute) + (define (lex-attributes in) + (sort (let loop () + (skip-space in) + (cond [(name-start? (peek-char in)) + (cons (lex-attribute in) (loop))] + [else null])) + (lambda (a b) + (stringstring (attribute-name a)) + (symbol->string (attribute-name b)))))) + + ;; lex-attribute : Input-port -> Attribute + ;; Note: entities in attributes are ignored, since defacto html uses & in them for URL syntax + (define (lex-attribute in) + (let ([start (file-position in)] + [name (lex-name in)]) + (skip-space in) + (cond + [(eq? (peek-char in) #\=) + (read-char in) + (skip-space in) + (let* ([delimiter (read-char in)] + [value (list->string + (case delimiter + [(#\' #\") + (let read-more () + (let ([c (read-char in)]) + (cond + [(or (eq? c delimiter) (eof-object? c)) null] + [else (cons c (read-more))])))] + [else (cons delimiter (read-up-to (lambda (c) (or (char-whitespace? c) (eq? c #\>))) in))]))]) + (make-attribute start (file-position in) name value))] + [else (make-attribute start (file-position in) name (symbol->string name))]))) + + ;; skip-space : Input-port -> Void + ;; deviation - should sometimes insist on at least one space + (define (skip-space in) + (let loop () + (let ([c (peek-char in)]) + (when (and (not (eof-object? c)) (char-whitespace? c)) + (read-char in) + (loop))))) + + ;; lex-pcdata : Input-port -> Pcdata + ;; deviation - disallow ]]> "for compatability" with SGML, sec 2.4 XML spec + (define (lex-pcdata in) + (let ([start (file-position in)]) + ;; The following regexp match must use bytes, not chars, because + ;; `in' might not be a well-formed UTF-8 sequence. If it isn't, + ;; and it goes wrong with the first byte sequence, then a char-based + ;; pattern would match 0 characters. Meanwhile, the caller of this function + ;; expects characters to be read. + (let ([s (regexp-match #rx#"^[^&<]*" in)]) + (make-pcdata start + (file-position in) + (bytes->string/utf-8 + (if (trim-whitespace) + (regexp-replace* #rx#"[ \t\v\r\n]+" (car s) #"") + (car s)) + #\?))))) + #| ;; Original slow version: (define (lex-pcdata in) (let ([start (file-position in)] @@ -311,22 +309,22 @@ (list->string data)))) |# - - ;; lex-name : Input-port -> Symbol - (define (lex-name in) - (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) - (string->symbol - ;; Common case: string is already lowercased - (if (regexp-match-positions #rx"[A-Z]" s) - (begin - (string-lowercase! s) - s) - s)))) - ;; lex-name/case-sensitive : Input-port -> Symbol - (define (lex-name/case-sensitive in) - (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) - (string->symbol s))) -#| + + ;; lex-name : Input-port -> Symbol + (define (lex-name in) + (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) + (string->symbol + ;; Common case: string is already lowercased + (if (regexp-match-positions #rx"[A-Z]" s) + (begin + (string-lowercase! s) + s) + s)))) + ;; lex-name/case-sensitive : Input-port -> Symbol + (define (lex-name/case-sensitive in) + (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) + (string->symbol s))) + #| (define (lex-name in) (string->symbol (list->string @@ -336,101 +334,100 @@ (cons (char-downcase (read-char in)) (lex-rest))] [else null]))))) |# - - - ;; skip-dtd : Input-port -> Void - (define (skip-dtd in) - (let skip () - (let ([c (read-char in)]) - (if (eof-object? c) - (void) - (case c - [(#\') (read-until #\' in) (skip)] - [(#\") (read-until #\" in) (skip)] - [(#\<) - (case (read-char in) - [(#\!) (case (read-char in) - [(#\-) (read-char in) (lex-comment-contents in) (skip)] - [else (skip) (skip)])] - [(#\?) (lex-pi-data in) (skip)] - [else (skip) (skip)])] - [(#\>) (void)] - [else (skip)]))))) - - ;; name-start? : TST -> Bool - (define (name-start? ch) - (and (char? ch) (char-name-start? ch))) - - ;; char-name-start? : Char -> Bool - (define (char-name-start? ch) - (or (char-alphabetic? ch) - (eq? ch #\_) - (eq? ch #\:))) - - ;; name-char? : TST -> Bool - (define (name-char? ch) - (and (char? ch) - (or (char-name-start? ch) - (char-numeric? ch) - (eq? ch #\&) ; ugly illegal junk for SEC's EDGAR database - (eq? ch #\.) - (eq? ch #\-)))) - - ;; read-up-to : (Char -> Bool) Input-port -> (listof Char) - ;; abstract this with read-until - (define (read-up-to p? in) - (let loop () - (let ([c (peek-char in)]) - (cond - [(or (eof-object? c) (p? c)) null] - [else (cons (read-char in) (loop))])))) - - ;; read-until : Char Input-port -> String - ;; discards the stop character, too - (define (read-until char in) - (list->string - (let read-more () - (let ([c (read-char in)]) - (cond - [(or (eof-object? c) (eq? c char)) null] - [else (cons c (read-more))]))))) - - ;; gen-read-until-string : String -> Input-port -> String - ;; uses Knuth-Morris-Pratt from - ;; Introduction to Algorithms, Cormen, Leiserson, and Rivest, pages 869-876 - ;; discards stop from input - (define (gen-read-until-string stop) - (let* ([len (string-length stop)] - [prefix (make-vector len 0)] - [fall-back - (lambda (k c) - (let ([k (let loop ([k k]) - (cond - [(and (> k 0) (not (eq? (string-ref stop k) c))) - (loop (vector-ref prefix (sub1 k)))] - [else k]))]) - (if (eq? (string-ref stop k) c) - (add1 k) - k)))]) - (let init ([k 0] [q 1]) - (when (< q len) - (let ([k (fall-back k (string-ref stop q))]) - (vector-set! prefix q k) - (init k (add1 q))))) - ;; (vector-ref prefix x) = the longest suffix that matches a prefix of stop - (lambda (in) - (list->string - (let/ec out - (let loop ([matched 0] [out out]) - (let* ([c (read-char in)] - [matched (fall-back matched c)]) - (cond - [(or (eof-object? c) (= matched len)) (out null)] - [(zero? matched) (cons c (let/ec out (loop matched out)))] - [else (cons c (loop matched out))])))))))) - - ;; "-->" makes more sense, but "--" follows the spec, but this isn't XML anymore. - (define lex-comment-contents (gen-read-until-string "-->")) - (define lex-pi-data (gen-read-until-string "?>")) - (define lex-cdata-contents (gen-read-until-string "]]>"))))) - + + + ;; skip-dtd : Input-port -> Void + (define (skip-dtd in) + (let skip () + (let ([c (read-char in)]) + (if (eof-object? c) + (void) + (case c + [(#\') (read-until #\' in) (skip)] + [(#\") (read-until #\" in) (skip)] + [(#\<) + (case (read-char in) + [(#\!) (case (read-char in) + [(#\-) (read-char in) (lex-comment-contents in) (skip)] + [else (skip) (skip)])] + [(#\?) (lex-pi-data in) (skip)] + [else (skip) (skip)])] + [(#\>) (void)] + [else (skip)]))))) + + ;; name-start? : TST -> Bool + (define (name-start? ch) + (and (char? ch) (char-name-start? ch))) + + ;; char-name-start? : Char -> Bool + (define (char-name-start? ch) + (or (char-alphabetic? ch) + (eq? ch #\_) + (eq? ch #\:))) + + ;; name-char? : TST -> Bool + (define (name-char? ch) + (and (char? ch) + (or (char-name-start? ch) + (char-numeric? ch) + (eq? ch #\&) ; ugly illegal junk for SEC's EDGAR database + (eq? ch #\.) + (eq? ch #\-)))) + + ;; read-up-to : (Char -> Bool) Input-port -> (listof Char) + ;; abstract this with read-until + (define (read-up-to p? in) + (let loop () + (let ([c (peek-char in)]) + (cond + [(or (eof-object? c) (p? c)) null] + [else (cons (read-char in) (loop))])))) + + ;; read-until : Char Input-port -> String + ;; discards the stop character, too + (define (read-until char in) + (list->string + (let read-more () + (let ([c (read-char in)]) + (cond + [(or (eof-object? c) (eq? c char)) null] + [else (cons c (read-more))]))))) + + ;; gen-read-until-string : String -> Input-port -> String + ;; uses Knuth-Morris-Pratt from + ;; Introduction to Algorithms, Cormen, Leiserson, and Rivest, pages 869-876 + ;; discards stop from input + (define (gen-read-until-string stop) + (let* ([len (string-length stop)] + [prefix (make-vector len 0)] + [fall-back + (lambda (k c) + (let ([k (let loop ([k k]) + (cond + [(and (> k 0) (not (eq? (string-ref stop k) c))) + (loop (vector-ref prefix (sub1 k)))] + [else k]))]) + (if (eq? (string-ref stop k) c) + (add1 k) + k)))]) + (let init ([k 0] [q 1]) + (when (< q len) + (let ([k (fall-back k (string-ref stop q))]) + (vector-set! prefix q k) + (init k (add1 q))))) + ;; (vector-ref prefix x) = the longest suffix that matches a prefix of stop + (lambda (in) + (list->string + (let/ec out + (let loop ([matched 0] [out out]) + (let* ([c (read-char in)] + [matched (fall-back matched c)]) + (cond + [(or (eof-object? c) (= matched len)) (out null)] + [(zero? matched) (cons c (let/ec out (loop matched out)))] + [else (cons c (loop matched out))])))))))) + + ;; "-->" makes more sense, but "--" follows the spec, but this isn't XML anymore. + (define lex-comment-contents (gen-read-until-string "-->")) + (define lex-pi-data (gen-read-until-string "?>")) + (define lex-cdata-contents (gen-read-until-string "]]>"))) diff --git a/collects/html/sgml-reader.ss b/collects/html/sgml-reader.ss new file mode 100644 index 0000000000..4dfe8a95be --- /dev/null +++ b/collects/html/sgml-reader.ss @@ -0,0 +1,429 @@ +;; copyright by Paul Graunke June 2000 AD +;; warning - this was copied from the XML collection. +;; It needs to be abstracted back in. +#lang scheme +(require mzlib/list + mzlib/string + "sgml-reader-sig.ss" + xml) + +(provide-signature-elements sgml-reader^) + + ;; Start-tag ::= (make-start-tag Location Location Symbol (listof Attribute)) + (define-struct (start-tag source) (name attrs)) + + ;; End-tag ::= (make-end-tag Location Location Symbol) + (define-struct (end-tag source) (name)) + + ;; Token ::= Contents | Start-tag | End-tag | Eof + + (define read-html-comments (make-parameter #f)) + (define trim-whitespace (make-parameter #f)) + + ;; Kid-lister : (Symbol -> (U (listof Symbol) #f)) + + ;; gen-may-contain : Spec -> Kid-lister + (define (gen-may-contain spec) + (let ([table (make-hash)]) + (for-each (lambda (def) + (let ([rhs (cdr def)]) + (for-each (lambda (name) (hash-set! table name rhs)) + (car def)))) + spec) + (lambda (name) + (hash-ref table name (lambda () #f))))) + + ;; gen-read-sgml : Kid-lister (Symbol Symbol -> (U #f Symbol)) -> [Input-port] -> (listof Content) + (define (gen-read-sgml may-contain auto-insert) + (case-lambda + [(in) (read-from-port may-contain auto-insert in)] + [() (read-from-port may-contain auto-insert (current-input-port))])) + + ;; read-from-port : Kid-lister (Symbol Symbol -> (U #f Symbol)) Input-port -> (listof Content) + (define (read-from-port may-contain auto-insert in) + (let loop ([tokens (let read-tokens () + (let ([tok (lex in)]) + (cond + [(eof-object? tok) null] + [else (cons tok (read-tokens))])))]) + (cond + [(null? tokens) null] + [else + (let ([tok (car tokens)] [rest-tokens (cdr tokens)]) + (cond + [(start-tag? tok) + (let-values ([(el more-tokens) (read-element tok null may-contain auto-insert rest-tokens)]) + (cons el (loop more-tokens)))] + [(end-tag? tok) (loop rest-tokens)] + [else (let ([rest-contents (loop rest-tokens)]) + (expand-content tok rest-contents))]))]))) + + ;; read-element : Start-tag (listof Symbol) Kid-lister (Symbol Symbol -> (U #f Symbol)) (listof Token) -> Element (listof Token) + ;; Note: How elements nest depends on their content model. + ;; If a kind of element can't contain anything, then its start tags are implicitly ended, and + ;; end tags are implicitly started. + ;; Unknown elements can contain anything and can go inside anything. + ;; Otherwise, only the subelements listed in the content model can go inside an element. + ;; more here - may-contain shouldn't be used to decide if an element is known or not. + ;; The edgar dtd puts tags in may-contain's range that aren't in its domain. + ;; more here (or not) - the (memq name context) test leaks for a worst case of O(n^2) in the + ;; tag nesting depth. However, this only should be a problem when the tag is there, + ;; but far back. That shouldn't happen often. I'm guessing n will be about 3. + (define (read-element start-tag context may-contain auto-insert tokens) + (let read-el ([start-tag start-tag] [context (cons (start-tag-name start-tag) context)] [tokens tokens]) + (let* ([start-name (start-tag-name start-tag)] + [ok-kids (may-contain start-name)]) + (let-values ([(content remaining) + (cond + [(null? ok-kids) (values null tokens)] + [else + ;; read-content : (listof Token) -> (listof Content) (listof Token) + (let read-content ([tokens tokens]) + (cond + [(null? tokens) (values null tokens)] + [else + (let ([tok (car tokens)] [next-tokens (cdr tokens)]) + (cond + [(start-tag? tok) + (let* ([name (start-tag-name tok)] + [auto-start (auto-insert start-name name)]) + (if auto-start + (read-content (cons (make-start-tag (source-start tok) (source-stop tok) auto-start null) tokens)) + (if (and ok-kids + (not (memq name ok-kids)) + (may-contain name)) + (values null tokens) + (let*-values ([(element post-element) + (read-el tok (cons name context) next-tokens)] + [(more-contents left-overs) (read-content post-element)]) + (values (cons element more-contents) left-overs)))))] + [(end-tag? tok) + (let ([name (end-tag-name tok)]) + (if (eq? name start-name) + (values null next-tokens) + (if (memq name context) + (values null tokens) + (read-content next-tokens))))] + [else ;; content + (let-values ([(more-contents left-overs) (read-content next-tokens)]) + (values + (expand-content tok more-contents) + left-overs))]))]))])]) + (values (make-element (source-start start-tag) + (source-stop start-tag) + start-name + (start-tag-attrs start-tag) + content) + remaining))))) + + ;; expand-content : Content (listof Content) -> (listof Content) + (define (expand-content x lst) + (cond + [(entity? x) (cons (expand-entity x) lst)] + [(comment? x) (if (read-html-comments) + (cons x lst) + lst)] + [else (cons x lst)])) + + ;; expand-entity : Entity -> (U Entity Pcdata) + ;; more here - allow expansion of user defined entities + (define (expand-entity x) + (let ([expanded (default-entity-table (entity-text x))]) + (if expanded + (make-pcdata (source-start x) (source-stop x) expanded) + x))) + + ;; default-entity-table : Symbol -> (U #f String) + (define (default-entity-table name) + (case name + [(amp) "&"] + [(lt) "<"] + [(gt) ">"] + [(quot) "\""] + [(apos) "'"] + [else #f])) + + ;; lex : Input-port -> Token + (define (lex in) + (when (trim-whitespace) + (skip-space in)) + (let ([c (peek-char in)]) + (cond + [(eof-object? c) c] + [(eq? c #\&) (lex-entity in)] + [(eq? c #\<) (lex-tag-cdata-pi-comment in)] + [else (lex-pcdata in)]))) + + ;; lex-entity : Input-port -> Token + ;; This might not return an entity if it doesn't look like one afterall. + (define (lex-entity in) + (let ([start (file-position in)]) + (read-char in) + (case (peek-char in) + ;; more here - read while it's numeric (or hex) not until #\; + [(#\#) + (read-char in) + (let* ([hex? (if (equal? #\x (peek-char in)) + (and (read-char in) #t) + #f)] + [str (read-until #\; in)] + [n (cond + [hex? + (string->number str 16)] + [else (string->number str)])]) + (if (number? n) + (make-entity start (file-position in) n) + (make-pcdata start (file-position in) (string-append "&#" str))))] + [else + (let ([name (lex-name/case-sensitive in)] + [c (peek-char in)]) + (if (eq? c #\;) + (begin (read-char in) (make-entity start (file-position in) name)) + (make-pcdata start (file-position in) (format "&~a" name))))]))) + + ;; lex-tag-cdata-pi-comment : Input-port -> Start-tag | Element | End-tag | Pcdata | Pi | Comment + (define (lex-tag-cdata-pi-comment in) + (let ([start (file-position in)]) + (read-char in) + (case (peek-char in) + [(#\!) + (read-char in) + (case (peek-char in) + [(#\-) (read-char in) + (let ([c (read-char in)]) + (cond + [(eq? c #\-) + (let ([data (lex-comment-contents in)]) + (make-comment data))] + [else (make-pcdata start (file-position in) (format " or whatever else is there + (make-end-tag start (file-position in) name))] + [else + (let ([name (lex-name in)] + [attrs (lex-attributes in)]) + (skip-space in) + (case (read-char in) + [(#\/) + (read-char in) ;; skip #\> or something + (make-element start (file-position in) name attrs null)] + [else (make-start-tag start (file-position in) name attrs)]))]))) + + + ;; lex-attributes : Input-port -> (listof Attribute) + (define (lex-attributes in) + (sort (let loop () + (skip-space in) + (cond [(name-start? (peek-char in)) + (cons (lex-attribute in) (loop))] + [else null])) + (lambda (a b) + (stringstring (attribute-name a)) + (symbol->string (attribute-name b)))))) + + ;; lex-attribute : Input-port -> Attribute + ;; Note: entities in attributes are ignored, since defacto html uses & in them for URL syntax + (define (lex-attribute in) + (let ([start (file-position in)] + [name (lex-name in)]) + (skip-space in) + (cond + [(eq? (peek-char in) #\=) + (read-char in) + (skip-space in) + (let* ([delimiter (read-char in)] + [value (list->string + (case delimiter + [(#\' #\") + (let read-more () + (let ([c (read-char in)]) + (cond + [(or (eq? c delimiter) (eof-object? c)) null] + [else (cons c (read-more))])))] + [else (cons delimiter (read-up-to (lambda (c) (or (char-whitespace? c) (eq? c #\>))) in))]))]) + (make-attribute start (file-position in) name value))] + [else (make-attribute start (file-position in) name (symbol->string name))]))) + + ;; skip-space : Input-port -> Void + ;; deviation - should sometimes insist on at least one space + (define (skip-space in) + (let loop () + (let ([c (peek-char in)]) + (when (and (not (eof-object? c)) (char-whitespace? c)) + (read-char in) + (loop))))) + + ;; lex-pcdata : Input-port -> Pcdata + ;; deviation - disallow ]]> "for compatability" with SGML, sec 2.4 XML spec + (define (lex-pcdata in) + (let ([start (file-position in)]) + ;; The following regexp match must use bytes, not chars, because + ;; `in' might not be a well-formed UTF-8 sequence. If it isn't, + ;; and it goes wrong with the first byte sequence, then a char-based + ;; pattern would match 0 characters. Meanwhile, the caller of this function + ;; expects characters to be read. + (let ([s (regexp-match #rx#"^[^&<]*" in)]) + (make-pcdata start + (file-position in) + (bytes->string/utf-8 + (if (trim-whitespace) + (regexp-replace* #rx#"[ \t\v\r\n]+" (car s) #"") + (car s)) + #\?))))) + #| + ;; Original slow version: + (define (lex-pcdata in) + (let ([start (file-position in)] + [data (let loop ([c (read-char in)]) + (let ([next (peek-char in)]) + (cond + [(or (eof-object? next) (eq? next #\&) (eq? next #\<)) + (list c)] + [(and (char-whitespace? next) (trim-whitespace)) + (skip-space in) + (let ([lst (loop #\space)]) + (cond + [(null? (cdr lst)) (list c)] + [else (cons c lst)]))] + [else (cons c (loop (read-char in)))])))]) + (make-pcdata start + (file-position in) + (list->string data)))) + |# + + + ;; lex-name : Input-port -> Symbol + (define (lex-name in) + (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) + (string->symbol + ;; Common case: string is already lowercased + (if (regexp-match-positions #rx"[A-Z]" s) + (begin + (string-lowercase! s) + s) + s)))) + ;; lex-name/case-sensitive : Input-port -> Symbol + (define (lex-name/case-sensitive in) + (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) + (string->symbol s))) + #| + (define (lex-name in) + (string->symbol + (list->string + (let lex-rest () + (cond + [(name-char? (peek-char in)) + (cons (char-downcase (read-char in)) (lex-rest))] + [else null]))))) +|# + + + ;; skip-dtd : Input-port -> Void + (define (skip-dtd in) + (let skip () + (let ([c (read-char in)]) + (if (eof-object? c) + (void) + (case c + [(#\') (read-until #\' in) (skip)] + [(#\") (read-until #\" in) (skip)] + [(#\<) + (case (read-char in) + [(#\!) (case (read-char in) + [(#\-) (read-char in) (lex-comment-contents in) (skip)] + [else (skip) (skip)])] + [(#\?) (lex-pi-data in) (skip)] + [else (skip) (skip)])] + [(#\>) (void)] + [else (skip)]))))) + + ;; name-start? : TST -> Bool + (define (name-start? ch) + (and (char? ch) (char-name-start? ch))) + + ;; char-name-start? : Char -> Bool + (define (char-name-start? ch) + (or (char-alphabetic? ch) + (eq? ch #\_) + (eq? ch #\:))) + + ;; name-char? : TST -> Bool + (define (name-char? ch) + (and (char? ch) + (or (char-name-start? ch) + (char-numeric? ch) + (eq? ch #\&) ; ugly illegal junk for SEC's EDGAR database + (eq? ch #\.) + (eq? ch #\-)))) + + ;; read-up-to : (Char -> Bool) Input-port -> (listof Char) + ;; abstract this with read-until + (define (read-up-to p? in) + (let loop () + (let ([c (peek-char in)]) + (cond + [(or (eof-object? c) (p? c)) null] + [else (cons (read-char in) (loop))])))) + + ;; read-until : Char Input-port -> String + ;; discards the stop character, too + (define (read-until char in) + (list->string + (let read-more () + (let ([c (read-char in)]) + (cond + [(or (eof-object? c) (eq? c char)) null] + [else (cons c (read-more))]))))) + + ;; gen-read-until-string : String -> Input-port -> String + ;; uses Knuth-Morris-Pratt from + ;; Introduction to Algorithms, Cormen, Leiserson, and Rivest, pages 869-876 + ;; discards stop from input + (define (gen-read-until-string stop) + (let* ([len (string-length stop)] + [prefix (make-vector len 0)] + [fall-back + (lambda (k c) + (let ([k (let loop ([k k]) + (cond + [(and (> k 0) (not (eq? (string-ref stop k) c))) + (loop (vector-ref prefix (sub1 k)))] + [else k]))]) + (if (eq? (string-ref stop k) c) + (add1 k) + k)))]) + (let init ([k 0] [q 1]) + (when (< q len) + (let ([k (fall-back k (string-ref stop q))]) + (vector-set! prefix q k) + (init k (add1 q))))) + ;; (vector-ref prefix x) = the longest suffix that matches a prefix of stop + (lambda (in) + (list->string + (let/ec out + (let loop ([matched 0] [out out]) + (let* ([c (read-char in)] + [matched (fall-back matched c)]) + (cond + [(or (eof-object? c) (= matched len)) (out null)] + [(zero? matched) (cons c (let/ec out (loop matched out)))] + [else (cons c (loop matched out))])))))))) + + ;; "-->" makes more sense, but "--" follows the spec, but this isn't XML anymore. + (define lex-comment-contents (gen-read-until-string "-->")) + (define lex-pi-data (gen-read-until-string "?>")) + (define lex-cdata-contents (gen-read-until-string "]]>")) diff --git a/collects/tests/html/test.ss b/collects/tests/html/test.ss new file mode 100644 index 0000000000..2b53719672 --- /dev/null +++ b/collects/tests/html/test.ss @@ -0,0 +1,45 @@ +#lang scheme +(require (planet schematics/schemeunit:3) + (planet schematics/schemeunit:3/text-ui) + (prefix-in h: html) + (prefix-in x: xml)) + +(define html-tests + (test-suite + "HTML" + + (test-case + "Example" + (local + [(define an-html + (h:read-xhtml + (open-input-string + (string-append + "My title" + "

Hello world

Testing!

" + "")))) + + ; extract-pcdata: html-content -> (listof string) + ; Pulls out the pcdata strings from some-content. + (define (extract-pcdata some-content) + (cond [(x:pcdata? some-content) + (list (x:pcdata-string some-content))] + [(x:entity? some-content) + (list)] + [else + (extract-pcdata-from-element some-content)])) + + ; extract-pcdata-from-element: html-element -> (listof string) + ; Pulls out the pcdata strings from an-html-element. + (define (extract-pcdata-from-element an-html-element) + (match an-html-element + [(struct h:html-full (attributes content)) + (apply append (map extract-pcdata content))] + + [(struct h:html-element (attributes)) + '()]))] + + (check-equal? (extract-pcdata an-html) + ' ("My title" "Hello world" "Testing" "!")))))) + +(run-tests html-tests) \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/canonxml.html b/collects/tests/xml/clark-tests/canonxml.html new file mode 100644 index 0000000000..2ba0edf6c6 --- /dev/null +++ b/collects/tests/xml/clark-tests/canonxml.html @@ -0,0 +1,44 @@ + +Canonical XML + +

Canonical XML

+

+This document defines a subset of XML called canonical XML. +The intended use of canonical XML is in testing XML processors, +as a representation of the result of parsing an XML document. +

+Every well-formed XML document has a unique structurally equivalent +canonical XML document. Two structurally equivalent XML +documents have a byte-for-byte identical canonical XML document. +Canonicalizing an XML document requires only information that an XML +processor is required to make available to an application. +

+A canonical XML document conforms to the following grammar: +

+CanonXML    ::= Pi* element Pi*
+element     ::= Stag (Datachar | Pi | element)* Etag
+Stag        ::= '<'  Name Atts '>'
+Etag        ::= '</' Name '>'
+Pi          ::= '<?' Name ' ' (((Char - S) Char*)? - (Char* '?>' Char*)) '?>'
+Atts        ::= (' ' Name '=' '"' Datachar* '"')*
+Datachar    ::= '&amp;' | '&lt;' | '&gt;' | '&quot;'
+                 | '&#9;'| '&#10;'| '&#13;'
+                 | (Char - ('&' | '<' | '>' | '"' | #x9 | #xA | #xD))
+Name        ::= (see XML spec)
+Char        ::= (see XML spec)
+S           ::= (see XML spec)
+
+

+Attributes are in lexicographical order (in Unicode bit order). +

+A canonical XML document is encoded in UTF-8. +

+Ignorable white space is considered significant and is treated equivalently +to data. +

+

+James Clark +
+ + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/invalid/001.ent b/collects/tests/xml/clark-tests/invalid/001.ent new file mode 100644 index 0000000000..f70eaea9c4 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/001.ent @@ -0,0 +1,3 @@ + + +%e; --> diff --git a/collects/tests/xml/clark-tests/invalid/001.xml b/collects/tests/xml/clark-tests/invalid/001.xml new file mode 100644 index 0000000000..36188451ae --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/001.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/invalid/002.ent b/collects/tests/xml/clark-tests/invalid/002.ent new file mode 100644 index 0000000000..4cb848b438 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/002.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/invalid/002.xml b/collects/tests/xml/clark-tests/invalid/002.xml new file mode 100644 index 0000000000..5a3a96d1ab --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/002.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/invalid/003.ent b/collects/tests/xml/clark-tests/invalid/003.ent new file mode 100644 index 0000000000..54f3c821b8 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/003.ent @@ -0,0 +1,2 @@ + +%e; doc (#PCDATA)> diff --git a/collects/tests/xml/clark-tests/invalid/003.xml b/collects/tests/xml/clark-tests/invalid/003.xml new file mode 100644 index 0000000000..dd01f41126 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/003.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/invalid/004.ent b/collects/tests/xml/clark-tests/invalid/004.ent new file mode 100644 index 0000000000..aae4cc2929 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/004.ent @@ -0,0 +1,3 @@ + +"> +%e1; doc (#PCDATA) %e2; diff --git a/collects/tests/xml/clark-tests/invalid/004.xml b/collects/tests/xml/clark-tests/invalid/004.xml new file mode 100644 index 0000000000..20cdf6d0e5 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/004.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/invalid/005.ent b/collects/tests/xml/clark-tests/invalid/005.ent new file mode 100644 index 0000000000..85e16474a6 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/005.ent @@ -0,0 +1,2 @@ +"> + + diff --git a/collects/tests/xml/clark-tests/invalid/006.ent b/collects/tests/xml/clark-tests/invalid/006.ent new file mode 100644 index 0000000000..116ca79657 --- /dev/null +++ b/collects/tests/xml/clark-tests/invalid/006.ent @@ -0,0 +1,2 @@ +"> + + diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/001.ent b/collects/tests/xml/clark-tests/not-wf/ext-sa/001.ent new file mode 100644 index 0000000000..378a2074b7 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/001.ent @@ -0,0 +1 @@ +&e; \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/001.xml b/collects/tests/xml/clark-tests/not-wf/ext-sa/001.xml new file mode 100644 index 0000000000..aa624cbe71 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/001.xml @@ -0,0 +1,4 @@ + +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/002.ent b/collects/tests/xml/clark-tests/not-wf/ext-sa/002.ent new file mode 100644 index 0000000000..2cd184a213 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/002.ent @@ -0,0 +1,3 @@ + +data + diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/002.xml b/collects/tests/xml/clark-tests/not-wf/ext-sa/002.xml new file mode 100644 index 0000000000..9eaf91724f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/002.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/003.ent b/collects/tests/xml/clark-tests/not-wf/ext-sa/003.ent new file mode 100644 index 0000000000..35cf4892f2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/003.ent @@ -0,0 +1,2 @@ + +data diff --git a/collects/tests/xml/clark-tests/not-wf/ext-sa/003.xml b/collects/tests/xml/clark-tests/not-wf/ext-sa/003.xml new file mode 100644 index 0000000000..bb60b663ef --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/ext-sa/003.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/001.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/001.ent new file mode 100644 index 0000000000..00096e572e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/001.ent @@ -0,0 +1,3 @@ + +]> diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/001.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/001.xml new file mode 100644 index 0000000000..36188451ae --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/001.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/002.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/002.xml new file mode 100644 index 0000000000..dd73174135 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/002.xml @@ -0,0 +1,6 @@ + +"> +%e; +]> + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/003.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/003.ent new file mode 100644 index 0000000000..abf1b1a35e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/003.ent @@ -0,0 +1,2 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/004.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/004.ent new file mode 100644 index 0000000000..552e4f520a --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/004.ent @@ -0,0 +1,2 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/005.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/005.ent new file mode 100644 index 0000000000..9a369cef12 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/005.ent @@ -0,0 +1,2 @@ + +%e; diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/005.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/005.xml new file mode 100644 index 0000000000..383553d24f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/005.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/006.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/006.ent new file mode 100644 index 0000000000..771daf1915 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/006.ent @@ -0,0 +1,3 @@ + +]]> diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/006.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/006.xml new file mode 100644 index 0000000000..2f14e839e2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/006.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/007.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/007.ent new file mode 100644 index 0000000000..9e9866d2ad --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/007.ent @@ -0,0 +1,3 @@ + +]> diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/007.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/007.xml new file mode 100644 index 0000000000..38897e34ea --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/007.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/008.ent b/collects/tests/xml/clark-tests/not-wf/not-sa/008.ent new file mode 100644 index 0000000000..f8b1cd3dad --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/008.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/not-sa/008.xml b/collects/tests/xml/clark-tests/not-wf/not-sa/008.xml new file mode 100644 index 0000000000..54351009cd --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/not-sa/008.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/001.xml b/collects/tests/xml/clark-tests/not-wf/sa/001.xml new file mode 100644 index 0000000000..d33ec68dcd --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/001.xml @@ -0,0 +1,5 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/002.xml b/collects/tests/xml/clark-tests/not-wf/sa/002.xml new file mode 100644 index 0000000000..0a64d52428 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/002.xml @@ -0,0 +1,4 @@ + +<.doc> + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/003.xml b/collects/tests/xml/clark-tests/not-wf/sa/003.xml new file mode 100644 index 0000000000..e0b8bae4a4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/003.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/004.xml b/collects/tests/xml/clark-tests/not-wf/sa/004.xml new file mode 100644 index 0000000000..e85bc96e56 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/004.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/005.xml b/collects/tests/xml/clark-tests/not-wf/sa/005.xml new file mode 100644 index 0000000000..7cd44ef10c --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/005.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/006.xml b/collects/tests/xml/clark-tests/not-wf/sa/006.xml new file mode 100644 index 0000000000..8594c35cc7 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/006.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/007.xml b/collects/tests/xml/clark-tests/not-wf/sa/007.xml new file mode 100644 index 0000000000..286756fdd5 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/007.xml @@ -0,0 +1 @@ +& no refc diff --git a/collects/tests/xml/clark-tests/not-wf/sa/008.xml b/collects/tests/xml/clark-tests/not-wf/sa/008.xml new file mode 100644 index 0000000000..29ef40306b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/008.xml @@ -0,0 +1 @@ +&.entity; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/009.xml b/collects/tests/xml/clark-tests/not-wf/sa/009.xml new file mode 100644 index 0000000000..8e3ff7de10 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/009.xml @@ -0,0 +1 @@ +&#RE; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/010.xml b/collects/tests/xml/clark-tests/not-wf/sa/010.xml new file mode 100644 index 0000000000..a6790846c9 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/010.xml @@ -0,0 +1 @@ +A & B diff --git a/collects/tests/xml/clark-tests/not-wf/sa/011.xml b/collects/tests/xml/clark-tests/not-wf/sa/011.xml new file mode 100644 index 0000000000..57eaf9fc48 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/011.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/012.xml b/collects/tests/xml/clark-tests/not-wf/sa/012.xml new file mode 100644 index 0000000000..1b2539ffa6 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/012.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/013.xml b/collects/tests/xml/clark-tests/not-wf/sa/013.xml new file mode 100644 index 0000000000..3540df9143 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/013.xml @@ -0,0 +1 @@ +"> diff --git a/collects/tests/xml/clark-tests/not-wf/sa/015.xml b/collects/tests/xml/clark-tests/not-wf/sa/015.xml new file mode 100644 index 0000000000..f2baf947b5 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/015.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/016.xml b/collects/tests/xml/clark-tests/not-wf/sa/016.xml new file mode 100644 index 0000000000..22d4b2e265 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/016.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/017.xml b/collects/tests/xml/clark-tests/not-wf/sa/017.xml new file mode 100644 index 0000000000..a76f5929e9 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/017.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/018.xml b/collects/tests/xml/clark-tests/not-wf/sa/018.xml new file mode 100644 index 0000000000..66e204acc4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/018.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/019.xml b/collects/tests/xml/clark-tests/not-wf/sa/019.xml new file mode 100644 index 0000000000..b835c2d752 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/019.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/020.xml b/collects/tests/xml/clark-tests/not-wf/sa/020.xml new file mode 100644 index 0000000000..b30cfcfc10 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/020.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/021.xml b/collects/tests/xml/clark-tests/not-wf/sa/021.xml new file mode 100644 index 0000000000..1bfa84aa64 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/021.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/022.xml b/collects/tests/xml/clark-tests/not-wf/sa/022.xml new file mode 100644 index 0000000000..44c803bf1b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/022.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/023.xml b/collects/tests/xml/clark-tests/not-wf/sa/023.xml new file mode 100644 index 0000000000..b877ae2a6b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/023.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/024.xml b/collects/tests/xml/clark-tests/not-wf/sa/024.xml new file mode 100644 index 0000000000..cf68f2c073 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/024.xml @@ -0,0 +1,3 @@ + +<123> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/025.xml b/collects/tests/xml/clark-tests/not-wf/sa/025.xml new file mode 100644 index 0000000000..6cba95cd78 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/025.xml @@ -0,0 +1 @@ +]]> diff --git a/collects/tests/xml/clark-tests/not-wf/sa/026.xml b/collects/tests/xml/clark-tests/not-wf/sa/026.xml new file mode 100644 index 0000000000..347984fa73 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/026.xml @@ -0,0 +1 @@ +]]]> diff --git a/collects/tests/xml/clark-tests/not-wf/sa/027.xml b/collects/tests/xml/clark-tests/not-wf/sa/027.xml new file mode 100644 index 0000000000..cfafaf0d70 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/027.xml @@ -0,0 +1,3 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/033.xml b/collects/tests/xml/clark-tests/not-wf/sa/033.xml new file mode 100644 index 0000000000..afd2328402 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/033.xml @@ -0,0 +1 @@ +abcdef diff --git a/collects/tests/xml/clark-tests/not-wf/sa/034.xml b/collects/tests/xml/clark-tests/not-wf/sa/034.xml new file mode 100644 index 0000000000..d74a77719b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/034.xml @@ -0,0 +1 @@ +A form-feed is not white space or a name character diff --git a/collects/tests/xml/clark-tests/not-wf/sa/035.xml b/collects/tests/xml/clark-tests/not-wf/sa/035.xml new file mode 100644 index 0000000000..e1fc920522 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/035.xml @@ -0,0 +1 @@ +1 < 2 but not in XML diff --git a/collects/tests/xml/clark-tests/not-wf/sa/036.xml b/collects/tests/xml/clark-tests/not-wf/sa/036.xml new file mode 100644 index 0000000000..b8ecb21ba1 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/036.xml @@ -0,0 +1,2 @@ + +Illegal data diff --git a/collects/tests/xml/clark-tests/not-wf/sa/037.xml b/collects/tests/xml/clark-tests/not-wf/sa/037.xml new file mode 100644 index 0000000000..2e02662926 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/037.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/038.xml b/collects/tests/xml/clark-tests/not-wf/sa/038.xml new file mode 100644 index 0000000000..68b2803f82 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/038.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/039.xml b/collects/tests/xml/clark-tests/not-wf/sa/039.xml new file mode 100644 index 0000000000..80429e3e40 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/039.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/040.xml b/collects/tests/xml/clark-tests/not-wf/sa/040.xml new file mode 100644 index 0000000000..dc8ba5a434 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/040.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/041.xml b/collects/tests/xml/clark-tests/not-wf/sa/041.xml new file mode 100644 index 0000000000..30bcdd6bfe --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/041.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/042.xml b/collects/tests/xml/clark-tests/not-wf/sa/042.xml new file mode 100644 index 0000000000..4ae50efc7b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/042.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/043.xml b/collects/tests/xml/clark-tests/not-wf/sa/043.xml new file mode 100644 index 0000000000..41824eee4b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/043.xml @@ -0,0 +1,2 @@ + +Illegal data diff --git a/collects/tests/xml/clark-tests/not-wf/sa/044.xml b/collects/tests/xml/clark-tests/not-wf/sa/044.xml new file mode 100644 index 0000000000..3fc232dc37 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/044.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/045.xml b/collects/tests/xml/clark-tests/not-wf/sa/045.xml new file mode 100644 index 0000000000..00c10f00bf --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/045.xml @@ -0,0 +1,4 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/046.xml b/collects/tests/xml/clark-tests/not-wf/sa/046.xml new file mode 100644 index 0000000000..265cb15301 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/046.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/047.xml b/collects/tests/xml/clark-tests/not-wf/sa/047.xml new file mode 100644 index 0000000000..d18a4a4440 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/047.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/048.xml b/collects/tests/xml/clark-tests/not-wf/sa/048.xml new file mode 100644 index 0000000000..67419c1ed5 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/048.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/049.xml b/collects/tests/xml/clark-tests/not-wf/sa/049.xml new file mode 100644 index 0000000000..3cf0e79422 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/049.xml @@ -0,0 +1,4 @@ + + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/050.xml b/collects/tests/xml/clark-tests/not-wf/sa/050.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/not-wf/sa/051.xml b/collects/tests/xml/clark-tests/not-wf/sa/051.xml new file mode 100644 index 0000000000..b52df12cc4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/051.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/052.xml b/collects/tests/xml/clark-tests/not-wf/sa/052.xml new file mode 100644 index 0000000000..8283895990 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/052.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/053.xml b/collects/tests/xml/clark-tests/not-wf/sa/053.xml new file mode 100644 index 0000000000..9d7f36920f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/053.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/054.xml b/collects/tests/xml/clark-tests/not-wf/sa/054.xml new file mode 100644 index 0000000000..eda553c6d3 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/054.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/055.xml b/collects/tests/xml/clark-tests/not-wf/sa/055.xml new file mode 100644 index 0000000000..cbb3683a9d --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/055.xml @@ -0,0 +1,2 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/056.xml b/collects/tests/xml/clark-tests/not-wf/sa/056.xml new file mode 100644 index 0000000000..a681684c58 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/056.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/057.xml b/collects/tests/xml/clark-tests/not-wf/sa/057.xml new file mode 100644 index 0000000000..848d347120 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/057.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/058.xml b/collects/tests/xml/clark-tests/not-wf/sa/058.xml new file mode 100644 index 0000000000..daba266af2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/058.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/059.xml b/collects/tests/xml/clark-tests/not-wf/sa/059.xml new file mode 100644 index 0000000000..316083dc25 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/059.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/060.xml b/collects/tests/xml/clark-tests/not-wf/sa/060.xml new file mode 100644 index 0000000000..9a610fd38f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/060.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/061.xml b/collects/tests/xml/clark-tests/not-wf/sa/061.xml new file mode 100644 index 0000000000..59181e706f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/061.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/062.xml b/collects/tests/xml/clark-tests/not-wf/sa/062.xml new file mode 100644 index 0000000000..e62e9cd370 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/062.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/063.xml b/collects/tests/xml/clark-tests/not-wf/sa/063.xml new file mode 100644 index 0000000000..98675b9040 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/063.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/064.xml b/collects/tests/xml/clark-tests/not-wf/sa/064.xml new file mode 100644 index 0000000000..3888c46b8b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/064.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/065.xml b/collects/tests/xml/clark-tests/not-wf/sa/065.xml new file mode 100644 index 0000000000..da9cafd137 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/065.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/066.xml b/collects/tests/xml/clark-tests/not-wf/sa/066.xml new file mode 100644 index 0000000000..9c09eb4e5d --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/066.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/067.xml b/collects/tests/xml/clark-tests/not-wf/sa/067.xml new file mode 100644 index 0000000000..7e0809bd34 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/067.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/068.xml b/collects/tests/xml/clark-tests/not-wf/sa/068.xml new file mode 100644 index 0000000000..53a80a83a8 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/068.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/069.xml b/collects/tests/xml/clark-tests/not-wf/sa/069.xml new file mode 100644 index 0000000000..6f891dd5e1 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/069.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/070.xml b/collects/tests/xml/clark-tests/not-wf/sa/070.xml new file mode 100644 index 0000000000..faf4b0ae4c --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/070.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/071.xml b/collects/tests/xml/clark-tests/not-wf/sa/071.xml new file mode 100644 index 0000000000..5bd3908968 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/071.xml @@ -0,0 +1,6 @@ + + + +]> +&e1; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/072.xml b/collects/tests/xml/clark-tests/not-wf/sa/072.xml new file mode 100644 index 0000000000..743ba79429 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/072.xml @@ -0,0 +1 @@ +&foo; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/073.xml b/collects/tests/xml/clark-tests/not-wf/sa/073.xml new file mode 100644 index 0000000000..2578af42ec --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/073.xml @@ -0,0 +1,4 @@ + +]> +&f; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/074.xml b/collects/tests/xml/clark-tests/not-wf/sa/074.xml new file mode 100644 index 0000000000..f8abaeb22c --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/074.xml @@ -0,0 +1,6 @@ +"> +]> + +&e; + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/075.xml b/collects/tests/xml/clark-tests/not-wf/sa/075.xml new file mode 100644 index 0000000000..d3dbf50ed6 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/075.xml @@ -0,0 +1,7 @@ + + + +]> + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/076.xml b/collects/tests/xml/clark-tests/not-wf/sa/076.xml new file mode 100644 index 0000000000..60546720e7 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/076.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/077.xml b/collects/tests/xml/clark-tests/not-wf/sa/077.xml new file mode 100644 index 0000000000..f8ac23a5a2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/077.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/078.xml b/collects/tests/xml/clark-tests/not-wf/sa/078.xml new file mode 100644 index 0000000000..446cd85ef9 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/078.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/079.xml b/collects/tests/xml/clark-tests/not-wf/sa/079.xml new file mode 100644 index 0000000000..da016fd3b2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/079.xml @@ -0,0 +1,8 @@ + + + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/080.xml b/collects/tests/xml/clark-tests/not-wf/sa/080.xml new file mode 100644 index 0000000000..fa4b9e428d --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/080.xml @@ -0,0 +1,8 @@ + + + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/081.xml b/collects/tests/xml/clark-tests/not-wf/sa/081.xml new file mode 100644 index 0000000000..d676100e8a --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/081.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/082.xml b/collects/tests/xml/clark-tests/not-wf/sa/082.xml new file mode 100644 index 0000000000..3217d6f8b4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/082.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/083.xml b/collects/tests/xml/clark-tests/not-wf/sa/083.xml new file mode 100644 index 0000000000..469d43fd42 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/083.xml @@ -0,0 +1,4 @@ + +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/084.xml b/collects/tests/xml/clark-tests/not-wf/sa/084.xml new file mode 100644 index 0000000000..abbbcdea69 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/084.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/085.xml b/collects/tests/xml/clark-tests/not-wf/sa/085.xml new file mode 100644 index 0000000000..ac0aeca3e4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/085.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/086.xml b/collects/tests/xml/clark-tests/not-wf/sa/086.xml new file mode 100644 index 0000000000..df6adfd884 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/086.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/087.xml b/collects/tests/xml/clark-tests/not-wf/sa/087.xml new file mode 100644 index 0000000000..ed49492a7a --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/087.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/088.xml b/collects/tests/xml/clark-tests/not-wf/sa/088.xml new file mode 100644 index 0000000000..da0a68c401 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/088.xml @@ -0,0 +1,6 @@ + + + +]> + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/090.xml b/collects/tests/xml/clark-tests/not-wf/sa/090.xml new file mode 100644 index 0000000000..3fb72f3cc0 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/090.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/091.xml b/collects/tests/xml/clark-tests/not-wf/sa/091.xml new file mode 100644 index 0000000000..a61d0914f8 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/091.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/092.xml b/collects/tests/xml/clark-tests/not-wf/sa/092.xml new file mode 100644 index 0000000000..be5266dada --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/092.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/093.xml b/collects/tests/xml/clark-tests/not-wf/sa/093.xml new file mode 100644 index 0000000000..4af61bc645 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/093.xml @@ -0,0 +1 @@ +X diff --git a/collects/tests/xml/clark-tests/not-wf/sa/094.xml b/collects/tests/xml/clark-tests/not-wf/sa/094.xml new file mode 100644 index 0000000000..bdec7a4660 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/094.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/095.xml b/collects/tests/xml/clark-tests/not-wf/sa/095.xml new file mode 100644 index 0000000000..090b8b4eec --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/095.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/096.xml b/collects/tests/xml/clark-tests/not-wf/sa/096.xml new file mode 100644 index 0000000000..d806c3b952 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/096.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/sa/097.xml b/collects/tests/xml/clark-tests/not-wf/sa/097.xml new file mode 100644 index 0000000000..d4def544b0 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/097.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/sa/098.xml b/collects/tests/xml/clark-tests/not-wf/sa/098.xml new file mode 100644 index 0000000000..9798496aa3 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/098.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/sa/099.xml b/collects/tests/xml/clark-tests/not-wf/sa/099.xml new file mode 100644 index 0000000000..d5be08eff0 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/099.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/sa/100.xml b/collects/tests/xml/clark-tests/not-wf/sa/100.xml new file mode 100644 index 0000000000..51e06231c2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/100.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/101.xml b/collects/tests/xml/clark-tests/not-wf/sa/101.xml new file mode 100644 index 0000000000..afa5a455fc --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/101.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/102.xml b/collects/tests/xml/clark-tests/not-wf/sa/102.xml new file mode 100644 index 0000000000..8734adaa6e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/102.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/103.xml b/collects/tests/xml/clark-tests/not-wf/sa/103.xml new file mode 100644 index 0000000000..6c4716798f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/103.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/104.xml b/collects/tests/xml/clark-tests/not-wf/sa/104.xml new file mode 100644 index 0000000000..dd57396239 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/104.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/105.xml b/collects/tests/xml/clark-tests/not-wf/sa/105.xml new file mode 100644 index 0000000000..809e705870 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/105.xml @@ -0,0 +1,4 @@ + + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/106.xml b/collects/tests/xml/clark-tests/not-wf/sa/106.xml new file mode 100644 index 0000000000..d32319ef09 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/106.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/107.xml b/collects/tests/xml/clark-tests/not-wf/sa/107.xml new file mode 100644 index 0000000000..3dfd8200e2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/107.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/108.xml b/collects/tests/xml/clark-tests/not-wf/sa/108.xml new file mode 100644 index 0000000000..af5cf50d48 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/108.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/109.xml b/collects/tests/xml/clark-tests/not-wf/sa/109.xml new file mode 100644 index 0000000000..5afc03e8db --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/109.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/110.xml b/collects/tests/xml/clark-tests/not-wf/sa/110.xml new file mode 100644 index 0000000000..cf54ebe5c0 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/110.xml @@ -0,0 +1,5 @@ + +]> + +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/111.xml b/collects/tests/xml/clark-tests/not-wf/sa/111.xml new file mode 100644 index 0000000000..84a469f5d1 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/111.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/112.xml b/collects/tests/xml/clark-tests/not-wf/sa/112.xml new file mode 100644 index 0000000000..0c5c1a4341 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/112.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/113.xml b/collects/tests/xml/clark-tests/not-wf/sa/113.xml new file mode 100644 index 0000000000..04fc9d2318 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/113.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/114.xml b/collects/tests/xml/clark-tests/not-wf/sa/114.xml new file mode 100644 index 0000000000..1261ee49e1 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/114.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/115.xml b/collects/tests/xml/clark-tests/not-wf/sa/115.xml new file mode 100644 index 0000000000..f111dbe153 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/115.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/116.xml b/collects/tests/xml/clark-tests/not-wf/sa/116.xml new file mode 100644 index 0000000000..84bb762fdf --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/116.xml @@ -0,0 +1,4 @@ + +]> +&e;7; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/117.xml b/collects/tests/xml/clark-tests/not-wf/sa/117.xml new file mode 100644 index 0000000000..e4a5e572ef --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/117.xml @@ -0,0 +1,4 @@ + +]> +&e;#97; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/118.xml b/collects/tests/xml/clark-tests/not-wf/sa/118.xml new file mode 100644 index 0000000000..494d53d208 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/118.xml @@ -0,0 +1,4 @@ + +]> +&&e;97; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/119.xml b/collects/tests/xml/clark-tests/not-wf/sa/119.xml new file mode 100644 index 0000000000..aefaa44a1c --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/119.xml @@ -0,0 +1,6 @@ + +]> + +&e;#38; + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/120.xml b/collects/tests/xml/clark-tests/not-wf/sa/120.xml new file mode 100644 index 0000000000..b7d6ff9ce9 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/120.xml @@ -0,0 +1,6 @@ + +]> + +&e; + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/121.xml b/collects/tests/xml/clark-tests/not-wf/sa/121.xml new file mode 100644 index 0000000000..2b4adcc6b4 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/121.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/122.xml b/collects/tests/xml/clark-tests/not-wf/sa/122.xml new file mode 100644 index 0000000000..ef0b057cee --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/122.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/123.xml b/collects/tests/xml/clark-tests/not-wf/sa/123.xml new file mode 100644 index 0000000000..06d65f045b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/123.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/124.xml b/collects/tests/xml/clark-tests/not-wf/sa/124.xml new file mode 100644 index 0000000000..3bbe0f91a6 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/124.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/125.xml b/collects/tests/xml/clark-tests/not-wf/sa/125.xml new file mode 100644 index 0000000000..5f9c22c0c6 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/125.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/126.xml b/collects/tests/xml/clark-tests/not-wf/sa/126.xml new file mode 100644 index 0000000000..13e74d6d5e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/126.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/127.xml b/collects/tests/xml/clark-tests/not-wf/sa/127.xml new file mode 100644 index 0000000000..a379b9e539 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/127.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/128.xml b/collects/tests/xml/clark-tests/not-wf/sa/128.xml new file mode 100644 index 0000000000..dd706bb21f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/128.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/129.xml b/collects/tests/xml/clark-tests/not-wf/sa/129.xml new file mode 100644 index 0000000000..d4e4461a6d --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/129.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/130.xml b/collects/tests/xml/clark-tests/not-wf/sa/130.xml new file mode 100644 index 0000000000..fa7be641f1 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/130.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/131.xml b/collects/tests/xml/clark-tests/not-wf/sa/131.xml new file mode 100644 index 0000000000..f34ed453b5 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/131.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/132.xml b/collects/tests/xml/clark-tests/not-wf/sa/132.xml new file mode 100644 index 0000000000..ab6cc416e9 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/132.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/133.xml b/collects/tests/xml/clark-tests/not-wf/sa/133.xml new file mode 100644 index 0000000000..d2aa604e9f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/133.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/134.xml b/collects/tests/xml/clark-tests/not-wf/sa/134.xml new file mode 100644 index 0000000000..c8919c5ef8 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/134.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/135.xml b/collects/tests/xml/clark-tests/not-wf/sa/135.xml new file mode 100644 index 0000000000..e639e8b6ea --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/135.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/136.xml b/collects/tests/xml/clark-tests/not-wf/sa/136.xml new file mode 100644 index 0000000000..499e68bcea --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/136.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/137.xml b/collects/tests/xml/clark-tests/not-wf/sa/137.xml new file mode 100644 index 0000000000..723b77f776 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/137.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/138.xml b/collects/tests/xml/clark-tests/not-wf/sa/138.xml new file mode 100644 index 0000000000..16934cc88e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/138.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/139.xml b/collects/tests/xml/clark-tests/not-wf/sa/139.xml new file mode 100644 index 0000000000..34df52ed93 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/139.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/140.xml b/collects/tests/xml/clark-tests/not-wf/sa/140.xml new file mode 100644 index 0000000000..467d5ed301 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/140.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/141.xml b/collects/tests/xml/clark-tests/not-wf/sa/141.xml new file mode 100644 index 0000000000..409d0a7568 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/141.xml @@ -0,0 +1,4 @@ +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/142.xml b/collects/tests/xml/clark-tests/not-wf/sa/142.xml new file mode 100644 index 0000000000..20e88f88b3 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/142.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/143.xml b/collects/tests/xml/clark-tests/not-wf/sa/143.xml new file mode 100644 index 0000000000..0ee1c614f8 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/143.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/144.xml b/collects/tests/xml/clark-tests/not-wf/sa/144.xml new file mode 100644 index 0000000000..437548c0ba --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/144.xml @@ -0,0 +1,4 @@ + +]> +￿ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/145.xml b/collects/tests/xml/clark-tests/not-wf/sa/145.xml new file mode 100644 index 0000000000..71b187a933 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/145.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/146.xml b/collects/tests/xml/clark-tests/not-wf/sa/146.xml new file mode 100644 index 0000000000..d0bfbca723 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/146.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/147.xml b/collects/tests/xml/clark-tests/not-wf/sa/147.xml new file mode 100644 index 0000000000..3b6145615f --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/147.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/148.xml b/collects/tests/xml/clark-tests/not-wf/sa/148.xml new file mode 100644 index 0000000000..774dce18fd --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/148.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/149.xml b/collects/tests/xml/clark-tests/not-wf/sa/149.xml new file mode 100644 index 0000000000..725eea0dec --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/149.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/150.xml b/collects/tests/xml/clark-tests/not-wf/sa/150.xml new file mode 100644 index 0000000000..44f6b6df92 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/150.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/151.xml b/collects/tests/xml/clark-tests/not-wf/sa/151.xml new file mode 100644 index 0000000000..fecc4f24e3 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/151.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/152.xml b/collects/tests/xml/clark-tests/not-wf/sa/152.xml new file mode 100644 index 0000000000..b5c5cb26ae --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/152.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/153.xml b/collects/tests/xml/clark-tests/not-wf/sa/153.xml new file mode 100644 index 0000000000..5e2973707e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/153.xml @@ -0,0 +1,5 @@ + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/154.xml b/collects/tests/xml/clark-tests/not-wf/sa/154.xml new file mode 100644 index 0000000000..96e01d63f5 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/154.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/155.xml b/collects/tests/xml/clark-tests/not-wf/sa/155.xml new file mode 100644 index 0000000000..4f16d0f163 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/155.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/156.xml b/collects/tests/xml/clark-tests/not-wf/sa/156.xml new file mode 100644 index 0000000000..c6d93fd312 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/156.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/157.xml b/collects/tests/xml/clark-tests/not-wf/sa/157.xml new file mode 100644 index 0000000000..2f058dac3e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/157.xml @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/158.xml b/collects/tests/xml/clark-tests/not-wf/sa/158.xml new file mode 100644 index 0000000000..32b90b722d --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/158.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/159.xml b/collects/tests/xml/clark-tests/not-wf/sa/159.xml new file mode 100644 index 0000000000..066244cb91 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/159.xml @@ -0,0 +1,5 @@ + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/160.xml b/collects/tests/xml/clark-tests/not-wf/sa/160.xml new file mode 100644 index 0000000000..85424acb1b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/160.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/161.xml b/collects/tests/xml/clark-tests/not-wf/sa/161.xml new file mode 100644 index 0000000000..4f8a5b7b6b --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/161.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/162.xml b/collects/tests/xml/clark-tests/not-wf/sa/162.xml new file mode 100644 index 0000000000..efae4b190e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/162.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/163.xml b/collects/tests/xml/clark-tests/not-wf/sa/163.xml new file mode 100644 index 0000000000..e14fb76c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/163.xml @@ -0,0 +1,6 @@ + + +]> +%e; + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/164.xml b/collects/tests/xml/clark-tests/not-wf/sa/164.xml new file mode 100644 index 0000000000..98dd267c21 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/164.xml @@ -0,0 +1,5 @@ + + +] %e; > + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/165.xml b/collects/tests/xml/clark-tests/not-wf/sa/165.xml new file mode 100644 index 0000000000..36c04618ef --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/165.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/166.xml b/collects/tests/xml/clark-tests/not-wf/sa/166.xml new file mode 100644 index 0000000000..ee2ce28630 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/166.xml @@ -0,0 +1 @@ +ï¿¿ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/167.xml b/collects/tests/xml/clark-tests/not-wf/sa/167.xml new file mode 100644 index 0000000000..9bdc6c1278 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/167.xml @@ -0,0 +1 @@ +￾ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/168.xml b/collects/tests/xml/clark-tests/not-wf/sa/168.xml new file mode 100644 index 0000000000..f83221a3ad --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/168.xml @@ -0,0 +1 @@ +í € diff --git a/collects/tests/xml/clark-tests/not-wf/sa/169.xml b/collects/tests/xml/clark-tests/not-wf/sa/169.xml new file mode 100644 index 0000000000..310029b976 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/169.xml @@ -0,0 +1 @@ +í°€ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/170.xml b/collects/tests/xml/clark-tests/not-wf/sa/170.xml new file mode 100644 index 0000000000..cfa0aee155 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/170.xml @@ -0,0 +1 @@ +÷€€€ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/171.xml b/collects/tests/xml/clark-tests/not-wf/sa/171.xml new file mode 100644 index 0000000000..48b5c7d3bc --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/171.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/172.xml b/collects/tests/xml/clark-tests/not-wf/sa/172.xml new file mode 100644 index 0000000000..6651d4d299 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/172.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/173.xml b/collects/tests/xml/clark-tests/not-wf/sa/173.xml new file mode 100644 index 0000000000..f9f9f42023 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/173.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/174.xml b/collects/tests/xml/clark-tests/not-wf/sa/174.xml new file mode 100644 index 0000000000..42bef861c6 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/174.xml @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/175.xml b/collects/tests/xml/clark-tests/not-wf/sa/175.xml new file mode 100644 index 0000000000..69912f36d2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/175.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/176.xml b/collects/tests/xml/clark-tests/not-wf/sa/176.xml new file mode 100644 index 0000000000..39153ad5a8 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/176.xml @@ -0,0 +1,4 @@ + +]> + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/not-wf/sa/177.xml b/collects/tests/xml/clark-tests/not-wf/sa/177.xml new file mode 100644 index 0000000000..6bc8228879 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/177.xml @@ -0,0 +1,4 @@ + +]> +Aï¿¿ diff --git a/collects/tests/xml/clark-tests/not-wf/sa/178.xml b/collects/tests/xml/clark-tests/not-wf/sa/178.xml new file mode 100644 index 0000000000..e8f2d18eed --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/178.xml @@ -0,0 +1,5 @@ + + +]> + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/180.xml b/collects/tests/xml/clark-tests/not-wf/sa/180.xml new file mode 100644 index 0000000000..569d553a8c --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/180.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/181.xml b/collects/tests/xml/clark-tests/not-wf/sa/181.xml new file mode 100644 index 0000000000..4341d99ee2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/181.xml @@ -0,0 +1,5 @@ + + +]> +&e;]]> diff --git a/collects/tests/xml/clark-tests/not-wf/sa/182.xml b/collects/tests/xml/clark-tests/not-wf/sa/182.xml new file mode 100644 index 0000000000..920f431666 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/182.xml @@ -0,0 +1,5 @@ + + +]> +&e;--> diff --git a/collects/tests/xml/clark-tests/not-wf/sa/183.xml b/collects/tests/xml/clark-tests/not-wf/sa/183.xml new file mode 100644 index 0000000000..7a5677de54 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/183.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/184.xml b/collects/tests/xml/clark-tests/not-wf/sa/184.xml new file mode 100644 index 0000000000..103384a06e --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/184.xml @@ -0,0 +1,6 @@ + + +]> + + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/185.ent b/collects/tests/xml/clark-tests/not-wf/sa/185.ent new file mode 100644 index 0000000000..e557426454 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/185.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/185.xml b/collects/tests/xml/clark-tests/not-wf/sa/185.xml new file mode 100644 index 0000000000..81d5ef4bcd --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/185.xml @@ -0,0 +1,3 @@ + + +&e; diff --git a/collects/tests/xml/clark-tests/not-wf/sa/186.xml b/collects/tests/xml/clark-tests/not-wf/sa/186.xml new file mode 100644 index 0000000000..85b26ec0a2 --- /dev/null +++ b/collects/tests/xml/clark-tests/not-wf/sa/186.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/not-wf/sa/null.ent b/collects/tests/xml/clark-tests/not-wf/sa/null.ent new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/readme.html b/collects/tests/xml/clark-tests/readme.html new file mode 100644 index 0000000000..fc7310c68e --- /dev/null +++ b/collects/tests/xml/clark-tests/readme.html @@ -0,0 +1,60 @@ + +XML Test Cases + +

XML Test Cases version 1998-11-18

+

+Copyright (C) 1998 James Clark. All rights reserved. Permission is +granted to copy and modify this collection in any way for internal use +within a company or organization. Permission is granted to +redistribute the file xmltest.zip containing this +collection to third parties provided that no modifications of any kind +are made to this file. Note that permission to distribute the +collection in any other form is not granted. +

+The collection is structured into three directories: +

+
not-wf +
this contains cases that are not well-formed XML documents +
valid +
this contains cases that are valid XML documents +
invalid +
this contains cases that are well-formed XML documents +but are not valid XML documents +
+

+The not-wf and valid directories each have +three subdirectories: +

+
+sa +
+this contains cases that are standalone (as defined in XML) and do not +have references to external general entities +
+ext-sa +
+this contains case that are standalone and have references to external +general entities +
+not-sa +
+this contains cases that are not standalone +
+

+In each directory, files with a .xml extension are the +XML document test cases, and files with a .ent extension +are external entities referenced by the test cases. +

+Within the valid directory, each of these three +subdirectories has an out subdirectory which contains an +equivalent canonical XML document for each +of the cases. +

+

+Bug reports and contributions of new test cases are welcome. +

+

+James Clark +
+ + diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/001.ent b/collects/tests/xml/clark-tests/valid/ext-sa/001.ent new file mode 100644 index 0000000000..1cff3fd44f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/001.ent @@ -0,0 +1 @@ +Data diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/001.xml b/collects/tests/xml/clark-tests/valid/ext-sa/001.xml new file mode 100644 index 0000000000..147d70d2d1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/001.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/002.ent b/collects/tests/xml/clark-tests/valid/ext-sa/002.ent new file mode 100644 index 0000000000..45f6d8e74e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/002.ent @@ -0,0 +1 @@ +Data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/002.xml b/collects/tests/xml/clark-tests/valid/ext-sa/002.xml new file mode 100644 index 0000000000..9eaf91724f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/002.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/003.ent b/collects/tests/xml/clark-tests/valid/ext-sa/003.ent new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/003.xml b/collects/tests/xml/clark-tests/valid/ext-sa/003.xml new file mode 100644 index 0000000000..bb60b663ef --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/003.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/004.ent b/collects/tests/xml/clark-tests/valid/ext-sa/004.ent new file mode 100644 index 0000000000..3436f20001 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/004.ent @@ -0,0 +1 @@ +Data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/004.xml b/collects/tests/xml/clark-tests/valid/ext-sa/004.xml new file mode 100644 index 0000000000..074498ce19 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/004.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/005.ent b/collects/tests/xml/clark-tests/valid/ext-sa/005.ent new file mode 100644 index 0000000000..c6e97f821f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/005.ent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/005.xml b/collects/tests/xml/clark-tests/valid/ext-sa/005.xml new file mode 100644 index 0000000000..82a6228205 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/005.xml @@ -0,0 +1,6 @@ + + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/006.ent b/collects/tests/xml/clark-tests/valid/ext-sa/006.ent new file mode 100644 index 0000000000..4df2f0c2ac --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/006.ent @@ -0,0 +1,4 @@ +Data + +More data + diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/006.xml b/collects/tests/xml/clark-tests/valid/ext-sa/006.xml new file mode 100644 index 0000000000..0b326cad4c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/006.xml @@ -0,0 +1,6 @@ + + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/007.ent b/collects/tests/xml/clark-tests/valid/ext-sa/007.ent new file mode 100644 index 0000000000..ab1d696dd7 Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/ext-sa/007.ent differ diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/007.xml b/collects/tests/xml/clark-tests/valid/ext-sa/007.xml new file mode 100644 index 0000000000..825e3b286a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/007.xml @@ -0,0 +1,5 @@ + + +]> +X&e;Z diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/008.ent b/collects/tests/xml/clark-tests/valid/ext-sa/008.ent new file mode 100644 index 0000000000..c6ca61f9c8 Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/ext-sa/008.ent differ diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/008.xml b/collects/tests/xml/clark-tests/valid/ext-sa/008.xml new file mode 100644 index 0000000000..3c001b6cb3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/008.xml @@ -0,0 +1,5 @@ + + +]> +X&e;Z diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/009.ent b/collects/tests/xml/clark-tests/valid/ext-sa/009.ent new file mode 100644 index 0000000000..67c3297611 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/009.ent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/009.xml b/collects/tests/xml/clark-tests/valid/ext-sa/009.xml new file mode 100644 index 0000000000..a5866e5a77 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/009.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/010.ent b/collects/tests/xml/clark-tests/valid/ext-sa/010.ent new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/010.xml b/collects/tests/xml/clark-tests/valid/ext-sa/010.xml new file mode 100644 index 0000000000..418e9b0141 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/010.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/011.ent b/collects/tests/xml/clark-tests/valid/ext-sa/011.ent new file mode 100644 index 0000000000..b19be3a497 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/011.ent @@ -0,0 +1 @@ +xyzzy diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/011.xml b/collects/tests/xml/clark-tests/valid/ext-sa/011.xml new file mode 100644 index 0000000000..2ceefa1d21 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/011.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/012.ent b/collects/tests/xml/clark-tests/valid/ext-sa/012.ent new file mode 100644 index 0000000000..8eb1fb9c41 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/012.ent @@ -0,0 +1 @@ +&e4; \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/012.xml b/collects/tests/xml/clark-tests/valid/ext-sa/012.xml new file mode 100644 index 0000000000..5a8f009b4a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/012.xml @@ -0,0 +1,9 @@ + + + + + + +]> +&e1; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/013.ent b/collects/tests/xml/clark-tests/valid/ext-sa/013.ent new file mode 100644 index 0000000000..7f25c502dd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/013.ent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/013.xml b/collects/tests/xml/clark-tests/valid/ext-sa/013.xml new file mode 100644 index 0000000000..7717c97afe --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/013.xml @@ -0,0 +1,10 @@ + + + + +]> +&x; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/014.ent b/collects/tests/xml/clark-tests/valid/ext-sa/014.ent new file mode 100644 index 0000000000..470fd6fe44 Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/ext-sa/014.ent differ diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/014.xml b/collects/tests/xml/clark-tests/valid/ext-sa/014.xml new file mode 100644 index 0000000000..816fd1e796 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/014.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/001.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/001.xml new file mode 100644 index 0000000000..0a7acf8ebe --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/001.xml @@ -0,0 +1 @@ +Data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/002.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/002.xml new file mode 100644 index 0000000000..d4a445e555 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/002.xml @@ -0,0 +1 @@ +Data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/003.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/003.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/004.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/004.xml new file mode 100644 index 0000000000..0a7acf8ebe --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/004.xml @@ -0,0 +1 @@ +Data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/005.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/005.xml new file mode 100644 index 0000000000..6e293aa70e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/005.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/006.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/006.xml new file mode 100644 index 0000000000..04b6fc82ee --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/006.xml @@ -0,0 +1 @@ +Data More data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/007.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/007.xml new file mode 100644 index 0000000000..ab2a74c9d1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/007.xml @@ -0,0 +1 @@ +XYZ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/008.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/008.xml new file mode 100644 index 0000000000..ab2a74c9d1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/008.xml @@ -0,0 +1 @@ +XYZ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/009.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/009.xml new file mode 100644 index 0000000000..a79dff65fd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/009.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/010.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/010.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/010.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/011.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/011.xml new file mode 100644 index 0000000000..bf275adb2b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/011.xml @@ -0,0 +1 @@ +xyzzy \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/012.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/012.xml new file mode 100644 index 0000000000..81a251cb4b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/012.xml @@ -0,0 +1 @@ +(e5) \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/013.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/013.xml new file mode 100644 index 0000000000..524d94ee6b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/013.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/ext-sa/out/014.xml b/collects/tests/xml/clark-tests/valid/ext-sa/out/014.xml new file mode 100644 index 0000000000..71c6dc3e8e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/ext-sa/out/014.xml @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/001.ent b/collects/tests/xml/clark-tests/valid/not-sa/001.ent new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/valid/not-sa/001.xml b/collects/tests/xml/clark-tests/valid/not-sa/001.xml new file mode 100644 index 0000000000..2d6f41a137 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/001.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/002.ent b/collects/tests/xml/clark-tests/valid/not-sa/002.ent new file mode 100644 index 0000000000..67c3297611 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/002.ent @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/002.xml b/collects/tests/xml/clark-tests/valid/not-sa/002.xml new file mode 100644 index 0000000000..023fce8499 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/002.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/003-1.ent b/collects/tests/xml/clark-tests/valid/not-sa/003-1.ent new file mode 100644 index 0000000000..931f3ad6d8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/003-1.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/003-2.ent b/collects/tests/xml/clark-tests/valid/not-sa/003-2.ent new file mode 100644 index 0000000000..e69de29bb2 diff --git a/collects/tests/xml/clark-tests/valid/not-sa/003.xml b/collects/tests/xml/clark-tests/valid/not-sa/003.xml new file mode 100644 index 0000000000..63a5e8bdfc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/003.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/004-1.ent b/collects/tests/xml/clark-tests/valid/not-sa/004-1.ent new file mode 100644 index 0000000000..40f7ff58a2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/004-1.ent @@ -0,0 +1,4 @@ + + + +%e1; diff --git a/collects/tests/xml/clark-tests/valid/not-sa/004-2.ent b/collects/tests/xml/clark-tests/valid/not-sa/004-2.ent new file mode 100644 index 0000000000..61def75cb7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/004-2.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/004.xml b/collects/tests/xml/clark-tests/valid/not-sa/004.xml new file mode 100644 index 0000000000..adc9201496 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/004.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/005-1.ent b/collects/tests/xml/clark-tests/valid/not-sa/005-1.ent new file mode 100644 index 0000000000..ade9599032 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/005-1.ent @@ -0,0 +1,3 @@ + + +%e; diff --git a/collects/tests/xml/clark-tests/valid/not-sa/005-2.ent b/collects/tests/xml/clark-tests/valid/not-sa/005-2.ent new file mode 100644 index 0000000000..bef50b1f38 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/005-2.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/005.xml b/collects/tests/xml/clark-tests/valid/not-sa/005.xml new file mode 100644 index 0000000000..6bd44cfee0 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/005.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/006.ent b/collects/tests/xml/clark-tests/valid/not-sa/006.ent new file mode 100644 index 0000000000..8f305a82bd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/006.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/006.xml b/collects/tests/xml/clark-tests/valid/not-sa/006.xml new file mode 100644 index 0000000000..eb80bb7409 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/006.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/007.ent b/collects/tests/xml/clark-tests/valid/not-sa/007.ent new file mode 100644 index 0000000000..fbf4ca4947 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/007.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/007.xml b/collects/tests/xml/clark-tests/valid/not-sa/007.xml new file mode 100644 index 0000000000..38897e34ea --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/007.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/008.ent b/collects/tests/xml/clark-tests/valid/not-sa/008.ent new file mode 100644 index 0000000000..fbf4ca4947 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/008.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/008.xml b/collects/tests/xml/clark-tests/valid/not-sa/008.xml new file mode 100644 index 0000000000..bf777a7ff2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/008.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/009.ent b/collects/tests/xml/clark-tests/valid/not-sa/009.ent new file mode 100644 index 0000000000..fbf4ca4947 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/009.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/009.xml b/collects/tests/xml/clark-tests/valid/not-sa/009.xml new file mode 100644 index 0000000000..c17562fe68 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/009.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/010.ent b/collects/tests/xml/clark-tests/valid/not-sa/010.ent new file mode 100644 index 0000000000..52a28f5deb --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/010.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/010.xml b/collects/tests/xml/clark-tests/valid/not-sa/010.xml new file mode 100644 index 0000000000..2786b328f3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/010.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/011.ent b/collects/tests/xml/clark-tests/valid/not-sa/011.ent new file mode 100644 index 0000000000..fbf4ca4947 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/011.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/011.xml b/collects/tests/xml/clark-tests/valid/not-sa/011.xml new file mode 100644 index 0000000000..03b482bbb6 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/011.xml @@ -0,0 +1,5 @@ + +%e; +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/012.ent b/collects/tests/xml/clark-tests/valid/not-sa/012.ent new file mode 100644 index 0000000000..7e372e65e9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/012.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/012.xml b/collects/tests/xml/clark-tests/valid/not-sa/012.xml new file mode 100644 index 0000000000..1967edbba7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/012.xml @@ -0,0 +1,5 @@ + +%e; +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/013.ent b/collects/tests/xml/clark-tests/valid/not-sa/013.ent new file mode 100644 index 0000000000..a3691d9f08 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/013.ent @@ -0,0 +1,4 @@ + + +]]> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/013.xml b/collects/tests/xml/clark-tests/valid/not-sa/013.xml new file mode 100644 index 0000000000..cf44f2600a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/013.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/014.ent b/collects/tests/xml/clark-tests/valid/not-sa/014.ent new file mode 100644 index 0000000000..6eaf779329 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/014.ent @@ -0,0 +1,4 @@ + + +]]> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/014.xml b/collects/tests/xml/clark-tests/valid/not-sa/014.xml new file mode 100644 index 0000000000..bd08502489 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/014.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/015.ent b/collects/tests/xml/clark-tests/valid/not-sa/015.ent new file mode 100644 index 0000000000..00d2f30e1d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/015.ent @@ -0,0 +1,5 @@ + + +]]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/015.xml b/collects/tests/xml/clark-tests/valid/not-sa/015.xml new file mode 100644 index 0000000000..e04e75ffca --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/015.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/016.ent b/collects/tests/xml/clark-tests/valid/not-sa/016.ent new file mode 100644 index 0000000000..bf77ef8336 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/016.ent @@ -0,0 +1,4 @@ + + +]]> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/016.xml b/collects/tests/xml/clark-tests/valid/not-sa/016.xml new file mode 100644 index 0000000000..4ccf4af350 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/016.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/017.ent b/collects/tests/xml/clark-tests/valid/not-sa/017.ent new file mode 100644 index 0000000000..ffd9adde61 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/017.ent @@ -0,0 +1,3 @@ + +"> +%e; diff --git a/collects/tests/xml/clark-tests/valid/not-sa/017.xml b/collects/tests/xml/clark-tests/valid/not-sa/017.xml new file mode 100644 index 0000000000..7fe18f4c7a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/017.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/018.ent b/collects/tests/xml/clark-tests/valid/not-sa/018.ent new file mode 100644 index 0000000000..2d46f76fc3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/018.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/018.xml b/collects/tests/xml/clark-tests/valid/not-sa/018.xml new file mode 100644 index 0000000000..31e90f2405 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/018.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/019.ent b/collects/tests/xml/clark-tests/valid/not-sa/019.ent new file mode 100644 index 0000000000..d18201a98b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/019.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/019.xml b/collects/tests/xml/clark-tests/valid/not-sa/019.xml new file mode 100644 index 0000000000..b7a18faba0 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/019.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/020.ent b/collects/tests/xml/clark-tests/valid/not-sa/020.ent new file mode 100644 index 0000000000..815291c6d2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/020.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/020.xml b/collects/tests/xml/clark-tests/valid/not-sa/020.xml new file mode 100644 index 0000000000..d70892f7ad --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/020.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/021.ent b/collects/tests/xml/clark-tests/valid/not-sa/021.ent new file mode 100644 index 0000000000..9f8f2afd2b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/021.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/021.xml b/collects/tests/xml/clark-tests/valid/not-sa/021.xml new file mode 100644 index 0000000000..70c28730db --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/021.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/022.ent b/collects/tests/xml/clark-tests/valid/not-sa/022.ent new file mode 100644 index 0000000000..26f2d8beb2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/022.ent @@ -0,0 +1,3 @@ + + + ]]> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/022.xml b/collects/tests/xml/clark-tests/valid/not-sa/022.xml new file mode 100644 index 0000000000..b639f2551c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/022.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/023.ent b/collects/tests/xml/clark-tests/valid/not-sa/023.ent new file mode 100644 index 0000000000..e3268819f7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/023.ent @@ -0,0 +1,5 @@ + + + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/023.xml b/collects/tests/xml/clark-tests/valid/not-sa/023.xml new file mode 100644 index 0000000000..1c2484b70b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/023.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/024.ent b/collects/tests/xml/clark-tests/valid/not-sa/024.ent new file mode 100644 index 0000000000..aa6d0eccac --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/024.ent @@ -0,0 +1,4 @@ + + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/024.xml b/collects/tests/xml/clark-tests/valid/not-sa/024.xml new file mode 100644 index 0000000000..96e1ecb61b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/024.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/025.ent b/collects/tests/xml/clark-tests/valid/not-sa/025.ent new file mode 100644 index 0000000000..389d259eb1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/025.ent @@ -0,0 +1,5 @@ + + + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/025.xml b/collects/tests/xml/clark-tests/valid/not-sa/025.xml new file mode 100644 index 0000000000..8fdbc14c47 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/025.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/026.ent b/collects/tests/xml/clark-tests/valid/not-sa/026.ent new file mode 100644 index 0000000000..bdc93af639 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/026.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/026.xml b/collects/tests/xml/clark-tests/valid/not-sa/026.xml new file mode 100644 index 0000000000..7b109c0913 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/026.xml @@ -0,0 +1,7 @@ + + +%e; + +]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/027.ent b/collects/tests/xml/clark-tests/valid/not-sa/027.ent new file mode 100644 index 0000000000..712cce3700 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/027.ent @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/027.xml b/collects/tests/xml/clark-tests/valid/not-sa/027.xml new file mode 100644 index 0000000000..d0c8c7abb5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/027.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/028.ent b/collects/tests/xml/clark-tests/valid/not-sa/028.ent new file mode 100644 index 0000000000..ac249d7b2c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/028.ent @@ -0,0 +1,2 @@ + +]]> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/028.xml b/collects/tests/xml/clark-tests/valid/not-sa/028.xml new file mode 100644 index 0000000000..50e5248cbf --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/028.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/029.ent b/collects/tests/xml/clark-tests/valid/not-sa/029.ent new file mode 100644 index 0000000000..df94df5560 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/029.ent @@ -0,0 +1,3 @@ + +]]> + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/029.xml b/collects/tests/xml/clark-tests/valid/not-sa/029.xml new file mode 100644 index 0000000000..07e226c1d7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/029.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/030.ent b/collects/tests/xml/clark-tests/valid/not-sa/030.ent new file mode 100644 index 0000000000..e3864460df --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/030.ent @@ -0,0 +1,3 @@ + + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/030.xml b/collects/tests/xml/clark-tests/valid/not-sa/030.xml new file mode 100644 index 0000000000..01fc2be4ca --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/030.xml @@ -0,0 +1,2 @@ + + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/031-1.ent b/collects/tests/xml/clark-tests/valid/not-sa/031-1.ent new file mode 100644 index 0000000000..f7f94ab152 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/031-1.ent @@ -0,0 +1,3 @@ + + +"> diff --git a/collects/tests/xml/clark-tests/valid/not-sa/031-2.ent b/collects/tests/xml/clark-tests/valid/not-sa/031-2.ent new file mode 100644 index 0000000000..bef50b1f38 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/031-2.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/valid/not-sa/031.xml b/collects/tests/xml/clark-tests/valid/not-sa/031.xml new file mode 100644 index 0000000000..c3fe5fca71 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/031.xml @@ -0,0 +1,2 @@ + +&e; diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/001.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/001.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/001.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/002.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/002.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/002.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/003.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/003.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/004.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/004.xml new file mode 100644 index 0000000000..bdc39e2224 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/005.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/005.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/005.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/006.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/006.xml new file mode 100644 index 0000000000..d07627d7a3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/006.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/007.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/007.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/007.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/008.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/008.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/008.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/009.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/009.xml new file mode 100644 index 0000000000..7293fb63dc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/009.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/010.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/010.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/010.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/011.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/011.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/011.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/012.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/012.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/012.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/013.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/013.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/013.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/014.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/014.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/014.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/015.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/015.xml new file mode 100644 index 0000000000..131a32fe69 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/015.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/016.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/016.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/016.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/017.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/017.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/017.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/018.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/018.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/018.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/019.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/019.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/019.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/020.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/020.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/020.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/021.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/021.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/021.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/022.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/022.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/022.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/023.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/023.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/023.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/024.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/024.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/024.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/025.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/025.xml new file mode 100644 index 0000000000..eb3f9674e8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/025.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/026.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/026.xml new file mode 100644 index 0000000000..71c02026e4 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/026.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/027.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/027.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/027.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/028.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/028.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/028.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/029.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/029.xml new file mode 100644 index 0000000000..7ac8b2b89d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/029.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/030.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/030.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/030.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/not-sa/out/031.xml b/collects/tests/xml/clark-tests/valid/not-sa/out/031.xml new file mode 100644 index 0000000000..03a6c3f9cd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/not-sa/out/031.xml @@ -0,0 +1 @@ +<!ATTLIST doc a1 CDATA "v1"> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/001.xml b/collects/tests/xml/clark-tests/valid/sa/001.xml new file mode 100644 index 0000000000..7fbef49502 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/001.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/002.xml b/collects/tests/xml/clark-tests/valid/sa/002.xml new file mode 100644 index 0000000000..2e3f1d81dd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/002.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/003.xml b/collects/tests/xml/clark-tests/valid/sa/003.xml new file mode 100644 index 0000000000..c841b81784 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/003.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/004.xml b/collects/tests/xml/clark-tests/valid/sa/004.xml new file mode 100644 index 0000000000..a9c5756933 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/004.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/005.xml b/collects/tests/xml/clark-tests/valid/sa/005.xml new file mode 100644 index 0000000000..b069efe727 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/005.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/006.xml b/collects/tests/xml/clark-tests/valid/sa/006.xml new file mode 100644 index 0000000000..39a346342f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/006.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/007.xml b/collects/tests/xml/clark-tests/valid/sa/007.xml new file mode 100644 index 0000000000..cc3dc53166 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/007.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/008.xml b/collects/tests/xml/clark-tests/valid/sa/008.xml new file mode 100644 index 0000000000..b3370eb1cc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/008.xml @@ -0,0 +1,4 @@ + +]> +&<>"' diff --git a/collects/tests/xml/clark-tests/valid/sa/009.xml b/collects/tests/xml/clark-tests/valid/sa/009.xml new file mode 100644 index 0000000000..0fa183eccf --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/009.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/010.xml b/collects/tests/xml/clark-tests/valid/sa/010.xml new file mode 100644 index 0000000000..eb64d18590 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/010.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/011.xml b/collects/tests/xml/clark-tests/valid/sa/011.xml new file mode 100644 index 0000000000..4cac44b4e4 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/011.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/012.xml b/collects/tests/xml/clark-tests/valid/sa/012.xml new file mode 100644 index 0000000000..6ce2a3eae2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/012.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/013.xml b/collects/tests/xml/clark-tests/valid/sa/013.xml new file mode 100644 index 0000000000..2f4aae4e28 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/013.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/014.xml b/collects/tests/xml/clark-tests/valid/sa/014.xml new file mode 100644 index 0000000000..47f1f723e3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/014.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/015.xml b/collects/tests/xml/clark-tests/valid/sa/015.xml new file mode 100644 index 0000000000..861df8a610 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/015.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/016.xml b/collects/tests/xml/clark-tests/valid/sa/016.xml new file mode 100644 index 0000000000..66b1973c5d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/016.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/017.xml b/collects/tests/xml/clark-tests/valid/sa/017.xml new file mode 100644 index 0000000000..827ba963bf --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/017.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/018.xml b/collects/tests/xml/clark-tests/valid/sa/018.xml new file mode 100644 index 0000000000..4570903fee --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/018.xml @@ -0,0 +1,4 @@ + +]> +]]> diff --git a/collects/tests/xml/clark-tests/valid/sa/019.xml b/collects/tests/xml/clark-tests/valid/sa/019.xml new file mode 100644 index 0000000000..3e6b74cbf2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/019.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/020.xml b/collects/tests/xml/clark-tests/valid/sa/020.xml new file mode 100644 index 0000000000..f749551a1b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/020.xml @@ -0,0 +1,4 @@ + +]> +]]]> diff --git a/collects/tests/xml/clark-tests/valid/sa/021.xml b/collects/tests/xml/clark-tests/valid/sa/021.xml new file mode 100644 index 0000000000..13dda8c8a5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/021.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/022.xml b/collects/tests/xml/clark-tests/valid/sa/022.xml new file mode 100644 index 0000000000..41d300e950 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/022.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/023.xml b/collects/tests/xml/clark-tests/valid/sa/023.xml new file mode 100644 index 0000000000..3837b831ad --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/023.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/024.xml b/collects/tests/xml/clark-tests/valid/sa/024.xml new file mode 100644 index 0000000000..b0655c634c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/024.xml @@ -0,0 +1,6 @@ + + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/025.xml b/collects/tests/xml/clark-tests/valid/sa/025.xml new file mode 100644 index 0000000000..ed01f36d89 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/025.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/026.xml b/collects/tests/xml/clark-tests/valid/sa/026.xml new file mode 100644 index 0000000000..1ba033c1a7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/026.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/027.xml b/collects/tests/xml/clark-tests/valid/sa/027.xml new file mode 100644 index 0000000000..ee02439051 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/027.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/028.xml b/collects/tests/xml/clark-tests/valid/sa/028.xml new file mode 100644 index 0000000000..3d95747913 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/028.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/029.xml b/collects/tests/xml/clark-tests/valid/sa/029.xml new file mode 100644 index 0000000000..909f6ff712 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/029.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/030.xml b/collects/tests/xml/clark-tests/valid/sa/030.xml new file mode 100644 index 0000000000..3a7ddaa716 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/030.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/031.xml b/collects/tests/xml/clark-tests/valid/sa/031.xml new file mode 100644 index 0000000000..a58e05867f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/031.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/032.xml b/collects/tests/xml/clark-tests/valid/sa/032.xml new file mode 100644 index 0000000000..be55c8d721 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/032.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/033.xml b/collects/tests/xml/clark-tests/valid/sa/033.xml new file mode 100644 index 0000000000..a3f9053868 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/033.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/034.xml b/collects/tests/xml/clark-tests/valid/sa/034.xml new file mode 100644 index 0000000000..7d52f31c0e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/034.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/035.xml b/collects/tests/xml/clark-tests/valid/sa/035.xml new file mode 100644 index 0000000000..f109a8b782 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/035.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/036.xml b/collects/tests/xml/clark-tests/valid/sa/036.xml new file mode 100644 index 0000000000..8ab2b3fb16 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/036.xml @@ -0,0 +1,5 @@ + +]> + + diff --git a/collects/tests/xml/clark-tests/valid/sa/037.xml b/collects/tests/xml/clark-tests/valid/sa/037.xml new file mode 100644 index 0000000000..f9b2113940 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/037.xml @@ -0,0 +1,6 @@ + +]> + + + diff --git a/collects/tests/xml/clark-tests/valid/sa/038.xml b/collects/tests/xml/clark-tests/valid/sa/038.xml new file mode 100644 index 0000000000..d14f41bfe2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/038.xml @@ -0,0 +1,6 @@ + + +]> + + diff --git a/collects/tests/xml/clark-tests/valid/sa/039.xml b/collects/tests/xml/clark-tests/valid/sa/039.xml new file mode 100644 index 0000000000..0897316e46 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/039.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/040.xml b/collects/tests/xml/clark-tests/valid/sa/040.xml new file mode 100644 index 0000000000..12c419b65b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/040.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/041.xml b/collects/tests/xml/clark-tests/valid/sa/041.xml new file mode 100644 index 0000000000..a59f536277 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/041.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/042.xml b/collects/tests/xml/clark-tests/valid/sa/042.xml new file mode 100644 index 0000000000..5d7c650944 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/042.xml @@ -0,0 +1,4 @@ + +]> +A diff --git a/collects/tests/xml/clark-tests/valid/sa/043.xml b/collects/tests/xml/clark-tests/valid/sa/043.xml new file mode 100644 index 0000000000..a8095dfe28 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/043.xml @@ -0,0 +1,6 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/044.xml b/collects/tests/xml/clark-tests/valid/sa/044.xml new file mode 100644 index 0000000000..bee1d23e1a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/044.xml @@ -0,0 +1,10 @@ + + + +]> + + + + + diff --git a/collects/tests/xml/clark-tests/valid/sa/045.xml b/collects/tests/xml/clark-tests/valid/sa/045.xml new file mode 100644 index 0000000000..e2567f532d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/045.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/046.xml b/collects/tests/xml/clark-tests/valid/sa/046.xml new file mode 100644 index 0000000000..c50a2846f9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/046.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/047.xml b/collects/tests/xml/clark-tests/valid/sa/047.xml new file mode 100644 index 0000000000..a4c688cf1a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/047.xml @@ -0,0 +1,5 @@ + +]> +X +Y diff --git a/collects/tests/xml/clark-tests/valid/sa/048.xml b/collects/tests/xml/clark-tests/valid/sa/048.xml new file mode 100644 index 0000000000..c6b2dedbba --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/048.xml @@ -0,0 +1,4 @@ + +]> +] diff --git a/collects/tests/xml/clark-tests/valid/sa/049.xml b/collects/tests/xml/clark-tests/valid/sa/049.xml new file mode 100644 index 0000000000..c3cc797b59 Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/sa/049.xml differ diff --git a/collects/tests/xml/clark-tests/valid/sa/050.xml b/collects/tests/xml/clark-tests/valid/sa/050.xml new file mode 100644 index 0000000000..12303b1af2 Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/sa/050.xml differ diff --git a/collects/tests/xml/clark-tests/valid/sa/051.xml b/collects/tests/xml/clark-tests/valid/sa/051.xml new file mode 100644 index 0000000000..7ae8f6c73a Binary files /dev/null and b/collects/tests/xml/clark-tests/valid/sa/051.xml differ diff --git a/collects/tests/xml/clark-tests/valid/sa/052.xml b/collects/tests/xml/clark-tests/valid/sa/052.xml new file mode 100644 index 0000000000..3f33a4c760 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/052.xml @@ -0,0 +1,4 @@ + +]> +ð€€ô¿½ diff --git a/collects/tests/xml/clark-tests/valid/sa/053.xml b/collects/tests/xml/clark-tests/valid/sa/053.xml new file mode 100644 index 0000000000..0d88f28718 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/053.xml @@ -0,0 +1,6 @@ +"> + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/054.xml b/collects/tests/xml/clark-tests/valid/sa/054.xml new file mode 100644 index 0000000000..5d1c88b946 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/054.xml @@ -0,0 +1,10 @@ + +]> + + + + + diff --git a/collects/tests/xml/clark-tests/valid/sa/055.xml b/collects/tests/xml/clark-tests/valid/sa/055.xml new file mode 100644 index 0000000000..da0292c5bc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/055.xml @@ -0,0 +1,5 @@ + +]> + + diff --git a/collects/tests/xml/clark-tests/valid/sa/056.xml b/collects/tests/xml/clark-tests/valid/sa/056.xml new file mode 100644 index 0000000000..144871b2a3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/056.xml @@ -0,0 +1,4 @@ + +]> +A diff --git a/collects/tests/xml/clark-tests/valid/sa/057.xml b/collects/tests/xml/clark-tests/valid/sa/057.xml new file mode 100644 index 0000000000..c1ac849ed1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/057.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/058.xml b/collects/tests/xml/clark-tests/valid/sa/058.xml new file mode 100644 index 0000000000..2ff23b233f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/058.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/059.xml b/collects/tests/xml/clark-tests/valid/sa/059.xml new file mode 100644 index 0000000000..2171480ecf --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/059.xml @@ -0,0 +1,10 @@ + + + +]> + + + + + diff --git a/collects/tests/xml/clark-tests/valid/sa/060.xml b/collects/tests/xml/clark-tests/valid/sa/060.xml new file mode 100644 index 0000000000..6cd6b4386b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/060.xml @@ -0,0 +1,4 @@ + +]> +X Y diff --git a/collects/tests/xml/clark-tests/valid/sa/061.xml b/collects/tests/xml/clark-tests/valid/sa/061.xml new file mode 100644 index 0000000000..bbdc152492 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/061.xml @@ -0,0 +1,4 @@ + +]> +£ diff --git a/collects/tests/xml/clark-tests/valid/sa/062.xml b/collects/tests/xml/clark-tests/valid/sa/062.xml new file mode 100644 index 0000000000..f4ba53090a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/062.xml @@ -0,0 +1,4 @@ + +]> +เจมส์ diff --git a/collects/tests/xml/clark-tests/valid/sa/063.xml b/collects/tests/xml/clark-tests/valid/sa/063.xml new file mode 100644 index 0000000000..9668f2da73 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/063.xml @@ -0,0 +1,4 @@ + +]> +<เจมส์> diff --git a/collects/tests/xml/clark-tests/valid/sa/064.xml b/collects/tests/xml/clark-tests/valid/sa/064.xml new file mode 100644 index 0000000000..74a97aa431 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/064.xml @@ -0,0 +1,4 @@ + +]> +𐀀􏿽 diff --git a/collects/tests/xml/clark-tests/valid/sa/065.xml b/collects/tests/xml/clark-tests/valid/sa/065.xml new file mode 100644 index 0000000000..f708f2bc17 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/065.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/066.xml b/collects/tests/xml/clark-tests/valid/sa/066.xml new file mode 100644 index 0000000000..a27340b9a7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/066.xml @@ -0,0 +1,7 @@ + + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/067.xml b/collects/tests/xml/clark-tests/valid/sa/067.xml new file mode 100644 index 0000000000..a0ccf772a5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/067.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/068.xml b/collects/tests/xml/clark-tests/valid/sa/068.xml new file mode 100644 index 0000000000..8ed806b9a3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/068.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/069.xml b/collects/tests/xml/clark-tests/valid/sa/069.xml new file mode 100644 index 0000000000..2437f60530 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/069.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/070.xml b/collects/tests/xml/clark-tests/valid/sa/070.xml new file mode 100644 index 0000000000..eef097df76 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/070.xml @@ -0,0 +1,5 @@ +"> +%e; +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/071.xml b/collects/tests/xml/clark-tests/valid/sa/071.xml new file mode 100644 index 0000000000..ebfba230a4 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/071.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/072.xml b/collects/tests/xml/clark-tests/valid/sa/072.xml new file mode 100644 index 0000000000..6ef39dc49e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/072.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/073.xml b/collects/tests/xml/clark-tests/valid/sa/073.xml new file mode 100644 index 0000000000..217476d9a9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/073.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/074.xml b/collects/tests/xml/clark-tests/valid/sa/074.xml new file mode 100644 index 0000000000..8b2354ff73 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/074.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/075.xml b/collects/tests/xml/clark-tests/valid/sa/075.xml new file mode 100644 index 0000000000..33c012441a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/075.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/076.xml b/collects/tests/xml/clark-tests/valid/sa/076.xml new file mode 100644 index 0000000000..65b731cf6d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/076.xml @@ -0,0 +1,7 @@ + + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/077.xml b/collects/tests/xml/clark-tests/valid/sa/077.xml new file mode 100644 index 0000000000..e5f301eac8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/077.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/078.xml b/collects/tests/xml/clark-tests/valid/sa/078.xml new file mode 100644 index 0000000000..b31f40f94e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/078.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/079.xml b/collects/tests/xml/clark-tests/valid/sa/079.xml new file mode 100644 index 0000000000..a3290d6cbb --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/079.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/080.xml b/collects/tests/xml/clark-tests/valid/sa/080.xml new file mode 100644 index 0000000000..3208fa9aa5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/080.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/081.xml b/collects/tests/xml/clark-tests/valid/sa/081.xml new file mode 100644 index 0000000000..51ee1a375c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/081.xml @@ -0,0 +1,7 @@ + + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/082.xml b/collects/tests/xml/clark-tests/valid/sa/082.xml new file mode 100644 index 0000000000..d5245ac51a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/082.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/083.xml b/collects/tests/xml/clark-tests/valid/sa/083.xml new file mode 100644 index 0000000000..937cfc0bdd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/083.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/084.xml b/collects/tests/xml/clark-tests/valid/sa/084.xml new file mode 100644 index 0000000000..82760767aa --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/084.xml @@ -0,0 +1 @@ +]> diff --git a/collects/tests/xml/clark-tests/valid/sa/085.xml b/collects/tests/xml/clark-tests/valid/sa/085.xml new file mode 100644 index 0000000000..cf5834f2a5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/085.xml @@ -0,0 +1,6 @@ + +"> + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/086.xml b/collects/tests/xml/clark-tests/valid/sa/086.xml new file mode 100644 index 0000000000..bbc3080db6 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/086.xml @@ -0,0 +1,6 @@ + + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/087.xml b/collects/tests/xml/clark-tests/valid/sa/087.xml new file mode 100644 index 0000000000..34797a67d7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/087.xml @@ -0,0 +1,6 @@ + + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/088.xml b/collects/tests/xml/clark-tests/valid/sa/088.xml new file mode 100644 index 0000000000..f97d96848d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/088.xml @@ -0,0 +1,5 @@ + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/089.xml b/collects/tests/xml/clark-tests/valid/sa/089.xml new file mode 100644 index 0000000000..2d80c8f3fb --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/089.xml @@ -0,0 +1,5 @@ + + +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/090.xml b/collects/tests/xml/clark-tests/valid/sa/090.xml new file mode 100644 index 0000000000..c392c96084 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/090.xml @@ -0,0 +1,7 @@ + + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/091.xml b/collects/tests/xml/clark-tests/valid/sa/091.xml new file mode 100644 index 0000000000..7343d0f795 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/091.xml @@ -0,0 +1,7 @@ + + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/092.xml b/collects/tests/xml/clark-tests/valid/sa/092.xml new file mode 100644 index 0000000000..627b74ecdf --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/092.xml @@ -0,0 +1,10 @@ + + +]> + + + + + + diff --git a/collects/tests/xml/clark-tests/valid/sa/093.xml b/collects/tests/xml/clark-tests/valid/sa/093.xml new file mode 100644 index 0000000000..968acb628f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/093.xml @@ -0,0 +1,5 @@ + +]> + + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/094.xml b/collects/tests/xml/clark-tests/valid/sa/094.xml new file mode 100644 index 0000000000..5726e7db6f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/094.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/095.xml b/collects/tests/xml/clark-tests/valid/sa/095.xml new file mode 100644 index 0000000000..1fe69596da --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/095.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/096.xml b/collects/tests/xml/clark-tests/valid/sa/096.xml new file mode 100644 index 0000000000..a6f8f43620 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/096.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/097.ent b/collects/tests/xml/clark-tests/valid/sa/097.ent new file mode 100644 index 0000000000..e06554ace2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/097.ent @@ -0,0 +1 @@ + diff --git a/collects/tests/xml/clark-tests/valid/sa/097.xml b/collects/tests/xml/clark-tests/valid/sa/097.xml new file mode 100644 index 0000000000..c606afa97f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/097.xml @@ -0,0 +1,8 @@ + + + +%e; + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/098.xml b/collects/tests/xml/clark-tests/valid/sa/098.xml new file mode 100644 index 0000000000..33a64ce5ae --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/098.xml @@ -0,0 +1,5 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/099.xml b/collects/tests/xml/clark-tests/valid/sa/099.xml new file mode 100644 index 0000000000..1b7214a137 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/099.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/100.xml b/collects/tests/xml/clark-tests/valid/sa/100.xml new file mode 100644 index 0000000000..5b839e76bc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/100.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/101.xml b/collects/tests/xml/clark-tests/valid/sa/101.xml new file mode 100644 index 0000000000..f464484bf5 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/101.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/102.xml b/collects/tests/xml/clark-tests/valid/sa/102.xml new file mode 100644 index 0000000000..f239ff5fee --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/102.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/103.xml b/collects/tests/xml/clark-tests/valid/sa/103.xml new file mode 100644 index 0000000000..1dbbd5bb7c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/103.xml @@ -0,0 +1,4 @@ + +]> +<doc> diff --git a/collects/tests/xml/clark-tests/valid/sa/104.xml b/collects/tests/xml/clark-tests/valid/sa/104.xml new file mode 100644 index 0000000000..666f43de0f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/104.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/105.xml b/collects/tests/xml/clark-tests/valid/sa/105.xml new file mode 100644 index 0000000000..6b3af2b847 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/105.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/106.xml b/collects/tests/xml/clark-tests/valid/sa/106.xml new file mode 100644 index 0000000000..8757c0a5ae --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/106.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/107.xml b/collects/tests/xml/clark-tests/valid/sa/107.xml new file mode 100644 index 0000000000..3d2c2566a7 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/107.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/108.xml b/collects/tests/xml/clark-tests/valid/sa/108.xml new file mode 100644 index 0000000000..e919bf229a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/108.xml @@ -0,0 +1,7 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/109.xml b/collects/tests/xml/clark-tests/valid/sa/109.xml new file mode 100644 index 0000000000..33fa38e13b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/109.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/110.xml b/collects/tests/xml/clark-tests/valid/sa/110.xml new file mode 100644 index 0000000000..0c61c65119 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/110.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/111.xml b/collects/tests/xml/clark-tests/valid/sa/111.xml new file mode 100644 index 0000000000..cb56f264b0 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/111.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/112.xml b/collects/tests/xml/clark-tests/valid/sa/112.xml new file mode 100644 index 0000000000..27b6a4c793 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/112.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/113.xml b/collects/tests/xml/clark-tests/valid/sa/113.xml new file mode 100644 index 0000000000..d2edd0f01d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/113.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/114.xml b/collects/tests/xml/clark-tests/valid/sa/114.xml new file mode 100644 index 0000000000..52e207096d --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/114.xml @@ -0,0 +1,5 @@ + +"> +]> +&e; diff --git a/collects/tests/xml/clark-tests/valid/sa/115.xml b/collects/tests/xml/clark-tests/valid/sa/115.xml new file mode 100644 index 0000000000..d939a67010 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/115.xml @@ -0,0 +1,6 @@ + + + +]> +&e1; diff --git a/collects/tests/xml/clark-tests/valid/sa/116.xml b/collects/tests/xml/clark-tests/valid/sa/116.xml new file mode 100644 index 0000000000..55ab49620b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/116.xml @@ -0,0 +1,5 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/117.xml b/collects/tests/xml/clark-tests/valid/sa/117.xml new file mode 100644 index 0000000000..e4f02b14c8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/117.xml @@ -0,0 +1,5 @@ + + +]> +] diff --git a/collects/tests/xml/clark-tests/valid/sa/118.xml b/collects/tests/xml/clark-tests/valid/sa/118.xml new file mode 100644 index 0000000000..fba6c44668 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/118.xml @@ -0,0 +1,5 @@ + + +]> +] diff --git a/collects/tests/xml/clark-tests/valid/sa/119.xml b/collects/tests/xml/clark-tests/valid/sa/119.xml new file mode 100644 index 0000000000..876e74730c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/119.xml @@ -0,0 +1,4 @@ + +]> + diff --git a/collects/tests/xml/clark-tests/valid/sa/out/001.xml b/collects/tests/xml/clark-tests/valid/sa/out/001.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/001.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/002.xml b/collects/tests/xml/clark-tests/valid/sa/out/002.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/002.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/003.xml b/collects/tests/xml/clark-tests/valid/sa/out/003.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/003.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/004.xml b/collects/tests/xml/clark-tests/valid/sa/out/004.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/004.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/005.xml b/collects/tests/xml/clark-tests/valid/sa/out/005.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/005.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/006.xml b/collects/tests/xml/clark-tests/valid/sa/out/006.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/006.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/007.xml b/collects/tests/xml/clark-tests/valid/sa/out/007.xml new file mode 100644 index 0000000000..97cf3e3b86 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/007.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/008.xml b/collects/tests/xml/clark-tests/valid/sa/out/008.xml new file mode 100644 index 0000000000..3ea232c21a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/008.xml @@ -0,0 +1 @@ +&<>"' \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/009.xml b/collects/tests/xml/clark-tests/valid/sa/out/009.xml new file mode 100644 index 0000000000..97cf3e3b86 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/009.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/010.xml b/collects/tests/xml/clark-tests/valid/sa/out/010.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/010.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/011.xml b/collects/tests/xml/clark-tests/valid/sa/out/011.xml new file mode 100644 index 0000000000..7293fb63dc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/011.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/012.xml b/collects/tests/xml/clark-tests/valid/sa/out/012.xml new file mode 100644 index 0000000000..5a0c9831ae --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/012.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/013.xml b/collects/tests/xml/clark-tests/valid/sa/out/013.xml new file mode 100644 index 0000000000..c9c7ec5da8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/013.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/014.xml b/collects/tests/xml/clark-tests/valid/sa/out/014.xml new file mode 100644 index 0000000000..ac6b28f97a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/014.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/015.xml b/collects/tests/xml/clark-tests/valid/sa/out/015.xml new file mode 100644 index 0000000000..8e216eb99b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/015.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/016.xml b/collects/tests/xml/clark-tests/valid/sa/out/016.xml new file mode 100644 index 0000000000..4fc76928b2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/016.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/017.xml b/collects/tests/xml/clark-tests/valid/sa/out/017.xml new file mode 100644 index 0000000000..3b9a2f8d4e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/017.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/018.xml b/collects/tests/xml/clark-tests/valid/sa/out/018.xml new file mode 100644 index 0000000000..a5471011df --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/018.xml @@ -0,0 +1 @@ +<foo> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/019.xml b/collects/tests/xml/clark-tests/valid/sa/out/019.xml new file mode 100644 index 0000000000..05d4e2fcf9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/019.xml @@ -0,0 +1 @@ +<& \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/020.xml b/collects/tests/xml/clark-tests/valid/sa/out/020.xml new file mode 100644 index 0000000000..95ae08a12e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/020.xml @@ -0,0 +1 @@ +<&]>] \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/021.xml b/collects/tests/xml/clark-tests/valid/sa/out/021.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/021.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/022.xml b/collects/tests/xml/clark-tests/valid/sa/out/022.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/022.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/023.xml b/collects/tests/xml/clark-tests/valid/sa/out/023.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/023.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/024.xml b/collects/tests/xml/clark-tests/valid/sa/out/024.xml new file mode 100644 index 0000000000..a9aa2074ff --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/024.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/025.xml b/collects/tests/xml/clark-tests/valid/sa/out/025.xml new file mode 100644 index 0000000000..de0f566020 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/025.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/026.xml b/collects/tests/xml/clark-tests/valid/sa/out/026.xml new file mode 100644 index 0000000000..de0f566020 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/026.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/027.xml b/collects/tests/xml/clark-tests/valid/sa/out/027.xml new file mode 100644 index 0000000000..de0f566020 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/027.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/028.xml b/collects/tests/xml/clark-tests/valid/sa/out/028.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/028.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/029.xml b/collects/tests/xml/clark-tests/valid/sa/out/029.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/029.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/030.xml b/collects/tests/xml/clark-tests/valid/sa/out/030.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/030.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/031.xml b/collects/tests/xml/clark-tests/valid/sa/out/031.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/031.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/032.xml b/collects/tests/xml/clark-tests/valid/sa/out/032.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/032.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/033.xml b/collects/tests/xml/clark-tests/valid/sa/out/033.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/033.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/034.xml b/collects/tests/xml/clark-tests/valid/sa/out/034.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/034.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/035.xml b/collects/tests/xml/clark-tests/valid/sa/out/035.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/035.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/036.xml b/collects/tests/xml/clark-tests/valid/sa/out/036.xml new file mode 100644 index 0000000000..2bcfb06cf1 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/036.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/037.xml b/collects/tests/xml/clark-tests/valid/sa/out/037.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/037.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/038.xml b/collects/tests/xml/clark-tests/valid/sa/out/038.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/038.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/039.xml b/collects/tests/xml/clark-tests/valid/sa/out/039.xml new file mode 100644 index 0000000000..82d117d492 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/039.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/040.xml b/collects/tests/xml/clark-tests/valid/sa/out/040.xml new file mode 100644 index 0000000000..d79cfe1493 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/040.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/041.xml b/collects/tests/xml/clark-tests/valid/sa/out/041.xml new file mode 100644 index 0000000000..6f2cd5832e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/041.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/042.xml b/collects/tests/xml/clark-tests/valid/sa/out/042.xml new file mode 100644 index 0000000000..f683039a80 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/042.xml @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/043.xml b/collects/tests/xml/clark-tests/valid/sa/out/043.xml new file mode 100644 index 0000000000..e162b76504 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/043.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/044.xml b/collects/tests/xml/clark-tests/valid/sa/out/044.xml new file mode 100644 index 0000000000..78028b704b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/044.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/045.xml b/collects/tests/xml/clark-tests/valid/sa/out/045.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/045.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/046.xml b/collects/tests/xml/clark-tests/valid/sa/out/046.xml new file mode 100644 index 0000000000..7293fb63dc --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/046.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/047.xml b/collects/tests/xml/clark-tests/valid/sa/out/047.xml new file mode 100644 index 0000000000..b327ebd67f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/047.xml @@ -0,0 +1 @@ +X Y \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/048.xml b/collects/tests/xml/clark-tests/valid/sa/out/048.xml new file mode 100644 index 0000000000..ced7d02719 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/048.xml @@ -0,0 +1 @@ +] \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/049.xml b/collects/tests/xml/clark-tests/valid/sa/out/049.xml new file mode 100644 index 0000000000..7cc53f9ea0 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/049.xml @@ -0,0 +1 @@ +£ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/050.xml b/collects/tests/xml/clark-tests/valid/sa/out/050.xml new file mode 100644 index 0000000000..33703c7925 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/050.xml @@ -0,0 +1 @@ +เจมส์ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/051.xml b/collects/tests/xml/clark-tests/valid/sa/out/051.xml new file mode 100644 index 0000000000..cfeb5a5366 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/051.xml @@ -0,0 +1 @@ +<เจมส์> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/052.xml b/collects/tests/xml/clark-tests/valid/sa/out/052.xml new file mode 100644 index 0000000000..f5a0484791 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/052.xml @@ -0,0 +1 @@ +ð€€ô¿½ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/053.xml b/collects/tests/xml/clark-tests/valid/sa/out/053.xml new file mode 100644 index 0000000000..c4083843d9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/053.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/054.xml b/collects/tests/xml/clark-tests/valid/sa/out/054.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/054.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/055.xml b/collects/tests/xml/clark-tests/valid/sa/out/055.xml new file mode 100644 index 0000000000..82d117d492 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/055.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/056.xml b/collects/tests/xml/clark-tests/valid/sa/out/056.xml new file mode 100644 index 0000000000..f683039a80 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/056.xml @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/057.xml b/collects/tests/xml/clark-tests/valid/sa/out/057.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/057.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/058.xml b/collects/tests/xml/clark-tests/valid/sa/out/058.xml new file mode 100644 index 0000000000..f898cc8c98 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/058.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/059.xml b/collects/tests/xml/clark-tests/valid/sa/out/059.xml new file mode 100644 index 0000000000..78028b704b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/059.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/060.xml b/collects/tests/xml/clark-tests/valid/sa/out/060.xml new file mode 100644 index 0000000000..b327ebd67f --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/060.xml @@ -0,0 +1 @@ +X Y \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/061.xml b/collects/tests/xml/clark-tests/valid/sa/out/061.xml new file mode 100644 index 0000000000..7cc53f9ea0 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/061.xml @@ -0,0 +1 @@ +£ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/062.xml b/collects/tests/xml/clark-tests/valid/sa/out/062.xml new file mode 100644 index 0000000000..33703c7925 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/062.xml @@ -0,0 +1 @@ +เจมส์ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/063.xml b/collects/tests/xml/clark-tests/valid/sa/out/063.xml new file mode 100644 index 0000000000..cfeb5a5366 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/063.xml @@ -0,0 +1 @@ +<เจมส์> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/064.xml b/collects/tests/xml/clark-tests/valid/sa/out/064.xml new file mode 100644 index 0000000000..f5a0484791 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/064.xml @@ -0,0 +1 @@ +ð€€ô¿½ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/065.xml b/collects/tests/xml/clark-tests/valid/sa/out/065.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/065.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/066.xml b/collects/tests/xml/clark-tests/valid/sa/out/066.xml new file mode 100644 index 0000000000..7597d31bf9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/066.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/067.xml b/collects/tests/xml/clark-tests/valid/sa/out/067.xml new file mode 100644 index 0000000000..4bbdad45ed --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/067.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/068.xml b/collects/tests/xml/clark-tests/valid/sa/out/068.xml new file mode 100644 index 0000000000..4bbdad45ed --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/068.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/069.xml b/collects/tests/xml/clark-tests/valid/sa/out/069.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/069.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/070.xml b/collects/tests/xml/clark-tests/valid/sa/out/070.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/070.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/071.xml b/collects/tests/xml/clark-tests/valid/sa/out/071.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/071.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/072.xml b/collects/tests/xml/clark-tests/valid/sa/out/072.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/072.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/073.xml b/collects/tests/xml/clark-tests/valid/sa/out/073.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/073.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/074.xml b/collects/tests/xml/clark-tests/valid/sa/out/074.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/074.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/075.xml b/collects/tests/xml/clark-tests/valid/sa/out/075.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/075.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/076.xml b/collects/tests/xml/clark-tests/valid/sa/out/076.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/076.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/077.xml b/collects/tests/xml/clark-tests/valid/sa/out/077.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/077.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/078.xml b/collects/tests/xml/clark-tests/valid/sa/out/078.xml new file mode 100644 index 0000000000..fcab0cd7ff --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/078.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/079.xml b/collects/tests/xml/clark-tests/valid/sa/out/079.xml new file mode 100644 index 0000000000..fcab0cd7ff --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/079.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/080.xml b/collects/tests/xml/clark-tests/valid/sa/out/080.xml new file mode 100644 index 0000000000..fcab0cd7ff --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/080.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/081.xml b/collects/tests/xml/clark-tests/valid/sa/out/081.xml new file mode 100644 index 0000000000..e356e7e4db --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/081.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/082.xml b/collects/tests/xml/clark-tests/valid/sa/out/082.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/082.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/083.xml b/collects/tests/xml/clark-tests/valid/sa/out/083.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/083.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/084.xml b/collects/tests/xml/clark-tests/valid/sa/out/084.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/084.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/085.xml b/collects/tests/xml/clark-tests/valid/sa/out/085.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/085.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/086.xml b/collects/tests/xml/clark-tests/valid/sa/out/086.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/086.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/087.xml b/collects/tests/xml/clark-tests/valid/sa/out/087.xml new file mode 100644 index 0000000000..a9aa2074ff --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/087.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/088.xml b/collects/tests/xml/clark-tests/valid/sa/out/088.xml new file mode 100644 index 0000000000..a5471011df --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/088.xml @@ -0,0 +1 @@ +<foo> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/089.xml b/collects/tests/xml/clark-tests/valid/sa/out/089.xml new file mode 100644 index 0000000000..e01d86e8d3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/089.xml @@ -0,0 +1 @@ +ð€€ô¿½ô¿¿ \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/090.xml b/collects/tests/xml/clark-tests/valid/sa/out/090.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/090.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/091.xml b/collects/tests/xml/clark-tests/valid/sa/out/091.xml new file mode 100644 index 0000000000..dd3bbedf74 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/091.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/092.xml b/collects/tests/xml/clark-tests/valid/sa/out/092.xml new file mode 100644 index 0000000000..87269f79d9 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/092.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/093.xml b/collects/tests/xml/clark-tests/valid/sa/out/093.xml new file mode 100644 index 0000000000..631bfde91e --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/093.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/094.xml b/collects/tests/xml/clark-tests/valid/sa/out/094.xml new file mode 100644 index 0000000000..636ab4729a --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/094.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/095.xml b/collects/tests/xml/clark-tests/valid/sa/out/095.xml new file mode 100644 index 0000000000..a20706ee01 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/095.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/096.xml b/collects/tests/xml/clark-tests/valid/sa/out/096.xml new file mode 100644 index 0000000000..f898cc8c98 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/096.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/097.xml b/collects/tests/xml/clark-tests/valid/sa/out/097.xml new file mode 100644 index 0000000000..e05cfe6c31 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/097.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/098.xml b/collects/tests/xml/clark-tests/valid/sa/out/098.xml new file mode 100644 index 0000000000..f6408de9b8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/098.xml @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/099.xml b/collects/tests/xml/clark-tests/valid/sa/out/099.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/099.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/100.xml b/collects/tests/xml/clark-tests/valid/sa/out/100.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/100.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/101.xml b/collects/tests/xml/clark-tests/valid/sa/out/101.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/101.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/102.xml b/collects/tests/xml/clark-tests/valid/sa/out/102.xml new file mode 100644 index 0000000000..6e66b8da21 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/102.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/103.xml b/collects/tests/xml/clark-tests/valid/sa/out/103.xml new file mode 100644 index 0000000000..96495d45c3 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/103.xml @@ -0,0 +1 @@ +<doc> \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/104.xml b/collects/tests/xml/clark-tests/valid/sa/out/104.xml new file mode 100644 index 0000000000..cc3def3336 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/104.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/105.xml b/collects/tests/xml/clark-tests/valid/sa/out/105.xml new file mode 100644 index 0000000000..5aed3d613b --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/105.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/106.xml b/collects/tests/xml/clark-tests/valid/sa/out/106.xml new file mode 100644 index 0000000000..1197d2ff9c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/106.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/107.xml b/collects/tests/xml/clark-tests/valid/sa/out/107.xml new file mode 100644 index 0000000000..288f23cdf2 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/107.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/108.xml b/collects/tests/xml/clark-tests/valid/sa/out/108.xml new file mode 100644 index 0000000000..cc3def3336 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/108.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/109.xml b/collects/tests/xml/clark-tests/valid/sa/out/109.xml new file mode 100644 index 0000000000..c43bdf9b9c --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/109.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/110.xml b/collects/tests/xml/clark-tests/valid/sa/out/110.xml new file mode 100644 index 0000000000..a92237b4ec --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/110.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/111.xml b/collects/tests/xml/clark-tests/valid/sa/out/111.xml new file mode 100644 index 0000000000..cc3def3336 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/111.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/112.xml b/collects/tests/xml/clark-tests/valid/sa/out/112.xml new file mode 100644 index 0000000000..c82f47bca8 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/112.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/113.xml b/collects/tests/xml/clark-tests/valid/sa/out/113.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/113.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/114.xml b/collects/tests/xml/clark-tests/valid/sa/out/114.xml new file mode 100644 index 0000000000..8e0722abad --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/114.xml @@ -0,0 +1 @@ +&foo; \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/115.xml b/collects/tests/xml/clark-tests/valid/sa/out/115.xml new file mode 100644 index 0000000000..682b8140ec --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/115.xml @@ -0,0 +1 @@ +v \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/116.xml b/collects/tests/xml/clark-tests/valid/sa/out/116.xml new file mode 100644 index 0000000000..a79dff65fd --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/116.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/117.xml b/collects/tests/xml/clark-tests/valid/sa/out/117.xml new file mode 100644 index 0000000000..ced7d02719 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/117.xml @@ -0,0 +1 @@ +] \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/118.xml b/collects/tests/xml/clark-tests/valid/sa/out/118.xml new file mode 100644 index 0000000000..31e37a9398 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/118.xml @@ -0,0 +1 @@ +]] \ No newline at end of file diff --git a/collects/tests/xml/clark-tests/valid/sa/out/119.xml b/collects/tests/xml/clark-tests/valid/sa/out/119.xml new file mode 100644 index 0000000000..7e8f183484 --- /dev/null +++ b/collects/tests/xml/clark-tests/valid/sa/out/119.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collects/tests/xml/test-clark.ss b/collects/tests/xml/test-clark.ss new file mode 100644 index 0000000000..eeffd6ab2a --- /dev/null +++ b/collects/tests/xml/test-clark.ss @@ -0,0 +1,90 @@ +#lang scheme +(require (planet schematics/schemeunit:3) + (planet schematics/schemeunit:3/base) + (planet schematics/schemeunit:3/test-case) + (planet schematics/schemeunit:3/check) + (planet schematics/schemeunit:3/test-suite) + (planet schematics/schemeunit:3/text-ui) + xml + scheme/runtime-path) + +(define (validate-xml? xml) + (error 'validate-xml? "Not implemented")) +(define (well-formed-xml? xml) + (error 'well-formed-xml? "Not implemented")) + +(define (read-xml/file f) + (with-input-from-file f + (lambda () (read-xml)))) +(define (dir->test-suite d name path->test-case) + (make-schemeunit-test-suite + name + (parameterize + ([current-test-case-around test-suite-test-case-around] + [current-check-around test-suite-check-around]) + (map (lambda (p) + (path->test-case (build-path d p))) + (filter (lambda (p) + (define ext (filename-extension p)) + (and ext (bytes=? #"xml" ext))) + (directory-list d)))) + void + void)) + +(define (not-wf-dir->test-suite d) + (define (path->test-case f) + (test-not-false + (path->string f) + (with-handlers ([exn:xml? (lambda _ #t)]) + (not (well-formed-xml? (read-xml/file f)))))) + (test-suite + "Not Well-Formed" + (dir->test-suite + (build-path d "sa") "Stand-alone" + path->test-case) + (dir->test-suite + (build-path d "ext-sa") "External Stand-alone" + path->test-case) + (dir->test-suite + (build-path d "not-sa") "Not Stand-alone" + path->test-case))) +(define (invalid-dir->test-suite d) + (dir->test-suite + d "Invalid" + (lambda (f) + (test-false (path->string f) + (validate-xml? (read-xml/file f)))))) +; XXX also check canonical xml +(define (valid-dir->test-suite d) + (define (path->test-case f) + (test-not-false (path->string f) + (validate-xml? (read-xml/file f)))) + (test-suite + "Valid" + (dir->test-suite + (build-path d "sa") "Stand-alone" + path->test-case) + (dir->test-suite + (build-path d "ext-sa") "External Stand-alone" + path->test-case) + (dir->test-suite + (build-path d "not-sa") "Not Stand-alone" + path->test-case))) + +(define (directory->test-suite d) + (test-suite + "James Clark's XML Test Cases" + + (not-wf-dir->test-suite (build-path d "not-wf")) + (invalid-dir->test-suite (build-path d "invalid")) + (valid-dir->test-suite (build-path d "valid")))) + +(define-runtime-path + clark-tests-dir + (list 'lib "xml/clark-tests" "tests")) + +(define clark-tests + (directory->test-suite + clark-tests-dir)) + +(run-tests clark-tests) \ No newline at end of file diff --git a/collects/tests/xml/test.ss b/collects/tests/xml/test.ss index 434c2106d1..6fd84aadf1 100644 --- a/collects/tests/xml/test.ss +++ b/collects/tests/xml/test.ss @@ -3,6 +3,7 @@ (planet schematics/schemeunit:3/text-ui) xml xml/plist + mzlib/etc "to-list.ss") ;; test-bad-read-input : format-str str -> void @@ -30,7 +31,7 @@ (define test-syntax:read-xml/element/exn (mk-test-read-xml/exn syntax:read-xml/element)) (define (test-syntax:read-xml/element str xml) - (test-equal? str (syntax->datum (read-xml/element (open-input-string str))) xml)) + (test-equal? str (syntax->datum (syntax:read-xml/element (open-input-string str))) xml)) (define (test-write-xml str) (test-equal? str (with-output-to-string (lambda () (write-xml (read-xml (open-input-string str))))) str)) @@ -51,6 +52,57 @@ (test-suite "XML" + (test-suite + "Legacy tests" + + (test-suite + "DOCTYPE" + + (let () + (define source-string #< + +END + ) + + (define source-document + (read-xml (open-input-string source-string))) + (define result-string + (with-output-to-string (lambda () (write-xml source-document)))) + (define expected-string #< +END + ) + (test-equal? + "DOCTYPE dropping" result-string expected-string))) + + (local + [(define a-pi (make-p-i #f #f "foo" "bar")) + (define a-p (make-prolog empty #f empty)) + (define a-p/pi (make-prolog (list a-pi) #f (list))) + (define a-d0 + (make-document a-p (make-element #f #f 'html empty empty) + empty)) + (define a-d1 + (make-document a-p (make-element #f #f 'html empty empty) + (list a-pi))) + (define a-d2 + (make-document a-p/pi (make-element #f #f 'html empty empty) + (list a-pi)))] + (test-suite + "PIs" + (test-equal? "Display XML w/o pis" + (with-output-to-string (lambda () (display-xml a-d0))) + "\n") + (test-equal? "Display XML w/ pi in doc-misc" + (with-output-to-string (lambda () (display-xml a-d1))) + "\n\n") + (test-equal? "Display XML w/ pi in doc-misc and prolog" + (with-output-to-string (lambda () (display-xml a-d2))) + "\n\n\n")))) + (test-suite "Datatypes" (test-suite @@ -69,12 +121,12 @@ (test-not-false "xexpr/c" (contract? xexpr/c)) - (test-not-false "document" (document? (make-document (make-prolog empty #f) (make-element #f #f 'br empty empty) empty))) + (test-not-false "document" (document? (make-document (make-prolog empty #f empty) (make-element #f #f 'br empty empty) empty))) - (test-not-false "prolog" (prolog? (make-prolog empty #f))) + (test-not-false "prolog" (prolog? (make-prolog empty #f empty))) (let ([c1 (make-comment "c1")] [c2 (make-comment "c2")]) - (test-equal? "prolog" (prolog-misc2 (make-prolog empty #f c1 c2)) + (test-equal? "prolog" (prolog-misc2 (make-prolog empty #f (list c1 c2))) (list c1 c2))) (test-not-false "document-type" (document-type? (make-document-type 'name (make-external-dtd "string") #f))) @@ -138,7 +190,7 @@ (test-read-xml "hi there!" '(make-document - (make-prolog (list) #f) + (make-prolog (list) #f (list)) (make-element (make-source (make-location 1 0 1) (make-location 1 33 34)) 'doc @@ -155,7 +207,7 @@ (test-read-xml "inner" '(make-document - (make-prolog (list) #f) + (make-prolog (list) #f (list)) (make-element (make-source (make-location 1 0 1) (make-location 1 21 22)) 'a @@ -166,7 +218,7 @@ (test-read-xml " " '(make-document - (make-prolog (list) #f) + (make-prolog (list) #f (list)) (make-element (make-source (make-location 1 0 1) (make-location 1 19 20)) 'root @@ -177,7 +229,7 @@ (test-read-xml "(" '(make-document - (make-prolog (list) #f) + (make-prolog (list) #f (list)) (make-element (make-source (make-location 1 0 1) (make-location 1 18 19)) 'root @@ -188,7 +240,7 @@ (test-read-xml "
" '(make-document - (make-prolog (list) #f) + (make-prolog (list) #f (list)) (make-element (make-source (make-location 1 16 17) (make-location 1 22 23)) 'br (list) (list)) (list))) @@ -303,9 +355,9 @@ "(" '(root () 40)) - (test-syntax:read-xml/exn + (test-syntax:read-xml "
" - "read-xml: parse-error: expected root element - received #f") + '(br ())) ; XXX need more syntax:read-xml tests @@ -352,7 +404,7 @@ (test-syntax:read-xml/element/exn "
" - "read-xml: parse-error: expected root element - received #f") + "read-xml: parse-error: expected root element - received #") ; XXX need more syntax:read-xml/element tests @@ -399,60 +451,210 @@ ) ) - (test-suite - "XML and X-expression Conversions" - - ; XXX permissive? - - ; XXX xml->xexpr - - ; XXX xexpr->string - - ; XXX eliminate-whitespace - - ; XXX validate-xexpr - - ; XXX correct-xexpr? - - ) + (local + [(define (test-xml->xexpr str xe) + (test-equal? str (xml->xexpr (document-element (read-xml (open-input-string str)))) xe)) + (define (test-xexpr->string xe str) + (test-equal? (format "~S" xe) (xexpr->string xe) str))] + (test-suite + "XML and X-expression Conversions" + + (test-suite + "xml->xexpr" + (test-xml->xexpr + "hi there!" + '(doc () (bold () "hi") " there!")) + + (test-xml->xexpr + "inner" + '(a ([href "#"]) "inner")) + + (test-xml->xexpr + " " + '(root () nbsp)) + + (test-xml->xexpr + "(" + '(root () 40)) + + ; XXX more xml->xexpr tests + ) + + (test-suite + "xexpr->string" + (test-xexpr->string '(doc () (bold () "hi") " there!") + "hi there!") + (test-xexpr->string '(a ([href "#"]) "inner") + "inner") + (test-xexpr->string '(root () nbsp) + " ") + (test-xexpr->string '(root () 40) + "(") + ; XXX more xexpr->string tests + ) + + (local + [(define (test-eliminate-whitespace tags choose str res) + (test-equal? (format "~S" (list tags choose str)) + (with-output-to-string + (lambda () + (write-xml/content ((eliminate-whitespace tags choose) (read-xml/element (open-input-string str)))))) + res)) + (define (test-eliminate-whitespace/exn tags choose str msg) + (test-exn (format "~S" (list tags choose str)) + (lambda (x) + (and (exn? x) + (regexp-match (regexp-quote msg) (exn-message x)))) + (lambda () + (with-output-to-string + (lambda () + (write-xml/content ((eliminate-whitespace tags choose) (read-xml/element (open-input-string str))))))))) + (define (truer x) #t)] + (test-suite + "eliminate-whitespace" + + (test-eliminate-whitespace empty identity "\n

Hey

" "\n

Hey

") + (test-eliminate-whitespace/exn empty not "\n

Hey

" "not allowed to contain text") + (test-eliminate-whitespace/exn empty truer "\n

Hey

" "not allowed to contain text") + + (test-eliminate-whitespace '(html) identity "\n

Hey

" "

Hey

") + (test-eliminate-whitespace/exn '(html) not "\n

Hey

" "not allowed to contain text") + (test-eliminate-whitespace/exn '(html) truer "\n

Hey

" "not allowed to contain text") + + (test-eliminate-whitespace '(html) identity "\n

\n

" "

\n

") + (test-eliminate-whitespace '(html) not "\n

\n

" "\n

") + (test-eliminate-whitespace '(html) truer "\n

\n

" "

"))) + + (local + [(define (test-validate-xexpr xe) + (test-not-false (format "~S" xe) (validate-xexpr xe))) + (define (test-validate-xexpr/exn xe v) + (test-exn (format "~S" xe) + (lambda (x) + (and (exn:invalid-xexpr? x) + (equal? (exn:invalid-xexpr-code x) v))) + (lambda () + (validate-xexpr xe))))] + (test-suite + "validate-xexpr" + (test-validate-xexpr 4) + (test-validate-xexpr 'nbsp) + (test-validate-xexpr "string") + (test-validate-xexpr (make-pcdata #f #f "pcdata")) + (test-validate-xexpr (make-cdata #f #f "cdata")) + (test-validate-xexpr (make-comment "comment")) + (test-validate-xexpr (make-p-i #f #f "s1" "s2")) + (test-validate-xexpr '(br)) + (test-validate-xexpr '(br ())) + (test-validate-xexpr '(a ([href "#"]) "string")) + + (test-validate-xexpr/exn #f #f) + (test-validate-xexpr/exn + +) + (test-validate-xexpr/exn '(a ([href foo]) bar) 'foo) + (test-validate-xexpr/exn '("foo" bar) '("foo" bar)))) + + ; XXX correct-xexpr? + + (test-suite + "permissive?" + (test-exn + "Non-permissive" + (lambda (exn) + (and (exn? exn) + (regexp-match #rx"Expected content," (exn-message exn)))) + (lambda () + (xml->xexpr #f))) + + (test-false + "Permissive" + (parameterize ([permissive? #t]) + (xml->xexpr #f)))))) - (test-suite - "Parameters" - - ; XXX empty-tag-shorthand - - ; XXX html-empty-tags - - ; XXX collapse-whitespace - - ; XXX read-comments - - ; XXX xexpr-drop-empty-attributes - - ) + (local + [(define ((mk-test-param param) v istr ostr) + (test-equal? (format "~S" (list v istr)) + (parameterize ([param v]) + (with-output-to-string + (lambda () + (write-xml (read-xml (open-input-string istr)))))) + ostr)) + (define test-empty-tag-shorthand (mk-test-param empty-tag-shorthand)) + (define test-collapse-whitespace (mk-test-param collapse-whitespace)) + (define test-read-comments (mk-test-param read-comments))] + (test-suite + "Parameters" + + (test-suite + "empty-tag-shorthand" + (test-empty-tag-shorthand 'always "" "") + (test-empty-tag-shorthand 'always "Hey" "Hey") + (test-empty-tag-shorthand 'never "" "") + (test-empty-tag-shorthand 'never "Hey" "Hey") + (test-empty-tag-shorthand empty "" "") + (test-empty-tag-shorthand empty "Hey" "Hey") + (test-empty-tag-shorthand '(html) "" "") + (test-empty-tag-shorthand '(html) "Hey" "Hey") + (test-empty-tag-shorthand '(p) "" "") + (test-empty-tag-shorthand '(p) "Hey" "Hey")) + + (test-equal? "html-empty-tags" + html-empty-tags + '(param meta link isindex input img hr frame col br basefont base area)) + + (test-suite + "collapse-whitespace" + (test-collapse-whitespace #t "\n" " ") + (test-collapse-whitespace #t "\t" " ") + (test-collapse-whitespace #t " " " ") + (test-collapse-whitespace #t "" "") + (test-collapse-whitespace #t "" "") + (test-collapse-whitespace #t "" "") + (test-collapse-whitespace #f "\n" "\n")) + + (test-suite + "read-comments" + (test-read-comments #f "" "") + (test-read-comments #t "" "")) + + (local + [(define (test-xexpr-drop-empty-attributes v istr xe) + (test-equal? (format "~S" (list v istr)) + (parameterize ([xexpr-drop-empty-attributes v]) + (xml->xexpr (document-element (read-xml (open-input-string istr))))) + xe))] + (test-suite + "xexpr-drop-empty-attributes" + + (test-xexpr-drop-empty-attributes #f "" '(html ())) + (test-xexpr-drop-empty-attributes #t "" '(html)) + (test-xexpr-drop-empty-attributes #f "Hey" '(html () "Hey")) + (test-xexpr-drop-empty-attributes #t "Hey" '(html "Hey")) + (test-xexpr-drop-empty-attributes #f "Hey" '(a ([href "#"]) "Hey")) + (test-xexpr-drop-empty-attributes #t "Hey" '(a ([href "#"]) "Hey")))))) - (local [(define example - `(dict (assoc-pair "first-key" - "just a string with some whitespace in it") - (assoc-pair "second-key" - (false)) - (assoc-pair "third-key" - (dict )) - (assoc-pair "fourth-key" - (dict (assoc-pair "inner-key" - (real 3.432)))) - (assoc-pair "fifth-key" - (array (integer 14) - "another string" - (true))) - (assoc-pair "sixth-key" - (array)))) - (define example-str #< first-keyjust a string with some whitespace in itsecond-keythird-keyfourth-keyinner-key3.432fifth-key14another stringsixth-key END - )] + )] (test-suite "PList Library" @@ -496,74 +698,6 @@ END (write-plist plist out) (close-output-port out) (test-equal? (format "~S" plist) (read-plist in) plist))] - (test-plist-round-trip example)) - - )) - - (test-suite - "Legacy tests" - - (test-suite - "xml->xexpr" - (test-exn - "Non-permissive" - (lambda (exn) - (and (exn? exn) - (regexp-match #rx"Expected content," (exn-message exn)))) - (lambda () - (xml->xexpr #f))) - - (test-false - "Permissive" - (parameterize ([permissive? #t]) - (xml->xexpr #f)))) - - (test-suite - "DOCTYPE" - - (let () - (define source-string #< - -END - ) - - (define source-document - (read-xml (open-input-string source-string))) - (define result-string - (with-output-to-string (lambda () (write-xml source-document)))) - (define expected-string #< -END - ) - (test-equal? - "DOCTYPE dropping" result-string expected-string))) - - (let () - (define a-pi (make-p-i #f #f "foo" "bar")) - (define a-p (make-prolog empty #f)) - (define a-p/pi (make-prolog (list a-pi) #f)) - (define a-d0 - (make-document a-p (make-element #f #f 'html empty empty) - empty)) - (define a-d1 - (make-document a-p (make-element #f #f 'html empty empty) - (list a-pi))) - (define a-d2 - (make-document a-p/pi (make-element #f #f 'html empty empty) - (list a-pi))) - (test-suite - "PIs" - (test-equal? "Display XML w/o pis" - (with-output-to-string (lambda () (display-xml a-d0))) - "\n") - (test-equal? "Display XML w/ pi in doc-misc" - (with-output-to-string (lambda () (display-xml a-d1))) - "\n\n") - (test-equal? "Display XML w/ pi in doc-misc and prolog" - (with-output-to-string (lambda () (display-xml a-d2))) - "\n\n\n")))))) + (test-plist-round-trip example)))))) (run-tests xml-tests) \ No newline at end of file diff --git a/collects/tests/xml/to-list.ss b/collects/tests/xml/to-list.ss index f34a3eaba2..1c954c9489 100644 --- a/collects/tests/xml/to-list.ss +++ b/collects/tests/xml/to-list.ss @@ -8,10 +8,10 @@ (element->list (document-element xml)) (list* 'list (map misc->list (document-misc xml))))) (define (prolog->list p) - (list* 'make-prolog + (list 'make-prolog (list* 'list (map misc->list (prolog-misc p))) (dtd->list (prolog-dtd p)) - (map misc->list (prolog-misc2 p)))) + (list* 'list (map misc->list (prolog-misc2 p))))) (define (dtd->list d) (if d (list 'make-document-type diff --git a/collects/xml/plist.ss b/collects/xml/plist.ss index 6e06e75a3f..80cf581b29 100644 --- a/collects/xml/plist.ss +++ b/collects/xml/plist.ss @@ -1,184 +1,185 @@ -(module plist mzscheme +#lang scheme +(require xml) - (require "xml.ss" - mzlib/contract) +; a dict is (list 'dict assoc-pair ...) +; an assoc-pair is (list 'assoc-pair key value) +; a key is a string +; a value is either: +; a string, +; a boolean, +; an integer : (list 'integer number) +; a real : (list 'real number) +; a dict, or +; an array : (list 'array value ...) +; (we're ignoring data & date) - ; a dict is (list 'dict assoc-pair ...) - ; an assoc-pair is (list 'assoc-pair key value) - ; a key is a string - ; a value is either: - ; a string, - ; a boolean, - ; an integer : (list 'integer number) - ; a real : (list 'real number) - ; a dict, or - ; an array : (list 'array value ...) - ; (we're ignoring data & date) - - (define (plist-dict? v) - (and (list? v) - (pair? v) - (eq? (car v) 'dict) - (andmap (lambda (v) - (and (list? v) - (= 3 (length v)) - (eq? (car v) 'assoc-pair) - (string? (cadr v)) - (let pl-value? ([v (caddr v)]) - (or (string? v) - (and (pair? v) - (case (car v) - [(true) (null? (cdr v))] - [(false) (null? (cdr v))] - [(integer) (and (= (length v) 2) - (exact-integer? (cadr v)))] - [(real) (and (= (length v) 2) - (real? (cadr v)))] - [(array) (andmap pl-value? (cdr v))] - [else (plist-dict? v)])))))) - (cdr v)))) +(define (plist-dict? v) + (and (list? v) + (pair? v) + (eq? (car v) 'dict) + (andmap (lambda (v) + (and (list? v) + (= 3 (length v)) + (eq? (car v) 'assoc-pair) + (string? (cadr v)) + (let pl-value? ([v (caddr v)]) + (or (string? v) + (and (pair? v) + (case (car v) + [(true) (null? (cdr v))] + [(false) (null? (cdr v))] + [(integer) (and (= (length v) 2) + (exact-integer? (cadr v)))] + [(real) (and (= (length v) 2) + (real? (cadr v)))] + [(array) (andmap pl-value? (cdr v))] + [else (plist-dict? v)])))))) + (cdr v)))) - ; raise-plist-exn : string mark-set xexpr symbol -> ??? - (define (raise-plist-exn tag mark-set xexpr type) - (raise (make-exn:fail:contract (string-append "badly formed '" tag "'") - mark-set))) +; raise-plist-exn : string mark-set xexpr symbol -> ??? +(define (raise-plist-exn tag mark-set xexpr type) + (raise (make-exn:fail:contract (string-append "badly formed '" tag "'") + mark-set))) - ; expand-dict : xexpr -> xexpr - (define (expand-dict x) - (cond [(and (eq? (car x) 'dict) - (map expand-assoc-pair (cdr x))) - => - (lambda (x) `(dict ,@(apply append x)))] - [else - (raise-plist-exn "dict" (current-continuation-marks) x 'plist:dict)])) +; expand-dict : xexpr -> xexpr +(define (expand-dict x) + (cond [(and (eq? (car x) 'dict) + (map expand-assoc-pair (cdr x))) + => + (lambda (x) `(dict ,@(apply append x)))] + [else + (raise-plist-exn "dict" (current-continuation-marks) x 'plist:dict)])) - ; expand-assoc-pair : xexpr -> (list xexpr xexpr) - (define (expand-assoc-pair x) - (cond [(and (eq? (car x) 'assoc-pair) - (string? (cadr x)) - (expand-value (caddr x))) - => - (lambda (z) `((key ,(cadr x)) - ,z))] - [else - (raise-plist-exn "assoc-pair" (current-continuation-marks) x 'plist:assoc-pair)])) +; expand-assoc-pair : xexpr -> (list xexpr xexpr) +(define (expand-assoc-pair x) + (cond [(and (eq? (car x) 'assoc-pair) + (string? (cadr x)) + (expand-value (caddr x))) + => + (lambda (z) `((key ,(cadr x)) + ,z))] + [else + (raise-plist-exn "assoc-pair" (current-continuation-marks) x 'plist:assoc-pair)])) - ; expand-value : xexpr -> xexpr - (define (expand-value x) - (cond [(string? x) - `(string ,x)] - [(or (equal? x '(true)) - (equal? x '(false))) - x] - [(and (eq? (car x) 'integer) - (expand-integer x)) - => - (lambda (x) x)] - [(and (eq? (car x) 'real) - (expand-real x)) - => - (lambda (x) x)] - [(and (eq? (car x) 'dict) - (expand-dict x)) - => - (lambda (x) x)] - [(and (eq? (car x) 'array) - (expand-array x)) - => - (lambda (x) x)] - [else - (raise-plist-exn "value" (current-continuation-marks) x 'plist:value)])) +; expand-value : xexpr -> xexpr +(define (expand-value x) + (cond [(string? x) + `(string ,x)] + [(or (equal? x '(true)) + (equal? x '(false))) + x] + [(and (eq? (car x) 'integer) + (expand-integer x)) + => + (lambda (x) x)] + [(and (eq? (car x) 'real) + (expand-real x)) + => + (lambda (x) x)] + [(and (eq? (car x) 'dict) + (expand-dict x)) + => + (lambda (x) x)] + [(and (eq? (car x) 'array) + (expand-array x)) + => + (lambda (x) x)] + [else + (raise-plist-exn "value" (current-continuation-marks) x 'plist:value)])) - ; expand-real : xexpr -> xexpr - (define (expand-real x) - (cond [(and (eq? (car x) 'real) - (real? (cadr x))) - `(real ,(number->string (cadr x)))] - [else - (raise-plist-exn "real" (current-continuation-marks) x 'plist:real)])) +; expand-real : xexpr -> xexpr +(define (expand-real x) + (cond [(and (eq? (car x) 'real) + (real? (cadr x))) + `(real ,(number->string (cadr x)))] + [else + (raise-plist-exn "real" (current-continuation-marks) x 'plist:real)])) - ; expand-integer : xexpr -> xexpr - (define (expand-integer x) - (cond [(and (eq? (car x) 'integer) - (integer? (cadr x))) - `(integer ,(number->string (cadr x)))] - [else - (raise-plist-exn "integer" (current-continuation-marks) x 'plist:integer)])) +; expand-integer : xexpr -> xexpr +(define (expand-integer x) + (cond [(and (eq? (car x) 'integer) + (integer? (cadr x))) + `(integer ,(number->string (cadr x)))] + [else + (raise-plist-exn "integer" (current-continuation-marks) x 'plist:integer)])) - ; expand-array : xexpr -> xexpr - (define (expand-array x) - (cond [(and (eq? (car x) 'array) - (map expand-value (cdr x))) - => - (lambda (x) - `(array ,@x))] - [else - (raise-plist-exn "array" (current-continuation-marks) x 'plist:array)])) +; expand-array : xexpr -> xexpr +(define (expand-array x) + (cond [(and (eq? (car x) 'array) + (map expand-value (cdr x))) + => + (lambda (x) + `(array ,@x))] + [else + (raise-plist-exn "array" (current-continuation-marks) x 'plist:array)])) - ; dict? tst -> boolean - (define (dict? x) - (with-handlers [(exn:fail:contract? (lambda (exn) #f))] - (expand-dict x) - #t)) +; dict? tst -> boolean +(define (dict? x) + (with-handlers [(exn:fail:contract? (lambda (exn) #f))] + (expand-dict x) + #t)) - ; write-plist : xexpr port -> (void) - (define (write-plist xexpr port) - (let ([plist-xexpr `(plist ,(expand-dict xexpr))]) - (write-xml - (make-document (make-prolog (list (make-pi #f #f 'xml "version=\"1.0\" encoding=\"UTF-8\"")) - (make-document-type 'plist - (if (eq? (system-type) 'macosx) - (make-external-dtd/system - "file://localhost/System/Library/DTDs/PropertyList.dtd") - #f) - #f)) - (xexpr->xml `(plist ((version "0.9")) - ,(expand-dict xexpr))) - null) - port))) +; write-plist : xexpr port -> (void) +(define (write-plist xexpr port) + (let ([plist-xexpr `(plist ,(expand-dict xexpr))]) + (write-xml + (make-document (make-prolog (list (make-p-i #f #f 'xml "version=\"1.0\" encoding=\"UTF-8\"")) + (make-document-type 'plist + (if (eq? (system-type) 'macosx) + (make-external-dtd/system + "file://localhost/System/Library/DTDs/PropertyList.dtd") + #f) + #f) + empty) + (xexpr->xml `(plist ((version "0.9")) + ,(expand-dict xexpr))) + null) + port))) - ; collapse-dict : xexpr -> dict - (define (collapse-dict x) - `(dict ,@(collapse-assoc-pairs (cdr x)))) +; collapse-dict : xexpr -> dict +(define (collapse-dict x) + `(dict ,@(collapse-assoc-pairs (cdr x)))) - ; collapse-assoc-pairs : (listof xexpr) -> (listof assoc-pairs) - (define (collapse-assoc-pairs args) - (if (null? args) - null - (let ([key (car args)] - [value (cadr args)] - [rest (cddr args)]) - (cons `(assoc-pair ,(cadr key) ,(collapse-value value)) - (collapse-assoc-pairs rest))))) +; collapse-assoc-pairs : (listof xexpr) -> (listof assoc-pairs) +(define (collapse-assoc-pairs args) + (if (null? args) + null + (let ([key (car args)] + [value (cadr args)] + [rest (cddr args)]) + (cons `(assoc-pair ,(cadr key) ,(collapse-value value)) + (collapse-assoc-pairs rest))))) - ; collapse-value : xexpr -> value - (define (collapse-value value) - (case (car value) - [(string) (cadr value)] - [(true false) value] - [(integer real) (list (car value) (string->number (cadr value)))] - [(dict) (collapse-dict value)] - [(array) (collapse-array value)])) +; collapse-value : xexpr -> value +(define (collapse-value value) + (case (car value) + [(string) (cadr value)] + [(true false) value] + [(integer real) (list (car value) (string->number (cadr value)))] + [(dict) (collapse-dict value)] + [(array) (collapse-array value)])) - ; collapse-array : xexpr -> array - (define (collapse-array xexpr) - `(array ,@(map collapse-value (cdr xexpr)))) +; collapse-array : xexpr -> array +(define (collapse-array xexpr) + `(array ,@(map collapse-value (cdr xexpr)))) - (define tags-without-whitespace - '(plist dict array)) +(define tags-without-whitespace + '(plist dict array)) - ; read-plist : port -> dict - (define (read-plist port) - (let* ([xml-doc (read-xml port)] - [content (parameterize ([xexpr-drop-empty-attributes #t]) - (xml->xexpr - ((eliminate-whitespace tags-without-whitespace (lambda (x) x)) - (document-element xml-doc))))]) - (unless (eq? (car content) 'plist) - (error 'read-plist "xml expression is not a plist: ~a" content)) - (collapse-dict (caddr content)))) +; read-plist : port -> dict +(define (read-plist port) + (let* ([xml-doc (read-xml port)] + [content (parameterize ([xexpr-drop-empty-attributes #t]) + (xml->xexpr + ((eliminate-whitespace tags-without-whitespace (lambda (x) x)) + (document-element xml-doc))))]) + (unless (eq? (car content) 'plist) + (error 'read-plist "xml expression is not a plist: ~a" content)) + (collapse-dict (caddr content)))) - (provide plist-dict? read-plist) - (provide/contract [write-plist (plist-dict? output-port? . -> . void?)])) +(provide/contract + [plist-dict? (any/c . -> . boolean?)] + [read-plist (input-port? . -> . plist-dict?)] + [write-plist (plist-dict? output-port? . -> . void?)]) \ No newline at end of file diff --git a/collects/xml/private/reader.ss b/collects/xml/private/reader.ss index 0c0d940242..5eb020581b 100644 --- a/collects/xml/private/reader.ss +++ b/collects/xml/private/reader.ss @@ -1,466 +1,462 @@ -(module reader mzscheme - (require mzlib/unitsig - mzlib/list - mzlib/etc) +#lang scheme +(require "sig.ss") + +(provide reader@) + +(define-unit reader@ + (import xml-structs^) + (export reader^) - (require "sig.ss") + ;; Start-tag ::= (make-start-tag Location Location Symbol (listof Attribute)) + (define-struct (start-tag source) (name attrs)) - (provide reader@) + ;; End-tag ::= (make-end-tag Location Location Symbol) + (define-struct (end-tag source) (name)) - (define reader@ - (unit/sig reader^ - (import xml-structs^) - - ;; Start-tag ::= (make-start-tag Location Location Symbol (listof Attribute)) - (define-struct (start-tag source) (name attrs)) - - ;; End-tag ::= (make-end-tag Location Location Symbol) - (define-struct (end-tag source) (name)) - - ;; Token ::= Contents | Start-tag | End-tag | Eof - - (define read-comments (make-parameter #f)) - (define collapse-whitespace (make-parameter #f)) - - ;; read-xml : [Input-port] -> Document - (define read-xml - (opt-lambda ([in (current-input-port)]) - (let*-values ([(in pos) (positionify in)] - [(misc0 start) (read-misc in pos)]) - (make-document (make-prolog misc0 #f) - (read-xml-element-helper pos in start) - (let ([loc-before (pos)]) - (let-values ([(misc1 end-of-file) (read-misc in pos)]) - (unless (eof-object? end-of-file) - (let ([loc-after (pos)]) - (parse-error (list - (make-srcloc - (object-name in) - #f - #f - (location-offset loc-before) - (- (location-offset loc-after) - (location-offset loc-before)))) - "extra stuff at end of document ~e" - end-of-file))) - misc1)))))) - - ;; read-xml/element : [Input-port] -> Element - (define read-xml/element - (opt-lambda ([in (current-input-port)]) - (let-values ([(in pos) (positionify in)]) - (skip-space in) - (read-xml-element-helper pos in (lex in pos))))) - - ;; read-xml-element-helper : Nat Iport Token -> Element - (define (read-xml-element-helper pos in start) + ;; Token ::= Contents | Start-tag | End-tag | Eof + + (define read-comments (make-parameter #f)) + (define collapse-whitespace (make-parameter #f)) + + ;; read-xml : [Input-port] -> Document + (define read-xml + (lambda ([in (current-input-port)]) + (let*-values ([(in pos) (positionify in)] + [(misc0 start) (read-misc in pos)]) + (make-document (make-prolog misc0 #f empty) + (read-xml-element-helper pos in start) + (let ([loc-before (pos)]) + (let-values ([(misc1 end-of-file) (read-misc in pos)]) + (unless (eof-object? end-of-file) + (let ([loc-after (pos)]) + (parse-error (list + (make-srcloc + (object-name in) + #f + #f + (location-offset loc-before) + (- (location-offset loc-after) + (location-offset loc-before)))) + "extra stuff at end of document ~e" + end-of-file))) + misc1)))))) + + ;; read-xml/element : [Input-port] -> Element + (define read-xml/element + (lambda ([in (current-input-port)]) + (let-values ([(in pos) (positionify in)]) + (skip-space in) + (read-xml-element-helper pos in (lex in pos))))) + + ;; read-xml-element-helper : Nat Iport Token -> Element + (define (read-xml-element-helper pos in start) + (cond + [(start-tag? start) (read-element start in pos)] + [(element? start) start] + [else (parse-error (list + (make-srcloc + (object-name in) + #f + #f + 1 + (- (location-offset (pos)) 1))) + "expected root element - received ~e" + (if (pcdata? start) (pcdata-string start) start))])) + + ;; read-misc : Input-port (-> Location) -> (listof Misc) Token + (define (read-misc in pos) + (let read-more () + (let ([x (lex in pos)]) (cond - [(start-tag? start) (read-element start in pos)] - [(element? start) start] - [else (parse-error (list - (make-srcloc - (object-name in) - #f - #f - 1 - (- (location-offset (pos)) 1))) - "expected root element - received ~e" - (if (pcdata? start) (pcdata-string start) start))])) - - ;; read-misc : Input-port (-> Location) -> (listof Misc) Token - (define (read-misc in pos) - (let read-more () - (let ([x (lex in pos)]) - (cond - [(pi? x) - (let-values ([(lst next) (read-more)]) - (values (cons x lst) next))] - [(comment? x) - (let-values ([(lst next) (read-more)]) - (if (read-comments) - (values (cons x lst) next) - (values lst next)))] - [(and (pcdata? x) (andmap char-whitespace? (string->list (pcdata-string x)))) - (read-more)] - [else (values null x)])))) - - ;; read-element : Start-tag Input-port (-> Location) -> Element - (define (read-element start in pos) - (let ([name (start-tag-name start)] - [a (source-start start)] - [b (source-stop start)]) - (let read-content ([k (lambda (body end-loc) - (make-element - a end-loc name (start-tag-attrs start) - body))]) - (let ([x (lex in pos)]) + [(pi? x) + (let-values ([(lst next) (read-more)]) + (values (cons x lst) next))] + [(comment? x) + (let-values ([(lst next) (read-more)]) + (if (read-comments) + (values (cons x lst) next) + (values lst next)))] + [(and (pcdata? x) (andmap char-whitespace? (string->list (pcdata-string x)))) + (read-more)] + [else (values null x)])))) + + ;; read-element : Start-tag Input-port (-> Location) -> Element + (define (read-element start in pos) + (let ([name (start-tag-name start)] + [a (source-start start)] + [b (source-stop start)]) + (let read-content ([k (lambda (body end-loc) + (make-element + a end-loc name (start-tag-attrs start) + body))]) + (let ([x (lex in pos)]) + (cond + [(eof-object? x) + (parse-error (list + (make-srcloc + (object-name in) + #f + #f + (location-offset (source-start start)) + (- (location-offset (source-stop start)) + (location-offset (source-start start))))) + "unclosed `~a' tag at [~a ~a]" + name + (format-source a) + (format-source b))] + [(start-tag? x) + (let ([next-el (read-element x in pos)]) + (read-content (lambda (body end-loc) + (k (cons next-el body) + end-loc))))] + [(end-tag? x) + (let ([end-loc (source-stop x)]) + (unless (eq? name (end-tag-name x)) + (parse-error + (list + (make-srcloc (object-name in) + #f + #f + (location-offset a) + (- (location-offset b) (location-offset a))) + (make-srcloc (object-name in) + #f + #f + (location-offset (source-start x)) + (- (location-offset end-loc) (location-offset (source-start x))))) + "start tag `~a' at [~a ~a] doesn't match end tag `~a' at [~a ~a]" + name + (format-source a) + (format-source b) + (end-tag-name x) + (format-source (source-start x)) + (format-source end-loc))) + (k null end-loc))] + [(entity? x) (read-content (lambda (body end-loc) + (k (cons (expand-entity x) body) + end-loc)))] + [(comment? x) (if (read-comments) + (read-content (lambda (body end-loc) (k (cons x body) end-loc))) + (read-content k))] + [else (read-content (lambda (body end-loc) (k (cons x body) end-loc)))]))))) + + ;; expand-entity : Entity -> (U Entity Pcdata) + ;; more here - allow expansion of user defined entities + (define (expand-entity x) + (let ([expanded (default-entity-table (entity-text x))]) + (if expanded + (make-pcdata (source-start x) (source-stop x) expanded) + x))) + + ;; default-entity-table : Symbol -> (U #f String) + (define (default-entity-table name) + (case name + [(amp) "&"] + [(lt) "<"] + [(gt) ">"] + [(quot) "\""] + [(apos) "'"] + [else #f])) + + ;; lex : Input-port (-> Location) -> (U Token special) + (define (lex in pos) + (let ([c (peek-char-or-special in)]) + (cond + [(eof-object? c) c] + [(eq? c #\&) (lex-entity in pos)] + [(eq? c #\<) (lex-tag-cdata-pi-comment in pos)] + [(not (char? c)) (read-char-or-special in)] + [else (lex-pcdata in pos)]))) + + ; lex-entity : Input-port (-> Location) -> Entity + ; pre: the first char is a #\& + (define (lex-entity in pos) + (let ([start (pos)]) + (read-char in) + (let ([data (case (peek-char in) + [(#\#) + (read-char in) + (let ([n (case (peek-char in) + [(#\x) (read-char in) + (string->number (read-until #\; in pos) 16)] + [else (string->number (read-until #\; in pos))])]) + (unless (number? n) + (lex-error in pos "malformed numeric entity")) + n)] + [else + (begin0 + (lex-name in pos) + (unless (eq? (read-char in) #\;) + (lex-error in pos "expected ; at the end of an entity")))])]) + (make-entity start (pos) data)))) + + ; lex-tag-cdata-pi-comment : Input-port (-> Location) -> Start-tag | Element | End-tag | Cdata | Pi | Comment + ; pre: the first char is a #\< + (define (lex-tag-cdata-pi-comment in pos) + (let ([start (pos)]) + (read-char in) + (case (non-eof peek-char-or-special in pos) + [(#\!) + (read-char in) + (case (non-eof peek-char in pos) + [(#\-) (read-char in) + (unless (eq? (read-char-or-special in) #\-) + (lex-error in pos "expected second - after ) + (lex-error in pos "expected > to end comment (\"--\" can't appear in comments)")) + ;(make-comment start (pos) data) + (make-comment data))] + [(#\[) (read-char in) + (unless (string=? (read-string 6 in) "CDATA[") + (lex-error in pos "expected CDATA following <[")) + (let ([data (lex-cdata-contents in pos)]) + (make-cdata start (pos) (format "" data)))] + [else (skip-dtd in pos) + (skip-space in) + (unless (eq? (peek-char-or-special in) #\<) + (lex-error in pos "expected pi, comment, or element after doctype")) + (lex-tag-cdata-pi-comment in pos)])] + [(#\?) (read-char in) + (let ([name (lex-name in pos)]) + (skip-space in) + (let ([data (lex-pi-data in pos)]) + (make-pi start (pos) name data)))] + [(#\/) (read-char in) + (let ([name (lex-name in pos)]) + (skip-space in) + (unless (eq? (read-char-or-special in) #\>) + (lex-error in pos "expected > to close ~a's end tag" name)) + (make-end-tag start (pos) name))] + [else ; includes 'special, but lex-name will fail in that case + (let ([name (lex-name in pos)] + [attrs (lex-attributes in pos)]) + (skip-space in) + (case (read-char-or-special in) + [(#\/) + (unless (eq? (read-char in) #\>) + (lex-error in pos "expected > to close empty element ~a" name)) + (make-element start (pos) name attrs null)] + [(#\>) (make-start-tag start (pos) name attrs)] + [else (lex-error in pos "expected / or > to close tag `~a'" name)]))]))) + + ;; lex-attributes : Input-port (-> Location) -> (listof Attribute) + (define (lex-attributes in pos) + (sort (let loop () + (skip-space in) + (cond [(name-start? (peek-char-or-special in)) + (cons (lex-attribute in pos) (loop))] + [else null])) + (lambda (a b) + (let ([na (attribute-name a)] + [nb (attribute-name b)]) (cond - [(eof-object? x) - (parse-error (list - (make-srcloc - (object-name in) - #f - #f - (location-offset (source-start start)) - (- (location-offset (source-stop start)) - (location-offset (source-start start))))) - "unclosed `~a' tag at [~a ~a]" - name - (format-source a) - (format-source b))] - [(start-tag? x) - (let ([next-el (read-element x in pos)]) - (read-content (lambda (body end-loc) - (k (cons next-el body) - end-loc))))] - [(end-tag? x) - (let ([end-loc (source-stop x)]) - (unless (eq? name (end-tag-name x)) - (parse-error - (list - (make-srcloc (object-name in) - #f - #f - (location-offset a) - (- (location-offset b) (location-offset a))) - (make-srcloc (object-name in) - #f - #f - (location-offset (source-start x)) - (- (location-offset end-loc) (location-offset (source-start x))))) - "start tag `~a' at [~a ~a] doesn't match end tag `~a' at [~a ~a]" - name - (format-source a) - (format-source b) - (end-tag-name x) - (format-source (source-start x)) - (format-source end-loc))) - (k null end-loc))] - [(entity? x) (read-content (lambda (body end-loc) - (k (cons (expand-entity x) body) - end-loc)))] - [(comment? x) (if (read-comments) - (read-content (lambda (body end-loc) (k (cons x body) end-loc))) - (read-content k))] - [else (read-content (lambda (body end-loc) (k (cons x body) end-loc)))]))))) - - ;; expand-entity : Entity -> (U Entity Pcdata) - ;; more here - allow expansion of user defined entities - (define (expand-entity x) - (let ([expanded (default-entity-table (entity-text x))]) - (if expanded - (make-pcdata (source-start x) (source-stop x) expanded) - x))) - - ;; default-entity-table : Symbol -> (U #f String) - (define (default-entity-table name) - (case name - [(amp) "&"] - [(lt) "<"] - [(gt) ">"] - [(quot) "\""] - [(apos) "'"] - [else #f])) - - ;; lex : Input-port (-> Location) -> (U Token special) - (define (lex in pos) - (let ([c (peek-char-or-special in)]) - (cond - [(eof-object? c) c] - [(eq? c #\&) (lex-entity in pos)] - [(eq? c #\<) (lex-tag-cdata-pi-comment in pos)] - [(not (char? c)) (read-char-or-special in)] - [else (lex-pcdata in pos)]))) - - ; lex-entity : Input-port (-> Location) -> Entity - ; pre: the first char is a #\& - (define (lex-entity in pos) - (let ([start (pos)]) + [(eq? na nb) (lex-error in pos "duplicated attribute name ~a" na)] + [else (stringstring na) (symbol->string nb))]))))) + + ;; lex-attribute : Input-port (-> Location) -> Attribute + (define (lex-attribute in pos) + (let ([start (pos)] + [name (lex-name in pos)]) + (skip-space in) + (unless (eq? (read-char in) #\=) + (lex-error in pos "expected = in attribute ~a" name)) + (skip-space in) + ;; more here - handle entites and disallow "<" + (let* ([delimiter (read-char-or-special in)] + [value (case delimiter + [(#\' #\") + (list->string + (let read-more () + (let ([c (non-eof peek-char-or-special in pos)]) + (cond + [(eq? c 'special) + (lex-error in pos "attribute values cannot contain non-text values")] + [(eq? c delimiter) (read-char in) null] + [(eq? c #\&) + (let ([entity (expand-entity (lex-entity in pos))]) + (if (pcdata? entity) + (append (string->list (pcdata-string entity)) (read-more)) + ;; more here - do something with user defined entites + (read-more)))] + [else (read-char in) (cons c (read-more))]))))] + [else (if (char? delimiter) + (lex-error in pos "attribute values must be in ''s or in \"\"s") + delimiter)])]) + (make-attribute start (pos) name value)))) + + ;; skip-space : Input-port -> Void + ;; deviation - should sometimes insist on at least one space + (define (skip-space in) + (let loop () + (let ([c (peek-char-or-special in)]) + (when (and (char? c) + (char-whitespace? c)) (read-char in) - (let ([data (case (peek-char in) - [(#\#) - (read-char in) - (let ([n (case (peek-char in) - [(#\x) (read-char in) - (string->number (read-until #\; in pos) 16)] - [else (string->number (read-until #\; in pos))])]) - (unless (number? n) - (lex-error in pos "malformed numeric entity")) - n)] - [else - (begin0 - (lex-name in pos) - (unless (eq? (read-char in) #\;) - (lex-error in pos "expected ; at the end of an entity")))])]) - (make-entity start (pos) data)))) - - ; lex-tag-cdata-pi-comment : Input-port (-> Location) -> Start-tag | Element | End-tag | Cdata | Pi | Comment - ; pre: the first char is a #\< - (define (lex-tag-cdata-pi-comment in pos) - (let ([start (pos)]) - (read-char in) - (case (non-eof peek-char-or-special in pos) - [(#\!) - (read-char in) - (case (non-eof peek-char in pos) - [(#\-) (read-char in) - (unless (eq? (read-char-or-special in) #\-) - (lex-error in pos "expected second - after ) - (lex-error in pos "expected > to end comment (\"--\" can't appear in comments)")) - ;(make-comment start (pos) data) - (make-comment data))] - [(#\[) (read-char in) - (unless (string=? (read-string 6 in) "CDATA[") - (lex-error in pos "expected CDATA following <[")) - (let ([data (lex-cdata-contents in pos)]) - (make-cdata start (pos) (format "" data)))] - [else (skip-dtd in pos) - (skip-space in) - (unless (eq? (peek-char-or-special in) #\<) - (lex-error in pos "expected pi, comment, or element after doctype")) - (lex-tag-cdata-pi-comment in pos)])] - [(#\?) (read-char in) - (let ([name (lex-name in pos)]) - (skip-space in) - (let ([data (lex-pi-data in pos)]) - (make-pi start (pos) name data)))] - [(#\/) (read-char in) - (let ([name (lex-name in pos)]) - (skip-space in) - (unless (eq? (read-char-or-special in) #\>) - (lex-error in pos "expected > to close ~a's end tag" name)) - (make-end-tag start (pos) name))] - [else ; includes 'special, but lex-name will fail in that case - (let ([name (lex-name in pos)] - [attrs (lex-attributes in pos)]) - (skip-space in) - (case (read-char-or-special in) - [(#\/) - (unless (eq? (read-char in) #\>) - (lex-error in pos "expected > to close empty element ~a" name)) - (make-element start (pos) name attrs null)] - [(#\>) (make-start-tag start (pos) name attrs)] - [else (lex-error in pos "expected / or > to close tag `~a'" name)]))]))) - - ;; lex-attributes : Input-port (-> Location) -> (listof Attribute) - (define (lex-attributes in pos) - (sort (let loop () - (skip-space in) - (cond [(name-start? (peek-char-or-special in)) - (cons (lex-attribute in pos) (loop))] - [else null])) - (lambda (a b) - (let ([na (attribute-name a)] - [nb (attribute-name b)]) - (cond - [(eq? na nb) (lex-error in pos "duplicated attribute name ~a" na)] - [else (stringstring na) (symbol->string nb))]))))) - - ;; lex-attribute : Input-port (-> Location) -> Attribute - (define (lex-attribute in pos) - (let ([start (pos)] - [name (lex-name in pos)]) - (skip-space in) - (unless (eq? (read-char in) #\=) - (lex-error in pos "expected = in attribute ~a" name)) - (skip-space in) - ;; more here - handle entites and disallow "<" - (let* ([delimiter (read-char-or-special in)] - [value (case delimiter - [(#\' #\") - (list->string - (let read-more () - (let ([c (non-eof peek-char-or-special in pos)]) - (cond - [(eq? c 'special) - (lex-error in pos "attribute values cannot contain non-text values")] - [(eq? c delimiter) (read-char in) null] - [(eq? c #\&) - (let ([entity (expand-entity (lex-entity in pos))]) - (if (pcdata? entity) - (append (string->list (pcdata-string entity)) (read-more)) - ;; more here - do something with user defined entites - (read-more)))] - [else (read-char in) (cons c (read-more))]))))] - [else (if (char? delimiter) - (lex-error in pos "attribute values must be in ''s or in \"\"s") - delimiter)])]) - (make-attribute start (pos) name value)))) - - ;; skip-space : Input-port -> Void - ;; deviation - should sometimes insist on at least one space - (define (skip-space in) - (let loop () - (let ([c (peek-char-or-special in)]) - (when (and (char? c) - (char-whitespace? c)) - (read-char in) - (loop))))) - - ;; lex-pcdata : Input-port (-> Location) -> Pcdata - ;; deviation - disallow ]]> "for compatability" with SGML, sec 2.4 XML spec - (define (lex-pcdata in pos) - (let ([start (pos)] - [data (let loop () - (let ([next (peek-char-or-special in)]) - (cond - [(or (eof-object? next) - (not (char? next)) - (eq? next #\&) - (eq? next #\<)) - null] - [(and (char-whitespace? next) (collapse-whitespace)) - (skip-space in) - (cons #\space (loop))] - [else (cons (read-char in) (loop))])))]) - (make-pcdata start - (pos) - (list->string data)))) - - ;; lex-name : Input-port (-> Location) -> Symbol - (define (lex-name in pos) - (let ([c (non-eof read-char-or-special in pos)]) - (unless (name-start? c) - (lex-error in pos "expected name, received ~e" c)) - (string->symbol - (list->string - (cons c (let lex-rest () - (let ([c (non-eof peek-char-or-special in pos)]) - (cond - [(eq? c 'special) - (lex-error in pos "names cannot contain non-text values")] - [(name-char? c) - (cons (read-char in) (lex-rest))] - [else null])))))))) - - ;; skip-dtd : Input-port (-> Location) -> Void - (define (skip-dtd in pos) - (let skip () - (case (non-eof read-char in pos) - [(#\') (read-until #\' in pos) (skip)] - [(#\") (read-until #\" in pos) (skip)] - [(#\<) - (case (non-eof read-char in pos) - [(#\!) (case (non-eof read-char in pos) - [(#\-) (read-char in) (lex-comment-contents in pos) (read-char in) (skip)] - [else (skip) (skip)])] - [(#\?) (lex-pi-data in pos) (skip)] - [else (skip) (skip)])] - [(#\>) (void)] - [else (skip)]))) - - ;; name-start? : Char -> Bool - (define (name-start? ch) - (and (char? ch) - (or (char-alphabetic? ch) - (eq? ch #\_) - (eq? ch #\:)))) - - ;; name-char? : Char -> Bool - (define (name-char? ch) - (and (char? ch) - (or (name-start? ch) - (char-numeric? ch) - (eq? ch #\.) - (eq? ch #\-)))) - - ;; read-until : Char Input-port (-> Location) -> String - ;; discards the stop character, too - (define (read-until char in pos) + (loop))))) + + ;; lex-pcdata : Input-port (-> Location) -> Pcdata + ;; deviation - disallow ]]> "for compatability" with SGML, sec 2.4 XML spec + (define (lex-pcdata in pos) + (let ([start (pos)] + [data (let loop () + (let ([next (peek-char-or-special in)]) + (cond + [(or (eof-object? next) + (not (char? next)) + (eq? next #\&) + (eq? next #\<)) + null] + [(and (char-whitespace? next) (collapse-whitespace)) + (skip-space in) + (cons #\space (loop))] + [else (cons (read-char in) (loop))])))]) + (make-pcdata start + (pos) + (list->string data)))) + + ;; lex-name : Input-port (-> Location) -> Symbol + (define (lex-name in pos) + (let ([c (non-eof read-char-or-special in pos)]) + (unless (name-start? c) + (lex-error in pos "expected name, received ~e" c)) + (string->symbol + (list->string + (cons c (let lex-rest () + (let ([c (non-eof peek-char-or-special in pos)]) + (cond + [(eq? c 'special) + (lex-error in pos "names cannot contain non-text values")] + [(name-char? c) + (cons (read-char in) (lex-rest))] + [else null])))))))) + + ;; skip-dtd : Input-port (-> Location) -> Void + (define (skip-dtd in pos) + (let skip () + (case (non-eof read-char in pos) + [(#\') (read-until #\' in pos) (skip)] + [(#\") (read-until #\" in pos) (skip)] + [(#\<) + (case (non-eof read-char in pos) + [(#\!) (case (non-eof read-char in pos) + [(#\-) (read-char in) (lex-comment-contents in pos) (read-char in) (skip)] + [else (skip) (skip)])] + [(#\?) (lex-pi-data in pos) (skip)] + [else (skip) (skip)])] + [(#\>) (void)] + [else (skip)]))) + + ;; name-start? : Char -> Bool + (define (name-start? ch) + (and (char? ch) + (or (char-alphabetic? ch) + (eq? ch #\_) + (eq? ch #\:)))) + + ;; name-char? : Char -> Bool + (define (name-char? ch) + (and (char? ch) + (or (name-start? ch) + (char-numeric? ch) + (eq? ch #\.) + (eq? ch #\-)))) + + ;; read-until : Char Input-port (-> Location) -> String + ;; discards the stop character, too + (define (read-until char in pos) + (list->string + (let read-more () + (let ([c (non-eof read-char in pos)]) + (cond + [(eq? c char) null] + [else (cons c (read-more))]))))) + + ;; non-eof : (Input-port -> (U Char Eof)) Input-port (-> Location) -> Char + (define (non-eof f in pos) + (let ([c (f in)]) + (cond + [(eof-object? c) (lex-error in pos "unexpected eof")] + [else c]))) + + ;; gen-read-until-string : String -> Input-port (-> Location) -> String + ;; uses Knuth-Morris-Pratt from + ;; Introduction to Algorithms, Cormen, Leiserson, and Rivest, pages 869-876 + ;; discards stop from input + (define (gen-read-until-string stop) + (let* ([len (string-length stop)] + [prefix (make-vector len 0)] + [fall-back + (lambda (k c) + (let ([k (let loop ([k k]) + (cond + [(and (> k 0) (not (eq? (string-ref stop k) c))) + (loop (vector-ref prefix (sub1 k)))] + [else k]))]) + (if (eq? (string-ref stop k) c) + (add1 k) + k)))]) + (let init ([k 0] [q 1]) + (when (< q len) + (let ([k (fall-back k (string-ref stop q))]) + (vector-set! prefix q k) + (init k (add1 q))))) + ;; (vector-ref prefix x) = the longest suffix that matches a prefix of stop + (lambda (in pos) (list->string - (let read-more () - (let ([c (non-eof read-char in pos)]) - (cond - [(eq? c char) null] - [else (cons c (read-more))]))))) - - ;; non-eof : (Input-port -> (U Char Eof)) Input-port (-> Location) -> Char - (define (non-eof f in pos) - (let ([c (f in)]) - (cond - [(eof-object? c) (lex-error in pos "unexpected eof")] - [else c]))) - - ;; gen-read-until-string : String -> Input-port (-> Location) -> String - ;; uses Knuth-Morris-Pratt from - ;; Introduction to Algorithms, Cormen, Leiserson, and Rivest, pages 869-876 - ;; discards stop from input - (define (gen-read-until-string stop) - (let* ([len (string-length stop)] - [prefix (make-vector len 0)] - [fall-back - (lambda (k c) - (let ([k (let loop ([k k]) - (cond - [(and (> k 0) (not (eq? (string-ref stop k) c))) - (loop (vector-ref prefix (sub1 k)))] - [else k]))]) - (if (eq? (string-ref stop k) c) - (add1 k) - k)))]) - (let init ([k 0] [q 1]) - (when (< q len) - (let ([k (fall-back k (string-ref stop q))]) - (vector-set! prefix q k) - (init k (add1 q))))) - ;; (vector-ref prefix x) = the longest suffix that matches a prefix of stop - (lambda (in pos) - (list->string - (let/ec out - (let loop ([matched 0] [out out]) - (let* ([c (non-eof read-char in pos)] - [matched (fall-back matched c)]) - (cond - [(= matched len) (out null)] - [(zero? matched) (cons c (let/ec out (loop matched out)))] - [else (cons c (loop matched out))])))))))) - - ;; "-->" makes more sense, but "--" follows the spec. - (define lex-comment-contents (gen-read-until-string "--")) - (define lex-pi-data (gen-read-until-string "?>")) - (define lex-cdata-contents (gen-read-until-string "]]>")) - - ;; positionify : Input-port -> Input-port (-> Location) - ; This function predates port-count-lines! and port-next-location. - ; Otherwise I would have used those directly at the call sites. - (define (positionify in) - (port-count-lines! in) - (values - in - (lambda () - (let-values ([(line column offset) (port-next-location in)]) - (make-location line column offset))))) - - ;; locs : (listof (list number number)) - (define-struct (exn:xml exn:fail:read) ()) - - ;; lex-error : Input-port String (-> Location) TST* -> alpha - ;; raises a lexer error, using exn:xml - (define (lex-error in pos str . rest) - (let* ([the-pos (pos)] - [offset (location-offset the-pos)]) - (raise - (make-exn:xml - (format "read-xml: lex-error: at position ~a: ~a" - (format-source the-pos) - (apply format str rest)) - (current-continuation-marks) - (list - (make-srcloc (object-name in) #f #f offset 1)))))) - - ;; parse-error : (listof srcloc) (listof TST) *-> alpha - ;; raises a parsing error, using exn:xml - (define (parse-error src fmt . args) - (raise (make-exn:xml (string-append "read-xml: parse-error: " - (apply format fmt args)) - (current-continuation-marks) - src))) - - ;; format-source : Location -> string - ;; to format the source location for an error message - (define (format-source loc) - (if (location? loc) - (format "~a.~a/~a" (location-line loc) (location-char loc) (location-offset loc)) - (format "~a" loc)))))) + (let/ec out + (let loop ([matched 0] [out out]) + (let* ([c (non-eof read-char in pos)] + [matched (fall-back matched c)]) + (cond + [(= matched len) (out null)] + [(zero? matched) (cons c (let/ec out (loop matched out)))] + [else (cons c (loop matched out))])))))))) + + ;; "-->" makes more sense, but "--" follows the spec. + (define lex-comment-contents (gen-read-until-string "--")) + (define lex-pi-data (gen-read-until-string "?>")) + (define lex-cdata-contents (gen-read-until-string "]]>")) + + ;; positionify : Input-port -> Input-port (-> Location) + ; This function predates port-count-lines! and port-next-location. + ; Otherwise I would have used those directly at the call sites. + (define (positionify in) + (port-count-lines! in) + (values + in + (lambda () + (let-values ([(line column offset) (port-next-location in)]) + (make-location line column offset))))) + + ;; locs : (listof (list number number)) + (define-struct (exn:xml exn:fail:read) ()) + + ;; lex-error : Input-port String (-> Location) TST* -> alpha + ;; raises a lexer error, using exn:xml + (define (lex-error in pos str . rest) + (let* ([the-pos (pos)] + [offset (location-offset the-pos)]) + (raise + (make-exn:xml + (format "read-xml: lex-error: at position ~a: ~a" + (format-source the-pos) + (apply format str rest)) + (current-continuation-marks) + (list + (make-srcloc (object-name in) #f #f offset 1)))))) + + ;; parse-error : (listof srcloc) (listof TST) *-> alpha + ;; raises a parsing error, using exn:xml + (define (parse-error src fmt . args) + (raise (make-exn:xml (string-append "read-xml: parse-error: " + (apply format fmt args)) + (current-continuation-marks) + src))) + + ;; format-source : Location -> string + ;; to format the source location for an error message + (define (format-source loc) + (if (location? loc) + (format "~a.~a/~a" (location-line loc) (location-char loc) (location-offset loc)) + (format "~a" loc)))) diff --git a/collects/xml/private/sig.ss b/collects/xml/private/sig.ss index 69da82bb3d..17498e8355 100644 --- a/collects/xml/private/sig.ss +++ b/collects/xml/private/sig.ss @@ -1,62 +1,89 @@ +#lang scheme -(module sig mzscheme - (require mzlib/unitsig) +(define-signature xml-structs^ + ((struct/ctc location ([line exact-nonnegative-integer?] + [char exact-nonnegative-integer?] + [offset exact-nonnegative-integer?])) + (struct/ctc source ([start (or/c location? symbol?)] + [stop (or/c location? symbol?)])) + (struct/ctc comment ([text string?])) + (struct pcdata (string)) ; XXX needs parent + (struct cdata (string)) ; XXX needs parent + (struct/ctc document-type ([name symbol?] + #;[external external-dtd?] + ; XXX results in this error + ; ->: expected contract or a value that can be coerced into one, got # + ; I presume that there is a letrec somewhere + [external any/c] + [inlined false/c])) + (struct/ctc document (#;[prolog prolog?] ; XXX same as above + [prolog any/c] + #;[element element?] + [element any/c] + #;[misc (listof (or/c comment? pi?))] + [misc (listof any/c)])) + (struct/ctc prolog (#;[misc (listof (or/c comment? pi?))] ; XXX same as above + [misc (listof any/c)] + #;[dtd document-type?] + [dtd any/c] + #;[misc2 (listof (or/c comment? pi?))] + [misc2 (listof any/c)])) + (struct/ctc external-dtd ([system string?])) + (struct external-dtd/public (public)) ; XXX needs parent + (struct external-dtd/system ()) ; XXX needs parent + (struct element (name attributes content)) ; XXX needs parent + (struct attribute (name value)) ; XXX needs parent + (struct pi (target-name instruction)) ; XXX needs parent + (struct entity (text)) ; XXX needs parent + (contracted + [content? (any/c . -> . boolean?)]))) - (define-signature xml-structs^ - ((struct location (line char offset)) - (struct document (prolog element misc)) - (struct comment (text)) - (struct prolog (misc dtd misc2)) - (struct document-type (name external inlined)) - (struct external-dtd (system)) - (struct external-dtd/public (public)) - (struct external-dtd/system ()) - (struct element (name attributes content)) - (struct attribute (name value)) - (struct pi (target-name instruction)) - (struct source (start stop)) - (struct pcdata (string)) - (struct cdata (string)) - (struct entity (text)) - content?)) +(define-signature writer^ + ((contracted + [write-xml ((any/c) (output-port?) . ->* . void?)] + [display-xml ((any/c) (output-port?) . ->* . void?)] + [write-xml/content ((any/c) (output-port?) . ->* . void?)] + [display-xml/content ((any/c) (output-port?) . ->* . void?)]) + ; XXX I can't contract the above (well), because they refer to structs from xml-structs^ + (contracted + [empty-tag-shorthand (parameter/c (or/c (symbols 'always 'never) (listof symbol?)))] + [html-empty-tags (listof symbol?)]))) - (define-signature writer^ - (write-xml - display-xml - write-xml/content - display-xml/content - empty-tag-shorthand - html-empty-tags)) +(define-signature reader^ + ((contracted + [read-xml (() (input-port?) . ->* . any/c)] + [read-xml/element (() (input-port?) . ->* . any/c)] + [read-comments (parameter/c boolean?)] + [collapse-whitespace (parameter/c boolean?)]) + ; XXX can't contract the above (well) because they refer to structs + ; XXX can't contract exn:xml beacuse of parent + (struct exn:xml ()))) - (define-signature reader^ - (read-xml - read-xml/element - read-comments - collapse-whitespace - (struct exn:xml ()))) +(define-signature xexpr^ + ((struct exn:invalid-xexpr (code)) ; XXX needs parent + (contracted + [xexpr/c contract?] + [xexpr? (any/c . -> . boolean?)] + [xexpr->string (xexpr/c . -> . string?)] + [xml->xexpr (any/c . -> . xexpr/c)] ; XXX bad because of struct + [xexpr->xml (xexpr/c . -> . any/c)] ; XXX bad because of struct + [xexpr-drop-empty-attributes (parameter/c boolean?)] + [permissive? (parameter/c boolean?)] + [validate-xexpr (any/c . -> . (one-of/c #t))] + [correct-xexpr? (any/c (-> any/c) (exn:invalid-xexpr? . -> . any/c) . -> . any/c)] + [xexpr-attribute? (any/c . -> . boolean?)] + [listof? ((any/c . -> . boolean?) any/c . -> . boolean?)] + [attribute->srep (any/c . -> . xexpr-attribute?)] ; XXX bad because of struct + [bcompose ((any/c any/c . -> . any/c) (any/c . -> . any/c) . -> . (any/c any/c . -> . any/c))] + [assoc-sort ((listof (list/c symbol? string?)) . -> . (listof (list/c symbol? string?)))]))) - (define-signature xexpr^ - (xml->xexpr - xexpr->xml - xexpr->string - xexpr-drop-empty-attributes - xexpr/c - xexpr? - permissive? - correct-xexpr? - validate-xexpr - (struct exn:invalid-xexpr (code)) - xexpr-attribute? - listof?)) +(define-signature space^ + ((contracted + ; XXX bad because of struct + [eliminate-whitespace ((listof symbol?) (boolean? . -> . boolean?) . -> . (any/c . -> . any/c))]))) - (define-signature extra-xexpr^ - ((open xexpr^) assoc-sort bcompose attribute->srep)) - - (define-signature space^ (eliminate-whitespace)) - - (provide xml-structs^ - writer^ - reader^ - xexpr^ - extra-xexpr^ - space^)) +(provide xml-structs^ + writer^ + reader^ + xexpr^ + space^) diff --git a/collects/xml/private/space.ss b/collects/xml/private/space.ss index dc7444623a..24e24b2891 100644 --- a/collects/xml/private/space.ss +++ b/collects/xml/private/space.ss @@ -1,39 +1,34 @@ +#lang scheme +(require "sig.ss") -(module space mzscheme - (require mzlib/unitsig - mzlib/list) - - (require "sig.ss") - - (provide space@) - - (define space@ - (unit/sig space^ - (import xml-structs^) - - ;; eliminate-whitespace : (listof Symbol) (Bool -> Bool) -> Element -> Element - (define (eliminate-whitespace special eliminate-special?) - (letrec ([blank-it - (lambda (el) - (let ([name (element-name el)] - [content (map (lambda (x) - (if (element? x) (blank-it x) x)) - (element-content el))]) - (make-element - (source-start el) - (source-stop el) - name - (element-attributes el) - (cond - [(eliminate-special? (memq (element-name el) special)) - (filter (lambda (s) - (not (and (pcdata? s) - (or (all-blank (pcdata-string s)) - (error 'eliminate-blanks "Element <~a> is not allowed to contain text ~e" name (pcdata-string s)))))) - content)] - [else content]))))]) - blank-it)) - - ;; all-blank : String -> Bool - (define (all-blank s) (andmap char-whitespace? (string->list s)))))) +(provide space@) +(define-unit space@ + (import xml-structs^) + (export space^) + + ;; eliminate-whitespace : (listof Symbol) (Bool -> Bool) -> Element -> Element + (define (eliminate-whitespace special eliminate-special?) + (letrec ([blank-it + (lambda (el) + (let ([name (element-name el)] + [content (map (lambda (x) + (if (element? x) (blank-it x) x)) + (element-content el))]) + (make-element + (source-start el) + (source-stop el) + name + (element-attributes el) + (cond + [(eliminate-special? (and (memq (element-name el) special) #t)) + (filter (lambda (s) + (not (and (pcdata? s) + (or (all-blank (pcdata-string s)) + (error 'eliminate-blanks "Element <~a> is not allowed to contain text ~e" name (pcdata-string s)))))) + content)] + [else content]))))]) + blank-it)) + + ;; all-blank : String -> Bool + (define (all-blank s) (andmap char-whitespace? (string->list s)))) diff --git a/collects/xml/private/structures.ss b/collects/xml/private/structures.ss index e2bb74bd55..c939b0cf68 100644 --- a/collects/xml/private/structures.ss +++ b/collects/xml/private/structures.ss @@ -1,86 +1,71 @@ +#lang scheme +(require "sig.ss") -(module structures mzscheme - (require mzlib/unitsig) +(provide xml-structs@) - (require "sig.ss") - - (provide xml-structs@) - - (define xml-structs@ - (unit/sig xml-structs^ - (import) - - ; Location = (make-location Nat Nat Nat) | Symbol - (define-struct location (line char offset)) - - ; Source = (make-source Location Location) - (define-struct source (start stop)) - - ; Document = (make-document Prolog Element (listof Misc)) - (define-struct document (prolog element misc)) - - ; Prolog = (make-prolog (listof Misc) Document-type [Misc ...]) - ; The Misc items after the Document-type are optional arguments to maintain - ; backward compatability with older versions of the XML library. - ;(define-struct prolog (misc dtd misc2)) - - (define-values (struct:prolog real-make-prolog prolog? access-prolog set-prolog!) - (make-struct-type 'prolog #f 3 0)) - - (define (make-prolog misc dtd . misc2) - (real-make-prolog misc dtd misc2)) - - (define prolog-misc (make-struct-field-accessor access-prolog 0 'misc)) - (define set-prolog-misc! (make-struct-field-mutator set-prolog! 0 'misc)) - - (define prolog-dtd (make-struct-field-accessor access-prolog 1 'dtd)) - (define set-prolog-dtd! (make-struct-field-mutator set-prolog! 1 'dtd)) - - (define prolog-misc2 (make-struct-field-accessor access-prolog 2 'misc2)) - (define set-prolog-misc2! (make-struct-field-mutator set-prolog! 2 'misc2)) - - ; Document-type = (make-document-type sym External-dtd #f) - ; | #f - (define-struct document-type (name external inlined)) - - ; External-dtd = (make-external-dtd/public str str) - ; | (make-external-dtd/system str) - ; | #f - (define-struct external-dtd (system)) - (define-struct (external-dtd/public external-dtd) (public)) - (define-struct (external-dtd/system external-dtd) ()) - - ; Element = (make-element Location Location Symbol (listof Attribute) (listof Content)) - (define-struct (element source) (name attributes content)) - - ; Attribute = (make-attribute Location Location Symbol String) - (define-struct (attribute source) (name value)) - - ; Pcdata = (make-pcdata Location Location String) - (define-struct (pcdata source) (string)) - - ; Cdata = (make-cdata Location Location String) - (define-struct (cdata source) (string)) - - ; Content = Pcdata - ; | Element - ; | Entity - ; | Misc - ; | Cdata - - ; Misc = Comment - ; | Processing-instruction - - ; Entity = (make-entity Location Location (U Nat Symbol)) - (define-struct (entity source) (text)) - - ; Processing-instruction = (make-pi Location Location String String) - ; also represents XMLDecl - (define-struct (pi source) (target-name instruction)) - - ; Comment = (make-comment String) - (define-struct comment (text)) - - ; content? : TST -> Bool - (define (content? x) - (or (pcdata? x) (element? x) (entity? x) (comment? x) (pi? x)))))) +(define-unit xml-structs@ + (import) + (export xml-structs^) + + ; Location = (make-location Nat Nat Nat) | Symbol + (define-struct location (line char offset)) + + ; Source = (make-source Location Location) + (define-struct source (start stop)) + + ; Document = (make-document Prolog Element (listof Misc)) + (define-struct document (prolog element misc)) + + ; Prolog = (make-prolog (listof Misc) Document-type (listof Misc)) + (define-struct prolog (misc dtd misc2)) + + ; Document-type = (make-document-type sym External-dtd #f) + ; | #f + (define-struct document-type (name external inlined)) + + ; External-dtd = (make-external-dtd/public str str) + ; | (make-external-dtd/system str) + ; | #f + (define-struct external-dtd (system)) + (define-struct (external-dtd/public external-dtd) (public)) + (define-struct (external-dtd/system external-dtd) ()) + + ; Element = (make-element Location Location Symbol (listof Attribute) (listof Content)) + (define-struct (element source) (name attributes content)) + + ; Attribute = (make-attribute Location Location Symbol String) + (define-struct (attribute source) (name value)) + + ; Pcdata = (make-pcdata Location Location String) + (define-struct (pcdata source) (string)) + + ; Cdata = (make-cdata Location Location String) + (define-struct (cdata source) (string)) + + ; Content = Pcdata + ; | Element + ; | Entity + ; | Misc + ; | Cdata + + ; Misc = Comment + ; | Processing-instruction + + ; Entity = (make-entity Location Location (U Nat Symbol)) + (define-struct (entity source) (text)) + + ; Processing-instruction = (make-pi Location Location String String) + ; also represents XMLDecl + (define-struct (pi source) (target-name instruction)) + + ; Comment = (make-comment String) + (define-struct comment (text)) + + ; content? : TST -> Bool + (define (content? x) + (or (pcdata? x) + (element? x) + (entity? x) + (comment? x) + (cdata? x) + (pi? x)))) diff --git a/collects/xml/private/syntax.ss b/collects/xml/private/syntax.ss index 222833f99f..6b03e9e91f 100644 --- a/collects/xml/private/syntax.ss +++ b/collects/xml/private/syntax.ss @@ -1,213 +1,212 @@ -(module syntax mzscheme - (provide syntax-structs@) - (require mzlib/unitsig - "sig.ss") +#lang scheme +(require "sig.ss") + +; to make error-raising functions named like structure mutators +(define-syntax (struct! stx) + (syntax-case stx () + [(struct-src name (field ...)) + (with-syntax ([struct:name (datum->syntax + (syntax name) + (string->symbol (string-append "struct:" (symbol->string (syntax->datum (syntax name))))))] + [(setter-name ...) + (let ([struct-name + (symbol->string (syntax->datum (syntax name)))]) + (map (lambda (field-name) + (datum->syntax + field-name + (string->symbol + (string-append + "set-" + struct-name + "-" + (symbol->string (syntax->datum field-name)) + "!")))) + (syntax->list (syntax (field ...)))))]) + (syntax + (begin + (define struct:name void) + (define (setter-name s v) + (error (quote setter-name) "cannot mutate XML syntax")) + ...)))])) + +(provide syntax-structs@) +(define-unit syntax-structs@ + (import) + (export xml-structs^) - ; to make error-raising functions named like structure mutators - (define-syntax (struct! stx) - (syntax-case stx () - [(struct-src name (field ...)) - (with-syntax ([struct:name (datum->syntax-object - (syntax name) - (string->symbol (string-append "struct:" (symbol->string (syntax-object->datum (syntax name))))))] - [(setter-name ...) - (let ([struct-name - (symbol->string (syntax-object->datum (syntax name)))]) - (map (lambda (field-name) - (datum->syntax-object - field-name - (string->symbol - (string-append - "set-" - struct-name - "-" - (symbol->string (syntax-object->datum field-name)) - "!")))) - (syntax->list (syntax (field ...)))))]) - (syntax - (begin - (define struct:name void) - (define (setter-name s v) - (error (quote setter-name) "cannot mutate XML syntax")) - ...)))])) + ; The locations from the two sets of structures shouldn't mingle, so I'm + ; re-defining the location structure. Maybe this is not a good idea, but I + ; think it's okay. + (define-struct location (line char offset)) + (define-struct source (start stop)) - (define syntax-structs@ - (unit/sig xml-structs^ - (import) - - ; The locations from the two sets of structures shouldn't mingle, so I'm - ; re-defining the location structure. Maybe this is not a good idea, but I - ; think it's okay. - (define-struct location (line char offset)) - (define-struct source (start stop)) - - ; make-document : prolog element ? -> document - (define (make-document p e ?) e) - - ; make-prolog : ? #f -> prolog - (define (make-prolog ? ??) #f) - - ; make-element : src src sym (listof attribute) (listof content) -> element - (define (make-element from to name attrs content) - (wrap (list* name attrs content) from to)) - - ; make-pcdata : src src str -> pcdata - (define (make-pcdata from to x) - (wrap x from to)) - - ; make-cdata : src src str -> cdata - (define (make-cdata from to x) - (wrap x from to)) - - ; make-entity : src src (U sym num) -> entity - (define (make-entity from to entity) - (wrap entity from to)) - - ; make-comment : str -> comment - ; There is no syntax object representation for comments - (define (make-comment x) #f) - - ; make-pi : src src sym str -> pi - ; There's not really a syntax object representation for pi's either - (define (make-pi from to name val) #f) - - ; make-attribute : src src sym str -> attribute - (define (make-attribute from to name val) - (wrap (list name val) from to)) - - (define (make-document-type . x) #f) - (define (make-external-dtd . x) #f) - (define (make-external-dtd/public . x) #f) - (define (make-external-dtd/system . x) #f) - - ; wrap : tst src src -> syntax - (define (wrap x from to) - (datum->syntax-object #f x (position from to))) - - ; position : src src -> (list #f nat nat nat nat) - (define (position from to) - (let ([start-offset (location-offset from)]) - (list #f (location-line from) (location-char from) start-offset - (- (location-offset to) start-offset)))) - - ; : syntax -> syntax - (define (attribute-name a) (car (syntax->list a))) - (define (attribute-value a) (cadr (syntax->list a))) - - ; : syntax -> syntax - (define (element-name e) (car (syntax->list e))) - (define (element-attributes e) (cadr (syntax->list e))) - (define (element-content e) (cddr (syntax->list e))) - - (define (entity-text e) (syntax-e e)) - - (define (pcdata-string x) (syntax-e x)) - (define (cdata-string x) (syntax-e x)) - - (define (comment-text c) - (error 'comment-text "expected a syntax representation of an XML comment, received ~e" c)) - ; conflate documents with their root elements - (define (document-element d) d) - ; more here - spoof document pieces better? - (define (document-misc d) null) - (define (document-prolog d) null) - - (define (document-type-external dtd) - (error 'document-type-external "expected a dtd, given ~e" dtd)) - - (define (document-type-inlined dtd) - (error 'document-type-inlined "expected a dtd, given ~e" dtd)) - - (define (document-type-name dtd) - (error 'document-type-name "expected a dtd, given ~e" dtd)) - - (define (external-dtd-system x) - (error 'external-dtd-system "expected an external dtd, given ~e" x)) - - (define (external-dtd/public-public x) - (error 'external-dtd/public-public "expected an external dtd, given ~e" x)) - - (define (pi-instruction x) - (error 'pi-instruction "expected a pi, given ~e" x)) - - (define (pi-target-name x) - (error 'pi-target-name "expected a pi, given ~e" x)) - - (define (prolog-dtd x) - (error 'prolog-dtd "expected a prolog, given ~e" x)) - - (define (prolog-misc x) - (error 'prolog-misc "expected a prolog, given ~e" x)) - - (define (prolog-misc2 x) - (error 'prolog-misc2 "expected a prolog, given ~e" x)) - - ; : tst -> bool - (define (attribute? a) - (and (syntax? a) - (let ([x (syntax-object->datum a)]) - (and (pair? x) (symbol? (car x)) - (pair? (cdr x)) (string? (cadr x)) - (null? (cddr x)))))) - - - ; : tst -> bool - (define (comment? x) #f) - - ; : tst -> bool - (define (content? x) - (and (syntax? x) - (or (string? (syntax-object->datum x)) - (element? x)))) - - ; : tst -> bool - (define (element? x) - (and (syntax? x) - (let ([e (syntax-e x)]) - (and (pair? e) (symbol? (car e)) - (pair? (cdr e)) (list? (cadr e)) - (andmap attribute? (cadr e)) - (list? (cddr e)) - (andmap content? (cddr e)))))) - - ; : tst -> bool - (define document? element?) - - ; : tst -> bool - (define (document-type? x) #f) - - ; : tst -> bool - (define (external-dtd/public? x) #f) - (define (external-dtd/system? x) #f) - (define (external-dtd? x) #f) - - (define (prolog? x) #f) - (define (pi? x) #f) - - ; : tst -> bool - (define (pcdata? x) - (and (syntax? x) (string (syntax-e x)))) - (define (cdata? x) - (and (syntax? x) (string (syntax-e x)))) - - ; : tst -> bool - (define (entity? x) - (and (syntax? x) (let ([r (syntax-e x)]) (or (symbol? r) (number? r))))) - - ;(struct! location (line char offset)) - (struct! document (prolog element misc)) - (struct! comment (text)) - (struct! prolog (misc dtd misc2)) - (struct! document-type (name external inlined)) - (struct! external-dtd (system)) - (struct! external-dtd/public (public)) - (struct! external-dtd/system ()) - (struct! element (name attributes content)) - (struct! attribute (name value)) - (struct! pi (target-name instruction)) - ;(struct! source (start stop)) - (struct! pcdata (string)) - (struct! cdata (string)) - (struct! entity (text)) - - ))) + ; make-document : prolog element ? -> document + (define (make-document p e ?) e) + + ; make-prolog : (listof Misc) Document-type (listof Misc) -> prolog + (define (make-prolog misc dtd misc2) #f) + + ; make-element : src src sym (listof attribute) (listof content) -> element + (define (make-element from to name attrs content) + (wrap (list* name attrs content) from to)) + + ; make-pcdata : src src str -> pcdata + (define (make-pcdata from to x) + (wrap x from to)) + + ; make-cdata : src src str -> cdata + (define (make-cdata from to x) + (wrap x from to)) + + ; make-entity : src src (U sym num) -> entity + (define (make-entity from to entity) + (wrap entity from to)) + + ; make-comment : str -> comment + ; There is no syntax object representation for comments + (define (make-comment x) #f) + + ; make-pi : src src sym str -> pi + ; There's not really a syntax object representation for pi's either + (define (make-pi from to name val) #f) + + ; make-attribute : src src sym str -> attribute + (define (make-attribute from to name val) + (wrap (list name val) from to)) + + (define (make-document-type . x) #f) + (define (make-external-dtd . x) #f) + (define (make-external-dtd/public . x) #f) + (define (make-external-dtd/system . x) #f) + + ; wrap : tst src src -> syntax + (define (wrap x from to) + (datum->syntax #f x (position from to))) + + ; position : src src -> (list #f nat nat nat nat) + (define (position from to) + (let ([start-offset (location-offset from)]) + (list #f (location-line from) (location-char from) start-offset + (- (location-offset to) start-offset)))) + + ; : syntax -> syntax + (define (attribute-name a) (car (syntax->list a))) + (define (attribute-value a) (cadr (syntax->list a))) + + ; : syntax -> syntax + (define (element-name e) (car (syntax->list e))) + (define (element-attributes e) (cadr (syntax->list e))) + (define (element-content e) (cddr (syntax->list e))) + + (define (entity-text e) (syntax-e e)) + + (define (pcdata-string x) (syntax-e x)) + (define (cdata-string x) (syntax-e x)) + + (define (comment-text c) + (error 'comment-text "expected a syntax representation of an XML comment, received ~e" c)) + ; conflate documents with their root elements + (define (document-element d) d) + ; more here - spoof document pieces better? + (define (document-misc d) null) + (define (document-prolog d) null) + + (define (document-type-external dtd) + (error 'document-type-external "expected a dtd, given ~e" dtd)) + + (define (document-type-inlined dtd) + (error 'document-type-inlined "expected a dtd, given ~e" dtd)) + + (define (document-type-name dtd) + (error 'document-type-name "expected a dtd, given ~e" dtd)) + + (define (external-dtd-system x) + (error 'external-dtd-system "expected an external dtd, given ~e" x)) + + (define (external-dtd/public-public x) + (error 'external-dtd/public-public "expected an external dtd, given ~e" x)) + + (define (pi-instruction x) + (error 'pi-instruction "expected a pi, given ~e" x)) + + (define (pi-target-name x) + (error 'pi-target-name "expected a pi, given ~e" x)) + + (define (prolog-dtd x) + (error 'prolog-dtd "expected a prolog, given ~e" x)) + + (define (prolog-misc x) + (error 'prolog-misc "expected a prolog, given ~e" x)) + + (define (prolog-misc2 x) + (error 'prolog-misc2 "expected a prolog, given ~e" x)) + + ; : tst -> bool + (define (attribute? a) + (and (syntax? a) + (let ([x (syntax->datum a)]) + (and (pair? x) (symbol? (car x)) + (pair? (cdr x)) (string? (cadr x)) + (null? (cddr x)))))) + + + ; : tst -> bool + (define (comment? x) #f) + + ; : tst -> bool + (define (content? x) + (and (syntax? x) + (or (string? (syntax->datum x)) + (element? x)))) + + ; : tst -> bool + (define (element? x) + (and (syntax? x) + (let ([e (syntax-e x)]) + (and (pair? e) (symbol? (car e)) + (pair? (cdr e)) (list? (cadr e)) + (andmap attribute? (cadr e)) + (list? (cddr e)) + (andmap content? (cddr e)))))) + + ; : tst -> bool + (define document? element?) + + ; : tst -> bool + (define (document-type? x) #f) + + ; : tst -> bool + (define (external-dtd/public? x) #f) + (define (external-dtd/system? x) #f) + (define (external-dtd? x) #f) + + (define (prolog? x) #f) + (define (pi? x) #f) + + ; : tst -> bool + (define (pcdata? x) + (and (syntax? x) (string (syntax-e x)))) + (define (cdata? x) + (and (syntax? x) (string (syntax-e x)))) + + ; : tst -> bool + (define (entity? x) + (and (syntax? x) (let ([r (syntax-e x)]) (or (symbol? r) (number? r))))) + + ;(struct! location (line char offset)) + (struct! document (prolog element misc)) + (struct! comment (text)) + (struct! prolog (misc dtd misc2)) + (struct! document-type (name external inlined)) + (struct! external-dtd (system)) + (struct! external-dtd/public (public)) + (struct! external-dtd/system ()) + (struct! element (name attributes content)) + (struct! attribute (name value)) + (struct! pi (target-name instruction)) + ;(struct! source (start stop)) + (struct! pcdata (string)) + (struct! cdata (string)) + (struct! entity (text)) + + ) diff --git a/collects/xml/private/writer.ss b/collects/xml/private/writer.ss index c04aa39da6..f9e364f7c7 100644 --- a/collects/xml/private/writer.ss +++ b/collects/xml/private/writer.ss @@ -1,174 +1,167 @@ +#lang scheme +(require "sig.ss") -(module writer mzscheme - (require mzlib/unitsig - mzlib/list - mzlib/string - mzlib/etc - (only scheme/base for for/fold in-list log-error)) +(provide writer@) + +(define-unit writer@ + (import xml-structs^) + (export writer^) - (require "sig.ss") + ;; (empty-tag-shorthand) : (U 'always 'never (listof Symbol)) + (define empty-tag-shorthand + (make-parameter 'always + (lambda (x) + (if (or (eq? x 'always) (eq? x 'never) (and (list? x) (andmap symbol? x))) + x + (error 'empty-tag-shorthand "expected 'always, 'never, or a list of symbols: received ~e" x))))) - (provide writer@) + (define html-empty-tags '(param meta link isindex input img hr frame col br basefont base area)) - (define writer@ - (unit/sig writer^ - (import xml-structs^) - - ;; (empty-tag-shorthand) : (U 'always 'never (listof Symbol)) - (define empty-tag-shorthand - (make-parameter 'always - (lambda (x) - (if (or (eq? x 'always) (eq? x 'never) (and (list? x) (andmap symbol? x))) - x - (error 'empty-tag-shorthand "expected 'always, 'never, or a list of symbols: received ~e" x))))) - - (define html-empty-tags '(param meta link isindex input img hr frame col br basefont base area)) - - ;; gen-write/display-xml/content : (Nat Output-port -> Void) -> Content [Output-Port]-> Void - (define (gen-write/display-xml/content dent) - (opt-lambda (c [out (current-output-port)]) (write-xml-content c 0 dent out))) - - ;; indent : Nat Output-port -> Void - (define (indent n out) - (newline out) - (let loop ([n n]) - (unless (zero? n) - (display #\space out) - (loop (sub1 n))))) - - ;; write-xml/content : Content [Output-port] -> Void - (define write-xml/content (gen-write/display-xml/content void)) - - ;; display-xml/content : Content [Output-port] -> Void - (define display-xml/content (gen-write/display-xml/content indent)) - - ;; gen-write/display-xml : (Content [Output-port] -> Void) -> Document [Output-port] -> Void - (define (gen-write/display-xml output-content) - (opt-lambda (doc [out (current-output-port)]) - (let ([prolog (document-prolog doc)]) - (display-outside-misc (prolog-misc prolog) out) - (display-dtd (prolog-dtd prolog) out) - (display-outside-misc (prolog-misc2 prolog) out)) - (output-content (document-element doc) out) - (display-outside-misc (document-misc doc) out))) - - ; display-dtd : document-type oport -> void - (define (display-dtd dtd out) - (when dtd - (fprintf out "" out) - (newline out))) - - ;; write-xml : Document [Output-port] -> Void - (define write-xml (gen-write/display-xml write-xml/content)) - - ;; display-xml : Document [Output-port] -> Void - (define display-xml (gen-write/display-xml display-xml/content)) - - ;; display-outside-misc : (listof Misc) Output-port -> Void - (define (display-outside-misc misc out) - (for-each (lambda (x) - ((cond - [(comment? x) write-xml-comment] - [(pi? x) write-xml-pi]) x 0 void out) - (newline out)) - misc)) - - ;; write-xml-content : Content Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-content el over dent out) - ((cond - [(element? el) write-xml-element] - [(pcdata? el) write-xml-pcdata] - [(cdata? el) write-xml-cdata] - [(entity? el) write-xml-entity] - [(comment? el) write-xml-comment] - [(pi? el) write-xml-pi] - [else (error 'write-xml-content "received ~e" el)]) - el over dent out)) - - ;; write-xml-element : Element Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-element el over dent out) - (let* ([name (element-name el)] - [start (lambda (str) - (write-xml-base str over dent out) - (display name out))] - [content (element-content el)]) - (start "<") - (for ([att (in-list (element-attributes el))]) - (fprintf out " ~a=\"~a\"" (attribute-name att) - (escape (attribute-value att) escape-attribute-table))) - (if (and (null? content) - (let ([short (empty-tag-shorthand)]) - (case short - [(always) #t] - [(never) #f] - [else (memq (lowercase-symbol name) short)]))) - (display " />" out) - (begin - (display ">" out) - (for ([c (in-list content)]) - (write-xml-content c (incr over) dent out)) - (start "" out))))) - - ; : sym -> sym - (define lowercases (make-hash-table 'weak)) - (define (lowercase-symbol x) - (or (hash-table-get lowercases x #f) - (let ([s (symbol->string x)]) - (let ([s (string->symbol (string-downcase s))]) - (hash-table-put! lowercases x s) - s)))) - - ;; write-xml-base : (U String Char Symbol) Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-base el over dent out) - (dent over out) - (display el out)) - - ;; write-xml-pcdata : Pcdata Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-pcdata str over dent out) - (write-xml-base (escape (pcdata-string str) escape-table) over dent out)) - - ;; write-xml-cdata : Cdata Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-cdata cdata over dent out) - ;; XXX: Different kind of quote is needed, for assume the user includes the with proper quoting - (write-xml-base (format "~a" (cdata-string cdata)) over dent out)) - - ;; write-xml-pi : Processing-instruction Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-pi pi over dent out) - (write-xml-base (format "" (pi-target-name pi) (pi-instruction pi)) over dent out)) - - ;; write-xml-comment : Comment Nat (Nat Output-Stream -> Void) Output-Stream -> Void - (define (write-xml-comment comment over dent out) - (write-xml-base (format "" (comment-text comment)) over dent out)) - - ;; write-xml-entity : Entity Nat (Nat Output-stream -> Void) Output-stream -> Void - (define (write-xml-entity entity over dent out) - (let ([n (entity-text entity)]) - (fprintf out (if (number? n) "&#~a;" "&~a;") n))) - - (define escape-table #rx"[<>&]") - (define escape-attribute-table #rx"[<>&\"]") - - (define (replace-escaped s) - (case (string-ref s 0) - [(#\<) "<"] - [(#\>) ">"] - [(#\&) "&"] - [(#\") """])) - - ;; escape : String -> String - (define (escape x table) - (regexp-replace* table x replace-escaped)) - - ;; incr : Nat -> Nat - (define (incr n) (+ n 2))))) + ;; gen-write/display-xml/content : (Nat Output-port -> Void) -> Content [Output-Port]-> Void + (define (gen-write/display-xml/content dent) + (lambda (c [out (current-output-port)]) (write-xml-content c 0 dent out))) + + ;; indent : Nat Output-port -> Void + (define (indent n out) + (newline out) + (let loop ([n n]) + (unless (zero? n) + (display #\space out) + (loop (sub1 n))))) + + ;; write-xml/content : Content [Output-port] -> Void + (define write-xml/content (gen-write/display-xml/content void)) + + ;; display-xml/content : Content [Output-port] -> Void + (define display-xml/content (gen-write/display-xml/content indent)) + + ;; gen-write/display-xml : (Content [Output-port] -> Void) -> Document [Output-port] -> Void + (define (gen-write/display-xml output-content) + (lambda (doc [out (current-output-port)]) + (let ([prolog (document-prolog doc)]) + (display-outside-misc (prolog-misc prolog) out) + (display-dtd (prolog-dtd prolog) out) + (display-outside-misc (prolog-misc2 prolog) out)) + (output-content (document-element doc) out) + (display-outside-misc (document-misc doc) out))) + + ; display-dtd : document-type oport -> void + (define (display-dtd dtd out) + (when dtd + (fprintf out "" out) + (newline out))) + + ;; write-xml : Document [Output-port] -> Void + (define write-xml (gen-write/display-xml write-xml/content)) + + ;; display-xml : Document [Output-port] -> Void + (define display-xml (gen-write/display-xml display-xml/content)) + + ;; display-outside-misc : (listof Misc) Output-port -> Void + (define (display-outside-misc misc out) + (for-each (lambda (x) + ((cond + [(comment? x) write-xml-comment] + [(pi? x) write-xml-pi]) x 0 void out) + (newline out)) + misc)) + + ;; write-xml-content : Content Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-content el over dent out) + ((cond + [(element? el) write-xml-element] + [(pcdata? el) write-xml-pcdata] + [(cdata? el) write-xml-cdata] + [(entity? el) write-xml-entity] + [(comment? el) write-xml-comment] + [(pi? el) write-xml-pi] + [else (error 'write-xml-content "received ~e" el)]) + el over dent out)) + + ;; write-xml-element : Element Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-element el over dent out) + (let* ([name (element-name el)] + [start (lambda (str) + (write-xml-base str over dent out) + (display name out))] + [content (element-content el)]) + (start "<") + (for ([att (in-list (element-attributes el))]) + (fprintf out " ~a=\"~a\"" (attribute-name att) + (escape (attribute-value att) escape-attribute-table))) + (if (and (null? content) + (let ([short (empty-tag-shorthand)]) + (case short + [(always) #t] + [(never) #f] + [else (memq (lowercase-symbol name) short)]))) + (display " />" out) + (begin + (display ">" out) + (for ([c (in-list content)]) + (write-xml-content c (incr over) dent out)) + (start "" out))))) + + ; : sym -> sym + (define lowercases (make-weak-hash)) + (define (lowercase-symbol x) + (or (hash-ref lowercases x #f) + (let ([s (symbol->string x)]) + (let ([s (string->symbol (string-downcase s))]) + (hash-set! lowercases x s) + s)))) + + ;; write-xml-base : (U String Char Symbol) Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-base el over dent out) + (dent over out) + (display el out)) + + ;; write-xml-pcdata : Pcdata Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-pcdata str over dent out) + (write-xml-base (escape (pcdata-string str) escape-table) over dent out)) + + ;; write-xml-cdata : Cdata Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-cdata cdata over dent out) + ;; XXX: Different kind of quote is needed, for assume the user includes the with proper quoting + (write-xml-base (format "~a" (cdata-string cdata)) over dent out)) + + ;; write-xml-pi : Processing-instruction Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-pi pi over dent out) + (write-xml-base (format "" (pi-target-name pi) (pi-instruction pi)) over dent out)) + + ;; write-xml-comment : Comment Nat (Nat Output-Stream -> Void) Output-Stream -> Void + (define (write-xml-comment comment over dent out) + (write-xml-base (format "" (comment-text comment)) over dent out)) + + ;; write-xml-entity : Entity Nat (Nat Output-stream -> Void) Output-stream -> Void + (define (write-xml-entity entity over dent out) + (let ([n (entity-text entity)]) + (fprintf out (if (number? n) "&#~a;" "&~a;") n))) + + (define escape-table #rx"[<>&]") + (define escape-attribute-table #rx"[<>&\"]") + + (define (replace-escaped s) + (case (string-ref s 0) + [(#\<) "<"] + [(#\>) ">"] + [(#\&) "&"] + [(#\") """])) + + ;; escape : String -> String + (define (escape x table) + (regexp-replace* table x replace-escaped)) + + ;; incr : Nat -> Nat + (define (incr n) (+ n 2))) diff --git a/collects/xml/private/xexpr.ss b/collects/xml/private/xexpr.ss index 05ec921117..c2c6954365 100644 --- a/collects/xml/private/xexpr.ss +++ b/collects/xml/private/xexpr.ss @@ -1,231 +1,228 @@ -(module xexpr mzscheme - (require mzlib/unitsig - mzlib/list - scheme/contract - scheme/pretty - mzlib/etc) +#lang scheme +(require scheme/pretty) +(require "sig.ss") + +(provide xexpr@) + +(define-unit xexpr@ + (import xml-structs^ writer^) + (export xexpr^) + ;; Xexpr ::= String + ;; | (list* Symbol (listof Attribute-srep) (listof Xexpr)) + ;; | (cons Symbol (listof Xexpr)) + ;; | Symbol + ;; | Nat + ;; | Comment + ;; | Processing-instruction + ;; | Cdata + ;; Attribute-srep ::= (list Symbol String) - (require "sig.ss") + ;; sorting is no longer necessary, since xt3d uses xml->zxexpr, which sorts. - (provide xexpr@) + ;; assoc-sort : (listof (list Symbol a)) -> (listof (list Symbol a)) + (define (assoc-sort to-sort) + (sort to-sort (bcompose stringstring car)))) - (define xexpr@ - (unit/sig extra-xexpr^ - (import xml-structs^ writer^) - ;; Xexpr ::= String - ;; | (list* Symbol (listof Attribute-srep) (listof Xexpr)) - ;; | (cons Symbol (listof Xexpr)) - ;; | Symbol - ;; | Nat - ;; | Comment - ;; | Processing-instruction - ;; | Cdata - ;; Attribute-srep ::= (list Symbol String) - - ;; sorting is no longer necessary, since xt3d uses xml->zxexpr, which sorts. - - ;; assoc-sort : (listof (list Symbol a)) -> (listof (list Symbol a)) - (define (assoc-sort to-sort) - (sort to-sort (bcompose stringstring car)))) - - (define xexpr-drop-empty-attributes (make-parameter #f)) - - (define xexpr/c - (make-proj-contract - 'xexpr? - (lambda (pos neg src-info name) - (lambda (val) - (with-handlers ([exn:invalid-xexpr? - (lambda (exn) - (raise-contract-error - val - src-info - pos - name - "Not an Xexpr. ~a~n~nContext:~n~a" - (exn-message exn) - (pretty-format val)))]) - (validate-xexpr val) - val))) - (lambda (v) #t))) - - (define (xexpr? x) - (correct-xexpr? x (lambda () #t) (lambda (exn) #f))) - - - (define (validate-xexpr x) - (correct-xexpr? x (lambda () #t) (lambda (exn) (raise exn)))) - - ;; ;; ;; ;; ;; ;; ; - ;; ; xexpr? helpers - - (define-struct (exn:invalid-xexpr exn:fail) (code)) - - ;; correct-xexpr? : any (-> a) (exn -> a) -> a - (define (correct-xexpr? x true false) - (cond - ((string? x) (true)) - ((symbol? x) (true)) - ((exact-nonnegative-integer? x) (true)) - ((comment? x) (true)) - ((pi? x) (true)) - ((cdata? x) (true)) - ((list? x) - (or (null? x) - (if (symbol? (car x)) - (if (has-attribute? x) - (and (attribute-pairs? (cadr x) true false) - (andmap (lambda (part) - (correct-xexpr? part true false)) - (cddr x)) - (true)) - (andmap (lambda (part) - (correct-xexpr? part true false)) - (cdr x))) - (false (make-exn:invalid-xexpr - (format - "Expected a symbol as the element name, given ~s" - (car x)) - (current-continuation-marks) - x))))) - (else (false - (make-exn:invalid-xexpr - (format (string-append - "Expected a string, symbol, number, comment, " - "processing instruction, or list, given ~s") - x) - (current-continuation-marks) - x))))) - - ;; has-attribute? : List -> Boolean - ;; True if the Xexpr provided has an attribute list. - (define (has-attribute? x) - (and (> (length x) 1) - (list? (cadr x)) - (andmap (lambda (attr) - (pair? attr)) - (cadr x)))) - - ;; attribute-pairs? : List (-> a) (exn -> a) -> a - ;; True if the list is a list of pairs. - (define (attribute-pairs? attrs true false) - (if (null? attrs) + (define xexpr-drop-empty-attributes (make-parameter #f)) + + (define xexpr/c + (make-proj-contract + 'xexpr? + (lambda (pos neg src-info name) + (lambda (val) + (with-handlers ([exn:invalid-xexpr? + (lambda (exn) + (raise-contract-error + val + src-info + pos + name + "Not an Xexpr. ~a~n~nContext:~n~a" + (exn-message exn) + (pretty-format val)))]) + (validate-xexpr val) + val))) + (lambda (v) #t))) + + (define (xexpr? x) + (correct-xexpr? x (lambda () #t) (lambda (exn) #f))) + + + (define (validate-xexpr x) + (correct-xexpr? x (lambda () #t) (lambda (exn) (raise exn)))) + + ;; ;; ;; ;; ;; ;; ; + ;; ; xexpr? helpers + + (define-struct (exn:invalid-xexpr exn:fail) (code)) + + ;; correct-xexpr? : any (-> a) (exn -> a) -> a + (define (correct-xexpr? x true false) + (cond + ((string? x) (true)) + ((symbol? x) (true)) + ((exact-nonnegative-integer? x) (true)) + ((comment? x) (true)) + ((pi? x) (true)) + ((cdata? x) (true)) + ((pcdata? x) (true)) + ((list? x) + (or (null? x) + (if (symbol? (car x)) + (if (has-attribute? x) + (and (attribute-pairs? (cadr x) true false) + (andmap (lambda (part) + (correct-xexpr? part true false)) + (cddr x)) + (true)) + (andmap (lambda (part) + (correct-xexpr? part true false)) + (cdr x))) + (false (make-exn:invalid-xexpr + (format + "Expected a symbol as the element name, given ~s" + (car x)) + (current-continuation-marks) + x))))) + [(permissive?) (true)] + (else (false + (make-exn:invalid-xexpr + (format (string-append + "Expected a string, symbol, number, comment, " + "processing instruction, or list, given ~s") + x) + (current-continuation-marks) + x))))) + + ;; has-attribute? : List -> Boolean + ;; True if the Xexpr provided has an attribute list. + (define (has-attribute? x) + (and (> (length x) 1) + (list? (cadr x)) + (andmap (lambda (attr) + (pair? attr)) + (cadr x)))) + + ;; attribute-pairs? : List (-> a) (exn -> a) -> a + ;; True if the list is a list of pairs. + (define (attribute-pairs? attrs true false) + (if (null? attrs) + (true) + (let ((attr (car attrs))) + (if (pair? attr) + (and (attribute-symbol-string? attr true false) + (attribute-pairs? (cdr attrs) true false ) + (true)) + (false + (make-exn:invalid-xexpr + (format "Expected a pair, given ~a" attr) + (current-continuation-marks) + attr)))))) + + ;; attribute-symbol-string? : List (-> a) (exn -> a) -> a + ;; True if the list is a list of String,Symbol pairs. + (define (attribute-symbol-string? attr true false) + (if (symbol? (car attr)) + (if (string? (cadr attr)) (true) - (let ((attr (car attrs))) - (if (pair? attr) - (and (attribute-symbol-string? attr true false) - (attribute-pairs? (cdr attrs) true false ) - (true)) - (false - (make-exn:invalid-xexpr - (format "Expected a pair, given ~a" attr) - (current-continuation-marks) - attr)))))) - - ;; attribute-symbol-string? : List (-> a) (exn -> a) -> a - ;; True if the list is a list of String,Symbol pairs. - (define (attribute-symbol-string? attr true false) - (if (symbol? (car attr)) - (if (string? (cadr attr)) - (true) - (false (make-exn:invalid-xexpr - (format "Expected a string, given ~a" (cadr attr)) - (current-continuation-marks) - (cadr attr)))) (false (make-exn:invalid-xexpr - (format "Expected a symbol, given ~a" (car attr)) + (format "Expected a string, given ~a" (cadr attr)) (current-continuation-marks) - (cadr attr))))) - - ;; ; end xexpr? helpers - ;; ;; ;; ;; ;; ;; ;; ;; - - - ; : (a -> bool) tst -> bool - ; To check if l is a (listof p?) - ; Don't use (and (list? l) (andmap p? l)) because l may be improper. - (define (listof? p? l) - (let listof-p? ([l l]) - (or (null? l) - (and (cons? l) (p? (car l)) (listof-p? (cdr l)))))) - - ; : tst -> bool - (define (xexpr-attribute? b) - (and (pair? b) - (symbol? (car b)) - (pair? (cdr b)) - (string? (cadr b)) - (null? (cddr b)))) - - ; permissive? : parameter bool - (define permissive? (make-parameter #f)) - - ;; xml->xexpr : Content -> Xexpr - (define (xml->xexpr x) - (let* ([non-dropping-combine - (lambda (atts body) - (cons (assoc-sort (map attribute->srep atts)) - body))] - [combine (if (xexpr-drop-empty-attributes) - (lambda (atts body) - (if (null? atts) - body - (non-dropping-combine atts body))) - non-dropping-combine)]) - (let loop ([x x]) - (cond - [(element? x) - (let ([body (map loop (element-content x))] - [atts (element-attributes x)]) - (cons (element-name x) (combine atts body)))] - [(pcdata? x) (pcdata-string x)] - [(entity? x) (entity-text x)] - [(or (comment? x) (pi? x) (cdata? x)) x] - [(document? x) (error 'xml->xexpr "Expected content, given ~e\nUse document-element to extract the content." x)] - [(permissive?) x] - [else (error 'xml->xexpr "Expected content, given ~e" x)])))) - - ;; attribute->srep : Attribute -> Attribute-srep - (define (attribute->srep a) - (list (attribute-name a) (attribute-value a))) - - ;; srep->attribute : Attribute-srep -> Attribute - (define (srep->attribute a) - (unless (and (pair? a) (pair? (cdr a)) (null? (cddr a)) (symbol? (car a)) (string? (cadr a))) - (error 'srep->attribute "expected (list Symbol String) given ~e" a)) - (make-attribute 'scheme 'scheme (car a) (cadr a))) - - ;; xexpr->xml : Xexpr -> Content - ;; The contract is enforced. - (define (xexpr->xml x) + (cadr attr)))) + (false (make-exn:invalid-xexpr + (format "Expected a symbol, given ~a" (car attr)) + (current-continuation-marks) + (cadr attr))))) + + ;; ; end xexpr? helpers + ;; ;; ;; ;; ;; ;; ;; ;; + + + ; : (a -> bool) tst -> bool + ; To check if l is a (listof p?) + ; Don't use (and (list? l) (andmap p? l)) because l may be improper. + (define (listof? p? l) + (let listof-p? ([l l]) + (or (null? l) + (and (cons? l) (p? (car l)) (listof-p? (cdr l)))))) + + ; : tst -> bool + (define (xexpr-attribute? b) + (and (pair? b) + (symbol? (car b)) + (pair? (cdr b)) + (string? (cadr b)) + (null? (cddr b)))) + + ; permissive? : parameter bool + (define permissive? (make-parameter #f)) + + ;; xml->xexpr : Content -> Xexpr + (define (xml->xexpr x) + (let* ([non-dropping-combine + (lambda (atts body) + (cons (assoc-sort (map attribute->srep atts)) + body))] + [combine (if (xexpr-drop-empty-attributes) + (lambda (atts body) + (if (null? atts) + body + (non-dropping-combine atts body))) + non-dropping-combine)]) + (let loop ([x x]) (cond - [(pair? x) - (let ([f (lambda (atts body) - (unless (list? body) - (error 'xexpr->xml - "expected a list of xexprs for the body in ~e" - x)) - (make-element 'scheme 'scheme (car x) - atts - (map xexpr->xml body)))]) - (if (and (pair? (cdr x)) - (or (null? (cadr x)) - (and (pair? (cadr x)) (pair? (caadr x))))) - (f (map srep->attribute (cadr x)) (cddr x)) - (f null (cdr x))))] - [(string? x) (make-pcdata 'scheme 'scheme x)] - [(or (symbol? x) (exact-nonnegative-integer? x)) - (make-entity 'scheme 'scheme x)] + [(element? x) + (let ([body (map loop (element-content x))] + [atts (element-attributes x)]) + (cons (element-name x) (combine atts body)))] + [(pcdata? x) (pcdata-string x)] + [(entity? x) (entity-text x)] [(or (comment? x) (pi? x) (cdata? x)) x] - [else ;(error 'xexpr->xml "malformed xexpr ~e" x) - x])) - - ;; xexpr->string : Xexpression -> String - (define (xexpr->string xexpr) - (let ([port (open-output-string)]) - (write-xml/content (xexpr->xml xexpr) port) - (get-output-string port))) - - ;; bcompose : (a a -> c) (b -> a) -> (b b -> c) - (define (bcompose f g) - (lambda (x y) (f (g x) (g y))))))) + [(document? x) (error 'xml->xexpr "Expected content, given ~e\nUse document-element to extract the content." x)] + [(permissive?) x] + [else (error 'xml->xexpr "Expected content, given ~e" x)])))) + + ;; attribute->srep : Attribute -> Attribute-srep + (define (attribute->srep a) + (list (attribute-name a) (attribute-value a))) + + ;; srep->attribute : Attribute-srep -> Attribute + (define (srep->attribute a) + (unless (and (pair? a) (pair? (cdr a)) (null? (cddr a)) (symbol? (car a)) (string? (cadr a))) + (error 'srep->attribute "expected (list Symbol String) given ~e" a)) + (make-attribute 'scheme 'scheme (car a) (cadr a))) + + ;; xexpr->xml : Xexpr -> Content + ;; The contract is enforced. + (define (xexpr->xml x) + (cond + [(pair? x) + (let ([f (lambda (atts body) + (unless (list? body) + (error 'xexpr->xml + "expected a list of xexprs for the body in ~e" + x)) + (make-element 'scheme 'scheme (car x) + atts + (map xexpr->xml body)))]) + (if (and (pair? (cdr x)) + (or (null? (cadr x)) + (and (pair? (cadr x)) (pair? (caadr x))))) + (f (map srep->attribute (cadr x)) (cddr x)) + (f null (cdr x))))] + [(string? x) (make-pcdata 'scheme 'scheme x)] + [(or (symbol? x) (exact-nonnegative-integer? x)) + (make-entity 'scheme 'scheme x)] + [(or (comment? x) (pi? x) (cdata? x) (pcdata? x)) x] + [else ;(error 'xexpr->xml "malformed xexpr ~e" x) + x])) + + ;; xexpr->string : Xexpression -> String + (define (xexpr->string xexpr) + (let ([port (open-output-string)]) + (write-xml/content (xexpr->xml xexpr) port) + (get-output-string port))) + + ;; bcompose : (a a -> c) (b -> a) -> (b b -> c) + (define (bcompose f g) + (lambda (x y) (f (g x) (g y))))) diff --git a/collects/xml/xml-sig.ss b/collects/xml/xml-sig.ss index 8f6bb02f96..1db8fea971 100644 --- a/collects/xml/xml-sig.ss +++ b/collects/xml/xml-sig.ss @@ -1,14 +1,19 @@ +#lang scheme +(require "private/sig.ss") -(module xml-sig mzscheme - (require mzlib/unitsig) - - (require "private/sig.ss") - - (define-signature xml^ - ((open xml-structs^) (open reader^) (open writer^) (open xexpr^) (open space^) - syntax:read-xml syntax:read-xml/element)) - - (provide xml^)) - +(define-signature xml-syntax^ + ((contracted + ; XXX these should both actually return syntax? that is also xexpr/c + [syntax:read-xml (() (input-port?) . ->* . syntax?)] + [syntax:read-xml/element (() (input-port?) . ->* . syntax?)]))) +(define-signature xml^ + ((open xml-structs^) + (open reader^) + (open writer^) + (open xexpr^) + (open space^) + (open xml-syntax^))) +(provide xml^ + xml-syntax^) diff --git a/collects/xml/xml-unit.ss b/collects/xml/xml-unit.ss index d378e2d1cc..2ea7450497 100644 --- a/collects/xml/xml-unit.ss +++ b/collects/xml/xml-unit.ss @@ -1,28 +1,74 @@ +#lang scheme +(require "xml-sig.ss" + "private/sig.ss" + "private/structures.ss" + "private/reader.ss" + "private/writer.ss" + "private/xexpr.ss" + "private/space.ss" + "private/syntax.ss") -(module xml-unit mzscheme - (require mzlib/unitsig) +(provide xml@) - (require "xml-sig.ss" "private/sig.ss" - "private/structures.ss" - "private/reader.ss" - "private/writer.ss" - "private/xexpr.ss" - "private/space.ss" - "private/syntax.ss") +(define-unit reader->xml-syntax@ + (import reader^) + (export xml-syntax^) + (define syntax:read-xml read-xml) + (define syntax:read-xml/element read-xml/element)) - (provide xml@) +(define-compound-unit/infer xml-syntax@ + (import) + (export xml-syntax^) + (link syntax-structs@ reader@ reader->xml-syntax@)) - (define xml@ - (compound-unit/sig - (import) - (link - [S : xml-structs^ (xml-structs@)] - [SS : xml-structs^ (syntax-structs@)] - [R : reader^ (reader@ S)] - [R2 : reader^ (reader@ SS)] - (U : writer^ (writer@ S)) - (T : xexpr^ (xexpr@ S U)) - (W : space^ (space@ S))) - (export (open S) (open R) (var (R2 read-xml) syntax:read-xml) - (var (R2 read-xml/element) syntax:read-xml/element) - (open U) (open T) (open W))))) +(define-unit native-xml-syntax@ + (import xml-structs^ reader^ xexpr^) + (export xml-syntax^) + + (define (syntax:read-xml [in (current-input-port)]) + (define the-xml (read-xml in)) + (define the-xml-element (document-element the-xml)) + (element->xexpr-syntax the-xml-element)) + + (define (syntax:read-xml/element [in (current-input-port)]) + (define the-xml-element (read-xml/element in)) + (element->xexpr-syntax the-xml-element)) + + (define (position from to) + (let ([start-offset (location-offset from)]) + (list #f (location-line from) (location-char from) start-offset + (- (location-offset to) start-offset)))) + + (define (wrap s e) + (datum->syntax #f e (position (source-start s) (source-stop s)))) + + (define (attribute->syntax a) + (wrap a (list (attribute-name a) (attribute-value a)))) + + (define (non-dropping-combine atts body) + (list* (map attribute->syntax atts) body)) + + (define (combine atts body) + (if (xexpr-drop-empty-attributes) + (if (empty? atts) + body + (non-dropping-combine atts body)) + (non-dropping-combine atts body))) + + (define (element->xexpr-syntax e) + (wrap e + (list* (element-name e) + (combine (element-attributes e) + (map content->xexpr-syntax (element-content e)))))) + + (define (content->xexpr-syntax x) + (cond + [(element? x) (element->xexpr-syntax x)] + [(pcdata? x) (wrap x (pcdata-string x))] + [(entity? x) (wrap x (entity-text x))] + [else (wrap x x)]))) + +(define-compound-unit/infer xml@ + (import) + (export xml-structs^ reader^ xml-syntax^ writer^ xexpr^ space^) + (link xml-structs@ reader@ native-xml-syntax@ writer@ xexpr@ space@)) diff --git a/collects/xml/xml.scrbl b/collects/xml/xml.scrbl index 1b91c065db..155c8d3c9c 100644 --- a/collects/xml/xml.scrbl +++ b/collects/xml/xml.scrbl @@ -81,20 +81,7 @@ Represents a document.} [dtd (or/c document-type false/c)] [misc2 (listof (or/c comment? p-i?))])]{ -Represents a document prolog. The @scheme[make-prolog] binding is -unusual: it accepts two or more arguments, and all arguments after the -first two are collected into the @scheme[misc2] field. - -@examples[ -#:eval xml-eval -(make-prolog empty #f) -(make-prolog empty #f (make-p-i #f #f "k1" "v1")) -(make-prolog empty #f (make-p-i #f #f "k1" "v1") - (make-p-i #f #f "k2" "v2")) -@(code:comment "This example breaks the contract by providing") -@(code:comment "a list rather than a comment or p-i") -(prolog-misc2 (make-prolog empty #f empty)) -] +Represents a document prolog. } @defstruct[document-type ([name symbol?] @@ -273,7 +260,7 @@ Converts an @tech{X-expression} into XML content.} Converts an @tech{X-expression} into a string containing XML.} @defproc[((eliminate-whitespace [tags (listof symbol?)] - [choose (boolean? . -> . any/c)]) + [choose (boolean? . -> . boolean?)]) [elem element?]) element?]{ @@ -284,7 +271,7 @@ tag names as @scheme[tag]s and the identity function as that filters out PCDATA consisting solely of whitespace from those elements, and it raises an error if any non-whitespace text appears. Passing in @scheme[not] as @scheme[choose] filters all elements which -are not named in the @scheme[tags] list. Using @scheme[void] as +are not named in the @scheme[tags] list. Using @scheme[(lambda (x) #t)] as @scheme[choose] filters all elements regardless of the @scheme[tags] list.} diff --git a/collects/xml/xml.ss b/collects/xml/xml.ss index 5fb75ccfd0..f4103edb9d 100644 --- a/collects/xml/xml.ss +++ b/collects/xml/xml.ss @@ -1,10 +1,7 @@ +#lang scheme +(require "xml-sig.ss" + "xml-unit.ss") -(module xml mzscheme - (require mzlib/unitsig) +(define-values/invoke-unit/infer xml@) - (require "xml-sig.ss" - "xml-unit.ss") - - (define-values/invoke-unit/sig xml^ xml@) - - (provide-signature-elements xml^)) +(provide-signature-elements xml^) \ No newline at end of file