]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/xml/traversal/traversal.factor
factor: trim using lists
[factor.git] / basis / xml / traversal / traversal.factor
index ce3555fe817cc544b521d2f27c72d67f831a633d..7cf9812cd3af79d110ea8975e39687eedded63ab 100644 (file)
@@ -1,8 +1,7 @@
 ! Copyright (C) 2005, 2009 Daniel Ehrenberg
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel namespaces sequences words io assocs
-quotations strings parser lexer arrays xml.data
-splitting vectors sequences.deep combinators fry memoize ;
+USING: accessors combinators kernel make sequences
+sequences.deep strings xml.data ;
 IN: xml.traversal
 
 : children>string ( tag -- string )
@@ -15,6 +14,11 @@ IN: xml.traversal
         [ concat ]
     } cond ;
 
+: deep-children>string ( tag -- string )
+    children>> [
+        [ dup tag? [ deep-children>string ] when % ] each
+    ] "" make ;
+
 : children-tags ( tag -- sequence )
     children>> [ tag? ] filter ;
 
@@ -28,7 +32,7 @@ IN: xml.traversal
     assure-name '[ _ swap tag-named? ] find nip ;
 
 : tags-named ( tag name/string -- tags-seq )
-    assure-name '[ _ swap tag-named? ] filter { } like ;
+    assure-name '[ _ swap tag-named? ] { } filter-as ;
 
 <PRIVATE
 
@@ -41,7 +45,7 @@ PRIVATE>
     prepare-deep '[ _ swap tag-named? ] deep-find ;
 
 : deep-tags-named ( tag name/string -- tags-seq )
-    prepare-deep '[ _ swap tag-named? ] deep-filter { } like ;
+    prepare-deep '[ _ swap tag-named? ] { } deep-filter-as ;
 
 : tag-with-attr? ( elem attr-value attr-name -- ? )
     rot dup tag? [ swap attr = ] [ 3drop f ] if ;
@@ -49,6 +53,9 @@ PRIVATE>
 : tag-with-attr ( tag attr-value attr-name -- matching-tag )
     assure-name '[ _ _ tag-with-attr? ] find nip ;
 
+: tag-named-with-attr ( tag tag-name attr-value attr-name -- matching-tag )
+    [ tags-named ] 2dip '[ _ _ tag-with-attr? ] find nip ;
+
 : tags-with-attr ( tag attr-value attr-name -- tags-seq )
     assure-name '[ _ _ tag-with-attr? ] { } filter-as ;