]> gitweb.factorcode.org Git - factor.git/commitdiff
Code using interpolation can now compile
authorDaniel Ehrenberg <littledan@Macintosh-103.local>
Tue, 27 Jan 2009 20:33:43 +0000 (14:33 -0600)
committerDaniel Ehrenberg <littledan@Macintosh-103.local>
Tue, 27 Jan 2009 20:33:43 +0000 (14:33 -0600)
basis/xml/interpolate/interpolate-tests.factor
basis/xml/interpolate/interpolate.factor
basis/xml/tests/test.factor

index 621480abb9752f44c58d76989885360d0ace619e..3067254a60e3c6a85af1b8b94b3745d6002f1dbe 100644 (file)
@@ -53,3 +53,6 @@ IN: xml.interpolate.tests
 
 [ "<x>3</x>" ] [ 3 [XML <x><-></x> XML] xml-chunk>string ] unit-test
 [ "<x></x>" ] [ f [XML <x><-></x> XML] xml-chunk>string ] unit-test
+
+\ parse-def must-infer
+[ "" interpolate-chunk ] must-infer
index 9e39ba8fdc4be429cba7ac8b1775c03e216f7be0..0b3bb1545641e43d79fb151a22b249aba85299c7 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: xml xml.state kernel sequences fry assocs xml.data
 accessors strings make multiline parser namespaces macros
-sequences.deep generalizations locals words combinators
+sequences.deep generalizations words combinators
 math present arrays ;
 IN: xml.interpolate
 
@@ -48,23 +48,23 @@ M: interpolated interpolate-item
 : interpolate-xml-doc ( table xml -- xml )
     (clone) [ interpolate-tag ] change-body ;
 
-GENERIC# (each-interpolated) 1 ( item quot -- ) inline
-M: interpolated (each-interpolated) call ;
-M: tag (each-interpolated)
-    swap attrs>> values
-    [ interpolated? ] filter
-    swap each ;
-M: xml (each-interpolated)
-    [ body>> ] dip (each-interpolated) ;
-M: object (each-interpolated) 2drop ;
+: (each-interpolated) ( item quot: ( interpolated -- ) -- )
+     {
+        { [ over interpolated? ] [ call ] }
+        { [ over tag? ] [
+            [ attrs>> values [ interpolated? ] filter ] dip each
+        ] }
+        { [ over xml? ] [ [ body>> ] dip (each-interpolated) ] }
+        [ 2drop ]
+     } cond ; inline recursive
 
 : each-interpolated ( xml quot -- )
     '[ _ (each-interpolated) ] deep-each ; inline
 
-:: number<-> ( doc -- doc )
-    0 :> n! doc [
-        dup var>> [ n >>var n 1+ n! ] unless drop
-    ] each-interpolated doc ;
+: number<-> ( doc -- dup )
+    0 over [
+        dup var>> [ over >>var [ 1+ ] dip ] unless drop
+    ] each-interpolated drop ;
 
 MACRO: interpolate-xml ( string -- doc )
     string>doc number<-> '[ _ interpolate-xml-doc ] ;
index bed729e300eba9f5c60f66e5332e933d65870bb9..e3a7fdbc7aae4c2ffe9f15ded61e849d7954c185 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2005, 2006 Daniel Ehrenberg
+! Copyright (C) 2005, 2009 Daniel Ehrenberg
 ! See http://factorcode.org/license.txt for BSD license.
 IN: xml.tests
 USING: kernel xml tools.test io namespaces make sequences