From 62a8d45c0e30cda43355d5f2d04e2679b32d1666 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 1 Oct 2008 18:15:41 -0500 Subject: [PATCH] add interpolate --- basis/interpolate/authors.txt | 1 + basis/interpolate/interpolate-tests.factor | 4 ++++ basis/interpolate/interpolate.factor | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 basis/interpolate/authors.txt create mode 100644 basis/interpolate/interpolate-tests.factor create mode 100644 basis/interpolate/interpolate.factor diff --git a/basis/interpolate/authors.txt b/basis/interpolate/authors.txt new file mode 100644 index 0000000000..b4bd0e7b35 --- /dev/null +++ b/basis/interpolate/authors.txt @@ -0,0 +1 @@ +Doug Coleman \ No newline at end of file diff --git a/basis/interpolate/interpolate-tests.factor b/basis/interpolate/interpolate-tests.factor new file mode 100644 index 0000000000..005ae87746 --- /dev/null +++ b/basis/interpolate/interpolate-tests.factor @@ -0,0 +1,4 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: tools.test interpolate ; +IN: interpolate.tests diff --git a/basis/interpolate/interpolate.factor b/basis/interpolate/interpolate.factor new file mode 100644 index 0000000000..27f0756f1f --- /dev/null +++ b/basis/interpolate/interpolate.factor @@ -0,0 +1,21 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: io kernel macros make multiline namespaces parser +peg.ebnf present sequences strings ; +IN: interpolate + +MACRO: interpolate ( string -- ) +[EBNF +var = "${" [^}]+ "}" => [[ second >string [ get present write ] curry ]] +text = [^$]+ => [[ >string [ write ] curry ]] +interpolate = (var|text)* => [[ [ ] join ]] +EBNF] ; + +EBNF: interpolate-locals +var = "${" [^}]+ "}" => [[ [ second >string search , [ present write ] % ] [ ] make ]] +text = [^$]+ => [[ [ >string , [ write ] % ] [ ] make ]] +interpolate = (var|text)* => [[ [ ] join ]] +;EBNF + +: I[ "]I" parse-multiline-string + interpolate-locals parsed \ call parsed ; parsing