factor/basis/peg/search/search.factor

33 lines
879 B
Factor
Raw Permalink Normal View History

2007-09-20 18:09:08 -04:00
! Copyright (C) 2006 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
USING: combinators continuations io io.streams.string kernel
2019-09-25 23:26:12 -04:00
literals math namespaces peg sequences strings ;
2008-01-06 12:30:23 -05:00
IN: peg.search
2007-09-20 18:09:08 -04:00
: stream-tree-write ( object stream -- )
{
{ [ over number? ] [ stream-write1 ] }
{ [ over string? ] [ stream-write ] }
{ [ over sequence? ] [ [ stream-tree-write ] curry each ] }
2016-11-27 01:01:03 -05:00
[ stream-write ]
} cond ;
2007-09-20 18:09:08 -04:00
: tree-write ( object -- )
output-stream get stream-tree-write ;
2019-09-25 23:26:12 -04:00
<PRIVATE
CONSTANT: any-char-parser $[ [ drop t ] satisfy ]
PRIVATE>
2007-09-20 18:09:08 -04:00
: search ( string parser -- seq )
any-char-parser [ drop f ] action 2choice repeat0
[ parse sift ] [ 3drop { } ] recover ;
2007-09-20 18:09:08 -04:00
: replace ( string parser -- result )
2019-09-25 23:26:12 -04:00
[
any-char-parser 2choice repeat0
parse sift tree-write
] with-string-writer ;