]> gitweb.factorcode.org Git - factor.git/blob - basis/peg/search/search.factor
Switch to https urls
[factor.git] / basis / peg / search / search.factor
1 ! Copyright (C) 2006 Chris Double.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: combinators continuations io io.streams.string kernel
4 literals math namespaces peg sequences strings ;
5 IN: peg.search
6
7 : stream-tree-write ( object stream -- )
8     {
9         { [ over number? ] [ stream-write1 ] }
10         { [ over string? ] [ stream-write ] }
11         { [ over sequence? ] [ [ stream-tree-write ] curry each ] }
12         [ stream-write ]
13     } cond ;
14
15 : tree-write ( object -- )
16     output-stream get stream-tree-write ;
17
18 <PRIVATE
19
20 CONSTANT: any-char-parser $[ [ drop t ] satisfy ]
21
22 PRIVATE>
23
24 : search ( string parser -- seq )
25     any-char-parser [ drop f ] action 2choice repeat0
26     [ parse sift ] [ 3drop { } ] recover ;
27
28 : replace ( string parser -- result )
29     [
30         any-char-parser 2choice repeat0
31         parse sift tree-write
32     ] with-string-writer ;