]> gitweb.factorcode.org Git - factor.git/blob - basis/interpolate/interpolate.factor
Update unicode.categories.syntax
[factor.git] / basis / interpolate / interpolate.factor
1 ! Copyright (C) 2008, 2009 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 ;
5 IN: interpolate
6
7 <PRIVATE
8
9 TUPLE: interpolate-var name ;
10
11 : (parse-interpolate) ( string -- )
12     [
13         "${" split1-slice [ >string , ] [
14             [
15                 "}" split1-slice
16                 [ >string interpolate-var boa , ]
17                 [ (parse-interpolate) ] bi*
18             ] when*
19         ] bi*
20     ] unless-empty ;
21
22 : parse-interpolate ( string -- seq )
23     [ (parse-interpolate) ] { } make ;
24
25 : (interpolate) ( string quot -- quot' )
26     [ parse-interpolate ] dip '[
27         dup interpolate-var?
28         [ name>> @ '[ _ @ present write ] ]
29         [ '[ _ write ] ]
30         if
31     ] map [ ] join ; inline
32
33 PRIVATE>
34
35 MACRO: interpolate ( string -- )
36     [ [ get ] ] (interpolate) ;
37
38 : interpolate-locals ( string -- quot )
39     [ search [ ] ] (interpolate) ;
40
41 SYNTAX: I[
42     "]I" parse-multiline-string
43     interpolate-locals over push-all ;