geirm 01/08/07 14:57:28
Modified: src/java/org/apache/velocity/runtime/parser Parser.java
Parser.jj ParserTokenManager.java
Log:
Support for separable instances of the runtime engine.
Revision Changes Path
1.65 +116 -109
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.java
Index: Parser.java
===================================================================
RCS file:
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.java,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- Parser.java 2001/07/18 03:50:45 1.64
+++ Parser.java 2001/08/07 21:57:28 1.65
@@ -4,7 +4,7 @@
import java.io.*;
import java.util.*;
-import org.apache.velocity.runtime.Runtime;
+import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.runtime.parser.node.*;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.directive.Macro;
@@ -21,7 +21,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
- * @version $Id: Parser.java,v 1.64 2001/07/18 03:50:45 geirm Exp $
+ * @version $Id: Parser.java,v 1.65 2001/08/07 21:57:28 geirm Exp $
*/
public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants
{/*@bgen(jjtree)*/
protected JJTParserState jjtree = new JJTParserState();/**
@@ -36,6 +36,8 @@
VelocityCharStream velcharstream = null;
+ private RuntimeServices rsvc = null;
+
/**
* This constructor was added to allow the re-use of parsers.
* The normal constructor takes a single argument which
@@ -43,7 +45,7 @@
* object, we satisfy the requirement of an InputStream
* by using a newline character as an input stream.
*/
- public Parser()
+ public Parser( RuntimeServices rs)
{
/*
* need to call the CTOR first thing.
@@ -57,6 +59,11 @@
*/
velcharstream = new VelocityCharStream(
new ByteArrayInputStream("\n".getBytes()), 1, 1 );
+
+ /*
+ * and save the RuntimeServices
+ */
+ rsvc = rs;
}
/**
@@ -97,7 +104,7 @@
}
catch (ParseException pe)
{
- Runtime.error ("Parser Exception: " + templateName + " : " +
StringUtils.stackTrace(pe));
+ rsvc.error ("Parser Exception: " + templateName + " : " +
StringUtils.stackTrace(pe));
throw new ParseException (pe.currentToken,
pe.expectedTokenSequences, pe.tokenImage);
}
@@ -107,7 +114,7 @@
}
catch (Exception e)
{
- Runtime.error ("Parser Error: " + templateName + " : " +
StringUtils.stackTrace(e));
+ rsvc.error ("Parser Error: " + templateName + " : " +
StringUtils.stackTrace(e));
}
currentTemplateName = "";
@@ -164,7 +171,7 @@
{
bRecognizedDirective = true;
}
- else if (Runtime.isVelocimacro( strDirective.substring(1),
currentTemplateName))
+ else if ( rsvc.isVelocimacro( strDirective.substring(1),
currentTemplateName))
{
bRecognizedDirective = true;
}
@@ -389,7 +396,7 @@
if ( isDirective( t.next.image.substring(1)))
control = true;
- else if ( Runtime.isVelocimacro( t.next.image.substring(1),
currentTemplateName))
+ else if ( rsvc.isVelocimacro( t.next.image.substring(1),
currentTemplateName))
control = true;
t.image = "";
@@ -591,7 +598,7 @@
* if null, then not a real directive, but maybe a Velocimacro
*/
- d = (Directive) Runtime.getVelocimacro( directiveName,
currentTemplateName );
+ d = (Directive) rsvc.getVelocimacro( directiveName,
currentTemplateName );
if (d == null)
{
@@ -703,8 +710,8 @@
if ( doItNow )
{
- Macro m = new Macro();
- m.processAndRegister( jjtn000, currentTemplateName );
+ // Macro m = new Macro( );
+ Macro.processAndRegister( rsvc, jjtn000, currentTemplateName );
}
/*
@@ -2239,18 +2246,6 @@
return retval;
}
- final private boolean jj_3R_33() {
- if (jj_3R_36()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
- final private boolean jj_3R_24() {
- if (jj_3R_36()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3R_85() {
if (jj_scan_token(COMMA)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -2259,20 +2254,20 @@
return false;
}
- final private boolean jj_3_5() {
- if (jj_3R_27()) return true;
+ final private boolean jj_3R_32() {
+ if (jj_3R_35()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_32() {
+ final private boolean jj_3R_23() {
if (jj_3R_35()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_23() {
- if (jj_3R_35()) return true;
+ final private boolean jj_3_5() {
+ if (jj_3R_27()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
@@ -2295,6 +2290,12 @@
return false;
}
+ final private boolean jj_3R_31() {
+ if (jj_scan_token(WHITESPACE)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3R_37() {
if (jj_scan_token(IDENTIFIER)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -2307,7 +2308,7 @@
return false;
}
- final private boolean jj_3R_31() {
+ final private boolean jj_3R_22() {
if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
@@ -2329,12 +2330,6 @@
return false;
}
- final private boolean jj_3R_22() {
- if (jj_scan_token(WHITESPACE)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3R_51() {
if (jj_scan_token(RCURLY)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -2386,26 +2381,6 @@
return false;
}
- final private boolean jj_3R_53() {
- if (jj_scan_token(STRING_LITERAL)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
- final private boolean jj_3R_27() {
- if (jj_3R_37()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- if (jj_scan_token(LPAREN)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_38()) jj_scanpos = xsp;
- else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- if (jj_scan_token(REFMOD2_RPAREN)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3_3() {
if (jj_scan_token(LBRACKET)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -2427,19 +2402,27 @@
return false;
}
- final private boolean jj_3R_29() {
- if (jj_scan_token(WHITESPACE)) return true;
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(STRING_LITERAL)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_36() {
- if (jj_scan_token(NUMBER_LITERAL)) return true;
+ final private boolean jj_3R_27() {
+ if (jj_3R_37()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ if (jj_scan_token(LPAREN)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_38()) jj_scanpos = xsp;
+ else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ if (jj_scan_token(REFMOD2_RPAREN)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_72() {
+ final private boolean jj_3R_48() {
if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
@@ -2455,26 +2438,32 @@
return false;
}
+ final private boolean jj_3R_29() {
+ if (jj_scan_token(WHITESPACE)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3R_46() {
if (jj_3R_57()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_48() {
- if (jj_scan_token(WHITESPACE)) return true;
+ final private boolean jj_3R_36() {
+ if (jj_scan_token(NUMBER_LITERAL)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_45() {
- if (jj_3R_56()) return true;
+ final private boolean jj_3R_72() {
+ if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_82() {
- if (jj_scan_token(WHITESPACE)) return true;
+ final private boolean jj_3R_45() {
+ if (jj_3R_56()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
@@ -2503,6 +2492,12 @@
return false;
}
+ final private boolean jj_3R_82() {
+ if (jj_scan_token(WHITESPACE)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3R_65() {
if (jj_3R_57()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -2533,54 +2528,26 @@
return false;
}
- final private boolean jj_3R_40() {
- if (jj_3R_53()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3R_62() {
if (jj_3R_54()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_61() {
+ final private boolean jj_3R_40() {
if (jj_3R_53()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_74() {
- if (jj_3R_36()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3R_39() {
if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_105() {
- if (jj_scan_token(MODULUS)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- if (jj_3R_30()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
- final private boolean jj_3R_70() {
- if (jj_3R_36()) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
- final private boolean jj_3R_79() {
- if (jj_scan_token(COMMA)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- if (jj_3R_52()) return true;
+ final private boolean jj_3R_61() {
+ if (jj_3R_53()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
@@ -2620,6 +2587,34 @@
return false;
}
+ final private boolean jj_3R_74() {
+ if (jj_3R_36()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
+ final private boolean jj_3R_105() {
+ if (jj_scan_token(MODULUS)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ if (jj_3R_30()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
+ final private boolean jj_3R_70() {
+ if (jj_3R_36()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
+ final private boolean jj_3R_79() {
+ if (jj_scan_token(COMMA)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ if (jj_3R_52()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3R_104() {
if (jj_scan_token(DIVIDE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -3011,6 +3006,12 @@
return false;
}
+ final private boolean jj_3R_21() {
+ if (jj_scan_token(WHITESPACE)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3R_80() {
if (jj_3R_28()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -3027,12 +3028,6 @@
return false;
}
- final private boolean jj_3R_21() {
- if (jj_scan_token(WHITESPACE)) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
- return false;
- }
-
final private boolean jj_3R_58() {
Token xsp;
xsp = jj_scanpos;
@@ -3056,14 +3051,20 @@
return false;
}
+ final private boolean jj_3R_19() {
+ if (jj_3R_35()) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
final private boolean jj_3_6() {
if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_19() {
- if (jj_3R_35()) return true;
+ final private boolean jj_3R_34() {
+ if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
@@ -3074,7 +3075,7 @@
return false;
}
- final private boolean jj_3R_34() {
+ final private boolean jj_3R_25() {
if (jj_scan_token(WHITESPACE)) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
@@ -3086,14 +3087,14 @@
return false;
}
- final private boolean jj_3R_25() {
- if (jj_scan_token(WHITESPACE)) return true;
+ final private boolean jj_3R_26() {
+ if (jj_3R_37()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
- final private boolean jj_3R_26() {
- if (jj_3R_37()) return true;
+ final private boolean jj_3R_33() {
+ if (jj_3R_36()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
@@ -3115,6 +3116,12 @@
if (jj_3R_21()) jj_scanpos = xsp;
else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
if (jj_scan_token(DOUBLEDOT)) return true;
+ if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+ return false;
+ }
+
+ final private boolean jj_3R_24() {
+ if (jj_3R_36()) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
return false;
}
1.63 +37 -30
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jj
Index: Parser.jj
===================================================================
RCS file:
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jj,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- Parser.jj 2001/07/18 03:50:45 1.62
+++ Parser.jj 2001/08/07 21:57:28 1.63
@@ -95,7 +95,7 @@
import java.io.*;
import java.util.*;
-import org.apache.velocity.runtime.Runtime;
+import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.runtime.parser.node.*;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.directive.Macro;
@@ -112,7 +112,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
- * @version $Id: Parser.jj,v 1.62 2001/07/18 03:50:45 geirm Exp $
+ * @version $Id: Parser.jj,v 1.63 2001/08/07 21:57:28 geirm Exp $
*/
public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
{/*@bgen(jjtree)*/
@@ -131,6 +131,8 @@
VelocityCharStream velcharstream = null;
+ private RuntimeServices rsvc = null;
+
/**
* This constructor was added to allow the re-use of parsers.
* The normal constructor takes a single argument which
@@ -138,7 +140,7 @@
* object, we satisfy the requirement of an InputStream
* by using a newline character as an input stream.
*/
- public Parser()
+ public Parser( RuntimeServices rs)
{
/*
* need to call the CTOR first thing.
@@ -152,6 +154,11 @@
*/
velcharstream = new VelocityCharStream(
new ByteArrayInputStream("\n".getBytes()), 1, 1 );
+
+ /*
+ * and save the RuntimeServices
+ */
+ rsvc = rs;
}
/**
@@ -192,7 +199,7 @@
}
catch (ParseException pe)
{
- Runtime.error ("Parser Exception: " + templateName + " : " +
StringUtils.stackTrace(pe));
+ rsvc.error ("Parser Exception: " + templateName + " : " +
StringUtils.stackTrace(pe));
throw new ParseException (pe.currentToken,
pe.expectedTokenSequences, pe.tokenImage);
}
@@ -202,7 +209,7 @@
}
catch (Exception e)
{
- Runtime.error ("Parser Error: " + templateName + " : " +
StringUtils.stackTrace(e));
+ rsvc.error ("Parser Error: " + templateName + " : " +
StringUtils.stackTrace(e));
}
currentTemplateName = "";
@@ -259,7 +266,7 @@
{
bRecognizedDirective = true;
}
- else if (Runtime.isVelocimacro( strDirective.substring(1),
currentTemplateName))
+ else if ( rsvc.isVelocimacro( strDirective.substring(1),
currentTemplateName))
{
bRecognizedDirective = true;
}
@@ -1130,7 +1137,7 @@
if ( isDirective( t.next.image.substring(1)))
control = true;
- else if ( Runtime.isVelocimacro( t.next.image.substring(1),
currentTemplateName))
+ else if ( rsvc.isVelocimacro( t.next.image.substring(1),
currentTemplateName))
control = true;
t.image = "";
@@ -1257,7 +1264,7 @@
| Word()
| StringLiteral()
| NumberLiteral()
-| LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
+| LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
| ObjectArray()
| True()
| False()
@@ -1315,7 +1322,7 @@
* if null, then not a real directive, but maybe a Velocimacro
*/
- d = (Directive) Runtime.getVelocimacro( directiveName,
currentTemplateName );
+ d = (Directive) rsvc.getVelocimacro( directiveName,
currentTemplateName );
if (d == null)
{
@@ -1391,8 +1398,8 @@
if ( doItNow )
{
- Macro m = new Macro();
- m.processAndRegister( jjtn000, currentTemplateName );
+ // Macro m = new Macro( );
+ Macro.processAndRegister( rsvc, jjtn000, currentTemplateName );
}
/*
@@ -1505,13 +1512,13 @@
[<WHITESPACE>]
(
StringLiteral()
- | LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
- | ObjectArray()
- | True()
- | False()
- | Reference()
- | NumberLiteral()
- )
+ | LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
+ | ObjectArray()
+ | True()
+ | False()
+ | Reference()
+ | NumberLiteral()
+ )
[ <WHITESPACE>]
}
@@ -2402,18 +2409,18 @@
void PrimaryExpression() : {}
{
-[<WHITESPACE>]
-(
- StringLiteral()
- | NumberLiteral()
- | Reference()
- | LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
- | ObjectArray()
- | True()
- | False()
- | <LPAREN> Expression() <RPAREN>
-)
-[<WHITESPACE>]
+ [<WHITESPACE>]
+ (
+ StringLiteral()
+ | NumberLiteral()
+ | Reference()
+ | LOOKAHEAD( <LBRACKET> [<WHITESPACE>] ( Reference() | NumberLiteral())
[<WHITESPACE>] <DOUBLEDOT> ) IntegerRange()
+ | ObjectArray()
+ | True()
+ | False()
+ | <LPAREN> Expression() <RPAREN>
+ )
+ [<WHITESPACE>]
}
1.46 +1 -1
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTokenManager.java
Index: ParserTokenManager.java
===================================================================
RCS file:
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTokenManager.java,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- ParserTokenManager.java 2001/06/29 23:32:49 1.45
+++ ParserTokenManager.java 2001/08/07 21:57:28 1.46
@@ -2,7 +2,7 @@
package org.apache.velocity.runtime.parser;
import java.io.*;
import java.util.*;
-import org.apache.velocity.runtime.Runtime;
+import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.runtime.parser.node.*;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.directive.Macro;