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
[ 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
[ "ß" ] [ "<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
xml.data xml.errors xml.elements ascii xml.entities
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
<PRIVATE
@ -159,6 +160,9 @@ PRIVATE>
xml-stack get first second
] with-state ; inline
: make-xml ( stream quot -- xml )
0 read-seq make-xml-doc ; inline
PRIVATE>
: each-element ( stream quot: ( xml-elem -- ) -- )
@ -169,14 +173,16 @@ PRIVATE>
] with-state ; inline
: read-xml ( stream -- xml )
[ start-document [ process ] when* ]
0 read-seq make-xml-doc ;
dup stream-element-type {
{ +character+ [ [ check ] make-xml ] }
{ +byte+ [ [ start-document [ process ] when* ] make-xml ] }
} case ;
: read-xml-chunk ( stream -- seq )
[ check ] 1 read-seq <xml-chunk> ;
: string>xml ( string -- xml )
<string-reader> [ check ] 0 read-seq make-xml-doc ;
<string-reader> read-xml ;
: string>xml-chunk ( string -- xml )
<string-reader> read-xml-chunk ;