! Copyright (C) 2007 Daniel Ehrenberg
! See http://factorcode.org/license.txt for BSD license.
USING: accessors combinators kernel lexer locals make math
-namespaces parser quotations sequences words ;
+namespaces parser quotations sequences strings.parser.private
+words ;
IN: multiline
<PRIVATE
[
lexer
[ skip-n-chars + end-text lexer (scan-multiline-string) ]
- change-column drop
+ change-column check-space
] "" make ;
: advance-same-line ( lexer text -- )
[ column>> ] [ line-text>> ] bi
[ "\"\\" member-eq? ] find-from ;
+: check-space ( lexer -- )
+ dup current-char forbid-tab {
+ { CHAR: \s [ advance-char ] }
+ { f [ drop ] }
+ [ "[space]" swap 1string "'" 1surround unexpected ]
+ } case ;
+
DEFER: (parse-string)
: parse-found-token ( accum lexer i elt -- )
[ [ pick push ] bi@ ]
[ drop 2dup next-line% ] if*
(parse-string)
- ] [
- dup advance-char
- dup current-char forbid-tab {
- { CHAR: \s [ advance-char ] }
- { f [ drop ] }
- [ "[space]" swap 1string "'" 1surround unexpected ]
- } case drop
- ] if ;
+ ] [ dup advance-char check-space drop ] if ;
: (parse-string) ( accum lexer -- )
{ sbuf lexer } declare