You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2009/01/06 01:10:58 UTC
svn commit: r731779 [1/3] - in /velocity/engine/trunk: src/changes/
src/java/org/apache/velocity/runtime/directive/
src/java/org/apache/velocity/runtime/parser/
src/java/org/apache/velocity/runtime/parser/node/ src/parser/
src/test/org/apache/velocity/...
Author: nbubna
Date: Mon Jan 5 16:10:57 2009
New Revision: 731779
URL: http://svn.apache.org/viewvc?rev=731779&view=rev
Log:
VELOCITY-661 add #[[unparsed textblock]]# syntax to replace the limited #literal directive (thx to Jarkko Viinamaki)
Added:
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTTextblock.java (with props)
velocity/engine/trunk/src/test/org/apache/velocity/test/TextblockTestCase.java (with props)
Modified:
velocity/engine/trunk/src/changes/changes.xml
velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Literal.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/xdocs/docs/translations/user-guide_fr.xml
velocity/engine/trunk/xdocs/docs/user-guide.xml
velocity/engine/trunk/xdocs/docs/vtl-reference-guide.xml
Modified: velocity/engine/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/changes/changes.xml?rev=731779&r1=731778&r2=731779&view=diff
==============================================================================
--- velocity/engine/trunk/src/changes/changes.xml (original)
+++ velocity/engine/trunk/src/changes/changes.xml Mon Jan 5 16:10:57 2009
@@ -27,6 +27,12 @@
<body>
<release version="1.7" date="In Subversion">
+ <action type="fix" dev="nbubna" issue="VELOCITY-661" due-to="Jarkko Viinamaki">
+ Added #[[this is included in output but not parsed]]# syntax to replace
+ and deprecate the much more limited #literal directive
+ (which required parse-able content).
+ </action>
+
<action type="fix" dev="byron" issue="VELOCITY-664">
Reduce memory usage of cached templates by preventing text from being stored
twice.
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Literal.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Literal.java?rev=731779&r1=731778&r2=731779&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Literal.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Literal.java Mon Jan 5 16:10:57 2009
@@ -31,10 +31,13 @@
* A very simple directive that leverages the Node.literal()
* to grab the literal rendition of a node. We basically
* grab the literal value on init(), then repeatedly use
- * that during render().
+ * that during render(). <em>This is deprecated and will be
+ * removed in Velocity 2.0; please use #[[unparsed content]]#
+ * instead.</em>
*
* @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
* @version $Id$
+ * @deprecated Use the #[[unparsed content]]# syntax instead.
*/
public class Literal extends Directive
{
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=731779&r1=731778&r2=731779&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 Mon Jan 5 16:10:57 2009
@@ -10,6 +10,7 @@
import org.apache.velocity.runtime.directive.Macro;
import org.apache.velocity.runtime.directive.MacroParseException;
import org.apache.velocity.util.StringUtils;
+import org.apache.commons.lang.text.StrBuilder;
/**
* This class is responsible for parsing a Velocity
@@ -27,9 +28,9 @@
*/
public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
protected JJTParserState jjtree = new JJTParserState();/**
- * This Hashtable contains a list of all of the dynamic directives.
+ * This Map contains a list of all of the dynamic directives.
*/
- private Hashtable directives = new Hashtable(0);
+ private Map directives = new HashMap();
/**
* Name of current template we are parsing. Passed to us in parse()
@@ -140,7 +141,7 @@
*/
public void setDirectives(Hashtable directives)
{
- this.directives = directives;
+ this.directives = new HashMap(directives);
}
/**
@@ -291,6 +292,7 @@
case TEXT:
case FORMAL_COMMENT:
case MULTI_LINE_COMMENT:
+ case TEXTBLOCK:
case STRING_LITERAL:
case IF_DIRECTIVE:
case STOP_DIRECTIVE:
@@ -360,6 +362,9 @@
case MULTI_LINE_COMMENT:
Comment();
break;
+ case TEXTBLOCK:
+ Textblock();
+ break;
case SET_DIRECTIVE:
SetDirective();
break;
@@ -521,6 +526,20 @@
}
}
+ final public void Textblock() throws ParseException {
+ /*@bgen(jjtree) Textblock */
+ ASTTextblock jjtn000 = new ASTTextblock(this, JJTTEXTBLOCK);
+ boolean jjtc000 = true;
+ jjtree.openNodeScope(jjtn000);
+ try {
+ jj_consume_token(TEXTBLOCK);
+ } finally {
+ if (jjtc000) {
+ jjtree.closeNodeScope(jjtn000, true);
+ }
+ }
+ }
+
final public void FloatingPointLiteral() throws ParseException {
/*@bgen(jjtree) FloatingPointLiteral */
ASTFloatingPointLiteral jjtn000 = new ASTFloatingPointLiteral(this, JJTFLOATINGPOINTLITERAL);
@@ -862,6 +881,7 @@
case TEXT:
case FORMAL_COMMENT:
case MULTI_LINE_COMMENT:
+ case TEXTBLOCK:
case STRING_LITERAL:
case IF_DIRECTIVE:
case STOP_DIRECTIVE:
@@ -1630,6 +1650,7 @@
case TEXT:
case FORMAL_COMMENT:
case MULTI_LINE_COMMENT:
+ case TEXTBLOCK:
case STRING_LITERAL:
case IF_DIRECTIVE:
case STOP_DIRECTIVE:
@@ -1742,6 +1763,7 @@
case TEXT:
case FORMAL_COMMENT:
case MULTI_LINE_COMMENT:
+ case TEXTBLOCK:
case STRING_LITERAL:
case IF_DIRECTIVE:
case STOP_DIRECTIVE:
@@ -1837,6 +1859,7 @@
case TEXT:
case FORMAL_COMMENT:
case MULTI_LINE_COMMENT:
+ case TEXTBLOCK:
case STRING_LITERAL:
case IF_DIRECTIVE:
case STOP_DIRECTIVE:
@@ -2636,336 +2659,168 @@
}
}
- 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_49() {
- if (jj_3R_70()) return true;
- return false;
- }
-
- final private boolean jj_3_3() {
- if (jj_scan_token(LBRACKET)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_25()) {
- jj_scanpos = xsp;
- if (jj_3R_26()) return true;
- }
- xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
- if (jj_scan_token(DOUBLEDOT)) return true;
- return false;
- }
-
- final private boolean jj_3R_48() {
- if (jj_3R_69()) return true;
- return false;
- }
-
- final private boolean jj_3R_47() {
- if (jj_3R_68()) return true;
- return false;
- }
-
- final private boolean jj_3R_46() {
- if (jj_3R_67()) return true;
- return false;
- }
-
- final private boolean jj_3R_45() {
- if (jj_3R_66()) return true;
- return false;
- }
-
- final private boolean jj_3R_90() {
- if (jj_3R_73()) return true;
- return false;
- }
-
- final private boolean jj_3R_44() {
- if (jj_3R_40()) return true;
- return false;
- }
-
- final private boolean jj_3R_89() {
- if (jj_3R_73()) return true;
- return false;
- }
-
- final private boolean jj_3R_43() {
- if (jj_3R_65()) return true;
- return false;
- }
-
- final private boolean jj_3R_37() {
- if (jj_3R_40()) return true;
- return false;
- }
-
- final private boolean jj_3R_42() {
- if (jj_3R_64()) return true;
- return false;
- }
-
- final private boolean jj_3R_27() {
- if (jj_scan_token(COMMA)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
- return false;
- }
-
- final private boolean jj_3R_41() {
- if (jj_3R_24()) return true;
- return false;
- }
-
- final private boolean jj_3R_28() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_41()) {
- jj_scanpos = xsp;
- if (jj_3R_42()) {
- jj_scanpos = xsp;
- if (jj_3R_43()) {
- jj_scanpos = xsp;
- if (jj_3R_44()) {
- jj_scanpos = xsp;
- if (jj_3R_45()) {
- jj_scanpos = xsp;
- if (jj_3R_46()) {
- jj_scanpos = xsp;
- 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()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- final private boolean jj_3R_34() {
- if (jj_3R_60()) return true;
- return false;
- }
-
- final private boolean jj_3R_36() {
- if (jj_3R_24()) return true;
- return false;
- }
-
- final private boolean jj_3R_32() {
- if (jj_3R_60()) return true;
- return false;
- }
-
- final private boolean jj_3R_64() {
- if (jj_scan_token(WORD)) return true;
- return false;
- }
-
- final private boolean jj_3R_60() {
- if (jj_scan_token(IDENTIFIER)) return true;
- return false;
- }
-
- final private boolean jj_3_10() {
- if (jj_3R_33()) return true;
- return false;
- }
-
- final private boolean jj_3_4() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_27()) jj_scanpos = xsp;
- if (jj_3R_28()) return true;
- return false;
- }
-
- final private boolean jj_3R_65() {
- if (jj_scan_token(STRING_LITERAL)) return true;
- return false;
- }
-
- final private boolean jj_3R_31() {
- if (jj_3R_40()) return true;
- return false;
- }
-
- final private boolean jj_3_8() {
+ private boolean jj_3_8() {
if (jj_3R_33()) return true;
return false;
}
- final private boolean jj_3R_40() {
+ private boolean jj_3R_40() {
if (jj_scan_token(INTEGER_LITERAL)) return true;
return false;
}
- final private boolean jj_3R_74() {
+ private boolean jj_3R_74() {
if (jj_3R_73()) return true;
return false;
}
- final private boolean jj_3R_97() {
+ private boolean jj_3R_97() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_29()) return true;
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;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_36()) {
jj_scanpos = xsp;
if (jj_3R_37()) return true;
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
if (jj_scan_token(DOUBLEDOT)) return true;
return false;
}
- final private boolean jj_3R_67() {
+ private boolean jj_3R_67() {
if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
return false;
}
- final private boolean jj_3R_71() {
+ private boolean jj_3R_71() {
if (jj_scan_token(FALSE)) return true;
return false;
}
- final private boolean jj_3R_63() {
+ private boolean jj_3R_63() {
if (jj_3R_73()) return true;
return false;
}
- final private boolean jj_3R_88() {
+ private boolean jj_3R_88() {
if (jj_scan_token(LPAREN)) return true;
return false;
}
- final private boolean jj_3R_30() {
+ private boolean jj_3R_30() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_87() {
+ private boolean jj_3R_87() {
if (jj_3R_71()) return true;
return false;
}
- final private boolean jj_3R_70() {
+ private boolean jj_3R_70() {
if (jj_scan_token(TRUE)) return true;
return false;
}
- final private boolean jj_3R_86() {
+ private boolean jj_3R_86() {
if (jj_3R_70()) 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;
@@ -2980,32 +2835,32 @@
return false;
}
- final private boolean jj_3R_85() {
+ private boolean jj_3R_85() {
if (jj_3R_69()) return true;
return false;
}
- final private boolean jj_3R_84() {
+ private boolean jj_3R_84() {
if (jj_3R_68()) return true;
return false;
}
- final private boolean jj_3R_83() {
+ private boolean jj_3R_83() {
if (jj_3R_67()) return true;
return false;
}
- final private boolean jj_3R_82() {
+ private boolean jj_3R_82() {
if (jj_3R_66()) return true;
return false;
}
- final private boolean jj_3R_81() {
+ private boolean jj_3R_81() {
if (jj_3R_40()) return true;
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;
@@ -3020,7 +2875,7 @@
return false;
}
- final private boolean jj_3R_61() {
+ private boolean jj_3R_61() {
if (jj_3R_29()) return true;
Token xsp;
while (true) {
@@ -3030,12 +2885,12 @@
return false;
}
- final private boolean jj_3R_80() {
+ private boolean jj_3R_80() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_39() {
+ private boolean jj_3R_39() {
if (jj_scan_token(LCURLY)) return true;
if (jj_scan_token(IDENTIFIER)) return true;
Token xsp;
@@ -3051,15 +2906,15 @@
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_72() {
+ private boolean jj_3R_72() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_79()) {
jj_scanpos = xsp;
@@ -3092,7 +2947,7 @@
return false;
}
- final private boolean jj_3R_38() {
+ private boolean jj_3R_38() {
if (jj_scan_token(IDENTIFIER)) return true;
Token xsp;
while (true) {
@@ -3106,7 +2961,7 @@
return false;
}
- final private boolean jj_3R_24() {
+ private boolean jj_3R_24() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_38()) {
@@ -3116,7 +2971,7 @@
return false;
}
- final private boolean jj_3R_35() {
+ private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_11()) {
@@ -3126,44 +2981,44 @@
return false;
}
- final private boolean jj_3_11() {
+ private boolean jj_3_11() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
if (jj_scan_token(LOGICAL_NOT)) return true;
if (jj_3R_35()) return true;
return false;
}
- final private boolean jj_3R_62() {
+ private boolean jj_3R_62() {
if (jj_3R_72()) return true;
return false;
}
- final private boolean jj_3R_73() {
+ private boolean jj_3R_73() {
if (jj_scan_token(INDEX_LBRACKET)) return true;
if (jj_3R_91()) return true;
if (jj_scan_token(INDEX_RBRACKET)) 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;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_30()) {
jj_scanpos = xsp;
if (jj_3R_31()) return true;
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
if (jj_scan_token(DOUBLEDOT)) return true;
return false;
}
- final private boolean jj_3R_33() {
+ private boolean jj_3R_33() {
if (jj_3R_60()) return true;
if (jj_scan_token(LPAREN)) return true;
Token xsp;
@@ -3173,60 +3028,60 @@
return false;
}
- final private boolean jj_3R_59() {
+ private boolean jj_3R_59() {
if (jj_3R_67()) return true;
return false;
}
- final private boolean jj_3R_58() {
+ private boolean jj_3R_58() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_57() {
+ private boolean jj_3R_57() {
if (jj_3R_71()) return true;
return false;
}
- final private boolean jj_3R_56() {
+ private boolean jj_3R_56() {
if (jj_3R_70()) return true;
return false;
}
- final private boolean jj_3_2() {
- if (jj_scan_token(DOUBLE_ESCAPE)) return true;
- return false;
- }
-
- final private boolean jj_3R_55() {
+ private boolean jj_3R_55() {
if (jj_3R_69()) return true;
return false;
}
- final private boolean jj_3R_54() {
+ private boolean jj_3R_54() {
if (jj_3R_68()) 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_40()) return true;
return false;
}
- final private boolean jj_3R_51() {
+ private boolean jj_3_2() {
+ if (jj_scan_token(DOUBLE_ESCAPE)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_51() {
if (jj_3R_65()) return true;
return false;
}
- final private boolean jj_3R_29() {
+ private boolean jj_3R_29() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_51()) {
jj_scanpos = xsp;
@@ -3254,11 +3109,11 @@
}
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_100() {
+ private boolean jj_3R_100() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_29()) return true;
if (jj_scan_token(COLON)) return true;
@@ -3266,51 +3121,51 @@
return false;
}
- final private boolean jj_3R_96() {
+ private boolean jj_3R_96() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_95() {
+ private boolean jj_3R_95() {
if (jj_3R_71()) return true;
return false;
}
- final private boolean jj_3R_94() {
+ private boolean jj_3R_94() {
if (jj_3R_70()) return true;
return false;
}
- final private boolean jj_3R_93() {
+ private boolean jj_3R_93() {
if (jj_3R_40()) return true;
return false;
}
- final private boolean jj_3R_92() {
+ private boolean jj_3R_92() {
if (jj_3R_65()) return true;
return false;
}
- final private boolean jj_3R_99() {
+ private boolean jj_3R_99() {
if (jj_3R_40()) return true;
return false;
}
- final private boolean jj_3R_76() {
+ private boolean jj_3R_76() {
if (jj_3R_40()) return true;
return false;
}
- final private boolean jj_3R_101() {
+ private boolean jj_3R_101() {
if (jj_scan_token(COMMA)) return true;
if (jj_3R_29()) return true;
return false;
}
- final private boolean jj_3R_91() {
+ private boolean jj_3R_91() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_92()) {
jj_scanpos = xsp;
@@ -3326,26 +3181,26 @@
}
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3R_26() {
+ private boolean jj_3R_26() {
if (jj_3R_40()) return true;
return false;
}
- final private boolean jj_3R_98() {
+ private boolean jj_3R_98() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_75() {
+ private boolean jj_3R_75() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_78() {
+ private boolean jj_3R_78() {
if (jj_3R_29()) return true;
Token xsp;
while (true) {
@@ -3355,43 +3210,43 @@
return false;
}
- final private boolean jj_3R_66() {
+ private boolean jj_3R_66() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_75()) {
jj_scanpos = xsp;
if (jj_3R_76()) return true;
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
if (jj_scan_token(DOUBLEDOT)) return true;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
xsp = jj_scanpos;
if (jj_3R_98()) {
jj_scanpos = xsp;
if (jj_3R_99()) return true;
}
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
if (jj_scan_token(RBRACKET)) return true;
return false;
}
- final private boolean jj_3_1() {
+ private boolean jj_3R_25() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_25() {
+ private boolean jj_3_1() {
if (jj_3R_24()) return true;
return false;
}
- final private boolean jj_3R_69() {
+ private boolean jj_3R_69() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -3400,14 +3255,14 @@
return false;
}
- final private boolean jj_3R_77() {
+ private boolean jj_3R_77() {
Token xsp;
xsp = jj_scanpos;
- if (jj_scan_token(28)) jj_scanpos = xsp;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
return false;
}
- final private boolean jj_3_5() {
+ private boolean jj_3_5() {
if (jj_3R_29()) return true;
if (jj_scan_token(COLON)) return true;
if (jj_3R_29()) return true;
@@ -3419,12 +3274,12 @@
return false;
}
- final private boolean jj_3R_50() {
+ private boolean jj_3R_50() {
if (jj_3R_71()) return true;
return false;
}
- final private boolean jj_3R_68() {
+ private boolean jj_3R_68() {
if (jj_scan_token(LEFT_CURLEY)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -3435,41 +3290,212 @@
xsp = jj_scanpos;
if (jj_scan_token(9)) {
jj_scanpos = xsp;
- if (jj_scan_token(67)) return true;
+ if (jj_scan_token(70)) return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_49() {
+ if (jj_3R_70()) return true;
+ return false;
+ }
+
+ private boolean jj_3_3() {
+ if (jj_scan_token(LBRACKET)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_25()) {
+ jj_scanpos = xsp;
+ if (jj_3R_26()) return true;
}
+ xsp = jj_scanpos;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
+ if (jj_scan_token(DOUBLEDOT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_48() {
+ if (jj_3R_69()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_47() {
+ if (jj_3R_68()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_46() {
+ if (jj_3R_67()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_45() {
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_90() {
+ if (jj_3R_73()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_44() {
+ if (jj_3R_40()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_89() {
+ if (jj_3R_73()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_43() {
+ if (jj_3R_65()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_37() {
+ if (jj_3R_40()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_42() {
+ if (jj_3R_64()) return true;
return false;
}
+ private boolean jj_3R_27() {
+ if (jj_scan_token(COMMA)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
+ return false;
+ }
+
+ private boolean jj_3R_41() {
+ if (jj_3R_24()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_28() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_41()) {
+ jj_scanpos = xsp;
+ if (jj_3R_42()) {
+ jj_scanpos = xsp;
+ if (jj_3R_43()) {
+ jj_scanpos = xsp;
+ if (jj_3R_44()) {
+ jj_scanpos = xsp;
+ if (jj_3R_45()) {
+ jj_scanpos = xsp;
+ if (jj_3R_46()) {
+ jj_scanpos = xsp;
+ 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()) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_34() {
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_36() {
+ if (jj_3R_24()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_32() {
+ if (jj_3R_60()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_64() {
+ if (jj_scan_token(WORD)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_60() {
+ if (jj_scan_token(IDENTIFIER)) return true;
+ return false;
+ }
+
+ private boolean jj_3_10() {
+ if (jj_3R_33()) return true;
+ return false;
+ }
+
+ private boolean jj_3_4() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(31)) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_27()) jj_scanpos = xsp;
+ if (jj_3R_28()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_65() {
+ if (jj_scan_token(STRING_LITERAL)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_31() {
+ if (jj_3R_40()) 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[69];
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() {
- jj_la1_0 = new int[] {0x26f06c00,0x0,0x26f06c00,0x1000000,0x6100000,0x20000000,0xc0000108,0x0,0x10000000,0x10000000,0x10000000,0x20,0x10000000,0x26f06c00,0x20,0x10000000,0x200,0x20,0xf0000108,0x10000000,0x0,0x10000000,0x10000000,0x0,0x10000000,0x10000000,0xe0000000,0x10000000,0x10000000,0x20000000,0xc0000108,0x10000000,0x20,0xf0000108,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x20c00c00,0x10000000,0x26f06c00,0x0,0x0,0x0,0x26f06c00,0x10000000,0x26f06c00,0x10000000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0xf0000508,0x10000000,0x20000000,0xc0000508,0x10000000,};
+ private static void jj_la1_init_0() {
+ jj_la1_0 = new int[] {0x1de06c00,0x0,0x1de06c00,0x2000000,0xc200000,0x0,0x108,0x0,0x80000000,0x80000000,0x80000000,0x20,0x80000000,0x1de06c00,0x20,0x80000000,0x200,0x20,0x80000108,0x80000000,0x0,0x80000000,0x80000000,0x0,0x80000000,0x80000000,0x0,0x80000000,0x80000000,0x0,0x108,0x80000000,0x20,0x80000108,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x1800c00,0x80000000,0x1de06c00,0x0,0x0,0x0,0x1de06c00,0x80000000,0x1de06c00,0x80000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000508,0x80000000,0x0,0x508,0x80000000,};
}
- private static void jj_la1_1() {
- jj_la1_1 = new int[] {0x18d20000,0x120000,0x18c00000,0x0,0x0,0x8400000,0x800000,0x18000000,0x0,0x0,0x0,0x0,0x0,0x18d20000,0x0,0x0,0x0,0x0,0xc00000,0x0,0x400000,0x0,0x0,0x400000,0x0,0x0,0x400000,0x0,0x0,0x400000,0x800000,0x0,0x0,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc00000,0x0,0x18d20000,0x40000,0x40000,0x80000,0x18d20000,0x0,0x18d20000,0x0,0x0,0x1,0x80,0x40,0x3000,0x3000,0xf00,0xf00,0x6,0x6,0x38,0x38,0x0,0xc00000,0x0,0x400000,0x800000,0x0,};
+ private static void jj_la1_init_1() {
+ jj_la1_1 = new int[] {0xc6900001,0x900000,0xc6000001,0x0,0x0,0x42000001,0x4000006,0xc0000000,0x0,0x0,0x0,0x0,0x0,0xc6900001,0x0,0x0,0x0,0x0,0x6000007,0x0,0x2000000,0x0,0x0,0x2000000,0x0,0x0,0x2000007,0x0,0x0,0x2000001,0x4000006,0x0,0x0,0x6000007,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000001,0x0,0xc6900001,0x200000,0x200000,0x400000,0xc6900001,0x0,0xc6900001,0x0,0x0,0x8,0x400,0x200,0x18000,0x18000,0x7800,0x7800,0x30,0x30,0x1c0,0x1c0,0x0,0x6000007,0x0,0x2000001,0x4000006,0x0,};
}
- private static void jj_la1_2() {
- jj_la1_2 = new int[] {0x4f,0x0,0x4e,0x0,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4f,0x0,0x0,0x8,0x0,0x5,0x0,0x5,0x0,0x0,0x5,0x0,0x0,0x5,0x0,0x0,0x0,0x5,0x0,0x0,0x5,0x0,0x1,0x0,0x0,0x1,0x0,0x5,0x4e,0x0,0x4f,0x0,0x0,0x0,0x4f,0x0,0x4f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x0,};
+ private static void jj_la1_init_2() {
+ jj_la1_2 = new int[] {0x278,0x0,0x270,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x278,0x0,0x0,0x40,0x0,0x28,0x0,0x28,0x0,0x0,0x28,0x0,0x0,0x28,0x0,0x0,0x0,0x28,0x0,0x0,0x28,0x0,0x8,0x0,0x0,0x8,0x0,0x28,0x270,0x0,0x278,0x0,0x0,0x0,0x278,0x0,0x278,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x28,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();
@@ -3479,6 +3505,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();
@@ -3489,6 +3516,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();
@@ -3498,6 +3526,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();
@@ -3508,7 +3537,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();
@@ -3534,7 +3563,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) {
@@ -3555,6 +3584,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();
@@ -3563,8 +3594,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();
@@ -3572,14 +3604,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];
@@ -3594,31 +3626,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();
- boolean[] la1tokens = new boolean[71];
- for (int i = 0; i < 71; i++) {
- la1tokens[i] = false;
- }
+ jj_expentries.clear();
+ boolean[] la1tokens = new boolean[74];
if (jj_kind >= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
@@ -3638,11 +3665,11 @@
}
}
}
- for (int i = 0; i < 71; i++) {
+ for (int i = 0; i < 74; i++) {
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;
@@ -3650,20 +3677,23 @@
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 {
JJCalls p = jj_2_rtns[i];
do {
if (p.gen > jj_gen) {
@@ -3685,11 +3715,12 @@
}
p = p.next;
} while (p != null);
+ } catch(LookaheadSuccess ls) { }
}
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=731779&r1=731778&r2=731779&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 Mon Jan 5 16:10:57 2009
@@ -1,4 +1,4 @@
-/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. Parser.jj */
+/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. C:\java\apache\velocity\head\src\java\org\apache\velocity\runtime\parser\Parser.jj */
/*@egen*//*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -15,7 +15,7 @@
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
+ * under the License.
*/
/*
@@ -23,14 +23,39 @@
* to always have to page past it... :)
*/
options
-{
+{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/**
* The parser must be non-static in order for the
* above option to work, otherwise the parser value
* is passed in as null, which isn't all the useful ;)
*/
- STATIC=false;
+ STATIC=false;
+
+
+
+
+
+
+
+
+
/**
* Declare that we are accepting unicode input and
@@ -62,6 +87,7 @@
import org.apache.velocity.runtime.directive.Macro;
import org.apache.velocity.runtime.directive.MacroParseException;
import org.apache.velocity.util.StringUtils;
+import org.apache.commons.lang.text.StrBuilder;
/**
* This class is responsible for parsing a Velocity
@@ -83,9 +109,9 @@
/*@egen*/
/**
- * This Hashtable contains a list of all of the dynamic directives.
+ * This Map contains a list of all of the dynamic directives.
*/
- private Hashtable directives = new Hashtable(0);
+ private Map directives = new HashMap();
/**
* Name of current template we are parsing. Passed to us in parse()
@@ -196,7 +222,7 @@
*/
public void setDirectives(Hashtable directives)
{
- this.directives = directives;
+ this.directives = new HashMap(directives);
}
/**
@@ -228,7 +254,7 @@
String strDirective = strImage.substring(iLast + 1);
boolean bRecognizedDirective = false;
-
+
// we don't have to call substring method all the time in this method
String dirTag = strDirective.substring(1);
if (dirTag.charAt(0) == '{')
@@ -329,7 +355,8 @@
private int lparen = 0;
private int rparen = 0;
- Stack stateStack = new Stack();
+ List stateStack = new ArrayList(50);
+
public boolean debugPrint = false;
private boolean inReference;
@@ -347,14 +374,14 @@
*/
public boolean stateStackPop()
{
- Hashtable h;
-
+ ParserState s;
try
{
- h = (Hashtable) stateStack.pop();
+ s = (ParserState) stateStack.remove(stateStack.size() - 1); // stack.pop
}
- catch( EmptyStackException e)
+ catch(IndexOutOfBoundsException e)
{
+ // empty stack
lparen=0;
SwitchTo(DEFAULT);
return false;
@@ -363,13 +390,13 @@
if( debugPrint )
System.out.println(
" stack pop (" + stateStack.size() + ") : lparen=" +
- ( (Integer) h.get("lparen")).intValue() +
- " newstate=" + ( (Integer) h.get("lexstate")).intValue() );
+ s.lparen +
+ " newstate=" + s.lexstate );
- lparen = ( (Integer) h.get("lparen")).intValue();
- rparen = ( (Integer) h.get("rparen")).intValue();
+ lparen = s.lparen;
+ rparen = s.rparen;
- SwitchTo( ( (Integer) h.get("lexstate")).intValue() );
+ SwitchTo(s.lexstate);
return true;
}
@@ -385,15 +412,13 @@
System.out.println(" (" + stateStack.size() + ") pushing cur state : " +
curLexState );
- Hashtable h = new Hashtable();
-
- h.put("lexstate", new Integer( curLexState ) );
- h.put("lparen", new Integer( lparen ));
- h.put("rparen", new Integer( rparen ));
+ ParserState s = new ParserState();
+ s.lparen = lparen;
+ s.rparen = rparen;
+ s.lexstate = curLexState;
lparen = 0;
-
- stateStack.push( h );
+ stateStack.add(s); // stack.push
return true;
}
@@ -402,7 +427,6 @@
* Clears all state variables, resets to
* start values, clears stateStack. Call
* before parsing.
- * @return void
*/
public void clearStateVars()
{
@@ -419,6 +443,16 @@
}
/**
+ * Holds the state of the parsing process.
+ */
+ private class ParserState
+ {
+ int lparen;
+ int rparen;
+ int lexstate;
+ }
+
+ /**
* handles the dropdown logic when encountering a RPAREN
*/
private void RPARENHandler()
@@ -491,7 +525,7 @@
stateStackPush();
SwitchTo(REFINDEX);
}
-
+
}
<REFINDEX>
@@ -500,7 +534,7 @@
<INDEX_RBRACKET: "]">
{
stateStackPop();
- }
+ }
}
@@ -718,6 +752,16 @@
}
}
+| "#[["
+ {
+ if (!inComment)
+ {
+ inComment = true;
+ stateStackPush();
+ SwitchTo( IN_TEXTBLOCK );
+ }
+ }
+
| <"#**" ~["#"]>
{
if (!inComment)
@@ -834,12 +878,28 @@
}
}
+<IN_TEXTBLOCK>
+TOKEN :
+{
+ <TEXTBLOCK: "]]#" >
+ {
+ inComment = false;
+ stateStackPop();
+ }
+}
+
<IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
SKIP :
{
< ~[] >
}
+<IN_TEXTBLOCK>
+MORE :
+{
+ < ~[] >
+}
+
/* -----------------------------------------------------------------------
*
* DIRECTIVE Lexical State (some of it, anyway)
@@ -1061,7 +1121,7 @@
* | re stateStack.
* |-- > REFMOD2 : state switch to when the LPAREN is encountered.
* again, this is a switch, not a push.
- *
+ *
* During the REFERENCE or REFMODIFIER lex states we will switch to
* REFINDEX if a bracket is encountered '['. for example: $foo[1]
* or $foo.bar[1], $foo.bar( "arg" )[1]
@@ -1198,6 +1258,7 @@
| StopStatement()
| LOOKAHEAD(2) Reference()
| Comment()
+| Textblock()
| SetDirective()
| EscapedDirective()
| Escape()
@@ -1332,6 +1393,23 @@
/*@egen*/
}
+void Textblock() : {/*@bgen(jjtree) Textblock */
+ ASTTextblock jjtn000 = new ASTTextblock(this, JJTTEXTBLOCK);
+ boolean jjtc000 = true;
+ jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Textblock */
+ try {
+/*@egen*/
+ <TEXTBLOCK>/*@bgen(jjtree)*/
+ } finally {
+ if (jjtc000) {
+ jjtree.closeNodeScope(jjtn000, true);
+ }
+ }
+/*@egen*/
+}
+
void FloatingPointLiteral() : {/*@bgen(jjtree) FloatingPointLiteral */
ASTFloatingPointLiteral jjtn000 = new ASTFloatingPointLiteral(this, JJTFLOATINGPOINTLITERAL);
boolean jjtc000 = true;
@@ -1733,7 +1811,7 @@
|
[ <WHITESPACE> ]
)
-
+
/** note: need both tokens as they are generated in different states **/
( <RIGHT_CURLEY> | <RCURLY> )/*@bgen(jjtree)*/
} catch (Throwable jjte000) {
@@ -2061,7 +2139,7 @@
jjtree.closeNodeScope(jjtn000, true);
}
}
-/*@egen*/
+/*@egen*/
}
/* -----------------------------------------------------------------------
@@ -2168,7 +2246,7 @@
jjtree.closeNodeScope(jjtn001, true);
}
}
-/*@egen*//*@bgen(jjtree)*/
+/*@egen*/ /*@bgen(jjtree)*/
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
@@ -2228,7 +2306,7 @@
jjtree.closeNodeScope(jjtn001, true);
}
}
-/*@egen*//*@bgen(jjtree)*/
+/*@egen*/ /*@bgen(jjtree)*/
} catch (Throwable jjte000) {
if (jjtc000) {
jjtree.clearNodeScope(jjtn000);
@@ -2419,7 +2497,7 @@
jjtree.closeNodeScope(jjtn001, 2);
}
}
-/*@egen*/ )*
+/*@egen*/ )*
}
@@ -2453,7 +2531,7 @@
jjtree.closeNodeScope(jjtn001, 2);
}
}
-/*@egen*/ )*
+/*@egen*/ )*
}
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=731779&r1=731778&r2=731779&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 Mon Jan 5 16:10:57 2009
@@ -1,89 +1,178 @@
/* 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 INDEX_LBRACKET = 1;
+ /** RegularExpression Id. */
int INDEX_RBRACKET = 2;
+ /** RegularExpression Id. */
int LBRACKET = 3;
+ /** RegularExpression Id. */
int RBRACKET = 4;
+ /** RegularExpression Id. */
int COMMA = 5;
+ /** RegularExpression Id. */
int DOUBLEDOT = 6;
+ /** RegularExpression Id. */
int COLON = 7;
+ /** RegularExpression Id. */
int LEFT_CURLEY = 8;
+ /** RegularExpression Id. */
int RIGHT_CURLEY = 9;
+ /** RegularExpression Id. */
int LPAREN = 10;
+ /** RegularExpression Id. */
int RPAREN = 11;
+ /** RegularExpression Id. */
int REFMOD2_RPAREN = 12;
+ /** RegularExpression Id. */
int ESCAPE_DIRECTIVE = 13;
+ /** RegularExpression Id. */
int SET_DIRECTIVE = 14;
+ /** RegularExpression Id. */
int DOLLAR = 15;
+ /** RegularExpression Id. */
int DOLLARBANG = 16;
- int HASH = 19;
- int SINGLE_LINE_COMMENT_START = 20;
- int DOUBLE_ESCAPE = 21;
- int ESCAPE = 22;
- int TEXT = 23;
- int SINGLE_LINE_COMMENT = 24;
- int FORMAL_COMMENT = 25;
- int MULTI_LINE_COMMENT = 26;
- int WHITESPACE = 28;
- int STRING_LITERAL = 29;
- int TRUE = 30;
- int FALSE = 31;
- int NEWLINE = 32;
- int MINUS = 33;
- int PLUS = 34;
- int MULTIPLY = 35;
- int DIVIDE = 36;
- int MODULUS = 37;
- int LOGICAL_AND = 38;
- int LOGICAL_OR = 39;
- int LOGICAL_LT = 40;
- int LOGICAL_LE = 41;
- int LOGICAL_GT = 42;
- int LOGICAL_GE = 43;
- int LOGICAL_EQUALS = 44;
- int LOGICAL_NOT_EQUALS = 45;
- int LOGICAL_NOT = 46;
- int EQUALS = 47;
- int END = 48;
- int IF_DIRECTIVE = 49;
- int ELSEIF_DIRECTIVE = 50;
- int ELSE_DIRECTIVE = 51;
- int STOP_DIRECTIVE = 52;
- int DIGIT = 53;
- int INTEGER_LITERAL = 54;
- int FLOATING_POINT_LITERAL = 55;
- int EXPONENT = 56;
- int LETTER = 57;
- int DIRECTIVE_CHAR = 58;
- int WORD = 59;
- int BRACKETED_WORD = 60;
- int ALPHA_CHAR = 61;
- int ALPHANUM_CHAR = 62;
- int IDENTIFIER_CHAR = 63;
- int IDENTIFIER = 64;
- int DOT = 65;
- int LCURLY = 66;
- int RCURLY = 67;
- int REFERENCE_TERMINATOR = 68;
- int DIRECTIVE_TERMINATOR = 69;
- int EMPTY_INDEX = 70;
+ /** RegularExpression Id. */
+ int HASH = 20;
+ /** RegularExpression Id. */
+ int SINGLE_LINE_COMMENT_START = 21;
+ /** RegularExpression Id. */
+ int DOUBLE_ESCAPE = 22;
+ /** RegularExpression Id. */
+ int ESCAPE = 23;
+ /** RegularExpression Id. */
+ int TEXT = 24;
+ /** RegularExpression Id. */
+ int SINGLE_LINE_COMMENT = 25;
+ /** RegularExpression Id. */
+ int FORMAL_COMMENT = 26;
+ /** RegularExpression Id. */
+ int MULTI_LINE_COMMENT = 27;
+ /** RegularExpression Id. */
+ int TEXTBLOCK = 28;
+ /** RegularExpression Id. */
+ int WHITESPACE = 31;
+ /** RegularExpression Id. */
+ int STRING_LITERAL = 32;
+ /** RegularExpression Id. */
+ int TRUE = 33;
+ /** RegularExpression Id. */
+ int FALSE = 34;
+ /** RegularExpression Id. */
+ int NEWLINE = 35;
+ /** RegularExpression Id. */
+ int MINUS = 36;
+ /** RegularExpression Id. */
+ int PLUS = 37;
+ /** RegularExpression Id. */
+ int MULTIPLY = 38;
+ /** RegularExpression Id. */
+ int DIVIDE = 39;
+ /** RegularExpression Id. */
+ int MODULUS = 40;
+ /** RegularExpression Id. */
+ int LOGICAL_AND = 41;
+ /** RegularExpression Id. */
+ int LOGICAL_OR = 42;
+ /** RegularExpression Id. */
+ int LOGICAL_LT = 43;
+ /** RegularExpression Id. */
+ int LOGICAL_LE = 44;
+ /** RegularExpression Id. */
+ int LOGICAL_GT = 45;
+ /** RegularExpression Id. */
+ int LOGICAL_GE = 46;
+ /** RegularExpression Id. */
+ int LOGICAL_EQUALS = 47;
+ /** RegularExpression Id. */
+ int LOGICAL_NOT_EQUALS = 48;
+ /** RegularExpression Id. */
+ int LOGICAL_NOT = 49;
+ /** RegularExpression Id. */
+ int EQUALS = 50;
+ /** RegularExpression Id. */
+ int END = 51;
+ /** RegularExpression Id. */
+ int IF_DIRECTIVE = 52;
+ /** RegularExpression Id. */
+ int ELSEIF_DIRECTIVE = 53;
+ /** RegularExpression Id. */
+ int ELSE_DIRECTIVE = 54;
+ /** RegularExpression Id. */
+ int STOP_DIRECTIVE = 55;
+ /** RegularExpression Id. */
+ int DIGIT = 56;
+ /** RegularExpression Id. */
+ int INTEGER_LITERAL = 57;
+ /** RegularExpression Id. */
+ int FLOATING_POINT_LITERAL = 58;
+ /** RegularExpression Id. */
+ int EXPONENT = 59;
+ /** RegularExpression Id. */
+ int LETTER = 60;
+ /** RegularExpression Id. */
+ int DIRECTIVE_CHAR = 61;
+ /** RegularExpression Id. */
+ int WORD = 62;
+ /** RegularExpression Id. */
+ int BRACKETED_WORD = 63;
+ /** RegularExpression Id. */
+ int ALPHA_CHAR = 64;
+ /** RegularExpression Id. */
+ int ALPHANUM_CHAR = 65;
+ /** RegularExpression Id. */
+ int IDENTIFIER_CHAR = 66;
+ /** RegularExpression Id. */
+ int IDENTIFIER = 67;
+ /** RegularExpression Id. */
+ int DOT = 68;
+ /** RegularExpression Id. */
+ int LCURLY = 69;
+ /** RegularExpression Id. */
+ int RCURLY = 70;
+ /** RegularExpression Id. */
+ int REFERENCE_TERMINATOR = 71;
+ /** RegularExpression Id. */
+ int DIRECTIVE_TERMINATOR = 72;
+ /** RegularExpression Id. */
+ int EMPTY_INDEX = 73;
+ /** Lexical state. */
int REFERENCE = 0;
+ /** Lexical state. */
int REFMODIFIER = 1;
+ /** Lexical state. */
int REFINDEX = 2;
+ /** Lexical state. */
int DIRECTIVE = 3;
+ /** Lexical state. */
int REFMOD2 = 4;
+ /** Lexical state. */
int DEFAULT = 5;
+ /** Lexical state. */
int REFMOD = 6;
+ /** Lexical state. */
int PRE_DIRECTIVE = 7;
- int IN_MULTI_LINE_COMMENT = 8;
- int IN_FORMAL_COMMENT = 9;
- int IN_SINGLE_LINE_COMMENT = 10;
+ /** Lexical state. */
+ int IN_TEXTBLOCK = 8;
+ /** Lexical state. */
+ int IN_MULTI_LINE_COMMENT = 9;
+ /** Lexical state. */
+ int IN_FORMAL_COMMENT = 10;
+ /** Lexical state. */
+ int IN_SINGLE_LINE_COMMENT = 11;
+ /** Literal token values. */
String[] tokenImage = {
"<EOF>",
"\"[\"",
@@ -102,7 +191,8 @@
"<SET_DIRECTIVE>",
"<DOLLAR>",
"<DOLLARBANG>",
- "<token of kind 17>",
+ "\"#[[\"",
+ "<token of kind 18>",
"\"#*\"",
"\"#\"",
"\"##\"",
@@ -112,7 +202,9 @@
"<SINGLE_LINE_COMMENT>",
"\"*#\"",
"\"*#\"",
- "<token of kind 27>",
+ "\"]]#\"",
+ "<token of kind 29>",
+ "<token of kind 30>",
"<WHITESPACE>",
"<STRING_LITERAL>",
"\"true\"",