22 lines
		
	
	
		
			721 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			721 B
		
	
	
	
		
			Factor
		
	
	
| ! 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
 |