xml.tokenize: fix cdata parsing problem.
parent
64e56f65ef
commit
7d489d5839
|
@ -0,0 +1,22 @@
|
||||||
|
USING: xml xml.writer tools.test ;
|
||||||
|
IN: xml.tests
|
||||||
|
|
||||||
|
{
|
||||||
|
"""<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<item>
|
||||||
|
<description>Python has a n class property in [&#8230;]</description>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>"""
|
||||||
|
} [
|
||||||
|
"""<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<item>
|
||||||
|
<description><![CDATA[Python has a n class property in […]]]></description>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>""" string>xml xml>string
|
||||||
|
] unit-test
|
|
@ -92,10 +92,18 @@ HINTS: next* { spot } ;
|
||||||
: string-matcher ( str -- quot: ( pos char -- pos ? ) )
|
: string-matcher ( str -- quot: ( pos char -- pos ? ) )
|
||||||
dup length 1 - '[ _ next-matching dup _ > ] ; inline
|
dup length 1 - '[ _ next-matching dup _ > ] ; inline
|
||||||
|
|
||||||
|
:: (take-string) ( match spot -- sbuf matched? )
|
||||||
|
10 <sbuf> f [
|
||||||
|
spot char>> [
|
||||||
|
nip over push
|
||||||
|
spot next*
|
||||||
|
dup match tail? dup not
|
||||||
|
] [ f ] if*
|
||||||
|
] loop ; inline
|
||||||
|
|
||||||
: take-string ( match -- string )
|
: take-string ( match -- string )
|
||||||
[ 0 swap string-matcher take-until nip ] keep
|
[ spot get (take-string) [ missing-close ] unless ]
|
||||||
dupd [ length ] bi@ 1 - - head
|
[ dupd [ length ] bi@ - over shorten "" like ] bi ;
|
||||||
get-char [ missing-close ] unless next ;
|
|
||||||
|
|
||||||
: expect ( string -- )
|
: expect ( string -- )
|
||||||
dup length spot get '[ _ [ char>> ] keep next* ] "" replicate-as
|
dup length spot get '[ _ [ char>> ] keep next* ] "" replicate-as
|
||||||
|
|
Loading…
Reference in New Issue