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 present sequences strings splitting fry accessors ;
7 TUPLE: interpolate-var name ;
9 : (parse-interpolate) ( string -- )
11 "${" split1-slice [ >string , ] [
14 [ >string interpolate-var boa , ]
15 [ (parse-interpolate) ] bi*
20 : parse-interpolate ( string -- seq )
21 [ (parse-interpolate) ] { } make ;
23 MACRO: interpolate ( string -- )
26 [ name>> '[ _ get present write ] ]
31 : interpolate-locals ( string -- quot )
34 [ name>> search '[ _ present write ] ]
39 : I[ "]I" parse-multiline-string
40 interpolate-locals parsed \ call parsed ; parsing