From 5221193034f9df7b86e35bd082ec34464d96b78e Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Tue, 20 Jan 2009 16:12:09 -0600 Subject: [PATCH] Multiline cleanup and bug fix --- basis/multiline/multiline-tests.factor | 2 ++ basis/multiline/multiline.factor | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) 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