sequences.deep strings xml.data ;
IN: xml.traversal
-: children>string ( tag -- string )
- children>> {
+<PRIVATE
+
+: (children>string) ( children -- string )
+ {
{ [ dup empty? ] [ drop "" ] }
{
[ dup [ string? not ] any? ]
[ concat ]
} cond ;
+PRIVATE>
+
+: children>string ( tag -- string )
+ children>> (children>string) ;
+
: deep-children>string ( tag -- string )
children>> [
[ dup tag? [ deep-children>string ] when % ] each
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs combinators kernel lexer make
namespaces parser sequences splitting xml.data xml.syntax
-xml.syntax.private xml.traversal xmode.rules xmode.tokens
-xmode.utilities ;
+xml.syntax.private xml.traversal xml.traversal.private
+xmode.rules xmode.tokens xmode.utilities ;
IN: xmode.loader.syntax
! Rule tag parsing utilities
: string>rule-set-name ( string -- name ) "MAIN" or ;
+: cdata>string ( tag -- string )
+ children>> [ dup cdata? [ text>> ] when ] map (children>string) ;
+
! PROP, PROPS
: parse-prop-tag ( tag -- key value )
[ "NAME" attr ] [ "VALUE" attr ] bi ;
[ attr string>boolean ] with map first3 ;
: parse-literal-matcher ( tag -- matcher )
- dup children>string
+ dup cdata>string
rule-set get ignore-case?>> <string-matcher>
swap position-attrs <matcher> ;
: parse-regexp-matcher ( tag -- matcher )
- dup children>string
+ dup cdata>string
rule-set get ignore-case?>> <?insensitive-regexp>
swap position-attrs <matcher> ;
: init-eol-span-tag ( -- ) [ drop init-eol-span ] , ;
: parse-keyword-tag ( tag keyword-map -- )
- [ dup main>> string>token swap children>string ] dip set-at ;
+ [ dup main>> string>token swap cdata>string ] dip set-at ;