From f29aac24bbf84de061ef2f9bbeb5f7180859a5b8 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 14 May 2013 09:22:14 -0700 Subject: [PATCH] formatting: adding vprintf by request. --- basis/formatting/formatting-tests.factor | 4 +++- basis/formatting/formatting.factor | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/basis/formatting/formatting-tests.factor b/basis/formatting/formatting-tests.factor index 0d70484b0b..413a524b67 100755 --- a/basis/formatting/formatting-tests.factor +++ b/basis/formatting/formatting-tests.factor @@ -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 diff --git a/basis/formatting/formatting.factor b/basis/formatting/formatting.factor index c7e51581ad..c2169bac2b 100644 --- a/basis/formatting/formatting.factor +++ b/basis/formatting/formatting.factor @@ -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 + string 2 CHAR: 0 pad-head ; inline -- 2.34.1