diff --git a/java/src/processing/mode/java/preproc/JavaLexer.g4 b/java/src/processing/mode/java/preproc/JavaLexer.g4 index 13adc7dc9..a4f65f892 100644 --- a/java/src/processing/mode/java/preproc/JavaLexer.g4 +++ b/java/src/processing/mode/java/preproc/JavaLexer.g4 @@ -116,7 +116,7 @@ BOOL_LITERAL: 'true' CHAR_LITERAL: '\'' (~['\\\r\n] | EscapeSequence) '\''; STRING_LITERAL: '"' (~["\\\r\n] | EscapeSequence)* '"'; -MULTI_STRING_LIT: '"""' (~[\\] | EscapeSequence)* '"""'; +MULTI_STRING_LIT: '"""' (~[\\] | EscapeSequence)*? '"""'; NULL_LITERAL: 'null'; // Separators diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index 11a7eee38..7a17a3d81 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -421,8 +421,18 @@ public class ParserTests { } @Test - public void testMultlineString() { + public void testMultilineString() { expectGood("multilinestr"); } + @Test + public void testMultilineStringClass() { + expectGood("multilinestrclass"); + } + + @Test + public void testMultiMultilineString() { + expectGood("multimultilinestr"); + } + } diff --git a/java/test/resources/multilinestrclass.expected b/java/test/resources/multilinestrclass.expected new file mode 100644 index 000000000..5a5a8093d --- /dev/null +++ b/java/test/resources/multilinestrclass.expected @@ -0,0 +1,43 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class multilinestrclass extends PApplet { + +class TestClass { + final String testMultiline1 = "\nline1 \"\nline 2 \"\"\nline 3\nline 4"; + + public String getStr() { + return testMultiline1; + } +} + + + public void setup() { + TestClass test = new TestClass(); + println(test.getStr()); +} + + public void draw() { +} + + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "multilinestrclass" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/multilinestrclass.pde b/java/test/resources/multilinestrclass.pde new file mode 100644 index 000000000..a8e83e840 --- /dev/null +++ b/java/test/resources/multilinestrclass.pde @@ -0,0 +1,20 @@ +class TestClass { + final String testMultiline1 = """ +line1 " +line 2 "" +line 3 +line 4"""; + + String getStr() { + return testMultiline1; + } +} + + +void setup() { + TestClass test = new TestClass(); + println(test.getStr()); +} + +void draw() { +} diff --git a/java/test/resources/multimultilinestr.expected b/java/test/resources/multimultilinestr.expected new file mode 100644 index 000000000..df0d8e41f --- /dev/null +++ b/java/test/resources/multimultilinestr.expected @@ -0,0 +1,35 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class multimultilinestr extends PApplet { + + public void setup() { +String testMultiline1 = "\nline1 \"\nline 2 \"\"\nline 3\nline 4"; +final String testMultiline2 = "\nline5 \"\nline 6 \"\"\nline 7\nline 8"; + +println(testMultiline1); +println(testMultiline2); + + noLoop(); + } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "multimultilinestr" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/multimultilinestr.pde b/java/test/resources/multimultilinestr.pde new file mode 100644 index 000000000..3e4274663 --- /dev/null +++ b/java/test/resources/multimultilinestr.pde @@ -0,0 +1,14 @@ +String testMultiline1 = """ +line1 " +line 2 "" +line 3 +line 4"""; + +final String testMultiline2 = """ +line5 " +line 6 "" +line 7 +line 8"""; + +println(testMultiline1); +println(testMultiline2);