2007-12-11 01:39:32 -05:00
|
|
|
! Copyright (C) 2007 Daniel Ehrenberg
|
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2017-08-26 19:50:53 -04:00
|
|
|
USING: accessors kernel lexer locals make math namespaces
|
|
|
|
|
sequences ;
|
2007-12-11 01:39:32 -05:00
|
|
|
IN: multiline
|
|
|
|
|
|
2008-09-04 22:38:23 -04:00
|
|
|
<PRIVATE
|
2009-01-20 17:12:09 -05:00
|
|
|
|
2014-05-20 00:26:59 -04:00
|
|
|
:: (scan-multiline-string) ( i end lexer -- j )
|
|
|
|
|
lexer line-text>> :> text
|
2014-05-20 00:38:54 -04:00
|
|
|
lexer still-parsing? [
|
2017-08-26 16:38:18 -04:00
|
|
|
end text i subseq-start-from |[ j |
|
2009-01-21 01:44:43 -05:00
|
|
|
i j text subseq % j end length +
|
|
|
|
|
] [
|
2017-08-26 13:27:25 -04:00
|
|
|
text i short tail % char: \n ,
|
2014-05-20 00:26:59 -04:00
|
|
|
lexer next-line
|
|
|
|
|
0 end lexer (scan-multiline-string)
|
2008-02-07 18:12:50 -05:00
|
|
|
] if*
|
2013-03-24 00:42:26 -04:00
|
|
|
] [ end throw-unexpected-eof ] if ;
|
2012-09-22 19:45:26 -04:00
|
|
|
|
2014-05-20 00:26:59 -04:00
|
|
|
:: (parse-multiline-string) ( end-text lexer skip-n-chars -- str )
|
2007-12-11 17:23:56 -05:00
|
|
|
[
|
2014-05-20 00:26:59 -04:00
|
|
|
lexer
|
|
|
|
|
[ skip-n-chars + end-text lexer (scan-multiline-string) ]
|
2009-01-20 17:12:09 -05:00
|
|
|
change-column drop
|
|
|
|
|
] "" make ;
|
2007-12-11 17:23:56 -05:00
|
|
|
|
2009-08-17 17:05:14 -04:00
|
|
|
PRIVATE>
|
|
|
|
|
|
|
|
|
|
: parse-multiline-string ( end-text -- str )
|
2014-05-20 00:26:59 -04:00
|
|
|
lexer get 1 (parse-multiline-string) ;
|
2009-08-17 17:05:14 -04:00
|
|
|
|
2017-08-26 15:05:26 -04:00
|
|
|
SYNTAX: \[[ "]]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[=[ "]=]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[==[ "]==]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[===[ "]===]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[====[ "]====]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[=====[ "]=====]" parse-multiline-string suffix! ;
|
|
|
|
|
SYNTAX: \[======[ "]======]" parse-multiline-string suffix! ;
|
|
|
|
|
|
|
|
|
|
SYNTAX: \![[ "]]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![=[ "]=]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![==[ "]==]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![===[ "]===]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![====[ "]====]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![=====[ "]=====]" parse-multiline-string drop ;
|
|
|
|
|
SYNTAX: \![======[ "]======]" parse-multiline-string drop ;
|