Author: nbubna
Date: Wed Sep 24 11:59:21 2008
New Revision: 698687
URL: http://svn.apache.org/viewvc?rev=698687&view=rev
Log:
VELOCITY-616 fix escaping of bracketed directives
Added:
velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity616TestCase.java
(with props)
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/JJTParserState.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.jj
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserTokenManager.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserTreeConstants.java
velocity/engine/trunk/src/parser/Parser.jjt
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/JJTParserState.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/JJTParserState.java?rev=698687&r1=698686&r2=698687&view=diff
==============================================================================
---
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/JJTParserState.java
(original)
+++
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/JJTParserState.java
Wed Sep 24 11:59:21 2008
@@ -1,21 +1,19 @@
-/* Generated By:JJTree: Do not edit this line. JJTParserState.java */
-
+/* Generated By:JavaCC: Do not edit this line. JJTParserState.java Version 4.1
*/
package org.apache.velocity.runtime.parser;
import org.apache.velocity.runtime.parser.node.Node;
+public class JJTParserState {
+ private java.util.List nodes;
+ private java.util.List marks;
-class JJTParserState {
- private java.util.Stack nodes;
- private java.util.Stack marks;
-
- private int sp; // number of nodes on stack
- private int mk; // current mark
+ private int sp; // number of nodes on stack
+ private int mk; // current mark
private boolean node_created;
- JJTParserState() {
- nodes = new java.util.Stack();
- marks = new java.util.Stack();
+ public JJTParserState() {
+ nodes = new java.util.ArrayList();
+ marks = new java.util.ArrayList();
sp = 0;
mk = 0;
}
@@ -23,62 +21,62 @@
/* Determines whether the current node was actually closed and
pushed. This should only be called in the final user action of a
node scope. */
- boolean nodeCreated() {
+ public boolean nodeCreated() {
return node_created;
}
/* Call this to reinitialize the node stack. It is called
automatically by the parser's ReInit() method. */
- void reset() {
- nodes.removeAllElements();
- marks.removeAllElements();
+ public void reset() {
+ nodes.clear();
+ marks.clear();
sp = 0;
mk = 0;
}
/* Returns the root node of the AST. It only makes sense to call
this after a successful parse. */
- Node rootNode() {
- return (Node)nodes.elementAt(0);
+ public Node rootNode() {
+ return (Node)nodes.get(0);
}
/* Pushes a node on to the stack. */
- void pushNode(Node n) {
- nodes.push(n);
+ public void pushNode(Node n) {
+ nodes.add(n);
++sp;
}
/* Returns the node on the top of the stack, and remove it from the
stack. */
- Node popNode() {
+ public Node popNode() {
if (--sp < mk) {
- mk = ((Integer)marks.pop()).intValue();
+ mk = ((Integer)marks.remove(marks.size()-1)).intValue();
}
- return (Node)nodes.pop();
+ return (Node)nodes.remove(nodes.size()-1);
}
/* Returns the node currently on the top of the stack. */
- Node peekNode() {
- return (Node)nodes.peek();
+ public Node peekNode() {
+ return (Node)nodes.get(nodes.size()-1);
}
/* Returns the number of children on the stack in the current node
scope. */
- int nodeArity() {
+ public int nodeArity() {
return sp - mk;
}
- void clearNodeScope(Node n) {
+ public void clearNodeScope(Node n) {
while (sp > mk) {
popNode();
}
- mk = ((Integer)marks.pop()).intValue();
+ mk = ((Integer)marks.remove(marks.size()-1)).intValue();
}
- void openNodeScope(Node n) {
- marks.push(new Integer(mk));
+ public void openNodeScope(Node n) {
+ marks.add(new Integer(mk));
mk = sp;
n.jjtOpen();
}
@@ -88,8 +86,8 @@
children. That number of nodes are popped from the stack and
made the children of the definite node. Then the definite node
is pushed on to the stack. */
- void closeNodeScope(Node n, int num) {
- mk = ((Integer)marks.pop()).intValue();
+ public void closeNodeScope(Node n, int num) {
+ mk = ((Integer)marks.remove(marks.size()-1)).intValue();
while (num-- > 0) {
Node c = popNode();
c.jjtSetParent(n);
@@ -103,24 +101,25 @@
/* A conditional node is constructed if its condition is true. All
the nodes that have been pushed since the node was opened are
- made children of the the conditional node, which is then pushed
+ made children of the conditional node, which is then pushed
on to the stack. If the condition is false the node is not
constructed and they are left on the stack. */
- void closeNodeScope(Node n, boolean condition) {
+ public void closeNodeScope(Node n, boolean condition) {
if (condition) {
int a = nodeArity();
- mk = ((Integer)marks.pop()).intValue();
+ mk = ((Integer)marks.remove(marks.size()-1)).intValue();
while (a-- > 0) {
- Node c = popNode();
- c.jjtSetParent(n);
- n.jjtAddChild(c, a);
+ Node c = popNode();
+ c.jjtSetParent(n);
+ n.jjtAddChild(c, a);
}
n.jjtClose();
pushNode(n);
node_created = true;
} else {
- mk = ((Integer)marks.pop()).intValue();
+ mk = ((Integer)marks.remove(marks.size()-1)).intValue();
node_created = false;
}
}
}
+/* JavaCC - OriginalChecksum=8480fe4a1d30863ae6ba57f195d12191 (do not edit
this line) */
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java?rev=698687&r1=698686&r2=698687&view=diff
==============================================================================
---
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
(original)
+++
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
Wed Sep 24 11:59:21 2008
@@ -175,6 +175,10 @@
// we don't have to call substring method all the time in this method
String dirTag = strDirective.substring(1);
+ if (dirTag.charAt(0) == '{')
+ {
+ dirTag = dirTag.substring(1, dirTag.length() - 1);
+ }
/*
* is this a PD or a control directive?
@@ -789,14 +793,14 @@
}
else if (isVM)
{
- throw new MacroParseException("Invalid arg #"
- + argPos + " in VM " + t.image, currentTemplateName,
t);
+ {if (true) throw new MacroParseException("Invalid arg
#"
+ + argPos + " in VM " + t.image, currentTemplateName,
t);}
}
/* if #foreach and it's the 2nd arg,
ok */
else if (d != null && (!directiveName.equals("foreach") ||
argPos != 1))
{
- throw new MacroParseException("Invalid arg #"
- + argPos + " in directive " + t.image,
currentTemplateName, t);
+ {if (true) throw new MacroParseException("Invalid arg
#"
+ + argPos + " in directive " + t.image,
currentTemplateName, t);}
}
else
{
@@ -810,9 +814,9 @@
{
/* if a VM and it's the 0th arg, not ok */
- throw new MacroParseException("Invalid first arg"
+ {if (true) throw new MacroParseException("Invalid
first arg"
+ " in #macro() directive - must be a"
- + " word token (no \' or \" surrounding)",
currentTemplateName, t);
+ + " word token (no \' or \" surrounding)",
currentTemplateName, t);}
}
}
@@ -2501,224 +2505,98 @@
}
}
- final private boolean jj_2_1(int xla) {
+ private boolean jj_2_1(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_1(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(0, xla); }
}
- final private boolean jj_2_2(int xla) {
+ private boolean jj_2_2(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_2(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(1, xla); }
}
- final private boolean jj_2_3(int xla) {
+ private boolean jj_2_3(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_3(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(2, xla); }
}
- final private boolean jj_2_4(int xla) {
+ private boolean jj_2_4(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_4(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(3, xla); }
}
- final private boolean jj_2_5(int xla) {
+ private boolean jj_2_5(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_5(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(4, xla); }
}
- final private boolean jj_2_6(int xla) {
+ private boolean jj_2_6(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_6(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(5, xla); }
}
- final private boolean jj_2_7(int xla) {
+ private boolean jj_2_7(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_7(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(6, xla); }
}
- final private boolean jj_2_8(int xla) {
+ private boolean jj_2_8(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_8(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(7, xla); }
}
- final private boolean jj_2_9(int xla) {
+ private boolean jj_2_9(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_9(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(8, xla); }
}
- final private boolean jj_2_10(int xla) {
+ private boolean jj_2_10(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_10(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(9, xla); }
}
- final private boolean jj_2_11(int xla) {
+ private boolean jj_2_11(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_11(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(10, xla); }
}
- final private boolean jj_2_12(int xla) {
+ private boolean jj_2_12(int xla) {
jj_la = xla; jj_lastpos = jj_scanpos = token;
try { return !jj_3_12(); }
catch(LookaheadSuccess ls) { return true; }
finally { jj_save(11, xla); }
}
- final private boolean jj_3R_84() {
- if (jj_3R_36()) return true;
- return false;
- }
-
- final private boolean jj_3R_69() {
- if (jj_3R_36()) return true;
- return false;
- }
-
- final private boolean jj_3R_86() {
- if (jj_scan_token(COMMA)) return true;
- if (jj_3R_25()) return true;
- return false;
- }
-
- final private boolean jj_3R_25() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_47()) {
- jj_scanpos = xsp;
- if (jj_3R_48()) {
- jj_scanpos = xsp;
- if (jj_3R_49()) {
- jj_scanpos = xsp;
- if (jj_3R_50()) {
- jj_scanpos = xsp;
- if (jj_3R_51()) {
- jj_scanpos = xsp;
- if (jj_3R_52()) {
- jj_scanpos = xsp;
- if (jj_3R_53()) {
- jj_scanpos = xsp;
- if (jj_3R_54()) {
- jj_scanpos = xsp;
- if (jj_3R_55()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_22() {
- if (jj_3R_36()) return true;
- return false;
- }
-
- final private boolean jj_3R_83() {
- if (jj_3R_20()) return true;
- return false;
- }
-
- final private boolean jj_3R_68() {
- if (jj_3R_20()) return true;
- return false;
- }
-
- final private boolean jj_3R_71() {
- if (jj_3R_25()) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_86()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- final private boolean jj_3_1() {
- if (jj_3R_20()) return true;
- return false;
- }
-
- final private boolean jj_3R_21() {
- if (jj_3R_20()) return true;
- return false;
- }
-
- final private boolean jj_3R_61() {
- if (jj_scan_token(LBRACKET)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_68()) {
- jj_scanpos = xsp;
- if (jj_3R_69()) return true;
- }
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- if (jj_scan_token(DOUBLEDOT)) return true;
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_83()) {
- jj_scanpos = xsp;
- if (jj_3R_84()) return true;
- }
- xsp = jj_scanpos;
- if (jj_scan_token(26)) jj_scanpos = xsp;
- if (jj_scan_token(RBRACKET)) return true;
- return false;
- }
-
- final private boolean jj_3R_64() {
- if (jj_scan_token(LBRACKET)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_71()) jj_scanpos = xsp;
- if (jj_scan_token(RBRACKET)) return true;
- return false;
- }
-
- final private boolean jj_3R_70() {
+ private boolean jj_3R_70() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(26)) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_46() {
- if (jj_3R_66()) return true;
- return false;
- }
-
- final private boolean jj_3_5() {
+ private boolean jj_3_5() {
if (jj_3R_25()) return true;
if (jj_scan_token(COLON)) return true;
if (jj_3R_25()) return true;
@@ -2730,12 +2608,12 @@
return false;
}
- final private boolean jj_3R_45() {
- if (jj_3R_65()) return true;
+ private boolean jj_3R_46() {
+ if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_63() {
+ private boolean jj_3R_63() {
if (jj_scan_token(LEFT_CURLEY)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -2751,7 +2629,12 @@
return false;
}
- final private boolean jj_3_3() {
+ private boolean jj_3R_45() {
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ private boolean jj_3_3() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -2767,42 +2650,42 @@
return false;
}
- final private boolean jj_3R_44() {
+ private boolean jj_3R_44() {
if (jj_3R_64()) return true;
return false;
}
- final private boolean jj_3R_43() {
+ private boolean jj_3R_43() {
if (jj_3R_63()) return true;
return false;
}
- final private boolean jj_3R_42() {
+ private boolean jj_3R_42() {
if (jj_3R_62()) return true;
return false;
}
- final private boolean jj_3R_41() {
+ private boolean jj_3R_41() {
if (jj_3R_61()) return true;
return false;
}
- final private boolean jj_3R_40() {
+ private boolean jj_3R_40() {
if (jj_3R_36()) return true;
return false;
}
- final private boolean jj_3R_39() {
+ private boolean jj_3R_39() {
if (jj_3R_60()) return true;
return false;
}
- final private boolean jj_3R_38() {
+ private boolean jj_3R_38() {
if (jj_3R_59()) return true;
return false;
}
- final private boolean jj_3R_23() {
+ private boolean jj_3R_23() {
if (jj_scan_token(COMMA)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -2810,12 +2693,12 @@
return false;
}
- final private boolean jj_3R_37() {
+ private boolean jj_3R_37() {
if (jj_3R_20()) return true;
return false;
}
- final private boolean jj_3R_24() {
+ private boolean jj_3R_24() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_37()) {
@@ -2849,17 +2732,22 @@
return false;
}
- final private boolean jj_3R_59() {
+ private boolean jj_3R_59() {
if (jj_scan_token(WORD)) return true;
return false;
}
- final private boolean jj_3R_56() {
+ private boolean jj_3R_56() {
if (jj_scan_token(IDENTIFIER)) return true;
return false;
}
- final private boolean jj_3_4() {
+ private boolean jj_3R_30() {
+ if (jj_3R_56()) return true;
+ return false;
+ }
+
+ private boolean jj_3_4() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(26)) jj_scanpos = xsp;
@@ -2869,78 +2757,73 @@
return false;
}
- final private boolean jj_3R_30() {
- if (jj_3R_56()) return true;
- return false;
- }
-
- final private boolean jj_3R_60() {
+ private boolean jj_3R_60() {
if (jj_scan_token(STRING_LITERAL)) return true;
return false;
}
- final private boolean jj_3R_36() {
- if (jj_scan_token(INTEGER_LITERAL)) return true;
+ private boolean jj_3R_28() {
+ if (jj_3R_56()) return true;
return false;
}
- final private boolean jj_3R_28() {
- if (jj_3R_56()) return true;
+ private boolean jj_3R_33() {
+ if (jj_3R_36()) return true;
return false;
}
- final private boolean jj_3R_33() {
- if (jj_3R_36()) return true;
+ private boolean jj_3R_36() {
+ if (jj_scan_token(INTEGER_LITERAL)) return true;
return false;
}
- final private boolean jj_3R_62() {
+ private boolean jj_3R_62() {
if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
return false;
}
- final private boolean jj_3R_32() {
+ private boolean jj_3R_32() {
if (jj_3R_20()) return true;
return false;
}
- final private boolean jj_3R_27() {
+ private boolean jj_3R_27() {
if (jj_3R_36()) return true;
return false;
}
- final private boolean jj_3_10() {
+ private boolean jj_3_10() {
if (jj_3R_29()) return true;
return false;
}
- final private boolean jj_3R_82() {
+ private boolean jj_3R_82() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_25()) return true;
return false;
}
- final private boolean jj_3_8() {
+ private boolean jj_3_8() {
if (jj_3R_29()) return true;
return false;
}
- final private boolean jj_3R_26() {
+ private boolean jj_3R_26() {
if (jj_3R_20()) return true;
return false;
}
- final private boolean jj_3R_66() {
+ private boolean jj_3R_66() {
if (jj_scan_token(FALSE)) return true;
return false;
}
- final private boolean jj_3R_65() {
+ private boolean jj_3R_65() {
if (jj_scan_token(TRUE)) return true;
return false;
}
- final private boolean jj_3_9() {
+ private boolean jj_3_9() {
if (jj_scan_token(DOT)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -2951,7 +2834,7 @@
return false;
}
- final private boolean jj_3R_57() {
+ private boolean jj_3R_57() {
if (jj_3R_25()) return true;
Token xsp;
while (true) {
@@ -2961,7 +2844,7 @@
return false;
}
- final private boolean jj_3_7() {
+ private boolean jj_3_7() {
if (jj_scan_token(DOT)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -2972,7 +2855,7 @@
return false;
}
- final private boolean jj_3R_35() {
+ private boolean jj_3R_35() {
if (jj_scan_token(LCURLY)) return true;
if (jj_scan_token(IDENTIFIER)) return true;
Token xsp;
@@ -2984,7 +2867,7 @@
return false;
}
- final private boolean jj_3_12() {
+ private boolean jj_3_12() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -3000,7 +2883,7 @@
return false;
}
- final private boolean jj_3R_34() {
+ private boolean jj_3R_34() {
if (jj_scan_token(IDENTIFIER)) return true;
Token xsp;
while (true) {
@@ -3010,27 +2893,27 @@
return false;
}
- final private boolean jj_3_2() {
- if (jj_scan_token(DOUBLE_ESCAPE)) return true;
- return false;
- }
-
- final private boolean jj_3R_81() {
+ private boolean jj_3R_81() {
if (jj_scan_token(LPAREN)) return true;
return false;
}
- final private boolean jj_3R_80() {
+ private boolean jj_3R_80() {
if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_79() {
+ private boolean jj_3R_79() {
if (jj_3R_65()) return true;
return false;
}
- final private boolean jj_3R_20() {
+ private boolean jj_3_2() {
+ if (jj_scan_token(DOUBLE_ESCAPE)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_20() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_34()) {
@@ -3040,37 +2923,37 @@
return false;
}
- final private boolean jj_3R_78() {
+ private boolean jj_3R_78() {
if (jj_3R_64()) return true;
return false;
}
- final private boolean jj_3R_77() {
+ private boolean jj_3R_77() {
if (jj_3R_63()) return true;
return false;
}
- final private boolean jj_3R_76() {
+ private boolean jj_3R_76() {
if (jj_3R_62()) return true;
return false;
}
- final private boolean jj_3R_75() {
+ private boolean jj_3R_75() {
if (jj_3R_61()) return true;
return false;
}
- final private boolean jj_3R_74() {
+ private boolean jj_3R_74() {
if (jj_3R_36()) return true;
return false;
}
- final private boolean jj_3R_73() {
+ private boolean jj_3R_73() {
if (jj_3R_20()) return true;
return false;
}
- final private boolean jj_3_6() {
+ private boolean jj_3_6() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -3086,7 +2969,7 @@
return false;
}
- final private boolean jj_3R_29() {
+ private boolean jj_3R_29() {
if (jj_3R_56()) return true;
if (jj_scan_token(LPAREN)) return true;
Token xsp;
@@ -3096,12 +2979,12 @@
return false;
}
- final private boolean jj_3R_72() {
+ private boolean jj_3R_72() {
if (jj_3R_60()) return true;
return false;
}
- final private boolean jj_3R_67() {
+ private boolean jj_3R_67() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(26)) jj_scanpos = xsp;
@@ -3137,27 +3020,27 @@
return false;
}
- final private boolean jj_3R_55() {
+ private boolean jj_3R_55() {
if (jj_3R_62()) return true;
return false;
}
- final private boolean jj_3R_54() {
+ private boolean jj_3R_54() {
if (jj_3R_20()) return true;
return false;
}
- final private boolean jj_3R_53() {
+ private boolean jj_3R_53() {
if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_52() {
+ private boolean jj_3R_52() {
if (jj_3R_65()) return true;
return false;
}
- final private boolean jj_3R_31() {
+ private boolean jj_3R_31() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_11()) {
@@ -3167,7 +3050,7 @@
return false;
}
- final private boolean jj_3_11() {
+ private boolean jj_3_11() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(26)) jj_scanpos = xsp;
@@ -3176,17 +3059,17 @@
return false;
}
- final private boolean jj_3R_58() {
+ private boolean jj_3R_58() {
if (jj_3R_67()) return true;
return false;
}
- final private boolean jj_3R_51() {
+ private boolean jj_3R_51() {
if (jj_3R_64()) return true;
return false;
}
- final private boolean jj_3R_85() {
+ private boolean jj_3R_85() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_25()) return true;
if (jj_scan_token(COLON)) return true;
@@ -3194,56 +3077,180 @@
return false;
}
- final private boolean jj_3R_50() {
+ private boolean jj_3R_50() {
if (jj_3R_63()) return true;
return false;
}
- final private boolean jj_3R_49() {
+ private boolean jj_3R_49() {
if (jj_3R_61()) return true;
return false;
}
- final private boolean jj_3R_48() {
+ private boolean jj_3R_48() {
if (jj_3R_36()) return true;
return false;
}
- final private boolean jj_3R_47() {
+ private boolean jj_3R_47() {
if (jj_3R_60()) return true;
return false;
}
+ private boolean jj_3R_84() {
+ if (jj_3R_36()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_69() {
+ if (jj_3R_36()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_86() {
+ if (jj_scan_token(COMMA)) return true;
+ if (jj_3R_25()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_25() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_47()) {
+ jj_scanpos = xsp;
+ if (jj_3R_48()) {
+ jj_scanpos = xsp;
+ if (jj_3R_49()) {
+ jj_scanpos = xsp;
+ if (jj_3R_50()) {
+ jj_scanpos = xsp;
+ if (jj_3R_51()) {
+ jj_scanpos = xsp;
+ if (jj_3R_52()) {
+ jj_scanpos = xsp;
+ if (jj_3R_53()) {
+ jj_scanpos = xsp;
+ if (jj_3R_54()) {
+ jj_scanpos = xsp;
+ if (jj_3R_55()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ return false;
+ }
+
+ private boolean jj_3R_22() {
+ if (jj_3R_36()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_83() {
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_68() {
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_71() {
+ if (jj_3R_25()) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_86()) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_61() {
+ if (jj_scan_token(LBRACKET)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_68()) {
+ jj_scanpos = xsp;
+ if (jj_3R_69()) return true;
+ }
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ if (jj_scan_token(DOUBLEDOT)) return true;
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_83()) {
+ jj_scanpos = xsp;
+ if (jj_3R_84()) return true;
+ }
+ xsp = jj_scanpos;
+ if (jj_scan_token(26)) jj_scanpos = xsp;
+ if (jj_scan_token(RBRACKET)) return true;
+ return false;
+ }
+
+ private boolean jj_3_1() {
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_21() {
+ if (jj_3R_20()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_64() {
+ if (jj_scan_token(LBRACKET)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_71()) jj_scanpos = xsp;
+ if (jj_scan_token(RBRACKET)) return true;
+ return false;
+ }
+
+ /** Generated Token Manager. */
public ParserTokenManager token_source;
- public Token token, jj_nt;
+ /** Current token. */
+ public Token token;
+ /** Next token. */
+ public Token jj_nt;
private int jj_ntk;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
- public boolean lookingAhead = false;
- private boolean jj_semLA;
private int jj_gen;
final private int[] jj_la1 = new int[62];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
static {
- jj_la1_0();
- jj_la1_1();
- jj_la1_2();
+ jj_la1_init_0();
+ jj_la1_init_1();
+ jj_la1_init_2();
}
- private static void jj_la1_0() {
+ private static void jj_la1_init_0() {
jj_la1_0 = new int[]
{0x9bc1b00,0x0,0x9bc1b00,0x400000,0x1840000,0x8000000,0x30000042,0x0,0x4000000,0x4000000,0x4000000,0x8,0x4000000,0x9bc1b00,0x8,0x4000000,0x80,0x8,0x3c000042,0x4000000,0x0,0x4000000,0x4000000,0x0,0x4000000,0x4000000,0x8000000,0x30000042,0x4000000,0x8,0x3c000042,0x0,0x0,0x0,0x8300300,0x4000000,0x9bc1b00,0x0,0x0,0x0,0x9bc1b00,0x4000000,0x9bc1b00,0x4000000,0x4000000,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x0,0x4000000,0x3c000142,0x4000000,0x8000000,0x30000142,0x4000000,};
}
- private static void jj_la1_1() {
+ private static void jj_la1_init_1() {
jj_la1_1 = new int[]
{0xc6348000,0x48000,0x86300000,0x0,0x0,0x42100000,0x200000,0x6000000,0x0,0x0,0x0,0x0,0x0,0xc6348000,0x0,0x0,0x0,0x0,0x40300000,0x0,0x40100000,0x0,0x0,0x40100000,0x0,0x0,0x100000,0x40200000,0x0,0x0,0x40300000,0x40000000,0x40000000,0x40000000,0x80300000,0x0,0xc6348000,0x10000,0x10000,0x20000,0xc6348000,0x0,0xc6348000,0x0,0x0,0x0,0x20,0x10,0xc00,0xc00,0x3c0,0x3c0,0x1,0x1,0xe,0xe,0x0,0x40300000,0x0,0x40100000,0x200000,0x0,};
}
- private static void jj_la1_2() {
+ private static void jj_la1_init_2() {
jj_la1_2 = new int[]
{0x3,0x0,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x2,0x0,0x1,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x1,0x3,0x0,0x3,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[12];
private boolean jj_rescan = false;
private int jj_gc = 0;
+ /** Constructor with user supplied CharStream. */
public Parser(CharStream stream) {
token_source = new ParserTokenManager(stream);
token = new Token();
@@ -3253,6 +3260,7 @@
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
+ /** Reinitialise. */
public void ReInit(CharStream stream) {
token_source.ReInit(stream);
token = new Token();
@@ -3263,6 +3271,7 @@
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
+ /** Constructor with generated Token Manager. */
public Parser(ParserTokenManager tm) {
token_source = tm;
token = new Token();
@@ -3272,6 +3281,7 @@
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
+ /** Reinitialise. */
public void ReInit(ParserTokenManager tm) {
token_source = tm;
token = new Token();
@@ -3282,7 +3292,7 @@
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
- final private Token jj_consume_token(int kind) throws ParseException {
+ private Token jj_consume_token(int kind) throws ParseException {
Token oldToken;
if ((oldToken = token).next != null) token = token.next;
else token = token.next = token_source.getNextToken();
@@ -3308,7 +3318,7 @@
static private final class LookaheadSuccess extends java.lang.Error { }
final private LookaheadSuccess jj_ls = new LookaheadSuccess();
- final private boolean jj_scan_token(int kind) {
+ private boolean jj_scan_token(int kind) {
if (jj_scanpos == jj_lastpos) {
jj_la--;
if (jj_scanpos.next == null) {
@@ -3329,6 +3339,8 @@
return false;
}
+
+/** Get the next Token. */
final public Token getNextToken() {
if (token.next != null) token = token.next;
else token = token.next = token_source.getNextToken();
@@ -3337,8 +3349,9 @@
return token;
}
+/** Get the specific Token. */
final public Token getToken(int index) {
- Token t = lookingAhead ? jj_scanpos : token;
+ Token t = token;
for (int i = 0; i < index; i++) {
if (t.next != null) t = t.next;
else t = t.next = token_source.getNextToken();
@@ -3346,14 +3359,14 @@
return t;
}
- final private int jj_ntk() {
+ private int jj_ntk() {
if ((jj_nt=token.next) == null)
return (jj_ntk = (token.next=token_source.getNextToken()).kind);
else
return (jj_ntk = jj_nt.kind);
}
- private java.util.Vector jj_expentries = new java.util.Vector();
+ private java.util.List jj_expentries = new java.util.ArrayList();
private int[] jj_expentry;
private int jj_kind = -1;
private int[] jj_lasttokens = new int[100];
@@ -3368,31 +3381,26 @@
for (int i = 0; i < jj_endpos; i++) {
jj_expentry[i] = jj_lasttokens[i];
}
- boolean exists = false;
- for (java.util.Enumeration e = jj_expentries.elements();
e.hasMoreElements();) {
- int[] oldentry = (int[])(e.nextElement());
+ jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator();
it.hasNext();) {
+ int[] oldentry = (int[])(it.next());
if (oldentry.length == jj_expentry.length) {
- exists = true;
for (int i = 0; i < jj_expentry.length; i++) {
if (oldentry[i] != jj_expentry[i]) {
- exists = false;
- break;
+ continue jj_entries_loop;
}
}
- if (exists) break;
+ jj_expentries.add(jj_expentry);
+ break jj_entries_loop;
}
}
- if (!exists) jj_expentries.addElement(jj_expentry);
if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
}
}
+ /** Generate ParseException. */
public ParseException generateParseException() {
- jj_expentries.removeAllElements();
+ jj_expentries.clear();
boolean[] la1tokens = new boolean[68];
- for (int i = 0; i < 68; i++) {
- la1tokens[i] = false;
- }
if (jj_kind >= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
@@ -3416,7 +3424,7 @@
if (la1tokens[i]) {
jj_expentry = new int[1];
jj_expentry[0] = i;
- jj_expentries.addElement(jj_expentry);
+ jj_expentries.add(jj_expentry);
}
}
jj_endpos = 0;
@@ -3424,18 +3432,20 @@
jj_add_error_token(0, 0);
int[][] exptokseq = new int[jj_expentries.size()][];
for (int i = 0; i < jj_expentries.size(); i++) {
- exptokseq[i] = (int[])jj_expentries.elementAt(i);
+ exptokseq[i] = (int[])jj_expentries.get(i);
}
return new ParseException(token, exptokseq, tokenImage);
}
+ /** Enable tracing. */
final public void enable_tracing() {
}
+ /** Disable tracing. */
final public void disable_tracing() {
}
- final private void jj_rescan_token() {
+ private void jj_rescan_token() {
jj_rescan = true;
for (int i = 0; i < 12; i++) {
try {
@@ -3465,7 +3475,7 @@
jj_rescan = false;
}
- final private void jj_save(int index, int xla) {
+ private void jj_save(int index, int xla) {
JJCalls p = jj_2_rtns[index];
while (p.gen > jj_gen) {
if (p.next == null) { p = p.next = new JJCalls(); break; }
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.jj
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.jj?rev=698687&r1=698686&r2=698687&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.jj
(original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.jj
Wed Sep 24 11:59:21 2008
@@ -1,4 +1,4 @@
-/[EMAIL PROTECTED](jjtree) Generated By:JJTree: Do not edit this line.
.\Parser.jj */
+/[EMAIL PROTECTED](jjtree) Generated By:JJTree: Do not edit this line.
C:\java\apache\velocity\head\src\java\org\apache\velocity\runtime\parser\Parser.jj
*/
/[EMAIL PROTECTED]//*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -25,6 +25,22 @@
options
{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/**
* The parser must be non-static in order for the
* above option to work, otherwise the parser value
@@ -32,6 +48,15 @@
*/
STATIC=false;
+
+
+
+
+
+
+
+
+
/**
* Declare that we are accepting unicode input and
* that we are using a custom character stream class
@@ -231,6 +256,10 @@
// we don't have to call substring method all the time in this method
String dirTag = strDirective.substring(1);
+ if (dirTag.charAt(0) == '{')
+ {
+ dirTag = dirTag.substring(1, dirTag.length() - 1);
+ }
/*
* is this a PD or a control directive?
@@ -398,6 +427,7 @@
* Clears all state variables, resets to
* start values, clears stateStack. Call
* before parsing.
+ * @return void
*/
public void clearStateVars()
{
@@ -578,7 +608,7 @@
* for disaster, another long night with Mr. Parser, or both.
*/
- <ESCAPE_DIRECTIVE : (<DOUBLE_ESCAPE>)* "\\#" <WORD> >
+ <ESCAPE_DIRECTIVE : (<DOUBLE_ESCAPE>)* "\\#" (<WORD> | <BRACKETED_WORD>) >
}
@@ -2061,7 +2091,7 @@
jjtree.closeNodeScope(jjtn001, true);
}
}
-/[EMAIL PROTECTED]//[EMAIL PROTECTED](jjtree)*/
+/[EMAIL PROTECTED]/ /[EMAIL PROTECTED](jjtree)*/
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
@@ -2121,7 +2151,7 @@
jjtree.closeNodeScope(jjtn001, true);
}
}
-/[EMAIL PROTECTED]//[EMAIL PROTECTED](jjtree)*/
+/[EMAIL PROTECTED]/ /[EMAIL PROTECTED](jjtree)*/
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
@@ -2312,7 +2342,7 @@
jjtree.closeNodeScope(jjtn001, 2);
}
}
-/[EMAIL PROTECTED]/ )*
+/[EMAIL PROTECTED]/ )*
}
@@ -2346,7 +2376,7 @@
jjtree.closeNodeScope(jjtn001, 2);
}
}
-/[EMAIL PROTECTED]/ )*
+/[EMAIL PROTECTED]/ )*
}
void EqualityExpression() : {}
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserConstants.java?rev=698687&r1=698686&r2=698687&view=diff
==============================================================================
---
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
(original)
+++
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
Wed Sep 24 11:59:21 2008
@@ -1,84 +1,164 @@
/* Generated By:JJTree&JavaCC: Do not edit this line. ParserConstants.java */
package org.apache.velocity.runtime.parser;
+
+/**
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
+ */
public interface ParserConstants {
+ /** End of File. */
int EOF = 0;
+ /** RegularExpression Id. */
int LBRACKET = 1;
+ /** RegularExpression Id. */
int RBRACKET = 2;
+ /** RegularExpression Id. */
int COMMA = 3;
+ /** RegularExpression Id. */
int DOUBLEDOT = 4;
+ /** RegularExpression Id. */
int COLON = 5;
+ /** RegularExpression Id. */
int LEFT_CURLEY = 6;
+ /** RegularExpression Id. */
int RIGHT_CURLEY = 7;
+ /** RegularExpression Id. */
int LPAREN = 8;
+ /** RegularExpression Id. */
int RPAREN = 9;
+ /** RegularExpression Id. */
int REFMOD2_RPAREN = 10;
+ /** RegularExpression Id. */
int ESCAPE_DIRECTIVE = 11;
+ /** RegularExpression Id. */
int SET_DIRECTIVE = 12;
+ /** RegularExpression Id. */
int DOLLAR = 13;
+ /** RegularExpression Id. */
int DOLLARBANG = 14;
+ /** RegularExpression Id. */
int HASH = 17;
+ /** RegularExpression Id. */
int SINGLE_LINE_COMMENT_START = 18;
+ /** RegularExpression Id. */
int DOUBLE_ESCAPE = 19;
+ /** RegularExpression Id. */
int ESCAPE = 20;
+ /** RegularExpression Id. */
int TEXT = 21;
+ /** RegularExpression Id. */
int SINGLE_LINE_COMMENT = 22;
+ /** RegularExpression Id. */
int FORMAL_COMMENT = 23;
+ /** RegularExpression Id. */
int MULTI_LINE_COMMENT = 24;
+ /** RegularExpression Id. */
int WHITESPACE = 26;
+ /** RegularExpression Id. */
int STRING_LITERAL = 27;
+ /** RegularExpression Id. */
int TRUE = 28;
+ /** RegularExpression Id. */
int FALSE = 29;
+ /** RegularExpression Id. */
int NEWLINE = 30;
+ /** RegularExpression Id. */
int MINUS = 31;
+ /** RegularExpression Id. */
int PLUS = 32;
+ /** RegularExpression Id. */
int MULTIPLY = 33;
+ /** RegularExpression Id. */
int DIVIDE = 34;
+ /** RegularExpression Id. */
int MODULUS = 35;
+ /** RegularExpression Id. */
int LOGICAL_AND = 36;
+ /** RegularExpression Id. */
int LOGICAL_OR = 37;
+ /** RegularExpression Id. */
int LOGICAL_LT = 38;
+ /** RegularExpression Id. */
int LOGICAL_LE = 39;
+ /** RegularExpression Id. */
int LOGICAL_GT = 40;
+ /** RegularExpression Id. */
int LOGICAL_GE = 41;
+ /** RegularExpression Id. */
int LOGICAL_EQUALS = 42;
+ /** RegularExpression Id. */
int LOGICAL_NOT_EQUALS = 43;
+ /** RegularExpression Id. */
int LOGICAL_NOT = 44;
+ /** RegularExpression Id. */
int EQUALS = 45;
+ /** RegularExpression Id. */
int END = 46;
+ /** RegularExpression Id. */
int IF_DIRECTIVE = 47;
+ /** RegularExpression Id. */
int ELSEIF_DIRECTIVE = 48;
+ /** RegularExpression Id. */
int ELSE_DIRECTIVE = 49;
+ /** RegularExpression Id. */
int STOP_DIRECTIVE = 50;
+ /** RegularExpression Id. */
int DIGIT = 51;
+ /** RegularExpression Id. */
int INTEGER_LITERAL = 52;
+ /** RegularExpression Id. */
int FLOATING_POINT_LITERAL = 53;
+ /** RegularExpression Id. */
int EXPONENT = 54;
+ /** RegularExpression Id. */
int LETTER = 55;
+ /** RegularExpression Id. */
int DIRECTIVE_CHAR = 56;
+ /** RegularExpression Id. */
int WORD = 57;
+ /** RegularExpression Id. */
int BRACKETED_WORD = 58;
+ /** RegularExpression Id. */
int ALPHA_CHAR = 59;
+ /** RegularExpression Id. */
int ALPHANUM_CHAR = 60;
+ /** RegularExpression Id. */
int IDENTIFIER_CHAR = 61;
+ /** RegularExpression Id. */
int IDENTIFIER = 62;
+ /** RegularExpression Id. */
int DOT = 63;
+ /** RegularExpression Id. */
int LCURLY = 64;
+ /** RegularExpression Id. */
int RCURLY = 65;
+ /** RegularExpression Id. */
int REFERENCE_TERMINATOR = 66;
+ /** RegularExpression Id. */
int DIRECTIVE_TERMINATOR = 67;
+ /** Lexical state. */
int DIRECTIVE = 0;
+ /** Lexical state. */
int REFMOD2 = 1;
+ /** Lexical state. */
int REFMODIFIER = 2;
+ /** Lexical state. */
int DEFAULT = 3;
+ /** Lexical state. */
int PRE_DIRECTIVE = 4;
+ /** Lexical state. */
int REFERENCE = 5;
+ /** Lexical state. */
int IN_MULTI_LINE_COMMENT = 6;
+ /** Lexical state. */
int IN_FORMAL_COMMENT = 7;
+ /** Lexical state. */
int IN_SINGLE_LINE_COMMENT = 8;
+ /** Literal token values. */
String[] tokenImage = {
"<EOF>",
"\"[\"",