Author: cbrisson Date: Sat Nov 30 13:47:07 2019 New Revision: 1870626 URL: http://svn.apache.org/viewvc?rev=1870626&view=rev Log: [core] Use devoted File Separator control character for parser end of template processing
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/VelocityCharStream.java velocity/engine/trunk/velocity-engine-core/src/main/parser/Parser.jjt velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity919TestCase.java Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/VelocityCharStream.java URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/VelocityCharStream.java?rev=1870626&r1=1870625&r2=1870626&view=diff ============================================================================== --- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/VelocityCharStream.java (original) +++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/VelocityCharStream.java Sat Nov 30 13:47:07 2019 @@ -61,9 +61,11 @@ implements CharStream private int inBuf = 0; /* CB - to properly handle EOF *inside* javacc lexer, - * we send a 'zero-width whitespace' *just before* EOF + * we send a 'file separator' ascii char *just before* EOF + * (see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text) */ private boolean beforeEOF = false; + private static char END_OF_FILE = '\u001C'; private void ExpandBuff(boolean wrapAround) { @@ -161,7 +163,7 @@ implements CharStream inputStream.close(); throw new java.io.IOException(); } - buffer[maxNextCharInd++] = '\u200B'; + buffer[maxNextCharInd++] = END_OF_FILE; beforeEOF = true; } else Modified: velocity/engine/trunk/velocity-engine-core/src/main/parser/Parser.jjt URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/parser/Parser.jjt?rev=1870626&r1=1870625&r2=1870626&view=diff ============================================================================== --- velocity/engine/trunk/velocity-engine-core/src/main/parser/Parser.jjt (original) +++ velocity/engine/trunk/velocity-engine-core/src/main/parser/Parser.jjt Sat Nov 30 13:47:07 2019 @@ -749,7 +749,7 @@ TOKEN_MGR_DECLS: <PRE_DIRECTIVE,PRE_REFERENCE,PRE_OLD_REFERENCE> TOKEN : { - <LONE_SYMBOL: "\u200B" > + <LONE_SYMBOL: "\u001C" > { stateStackPop(); } @@ -759,7 +759,7 @@ TOKEN : <REFERENCE,REFMODIFIER,OLD_REFMODIFIER,REFMOD3,REFINDEX,DIRECTIVE,REFMOD2,DEFAULT,REFMOD,IN_TEXTBLOCK,IN_MULTILINE_COMMENT,IN_FORMAL_COMMENT,IN_SINGLE_LINE_COMMENT> TOKEN : { - <ZERO_WIDTH_WHITESPACE: "\u200B"> + <ZERO_WIDTH_WHITESPACE: "\u001C"> } <REFERENCE, REFMODIFIER, OLD_REFMODIFIER, REFMOD3> @@ -1031,7 +1031,7 @@ MORE : } } -| <"${parser.char.hash}${parser.char.asterisk}${parser.char.asterisk}" ~["${parser.char.hash}","\u200B"]> +| <"${parser.char.hash}${parser.char.asterisk}${parser.char.asterisk}" ~["${parser.char.hash}","\u001C"]> { if (!inComment) { @@ -1179,7 +1179,7 @@ SKIP : <IN_TEXTBLOCK> MORE : { - < ~["\u200B"] > + < ~["\u001C"] > } /* ----------------------------------------------------------------------- @@ -1219,7 +1219,7 @@ TOKEN : // <STRING_LITERAL: ( "\"" ( ~["\"","\n","\r"] )* "\"" ) | ( "'" ( ~["'","\n","\r"] )* "'" ) > < STRING_LITERAL: ("\"" - ( (~["\"","\u200B"]) + ( (~["\"","\u001C"]) | ("\\" ( ["n","t","b","r","f"] | ["0"-"7"] ( ["0"-"7"] )? @@ -1234,7 +1234,7 @@ TOKEN : ) | ("\'" - ( (~["\'","\u200B"]) + ( (~["\'","\u001C"]) | ("''") | ( "\\" (" ")* "\n") )* @@ -1526,12 +1526,12 @@ TOKEN : { <DOUBLE_ESCAPE : "\\\\"> | <ESCAPE: "\\" > -| <TEXT: (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u200B"])* (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n", " ", "\t","\u200B"])+ (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u200B"])* <NEWLINE> ((~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u200B"])* <NEWLINE>)* > +| <TEXT: (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u001C"])* (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n", " ", "\t","\u001C"])+ (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u001C"])* <NEWLINE> ((~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u001C"])* <NEWLINE>)* > } TOKEN : { - <INLINE_TEXT: (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u200B"])+ > + <INLINE_TEXT: (~["${parser.char.dollar}", "${parser.char.hash}", "\\", "\r", "\n","\u001C"])+ > } /** Modified: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity919TestCase.java URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity919TestCase.java?rev=1870626&r1=1870625&r2=1870626&view=diff ============================================================================== --- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity919TestCase.java (original) +++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/issues/Velocity919TestCase.java Sat Nov 30 13:47:07 2019 @@ -28,4 +28,10 @@ public class Velocity919TestCase extends assertEvalEquals("before\u200Bafter", "before\u200Bafter"); } + public void testUserFileSeparator() throws Exception + { + assertEvalEquals("before\u001Cafter", "before\u001Cafter"); + } + } +