]> gitweb.factorcode.org Git - factor.git/blob - basis/interpolate/interpolate.factor
add interpolate
[factor.git] / basis / interpolate / interpolate.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: io kernel macros make multiline namespaces parser
4 peg.ebnf present sequences strings ;
5 IN: interpolate
6
7 MACRO: interpolate ( string -- )
8 [EBNF
9 var = "${" [^}]+ "}" => [[ second >string [ get present write ] curry ]]
10 text = [^$]+ => [[ >string [ write ] curry ]]
11 interpolate = (var|text)* => [[ [ ] join ]]
12 EBNF] ;
13
14 EBNF: interpolate-locals
15 var = "${" [^}]+ "}" => [[ [ second >string search , [ present write ] % ] [ ] make ]]
16 text = [^$]+ => [[ [ >string , [ write ] % ] [ ] make ]]
17 interpolate = (var|text)* => [[ [ ] join ]]
18 ;EBNF
19
20 : I[ "]I" parse-multiline-string
21     interpolate-locals parsed \ call parsed ; parsing