! Copyright (C) 2005, 2009 Daniel Ehrenberg
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs combinators
-combinators.short-circuit fry generalizations inverse kernel
-namespaces sequences sequences.generalizations sorting strings
-unicode.categories xml.data xml.syntax xml.syntax.private ;
+combinators.short-circuit inverse kernel namespaces sequences
+sequences.generalizations sorting strings unicode xml.data ;
+USE: xml.syntax.private ! required but does not reference words
IN: xml.syntax.inverse
: remove-blanks ( seq -- newseq )
M: tag [undo-xml] ( tag -- quot: ( tag -- ) )
{
[ name>> main>> '[ name>> main>> _ =/fail ] ]
- [ attrs>> undo-attrs ]
+ [ attrs>> undo-attrs ]
[ children>> [undo-xml] '[ children>> @ ] ]
} cleave '[ _ _ _ tri ] ;
: firstn-strong ( seq n -- ... )
- [ swap length =/fail ]
- [ firstn ] 2bi ; inline
+ [ assure-length ] [ firstn ] 2bi ; inline
M: sequence [undo-xml] ( sequence -- quot: ( seq -- ) )
remove-blanks [ length ] [ [ [undo-xml] ] { } map-as ] bi
: >enum ( assoc -- enum )
! Assumes keys are 0..n
- >alist sort-keys values <enum> ;
+ sort-keys values <enumerated> ;
: undo-xml ( xml -- quot )
- [undo-xml] '[ H{ } clone [ _ bind ] keep >enum ] ;
+ [undo-xml] '[ H{ } clone [ _ with-variables ] keep >enum ] ;
\ interpolate-xml 1 [ undo-xml ] define-pop-inverse