diff --git a/basis/xml/tests/cdata.factor b/basis/xml/tests/cdata.factor new file mode 100644 index 0000000000..ab79679602 --- /dev/null +++ b/basis/xml/tests/cdata.factor @@ -0,0 +1,22 @@ +USING: xml xml.writer tools.test ; +IN: xml.tests + +{ +""" + + + + Python has a n class property in […] + + +""" +} [ +""" + + + + + + +""" string>xml xml>string +] unit-test diff --git a/basis/xml/tokenize/tokenize.factor b/basis/xml/tokenize/tokenize.factor index a85c48a022..660cbeaf36 100644 --- a/basis/xml/tokenize/tokenize.factor +++ b/basis/xml/tokenize/tokenize.factor @@ -92,10 +92,18 @@ HINTS: next* { spot } ; : string-matcher ( str -- quot: ( pos char -- pos ? ) ) dup length 1 - '[ _ next-matching dup _ > ] ; inline +:: (take-string) ( match spot -- sbuf matched? ) + 10 f [ + spot char>> [ + nip over push + spot next* + dup match tail? dup not + ] [ f ] if* + ] loop ; inline + : take-string ( match -- string ) - [ 0 swap string-matcher take-until nip ] keep - dupd [ length ] bi@ 1 - - head - get-char [ missing-close ] unless next ; + [ spot get (take-string) [ missing-close ] unless ] + [ dupd [ length ] bi@ - over shorten "" like ] bi ; : expect ( string -- ) dup length spot get '[ _ [ char>> ] keep next* ] "" replicate-as