It wasn't used and our new multiline strings are better.
{ $example "USING: multiline ;"
"/* I think that I shall never see"
" A poem lovely as a tree. */"
- ""
- }
-} ;
-
-HELP: HEREDOC:
-{ $syntax "HEREDOC: marker\n...text...\nmarker" }
-{ $values { "marker" "a word (token)" } { "text" "arbitrary text" } { "value" string } }
-{ $description "Returns a string delimited by an arbitrary user-defined token. This delimiter must be exactly the text beginning at the first non-blank character after " { $link POSTPONE: HEREDOC: } " until the end of the line containing " { $link POSTPONE: HEREDOC: } ". Text is captured until a line is found containing exactly this delimiter string." }
-{ $warning "Whitespace is significant." }
-{ $examples
- { $example "USING: multiline prettyprint ;"
- "HEREDOC: END\nx\nEND\n."
- "\"x\\n\""
- }
- { $example "USING: multiline prettyprint sequences ;"
- "2 5 HEREDOC: zap\nfoo\nbar\nzap\nsubseq ."
- "\"o\\nb\""
+ ""
}
} ;
"Multiline strings:"
{ $subsections
POSTPONE: STRING:
- POSTPONE: HEREDOC:
+ POSTPONE: [[
+ POSTPONE: [=[
+ POSTPONE: [==[
+ POSTPONE: [===[
+ POSTPONE: [====[
+ POSTPONE: [=====[
}
"Multiline comments:"
{ $subsections POSTPONE: /* }
{ "foo\nbar\n" } [ test-it ] unit-test
-
-! HEREDOC:
-
-{ "foo\nbar\n" } [ HEREDOC: END
-foo
-bar
-END
-] unit-test
-
-{ "" } [ HEREDOC: END
-END
-] unit-test
-
-{ " END\n" } [ HEREDOC: END
- END
-END
-] unit-test
-
-{ "\n" } [ HEREDOC: END
-
-END
-] unit-test
-
-{ "x\n" } [ HEREDOC: END
-x
-END
-] unit-test
-
-{ "x\n" } [ HEREDOC: END
-x
-END
-] unit-test
-
-! there's a space after xyz
-{ "xyz \n" } [ HEREDOC: END
-xyz
-END
-] unit-test
-
-{ "} ! * # \" «\n" } [ HEREDOC: END
-} ! * # " «
-END
-] unit-test
-
-{ 21 "foo\nbar\n" " HEREDOC: FOO\n FOO\n" 22 } [ 21 HEREDOC: X
-foo
-bar
-X
-HEREDOC: END
- HEREDOC: FOO
- FOO
-END
-22 ] unit-test
-
-{ "lol\n xyz\n" }
-[
-HEREDOC: xyz
-lol
- xyz
-xyz
-] unit-test
-
/*
<<
SYNTAX: MULTILINE-LITERAL: parse-here suffix! ;
: advance-same-line ( lexer text -- )
length [ + ] curry change-column drop ;
-:: (parse-til-line-begins) ( begin-text lexer -- )
- lexer still-parsing? [
- lexer line-text>> begin-text sequence= [
- lexer begin-text advance-same-line
- ] [
- lexer line-text>> % CHAR: \n ,
- lexer next-line
- begin-text lexer (parse-til-line-begins)
- ] if
- ] [
- begin-text bad-heredoc
- ] if ;
-
-: parse-til-line-begins ( begin-text lexer -- seq )
- [ (parse-til-line-begins) ] "" make ;
-
PRIVATE>
: parse-multiline-string ( end-text -- str )
SYNTAX: /* "*/" parse-multiline-string drop ;
-SYNTAX: HEREDOC:
- lexer get {
- [ skip-blank ]
- [ rest-of-line ]
- [ next-line ]
- [ parse-til-line-begins ]
- } cleave suffix! ;
-
SYNTAX: [[ "]]" parse-multiline-string suffix! ;
SYNTAX: [=[ "]=]" parse-multiline-string suffix! ;
SYNTAX: [==[ "]==]" parse-multiline-string suffix! ;
syn region factorString matchgroup=factorStringDelims start=/\v<"""/ skip=/\v\\"/ end=/\v"""/ contains=factorEscape
syn region factorString matchgroup=factorStringDelims start=/\v<[^[:blank:]"]+"/ skip=/\v\\"/ end=/\v"/ contains=factorEscape
syn region factorString matchgroup=factorStringDelims start=/\v\[\z(\=*)\[/ end=/\]\z1\]/ contains=factorEscape
-syn region factorString matchgroup=factorStringDelims start=/\v<HEREDOC:\s+\z(.*)$>/ end=/\v^\z1$>/
syn region factorString matchgroup=factorStringDelims start=/\v<[^[\][:blank:]]+\[\z(\=*)\[>/ end=/\v\]\z1\]/
syn region factorNamedString matchgroup=factorNamedStringDelims start=/\v<STRING:\s+\S+$>/ end=/\v^<;>$/ contains=factorEscape