peg.search: create a stream-tree-write.

db4
John Benediktsson 2013-03-24 17:29:48 -07:00
parent 3395cdd063
commit b412cab5c7
1 changed files with 11 additions and 10 deletions

View File

@ -1,17 +1,20 @@
! Copyright (C) 2006 Chris Double. ! Copyright (C) 2006 Chris Double.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math io io.streams.string sequences strings USING: combinators continuations io io.streams.string kernel
combinators peg memoize arrays continuations ; math memoize namespaces peg sequences strings ;
IN: peg.search IN: peg.search
: tree-write ( object -- ) : stream-tree-write ( object stream -- )
{ {
{ [ dup number? ] [ write1 ] } { [ over number? ] [ stream-write1 ] }
{ [ dup string? ] [ write ] } { [ over string? ] [ stream-write ] }
{ [ dup sequence? ] [ [ tree-write ] each ] } { [ over sequence? ] [ [ stream-tree-write ] curry each ] }
{ [ t ] [ write ] } { [ t ] [ stream-write ] }
} cond ; } cond ;
: tree-write ( object -- )
output-stream get stream-tree-write ;
MEMO: any-char-parser ( -- parser ) MEMO: any-char-parser ( -- parser )
[ drop t ] satisfy ; [ drop t ] satisfy ;
@ -23,6 +26,4 @@ MEMO: any-char-parser ( -- parser )
any-char-parser 2choice repeat0 parse sift ; any-char-parser 2choice repeat0 parse sift ;
: replace ( string parser -- result ) : replace ( string parser -- result )
[ (replace) [ tree-write ] each ] with-string-writer ; [ (replace) tree-write ] with-string-writer ;