remove math.blas.syntax and merge parsing words into math.blas.vectors/matrices
[factor/jcg.git] / basis / interpolate / interpolate.factor
blob5c859f8947dcdca655a99bec9c4aba763b3b76c7
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
7 <PRIVATE
9 TUPLE: interpolate-var name ;
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 ;
22 : parse-interpolate ( string -- seq )
23     [ (parse-interpolate) ] { } make ;
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
33 PRIVATE>
35 MACRO: interpolate ( string -- )
36     [ [ get ] ] (interpolate) ;
38 : interpolate-locals ( string -- quot )
39     [ search [ ] ] (interpolate) ;
41 : I[
42     "]I" parse-multiline-string
43     interpolate-locals over push-all ; parsing