diff --git a/basis/multiline/multiline-tests.factor b/basis/multiline/multiline-tests.factor index 357fd2cb6c..25acd9400b 100644 --- a/basis/multiline/multiline-tests.factor +++ b/basis/multiline/multiline-tests.factor @@ -14,3 +14,5 @@ bar [ "hello\nworld" ] [ <" hello world"> ] unit-test + +[ "hello" "world" ] [ <" hello"> <" world"> ] unit-test diff --git a/basis/multiline/multiline.factor b/basis/multiline/multiline.factor index 930e5b9f1c..8737951944 100644 --- a/basis/multiline/multiline.factor +++ b/basis/multiline/multiline.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: namespaces make parser lexer kernel sequences words -quotations math accessors ; +quotations math accessors locals ; IN: multiline (( -- string )) define-inline ; parsing > [ - 2dup start - [ rot dupd [ swap subseq % ] 2dip length + ] [ - rot tail % "\n" % 0 - lexer get next-line swap (parse-multiline-string) + +:: (parse-multiline-string) ( i end -- j ) + lexer get line-text>> :> text + text [ + end text i start* + [| j | i j text subseq % j end length + ] [ + text i tail % CHAR: \n , + lexer get next-line + 0 end (parse-multiline-string) ] if* - ] [ nip unexpected-eof ] if* ; + ] [ end unexpected-eof ] if ; + PRIVATE> : parse-multiline-string ( end-text -- str ) [ - lexer get [ swap (parse-multiline-string) ] change-column drop - ] "" make rest ; + lexer get + [ 1+ swap (parse-multiline-string) ] + change-column drop + ] "" make ; : <" "\">" parse-multiline-string parsed ; parsing