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
 |