commit:f530dc195e63368f022f176d9c864280637d889d
author:Chip Black
committer:Chip Black
date:Sun Oct 21 01:29:09 2018 -0500
parents:07a61245db7a05144699f52d99c5c5b469b3459e
Fix multi-line strings
diff --git a/src/script/parser.ne b/src/script/parser.ne
line changes: +8/-17
index 29d815d..1b4275b
--- a/src/script/parser.ne
+++ b/src/script/parser.ne
@@ -17,19 +17,13 @@ const lexer = moo.compile({
   'finish', 'clear', 'buy', 'transact', 'setflag'],
   label:  /[a-zA-Z][a-zA-Z0-9]*:/,
   word:   /[a-zA-Z][a-zA-Z0-9]*/,
-  dqstring: /"(?:\\["\\]|[^\n"\\])*"/,
-  sqstring: /'(?:\\['\\]|[^\n'\\])*'/,
-  mlstring_start: '[[[',
-  mlstring_end:   ']]]',
+  dqstring: { match: /"(?:\\["\\]|[^\n"\\])*"/, value: s => s.slice(1, -1) },
+  sqstring: { match: /'(?:\\['\\]|[^\n'\\])*'/, value: s => s.slice(1, -1) },
+  mlstring: { match: /\[\[\[[^]*?\]\]\]/, lineBreaks: true, value: s => s.slice(3, -3).trim() },
   bang:      '!',
   flag_mark: '$',
   obj_mark:  '@',
-  mlcontent: /.+(?!\]\]\])/,
 });
-
-function cn(l: any[]) {
-	return l.filter(x => x);
-}
 %}
 
 @lexer lexer
@@ -57,12 +51,9 @@ obj_identifier -> %obj_mark %word
 
 number -> %number {% data => parseInt(data[0]) %}
 
-string -> %dqstring {% (s: any[]) => s[0].value.slice(1, -1) %}
-string -> %sqstring {% (s: any[]) => s[0].value.slice(1, -1) %}
-string -> mlstring {% id %}
-mlstring -> %mlstring_start %mlstring_end
-mlstring -> %mlstring_start %word %mlstring_end
-mlstring -> %mlstring_start %mlcontent %mlstring_end
+string -> %dqstring {% data => data[0].value %}
+string -> %sqstring {% data => data[0].value %}
+string -> %mlstring {% data => data[0].value %}
 
-__ -> %ws {% (x: any) => null %}
-_ -> null | %ws {% (x: any) => null %}
+__ -> %ws {% _ => null %}
+_ -> null | %ws {% _ => null %}