final public SimpleNode Directive() throws ParseException {
/*@bgen(jjtree) Directive */
ASTDirective jjtn000 = new ASTDirective(this, JJTDIRECTIVE);
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);Token t = null;
Directive d;
boolean doItNow = false;
try {
/*
* note that if we were escaped, that is now handled by
* EscapedDirective()
*/
t = jj_consume_token(WORD);
String directiveName = t.image.substring(1);
d = (Directive) directives.get( directiveName );
/*
* Velocimacro support : if the directive is macro directive
* then set the flag so after the block parsing, we add the VM
* right then. (So available if used w/in the current template )
*/
if ( directiveName.equals("macro"))
{
doItNow = true;
}
/*
* set the directive name from here. No reason for the thing to know
* about parser tokens
*/
jjtn000.setDirectiveName( directiveName );
if ( d == null)
{
/*
* if null, then not a real directive, but maybe a Velocimacro
*/
d = (Directive) Runtime.getVelocimacro( directiveName, currentTemplateName );
if (d == null)
{
token_source.stateStackPop();
token_source.inDirective = false;
{if (true) return jjtn000;}
}
}
/*
* now, switch us out of PRE_DIRECTIVE
*/
token_source.SwitchTo(DIRECTIVE);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case WHITESPACE:
jj_consume_token(WHITESPACE);
break;
default:
jj_la1[5] = jj_gen;
;
}
jj_consume_token(LPAREN);
label_3:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LBRACKET:
case WHITESPACE:
case STRING_LITERAL:
case TRUE:
case FALSE:
case NUMBER_LITERAL:
case WORD:
case IDENTIFIER:
case LCURLY:
;
break;
default:
jj_la1[6] = jj_gen;
break label_3;
}
DirectiveArg();
}
jj_consume_token(RPAREN);
if (d.getType() == Directive.LINE)
{if (true) return jjtn000;}
ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
boolean jjtc001 = true;
jjtree.openNodeScope(jjtn001);
try {