#! advance spot to after the substring.
10 <sbuf> [
'[ _ keep over [ drop ] [ _ push ] if ] skip-until
- ] keep >string ; inline
+ ] keep "" like ; inline
: take-to ( seq -- string )
- '[ _ member? ] take-until ;
+ '[ _ member? ] take-until ; inline
: pass-blank ( -- )
#! Advance code past any whitespace, including newlines
[ blank? not ] skip-until ;
: next-matching ( pos ch str -- pos' )
- [ over ] dip nth eq? [ 1 + ] [ drop 0 ] if ;
+ [ over ] dip nth eq? [ 1 + ] [ drop 0 ] if ; inline
: string-matcher ( str -- quot: ( pos char -- pos ? ) )
dup length 1 - '[ _ next-matching dup _ > ] ; inline
} cond ; inline recursive
: parse-char ( quot: ( ch -- ? ) -- seq )
- 1024 <sbuf> [ spot get (parse-char) ] keep >string ; inline
+ 512 <sbuf> [ spot get (parse-char) ] keep "" like ; inline
: assure-no-]]> ( pos char -- pos' )
- "]]>" next-matching dup 2 > [ text-w/]]> ] when ;
+ "]]>" next-matching dup 2 > [ text-w/]]> ] when ; inline
:: parse-text ( -- string )
- 0 :> pos!
depth get zero? :> no-text
+ 0 :> pos!
[| char |
pos char assure-no-]]> pos!
no-text [
pass-blank ">" expect ;
: normalize-quote ( str -- str )
- [ dup "\t\r\n" member? [ drop CHAR: \s ] when ] map ;
+ [ dup "\t\r\n" member? [ drop CHAR: \s ] when ] map! ;
: (parse-quote) ( <-disallowed? ch -- string )
swap '[
: parse-quote ( -- seq )
f parse-quote* ;
-