]> gitweb.factorcode.org Git - factor.git/commitdiff
formatting: adding vprintf by request.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 14 May 2013 16:22:14 +0000 (09:22 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 14 May 2013 16:23:00 +0000 (09:23 -0700)
basis/formatting/formatting-tests.factor
basis/formatting/formatting.factor

index 0d70484b0b24b7809227f497cf928bd43c1646dd..413a524b671bbaedcb9c97311699d6332fd04823 100755 (executable)
@@ -3,7 +3,7 @@
 USING: calendar kernel formatting tools.test system ;
 IN: formatting.tests
 
-[ "%s" printf ] must-infer 
+[ "%s" printf ] must-infer
 [ "%s" sprintf ] must-infer
 
 [ "" ] [ "" sprintf ] unit-test
@@ -21,6 +21,8 @@ IN: formatting.tests
 [ "1.2346" ] [ 1.23456789 "%.4f" sprintf ] unit-test
 [ "  1.23" ] [ 1.23456789 "%6.2f" sprintf ] unit-test
 
+{ "foo: 1 bar: 2" } [ { 1 2 3 } "foo: %d bar: %s" vsprintf ] unit-test
+
 os windows? [
     [ "1.234000e+008" ] [ 123400000 "%e" sprintf ] unit-test
     [ "-1.234000e+008" ] [ -123400000 "%e" sprintf ] unit-test
index c7e51581ad3aab2512f3d58a82b735b3fe4c49c0..c2169bac2beb38e715375f352f64ad708f8f593c 100644 (file)
@@ -98,6 +98,15 @@ MACRO: printf ( format-string -- )
 : sprintf ( format-string -- result )
     [ printf ] with-string-writer ; inline
 
+: vprintf ( seq format-string -- )
+    parse-printf reverse! [
+        first dup string?
+        [ '[ _ write ] ] [ '[ unclip-slice @ write ] ] if
+    ] map concat call( x -- x ) drop ;
+
+: vsprintf ( seq format-string -- result )
+    [ vprintf ] with-string-writer ; inline
+
 <PRIVATE
 
 : pad-00 ( n -- string ) number>string 2 CHAR: 0 pad-head ; inline