Cleaning up XML to make : string>xml <string-reader> read-xml ;

db4
Daniel Ehrenberg 2009-03-16 18:28:15 -05:00
parent b745930b28
commit 7a0ce748df
2 changed files with 11 additions and 4 deletions

View File

@ -74,3 +74,4 @@ SYMBOL: xml-file
[ "foo" ] [ "<!DOCTYPE foo [<!ENTITY bar 'foo'>]><x>&bar;</x>" string>xml children>string ] unit-test [ "foo" ] [ "<!DOCTYPE foo [<!ENTITY bar 'foo'>]><x>&bar;</x>" string>xml children>string ] unit-test
[ T{ xml-chunk f V{ "hello" } } ] [ "hello" string>xml-chunk ] unit-test [ T{ xml-chunk f V{ "hello" } } ] [ "hello" string>xml-chunk ] unit-test
[ "1.1" ] [ "<?xml version='1.1'?><x/>" string>xml prolog>> version>> ] unit-test [ "1.1" ] [ "<?xml version='1.1'?><x/>" string>xml prolog>> version>> ] unit-test
[ "ß" ] [ "<x>ß</x>" <string-reader> read-xml children>string ] unit-test

View File

@ -4,7 +4,8 @@ USING: accessors arrays io io.encodings.binary io.files
io.streams.string kernel namespaces sequences strings io.encodings.utf8 io.streams.string kernel namespaces sequences strings io.encodings.utf8
xml.data xml.errors xml.elements ascii xml.entities xml.data xml.errors xml.elements ascii xml.entities
xml.writer xml.state xml.autoencoding assocs xml.tokenize xml.writer xml.state xml.autoencoding assocs xml.tokenize
combinators.short-circuit xml.name splitting io.streams.byte-array ; combinators.short-circuit xml.name splitting io.streams.byte-array
combinators ;
IN: xml IN: xml
<PRIVATE <PRIVATE
@ -159,6 +160,9 @@ PRIVATE>
xml-stack get first second xml-stack get first second
] with-state ; inline ] with-state ; inline
: make-xml ( stream quot -- xml )
0 read-seq make-xml-doc ; inline
PRIVATE> PRIVATE>
: each-element ( stream quot: ( xml-elem -- ) -- ) : each-element ( stream quot: ( xml-elem -- ) -- )
@ -169,14 +173,16 @@ PRIVATE>
] with-state ; inline ] with-state ; inline
: read-xml ( stream -- xml ) : read-xml ( stream -- xml )
[ start-document [ process ] when* ] dup stream-element-type {
0 read-seq make-xml-doc ; { +character+ [ [ check ] make-xml ] }
{ +byte+ [ [ start-document [ process ] when* ] make-xml ] }
} case ;
: read-xml-chunk ( stream -- seq ) : read-xml-chunk ( stream -- seq )
[ check ] 1 read-seq <xml-chunk> ; [ check ] 1 read-seq <xml-chunk> ;
: string>xml ( string -- xml ) : string>xml ( string -- xml )
<string-reader> [ check ] 0 read-seq make-xml-doc ; <string-reader> read-xml ;
: string>xml-chunk ( string -- xml ) : string>xml-chunk ( string -- xml )
<string-reader> read-xml-chunk ; <string-reader> read-xml-chunk ;