You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by jv...@locus.apache.org on 2000/08/30 02:37:17 UTC

cvs commit: jakarta-velocity/src/java/org/apache/velocity/parser Parser.java Parser.jj Parser.jjt ParserTreeConstants.java ParserVisitor.java SimpleNode.java

jvanzyl     00/08/29 17:37:16

  Modified:    src/java/org/apache/velocity/parser Parser.java Parser.jj
                        Parser.jjt ParserTreeConstants.java
                        ParserVisitor.java SimpleNode.java
  Log:
  - added #if/#elseif/#else
  
  Revision  Changes    Path
  1.5       +63 -29    jakarta-velocity/src/java/org/apache/velocity/parser/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/Parser.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Parser.java	2000/08/29 20:06:57	1.4
  +++ Parser.java	2000/08/30 00:37:09	1.5
  @@ -14,7 +14,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.java,v 1.4 2000/08/29 20:06:57 jvanzyl Exp $
  + * @version $Id: Parser.java,v 1.5 2000/08/30 00:37:09 jvanzyl Exp $
    */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -69,6 +69,7 @@
           case INCLUDE_DIRECTIVE:
           case PARSE_DIRECTIVE:
           case IF_DIRECTIVE:
  +        case ELSEIF_DIRECTIVE:
           case FOREACH_DIRECTIVE:
           case SET_DIRECTIVE:
           case PARAM_DIRECTIVE:
  @@ -155,6 +156,9 @@
       case IF_DIRECTIVE:
         IfStatement();
         break;
  +    case ELSEIF_DIRECTIVE:
  +      ElseIfStatement();
  +      break;
       case FOREACH_DIRECTIVE:
         ForeachStatement();
         break;
  @@ -505,6 +509,7 @@
           case INCLUDE_DIRECTIVE:
           case PARSE_DIRECTIVE:
           case IF_DIRECTIVE:
  +        case ELSEIF_DIRECTIVE:
           case FOREACH_DIRECTIVE:
           case SET_DIRECTIVE:
           case PARAM_DIRECTIVE:
  @@ -615,37 +620,66 @@
         jj_consume_token(RPAREN);
         Statement();
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -      case ELSEIF_DIRECTIVE:
  -        jj_consume_token(ELSEIF_DIRECTIVE);
  -        jj_consume_token(LPAREN);
  -        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -        case TRUE:
  -          jj_consume_token(TRUE);
  -          break;
  -        case FALSE:
  -          jj_consume_token(FALSE);
  -          break;
  -        case VARIABLE:
  -          jj_consume_token(VARIABLE);
  -          break;
  -        case METHOD:
  -          jj_consume_token(METHOD);
  -          break;
  -        case PROPERTY:
  -          jj_consume_token(PROPERTY);
  -          break;
  -        default:
  -          jj_la1[10] = jj_gen;
  -          jj_consume_token(-1);
  -          throw new ParseException();
  -        }
  -        jj_consume_token(RPAREN);
  +      case ELSE_DIRECTIVE:
  +        jj_consume_token(ELSE_DIRECTIVE);
           Statement();
           break;
         default:
  -        jj_la1[11] = jj_gen;
  +        jj_la1[10] = jj_gen;
           ;
         }
  +    } catch (Throwable jjte000) {
  +    if (jjtc000) {
  +      jjtree.clearNodeScope(jjtn000);
  +      jjtc000 = false;
  +    } else {
  +      jjtree.popNode();
  +    }
  +    if (jjte000 instanceof RuntimeException) {
  +      {if (true) throw (RuntimeException)jjte000;}
  +    }
  +    if (jjte000 instanceof ParseException) {
  +      {if (true) throw (ParseException)jjte000;}
  +    }
  +    {if (true) throw (Error)jjte000;}
  +    } finally {
  +    if (jjtc000) {
  +      jjtree.closeNodeScope(jjtn000, true);
  +    }
  +    }
  +  }
  +
  +  final public void ElseIfStatement() throws ParseException {
  +                          /*@bgen(jjtree) ElseIfStatement */
  +  ASTElseIfStatement jjtn000 = new ASTElseIfStatement(this, JJTELSEIFSTATEMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +      jj_consume_token(ELSEIF_DIRECTIVE);
  +      jj_consume_token(LPAREN);
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case TRUE:
  +        jj_consume_token(TRUE);
  +        break;
  +      case FALSE:
  +        jj_consume_token(FALSE);
  +        break;
  +      case VARIABLE:
  +        jj_consume_token(VARIABLE);
  +        break;
  +      case METHOD:
  +        jj_consume_token(METHOD);
  +        break;
  +      case PROPERTY:
  +        jj_consume_token(PROPERTY);
  +        break;
  +      default:
  +        jj_la1[11] = jj_gen;
  +        jj_consume_token(-1);
  +        throw new ParseException();
  +      }
  +      jj_consume_token(RPAREN);
  +      Statement();
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case ELSE_DIRECTIVE:
           jj_consume_token(ELSE_DIRECTIVE);
  @@ -960,8 +994,8 @@
     private int jj_ntk;
     private int jj_gen;
     final private int[] jj_la1 = new int[17];
  -  final private int[] jj_la1_0 = {0x3fdff380,0x3fdff380,0x20000,0x0,0x20000,0x10000000,0x0,0x0,0x3fdff380,0x6000000,0x6000000,0x400,0x800,0x0,0x0,0x6020000,0x3fce0000,};
  -  final private int[] jj_la1_1 = {0x1b1,0x1b1,0xb0,0x200,0xb0,0x0,0x108,0x108,0x1b1,0xb0,0xb0,0x0,0x0,0xb0,0x30,0xb0,0x101,};
  +  final private int[] jj_la1_0 = {0x3fdff780,0x3fdff780,0x20000,0x0,0x20000,0x10000000,0x0,0x0,0x3fdff780,0x6000000,0x800,0x6000000,0x800,0x0,0x0,0x6020000,0x3fce0000,};
  +  final private int[] jj_la1_1 = {0x1b1,0x1b1,0xb0,0x200,0xb0,0x0,0x108,0x108,0x1b1,0xb0,0x0,0xb0,0x0,0xb0,0x30,0xb0,0x101,};
   
     public Parser(java.io.InputStream stream) {
       jj_input_stream = new ASCII_CharStream(stream, 1, 1);
  
  
  
  1.6       +38 -9     jakarta-velocity/src/java/org/apache/velocity/parser/Parser.jj
  
  Index: Parser.jj
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/Parser.jj,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Parser.jj	2000/08/29 20:06:57	1.5
  +++ Parser.jj	2000/08/30 00:37:12	1.6
  @@ -91,7 +91,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.jj,v 1.5 2000/08/29 20:06:57 jvanzyl Exp $
  + * @version $Id: Parser.jj,v 1.6 2000/08/30 00:37:12 jvanzyl Exp $
    */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -419,6 +419,7 @@
       Text()
   |   Block()    
   |   IfStatement()
  +|   ElseIfStatement()
   |   ForeachStatement()
   |   IncludeStatement()
   |   SetStatement()
  @@ -754,14 +755,42 @@
     ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
     <RPAREN>
     Statement()
  -  [ 
  -    LOOKAHEAD(1)
  -    <ELSEIF_DIRECTIVE>
  -    <LPAREN>
  -    ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
  -    <RPAREN>
  -    Statement()
  -  ]
  +  [ LOOKAHEAD(1) <ELSE_DIRECTIVE> Statement() ]/*@bgen(jjtree)*/
  +  } catch (Throwable jjte000) {
  +    if (jjtc000) {
  +      jjtree.clearNodeScope(jjtn000);
  +      jjtc000 = false;
  +    } else {
  +      jjtree.popNode();
  +    }
  +    if (jjte000 instanceof RuntimeException) {
  +      throw (RuntimeException)jjte000;
  +    }
  +    if (jjte000 instanceof ParseException) {
  +      throw (ParseException)jjte000;
  +    }
  +    throw (Error)jjte000;
  +  } finally {
  +    if (jjtc000) {
  +      jjtree.closeNodeScope(jjtn000, true);
  +    }
  +  }
  +/*@egen*/
  +}
  +
  +void ElseIfStatement() : {/*@bgen(jjtree) ElseIfStatement */
  +  ASTElseIfStatement jjtn000 = new ASTElseIfStatement(this, JJTELSEIFSTATEMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) ElseIfStatement */
  +  try {
  +/*@egen*/
  +  <ELSEIF_DIRECTIVE> 
  +  <LPAREN>
  +  ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
  +  <RPAREN>
  +  Statement()
     [ LOOKAHEAD(1) <ELSE_DIRECTIVE> Statement() ]/*@bgen(jjtree)*/
     } catch (Throwable jjte000) {
       if (jjtc000) {
  
  
  
  1.7       +12 -9     jakarta-velocity/src/java/org/apache/velocity/parser/Parser.jjt
  
  Index: Parser.jjt
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/Parser.jjt,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Parser.jjt	2000/08/29 20:06:58	1.6
  +++ Parser.jjt	2000/08/30 00:37:12	1.7
  @@ -115,7 +115,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.jjt,v 1.6 2000/08/29 20:06:58 jvanzyl Exp $
  + * @version $Id: Parser.jjt,v 1.7 2000/08/30 00:37:12 jvanzyl Exp $
    */
   public class Parser
   {
  @@ -409,6 +409,7 @@
       Text()
   |   Block()    
   |   IfStatement()
  +|   ElseIfStatement()
   |   ForeachStatement()
   |   IncludeStatement()
   |   SetStatement()
  @@ -586,14 +587,16 @@
     ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
     <RPAREN>
     Statement()
  -  [ 
  -    LOOKAHEAD(1)
  -    <ELSEIF_DIRECTIVE>
  -    <LPAREN>
  -    ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
  -    <RPAREN>
  -    Statement()
  -  ]
  +  [ LOOKAHEAD(1) <ELSE_DIRECTIVE> Statement() ]
  +}
  +
  +void ElseIfStatement() : {}
  +{
  +  <ELSEIF_DIRECTIVE> 
  +  <LPAREN>
  +  ( <TRUE> | <FALSE> | <VARIABLE> | <METHOD> | <PROPERTY> )
  +  <RPAREN>
  +  Statement()
     [ LOOKAHEAD(1) <ELSE_DIRECTIVE> Statement() ]
   }
   
  
  
  
  1.3       +7 -5      jakarta-velocity/src/java/org/apache/velocity/parser/ParserTreeConstants.java
  
  Index: ParserTreeConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/ParserTreeConstants.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserTreeConstants.java	2000/08/29 06:48:25	1.2
  +++ ParserTreeConstants.java	2000/08/30 00:37:13	1.3
  @@ -15,11 +15,12 @@
     public int JJTEXPRESSION = 8;
     public int JJTBLOCK = 9;
     public int JJTIFSTATEMENT = 10;
  -  public int JJTFOREACHSTATEMENT = 11;
  -  public int JJTSETSTATEMENT = 12;
  -  public int JJTUSESTATEMENT = 13;
  -  public int JJTPARAMSTATEMENT = 14;
  -  public int JJTTEXT = 15;
  +  public int JJTELSEIFSTATEMENT = 11;
  +  public int JJTFOREACHSTATEMENT = 12;
  +  public int JJTSETSTATEMENT = 13;
  +  public int JJTUSESTATEMENT = 14;
  +  public int JJTPARAMSTATEMENT = 15;
  +  public int JJTTEXT = 16;
   
   
     public String[] jjtNodeName = {
  @@ -34,6 +35,7 @@
       "Expression",
       "Block",
       "IfStatement",
  +    "ElseIfStatement",
       "ForeachStatement",
       "SetStatement",
       "UseStatement",
  
  
  
  1.3       +1 -0      jakarta-velocity/src/java/org/apache/velocity/parser/ParserVisitor.java
  
  Index: ParserVisitor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/ParserVisitor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserVisitor.java	2000/08/29 06:48:25	1.2
  +++ ParserVisitor.java	2000/08/30 00:37:13	1.3
  @@ -15,6 +15,7 @@
     public Object visit(ASTExpression node, Object data);
     public Object visit(ASTBlock node, Object data);
     public Object visit(ASTIfStatement node, Object data);
  +  public Object visit(ASTElseIfStatement node, Object data);
     public Object visit(ASTForeachStatement node, Object data);
     public Object visit(ASTSetStatement node, Object data);
     public Object visit(ASTUseStatement node, Object data);
  
  
  
  1.2       +3 -1      jakarta-velocity/src/java/org/apache/velocity/parser/SimpleNode.java
  
  Index: SimpleNode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/parser/SimpleNode.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SimpleNode.java	2000/08/24 21:42:48	1.1
  +++ SimpleNode.java	2000/08/30 00:37:13	1.2
  @@ -7,7 +7,9 @@
     protected Node[] children;
     protected int id;
     protected Parser parser;
  -  
  +
  +  public boolean state;
  +
     /* Added */
     protected Token first, last;