38 lines
		
	
	
		
			1004 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			38 lines
		
	
	
		
			1004 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
| ! Copyright (C) 2006 Chris Double.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: kernel math io io.streams.string sequences strings
 | |
| lazy-lists combinators parser-combinators.simple ;
 | |
| IN: parser-combinators 
 | |
| 
 | |
| : tree-write ( object -- )
 | |
|   { 
 | |
|     { [ dup number?   ] [ write1 ] }
 | |
|     { [ dup string?   ] [ write ] }
 | |
|     { [ dup sequence? ] [ [ tree-write ] each ] }
 | |
|     { [ t             ] [ write ] }
 | |
|   } cond ;
 | |
| 
 | |
| : search ( string parser -- seq )
 | |
|   any-char-parser [ drop f ] <@ <|> <*> parse dup nil? [
 | |
|     drop { }
 | |
|   ] [
 | |
|     car parse-result-parsed [ ] subset 
 | |
|   ] if ;
 | |
| 
 | |
| : search* ( string parsers -- seq )
 | |
|   unclip [ <|> ] reduce any-char-parser [ drop f ] <@ <|> <*> parse dup nil? [
 | |
|     drop { }
 | |
|   ] [
 | |
|     car parse-result-parsed [ ] subset 
 | |
|   ] if ;
 | |
| 
 | |
| : (replace) ( string parser -- seq )
 | |
|   any-char-parser <|> <*> parse-1 ;
 | |
| 
 | |
| : replace ( string parser -- result )
 | |
|  [  (replace) [ tree-write ] each ] string-out ;
 | |
| 
 | |
| : replace* ( string parsers -- result )
 | |
|   swap [ replace ] reduce ;
 | |
| 
 |