     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 '[

    } cond ; inline recursive

: parse-char ( quot: ( ch -- ? ) -- seq )
    1024 <sbuf> [ spot get (parse-char) ] keep >string ; inline

: assure-no-]]> ( pos char -- pos' )
    "]]>" next-matching dup 2 > [ text-w/]]> ] when ;

:: parse-text ( -- string )
    0 :> pos!
    depth get zero? :> no-text
    [| char |
        pos char assure-no-]]> pos!
        no-text [

    #! advance spot to after the substring.
   10 <sbuf> [
       '[ _ keep over [ drop ] [ _ push ] if ] skip-until
   ] keep "" like ; inline

: take-to ( seq -- string )
    '[ _ 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 ; inline

: string-matcher ( str -- quot: ( pos char -- pos ? ) )
    dup length 1 - '[ _ next-matching dup _ > ] ; inline
