geirm       00/11/07 13:34:15

  Modified:    src/java/org/apache/velocity/runtime/parser Parser.java
                        Parser.jj ParserConstants.java
                        ParserTokenManager.java ParserTreeConstants.java
  Log:
  Usual Parser.jjt autogen miscreants.  (Escape handling changes.)
  
  Revision  Changes    Path
  1.26      +324 -300  
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.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- Parser.java       2000/11/06 04:12:58     1.25
  +++ Parser.java       2000/11/07 21:33:52     1.26
  @@ -18,7 +18,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.25 2000/11/06 04:12:58 geirm Exp $ 
  + * @version $Id: Parser.java,v 1.26 2000/11/07 21:33:52 geirm Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants 
{/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -359,7 +359,17 @@
              */
         
             t = jj_consume_token(WORD);
  -        if( t.image.startsWith("\\"))
  +        /*
  +         *  We need to count the preceeding \'s.  If t starts with an odd number of 
\'s...
  +         */
  +
  +         int i = 0;
  +         int iLen = t.image.length();
  +
  +         while( i < iLen && t.image.charAt(i) == '\\' )
  +            i++;
  +
  +        if( t.image.startsWith("\\") && (i % 2) != 0 )
           {
               token_source.stateStackPop();
               token_source.inDirective = false;
  @@ -367,7 +377,7 @@
           }
           else
           {
  -            d = (Directive) directives.get(t.image.substring(1));
  +            d = (Directive) directives.get(t.image.substring(i+1));
   
               if (d == null)
               {
  @@ -456,7 +466,7 @@
           jjtree.closeNodeScope(jjtn001, true);
         }
         }
  -      jj_consume_token(END);
  +      EndStatement();
         jjtree.closeNodeScope(jjtn000, true);
         jjtc000 = false;
           {if (true) return jjtn000;}
  @@ -900,7 +910,7 @@
           jj_la1[19] = jj_gen;
           ;
         }
  -      jj_consume_token(END);
  +      EndStatement();
       } catch (Throwable jjte000) {
         if (jjtc000) {
           jjtree.clearNodeScope(jjtn000);
  @@ -922,6 +932,20 @@
       }
     }
   
  +  final public void EndStatement() throws ParseException {
  +                       /*@bgen(jjtree) EndStatement */
  +  ASTEndStatement jjtn000 = new ASTEndStatement(this, JJTENDSTATEMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +      jj_consume_token(END);
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +  }
  +
     final public void ElseStatement() throws ParseException {
                           /*@bgen(jjtree) ElseStatement */
     ASTElseStatement jjtn000 = new ASTElseStatement(this, JJTELSESTATEMENT);
  @@ -1794,586 +1818,586 @@
       return retval;
     }
   
  -  final private boolean jj_3R_28() {
  -    if (jj_scan_token(LPAREN)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_36()) return true;
  +  final private boolean jj_3R_62() {
  +    if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RPAREN)) return true;
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_33() {
  -    if (jj_scan_token(LBRACKET)) return true;
  +  final private boolean jj_3R_57() {
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_45()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RBRACKET)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_60()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_30() {
  -    if (jj_scan_token(STRING_LITERAL)) return true;
  +  final private boolean jj_3R_61() {
  +    if (jj_scan_token(LOGICAL_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_27() {
  -    if (jj_3R_35()) return true;
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_26() {
  -    if (jj_3R_34()) return true;
  +  final private boolean jj_3R_58() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_61()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_62()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_25() {
  -    if (jj_3R_33()) return true;
  +  final private boolean jj_3R_56() {
  +    if (jj_scan_token(COMMA)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_24() {
  -    if (jj_3R_32()) return true;
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_23() {
  -    if (jj_3R_31()) return true;
  +  final private boolean jj_3R_54() {
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_58()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_48() {
  -    if (jj_scan_token(RCURLY)) return true;
  +  final private boolean jj_3_2() {
  +    if (jj_3R_18()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_31() {
  -    if (jj_scan_token(NUMBER_LITERAL)) return true;
  +  final private boolean jj_3R_55() {
  +    if (jj_scan_token(LOGICAL_AND)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_54()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_22() {
  -    if (jj_3R_30()) return true;
  +  final private boolean jj_3R_21() {
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_56()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_19() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_22()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_23()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_24()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_25()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_26()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_27()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_28()) return true;
  +  final private boolean jj_3R_52() {
  +    if (jj_3R_54()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_55()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_74() {
  -    if (jj_3R_19()) return true;
  +  final private boolean jj_3R_35() {
  +    if (jj_scan_token(FALSE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_77() {
  -    if (jj_scan_token(MODULUS)) return true;
  +  final private boolean jj_3R_53() {
  +    if (jj_scan_token(LOGICAL_OR)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +    if (jj_3R_52()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_73() {
  -    if (jj_scan_token(LOGICAL_NOT)) return true;
  +  final private boolean jj_3_3() {
  +    if (jj_3R_19()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +    if (jj_scan_token(EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_69() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_73()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_74()) return true;
  +  final private boolean jj_3R_51() {
  +    if (jj_3R_52()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_53()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_76() {
  -    if (jj_scan_token(DIVIDE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_34() {
  +    if (jj_scan_token(TRUE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_75() {
  -    if (jj_scan_token(MULTIPLY)) return true;
  +  final private boolean jj_3R_50() {
  +    if (jj_3R_19()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +    if (jj_scan_token(EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_70() {
  +  final private boolean jj_3_1() {
  +    if (jj_scan_token(DOT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_75()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_76()) {
  +    if (jj_3_2()) {
       jj_scanpos = xsp;
  -    if (jj_3R_77()) return true;
  +    if (jj_3R_17()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    xsp = jj_scanpos;
  +    if (jj_3R_48()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_72() {
  -    if (jj_scan_token(MINUS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_63()) return true;
  +  final private boolean jj_3R_44() {
  +    if (jj_scan_token(RCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_63() {
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_47() {
  +    if (jj_3R_51()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_70()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
       return false;
     }
   
  -  final private boolean jj_3R_17() {
  -    if (jj_3R_20()) return true;
  +  final private boolean jj_3R_43() {
  +    if (jj_scan_token(LCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_71() {
  -    if (jj_scan_token(PLUS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_63()) return true;
  +  final private boolean jj_3R_46() {
  +    if (jj_3R_50()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_64() {
  +  final private boolean jj_3R_36() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_71()) {
  +    if (jj_3R_46()) {
       jj_scanpos = xsp;
  -    if (jj_3R_72()) return true;
  +    if (jj_3R_47()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  -
  -  final private boolean jj_3R_68() {
  -    if (jj_scan_token(LOGICAL_GE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
   
  -  final private boolean jj_3R_59() {
  -    if (jj_3R_63()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +  final private boolean jj_3R_32() {
       Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_43()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(IDENTIFIER)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    xsp = jj_scanpos;
  +    if (jj_3R_44()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_64()) { jj_scanpos = xsp; break; }
  +      if (jj_3_1()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_67() {
  -    if (jj_scan_token(LOGICAL_LE)) return true;
  +  final private boolean jj_3R_49() {
  +    if (jj_scan_token(COMMA)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_66() {
  -    if (jj_scan_token(LOGICAL_GT)) return true;
  +  final private boolean jj_3R_18() {
  +    if (jj_3R_20()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +    if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_65() {
  -    if (jj_scan_token(LOGICAL_LT)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_60() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_65()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_66()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_67()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_68()) return true;
  +    if (jj_3R_21()) 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;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_56() {
  -    if (jj_scan_token(COMMA)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_29()) return true;
  +  final private boolean jj_3R_42() {
  +    if (jj_3R_31()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_62() {
  -    if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_41() {
  +    if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_57() {
  -    if (jj_3R_59()) return true;
  +  final private boolean jj_3R_45() {
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_60()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_49()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_61() {
  -    if (jj_scan_token(LOGICAL_EQUALS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_40() {
  +    if (jj_3R_35()) 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;
  -    if (jj_3R_61()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_62()) return true;
  +  final private boolean jj_3R_39() {
  +    if (jj_3R_34()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3_2() {
  -    if (jj_3R_18()) return true;
  +  final private boolean jj_3R_38() {
  +    if (jj_3R_33()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_54() {
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_37() {
  +    if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_58()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
       return false;
     }
   
  -  final private boolean jj_3R_21() {
  -    if (jj_3R_29()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +  final private boolean jj_3R_29() {
       Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_56()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  +    xsp = jj_scanpos;
  +    if (jj_3R_37()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_38()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_39()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_40()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_41()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_42()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_55() {
  -    if (jj_scan_token(LOGICAL_AND)) return true;
  +  final private boolean jj_3R_28() {
  +    if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_54()) return true;
  +    if (jj_3R_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(RPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_35() {
  -    if (jj_scan_token(FALSE)) return true;
  +  final private boolean jj_3R_20() {
  +    if (jj_scan_token(IDENTIFIER)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_52() {
  -    if (jj_3R_54()) return true;
  +  final private boolean jj_3R_27() {
  +    if (jj_3R_35()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_55()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
       return false;
     }
   
  -  final private boolean jj_3R_34() {
  -    if (jj_scan_token(TRUE)) return true;
  +  final private boolean jj_3R_26() {
  +    if (jj_3R_34()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_53() {
  -    if (jj_scan_token(LOGICAL_OR)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_52()) return true;
  +  final private boolean jj_3R_25() {
  +    if (jj_3R_33()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3_3() {
  -    if (jj_3R_19()) return true;
  +  final private boolean jj_3R_24() {
  +    if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(EQUALS)) return true;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_23() {
  +    if (jj_3R_31()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_51() {
  -    if (jj_3R_52()) return true;
  +  final private boolean jj_3R_33() {
  +    if (jj_scan_token(LBRACKET)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_53()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  +    xsp = jj_scanpos;
  +    if (jj_3R_45()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(RBRACKET)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3_1() {
  -    if (jj_scan_token(DOT)) return true;
  +  final private boolean jj_3R_22() {
  +    if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_19() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3_2()) {
  +    if (jj_3R_22()) {
       jj_scanpos = xsp;
  -    if (jj_3R_17()) return true;
  +    if (jj_3R_23()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_24()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_25()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_26()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_27()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_28()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    xsp = jj_scanpos;
  -    if (jj_3R_48()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_44() {
  -    if (jj_scan_token(RCURLY)) return true;
  +  final private boolean jj_3R_74() {
  +    if (jj_3R_19()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_50() {
  -    if (jj_3R_19()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(EQUALS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_36()) return true;
  +  final private boolean jj_3R_48() {
  +    if (jj_scan_token(RCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_43() {
  -    if (jj_scan_token(LCURLY)) return true;
  +  final private boolean jj_3R_77() {
  +    if (jj_scan_token(MODULUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_32() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_43()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(IDENTIFIER)) return true;
  +  final private boolean jj_3R_73() {
  +    if (jj_scan_token(LOGICAL_NOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    xsp = jj_scanpos;
  -    if (jj_3R_44()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3_1()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  +    if (jj_3R_69()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_47() {
  -    if (jj_3R_51()) return true;
  +  final private boolean jj_3R_69() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_73()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_74()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_49() {
  -    if (jj_scan_token(COMMA)) return true;
  +  final private boolean jj_3R_76() {
  +    if (jj_scan_token(DIVIDE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_29()) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_46() {
  -    if (jj_3R_50()) return true;
  +  final private boolean jj_3R_75() {
  +    if (jj_scan_token(MULTIPLY)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_36() {
  +  final private boolean jj_3R_70() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_46()) {
  +    if (jj_3R_75()) {
       jj_scanpos = xsp;
  -    if (jj_3R_47()) return true;
  +    if (jj_3R_76()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_77()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_18() {
  -    if (jj_3R_20()) return true;
  +  final private boolean jj_3R_30() {
  +    if (jj_scan_token(STRING_LITERAL)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(LPAREN)) return true;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_31() {
  +    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_72() {
  +    if (jj_scan_token(MINUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_63() {
  +    if (jj_3R_69()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_21()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(REFMOD2_RPAREN)) return true;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_70()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_71() {
  +    if (jj_scan_token(PLUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_20() {
  -    if (jj_scan_token(IDENTIFIER)) return true;
  +  final private boolean jj_3R_64() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_71()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_72()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_42() {
  -    if (jj_3R_31()) return true;
  +  final private boolean jj_3R_17() {
  +    if (jj_3R_20()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_41() {
  -    if (jj_3R_32()) return true;
  +  final private boolean jj_3R_68() {
  +    if (jj_scan_token(LOGICAL_GE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_45() {
  -    if (jj_3R_29()) return true;
  +  final private boolean jj_3R_59() {
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_49()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_64()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_40() {
  -    if (jj_3R_35()) return true;
  +  final private boolean jj_3R_67() {
  +    if (jj_scan_token(LOGICAL_LE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_39() {
  -    if (jj_3R_34()) return true;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_38() {
  -    if (jj_3R_33()) return true;
  +  final private boolean jj_3R_66() {
  +    if (jj_scan_token(LOGICAL_GT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_37() {
  -    if (jj_3R_30()) return true;
  +  final private boolean jj_3R_65() {
  +    if (jj_scan_token(LOGICAL_LT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_29() {
  +  final private boolean jj_3R_60() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_37()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_38()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_39()) {
  +    if (jj_3R_65()) {
       jj_scanpos = xsp;
  -    if (jj_3R_40()) {
  +    if (jj_3R_66()) {
       jj_scanpos = xsp;
  -    if (jj_3R_41()) {
  +    if (jj_3R_67()) {
       jj_scanpos = xsp;
  -    if (jj_3R_42()) return true;
  +    if (jj_3R_68()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  
  
  
  1.26      +85 -22    
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.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- Parser.jj 2000/11/06 04:12:58     1.25
  +++ Parser.jj 2000/11/07 21:33:54     1.26
  @@ -103,7 +103,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.25 2000/11/06 04:12:58 geirm Exp $ 
  + * @version $Id: Parser.jj,v 1.26 2000/11/07 21:33:54 geirm Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -328,6 +328,14 @@
           return;
       }
   
  +    /**
  +     *  Produces a processed output for an escaped control directive
  +     */
  +    private String escapedDirective( String strImage, String strDirective )
  +    {
  +        int iLast = strImage.lastIndexOf("\\");
  +        return ( strImage.substring(0,iLast/2) + strDirective); 
  +    }
   
       /**
        *  handles the dropdown logic when encountering a RPAREN
  @@ -466,26 +474,45 @@
       /*
        *  We have to do this, because we want these to be a Text node, and
        *  whatever follows to be peer to this text in the tree.
  -     *  And we don't want to try an and deal with this w/in the AST.
  +     *  
  +     *  We need to touch the ASTs for these, because we want an even # of \'s
  +     *  to render properly in front of the block
        *
        *  This is really simplistic.  I actually would prefer to find them in
        *  grammatical context, but I am neither smart nor rested, a receipe
        *  for disaster, another long night with Mr. Parser, or both.
        */
  +
  +     <ESCAPE_SET_DIRECTIVE : ("\\\\")* "\\#set">   
  +     { 
  +        matchedToken.image = escapedDirective( matchedToken.image, "#set");
  +     }
  +
  +|    <ESCAPE_IF_DIRECTIVE : ("\\\\")*  "\\#if">   
  +     { 
  +         matchedToken.image = escapedDirective( matchedToken.image, "#if");
  +     }
  +
  +|    <ESCAPE_END_DIRECTIVE : ("\\\\")* "\\#end">   
  +     { 
  +        matchedToken.image = escapedDirective( matchedToken.image, "#end");
  +     }     
  +
  +|    <ESCAPE_ELSEIF_DIRECTIVE: ("\\\\")* "\\#elseif">
  +     { 
  +        matchedToken.image = escapedDirective( matchedToken.image, "#elseif");
  +     }
   
  -     <ESCAPE_SET_DIRECTIVE : "\\#set">   
  -     { matchedToken.image = "#set"; }
  -|    <ESCAPE_IF_DIRECTIVE : "\\#if">   
  -     { matchedToken.image = "#if"; }
  -|    <ESCAPE_END_DIRECTIVE : "\\#end">   
  -     { matchedToken.image = "#end"; }
  -|    <ESCAPE_ELSEIF_DIRECTIVE: "\\#elseif">
  -     { matchedToken.image = "#elseif"; }
  -|    <ESCAPE_ELSE_DIRECTIVE: "\\#else"> 
  -     { matchedToken.image = "#else"; }
  -|    <ESCAPE_STOP_DIRECTIVE: "\\#stop">
  -     { matchedToken.image = "#stop"; }
  +|    <ESCAPE_ELSE_DIRECTIVE: ("\\\\")* "\\#else"> 
  +     { 
  +        matchedToken.image = escapedDirective( matchedToken.image, "#else");
  +     }
   
  +|    <ESCAPE_STOP_DIRECTIVE: ("\\\\")* "\\#stop">
  +     { 
  +        matchedToken.image = escapedDirective( matchedToken.image, "#stop");
  +     }
  +
   }
   
   
  @@ -496,7 +523,7 @@
    */
   TOKEN:
   {
  -   <SET_DIRECTIVE: (" "|"\t")* "#set" >
  +  <SET_DIRECTIVE: (" "|"\t")* ("\\\\")*  "#set" >
       { 
           if (! inComment)
           {
  @@ -519,7 +546,7 @@
        *   Note : DOLLARBANG is a duplicate of DOLLAR.  They must be identical.
        */
   
  -    <DOLLAR: ("\\")? "$"> 
  +    <DOLLAR: ("\\")* "$"> 
       { 
           if (! inComment)
           {
  @@ -560,7 +587,6 @@
           inComment = true; 
           stateStackPush();
           SwitchTo( IN_FORMAL_COMMENT);
  -        // was : IN_FORMAL_COMMENT
       } 
       
   |   "#*" 
  @@ -570,7 +596,7 @@
           SwitchTo( IN_MULTI_LINE_COMMENT ); 
       } 
   
  -|   <HASH : ("\\")? "#"> 
  +|   <HASH : ("\\")* "#" > 
       { 
           if (! inComment)
           {
  @@ -1051,7 +1077,17 @@
   
       t = <WORD>
       {
  -        if( t.image.startsWith("\\"))
  +        /*
  +         *  We need to count the preceeding \'s.  If t starts with an odd number of 
\'s...
  +         */
  +
  +         int i = 0;
  +         int iLen = t.image.length();
  +
  +         while( i < iLen && t.image.charAt(i) == '\\' )
  +            i++;         
  +                
  +        if( t.image.startsWith("\\") && (i % 2) != 0 )
           {
               token_source.stateStackPop();
               token_source.inDirective = false;
  @@ -1059,7 +1095,7 @@
           }
           else
           {
  -            d = (Directive) directives.get(t.image.substring(1));
  +            d = (Directive) directives.get(t.image.substring(i+1));
           
               if (d == null)
               {
  @@ -1114,7 +1150,7 @@
         }
       }
   /*@egen*/ 
  -    <END>/*@bgen(jjtree)*/
  +    EndStatement()/*@bgen(jjtree)*/
       {
         jjtree.closeNodeScope(jjtn000, true);
         jjtc000 = false;
  @@ -1380,7 +1416,7 @@
   /*@egen*/
       [ LOOKAHEAD(1) ( ElseIfStatement() )+ ]
       [ LOOKAHEAD(1) ElseStatement() ]
  -    <END>/*@bgen(jjtree)*/
  +    EndStatement()/*@bgen(jjtree)*/
       } catch (Throwable jjte000) {
         if (jjtc000) {
           jjtree.clearNodeScope(jjtn000);
  @@ -1403,6 +1439,23 @@
   /*@egen*/
   }
   
  +void EndStatement() : {/*@bgen(jjtree) EndStatement */
  +  ASTEndStatement jjtn000 = new ASTEndStatement(this, JJTENDSTATEMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) EndStatement */
  +    try {
  +/*@egen*/
  +    <END>/*@bgen(jjtree)*/
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +/*@egen*/
  +}
  +
   void ElseStatement() : {/*@bgen(jjtree) ElseStatement */
     ASTElseStatement jjtn000 = new ASTElseStatement(this, JJTELSESTATEMENT);
     boolean jjtc000 = true;
  @@ -2133,6 +2186,10 @@
       ----------------
       The escape processing in VTL is very simple.  The '\' character acts only as an 
escape when :
       
  +        1) On or more touch a VTL element.
  +
  +    A VTL element is either :
  +
           1) It preceeds a reference that is in the context.
   
           2) It preceeds a defined directive (#set, #if, #end, etc) or a valid 
pluggable directive, 
  @@ -2148,6 +2205,12 @@
       would output
   
           $foo  $bar  \$woogie
  +
  +    Further, you can stack them and they affect left to right, just like convention 
escape characters in other languages.
  +
  +        \$foo = $foo
  +        \\$foo = \<foo>
  +        \\\$foo = \$foo
   
       
       What You Expect
  
  
  
  1.13      +6 -6      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
  
  Index: ParserConstants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserConstants.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ParserConstants.java      2000/11/06 04:12:59     1.12
  +++ ParserConstants.java      2000/11/07 21:33:56     1.13
  @@ -81,12 +81,12 @@
       "\"(\"",
       "<RPAREN>",
       "\")\"",
  -    "\"\\\\#set\"",
  -    "\"\\\\#if\"",
  -    "\"\\\\#end\"",
  -    "\"\\\\#elseif\"",
  -    "\"\\\\#else\"",
  -    "\"\\\\#stop\"",
  +    "<ESCAPE_SET_DIRECTIVE>",
  +    "<ESCAPE_IF_DIRECTIVE>",
  +    "<ESCAPE_END_DIRECTIVE>",
  +    "<ESCAPE_ELSEIF_DIRECTIVE>",
  +    "<ESCAPE_ELSE_DIRECTIVE>",
  +    "<ESCAPE_STOP_DIRECTIVE>",
       "<SET_DIRECTIVE>",
       "<DOLLAR>",
       "\"$!\"",
  
  
  
  1.24      +393 -322  
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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- ParserTokenManager.java   2000/11/06 04:12:59     1.23
  +++ ParserTokenManager.java   2000/11/07 21:33:59     1.24
  @@ -135,6 +135,14 @@
           return;
       }
   
  +    /**
  +     *  Produces a processed output for an escaped control directive
  +     */
  +    private String escapedDirective( String strImage, String strDirective )
  +    {
  +        int iLast = strImage.lastIndexOf("\\");
  +        return ( strImage.substring(0,iLast/2) + strDirective);
  +    }
   
       /**
        *  handles the dropdown logic when encountering a RPAREN
  @@ -465,7 +473,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 20;
  +   jjnewStateCnt = 22;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -605,14 +613,14 @@
                        jjCheckNAdd(18);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(3, 4);
  +                     jjCheckNAddStates(3, 6);
                     break;
                  case 7:
                     if (kind > 17)
                        kind = 17;
                     break;
                  case 12:
  -                  jjAddStates(5, 6);
  +                  jjAddStates(7, 8);
                     break;
                  case 18:
                     if ((0x7fffffe07fffffeL & l) == 0L)
  @@ -623,8 +631,16 @@
                     break;
                  case 19:
                     if (curChar == 92)
  -                     jjAddStates(3, 4);
  +                     jjCheckNAddStates(3, 6);
                     break;
  +               case 20:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(20, 5);
  +                  break;
  +               case 21:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(21, 10);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -643,7 +659,7 @@
                     break;
                  case 12:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(5, 6);
  +                     jjAddStates(7, 8);
                     break;
                  default : break;
               }
  @@ -656,7 +672,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 20 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 22 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -740,7 +756,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 7;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -802,12 +818,20 @@
               {
                  case 4:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(9, 12);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
  +               case 7:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(7, 0);
  +                  break;
  +               case 8:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(8, 5);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -835,7 +859,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1031,7 +1055,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 14;
  +   jjnewStateCnt = 16;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1126,14 +1150,14 @@
                        jjCheckNAdd(10);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(13, 16);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
                  case 7:
  -                  jjAddStates(9, 10);
  +                  jjAddStates(17, 18);
                     break;
                  case 9:
                     if ((0x7fffffe07fffffeL & l) == 0L)
  @@ -1155,7 +1179,15 @@
                     break;
                  case 13:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(13, 16);
  +                  break;
  +               case 14:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(14, 0);
  +                  break;
  +               case 15:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(15, 5);
                     break;
                  default : break;
               }
  @@ -1175,7 +1207,7 @@
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(9, 10);
  +                     jjAddStates(17, 18);
                     break;
                  default : break;
               }
  @@ -1188,7 +1220,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 14 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1390,7 +1422,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 14;
  +   jjnewStateCnt = 16;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1485,14 +1517,14 @@
                        jjCheckNAdd(10);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(13, 16);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
                  case 7:
  -                  jjAddStates(9, 10);
  +                  jjAddStates(17, 18);
                     break;
                  case 9:
                     if ((0x7fffffe07fffffeL & l) == 0L)
  @@ -1514,7 +1546,15 @@
                     break;
                  case 13:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(13, 16);
  +                  break;
  +               case 14:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(14, 0);
  +                  break;
  +               case 15:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(15, 5);
                     break;
                  default : break;
               }
  @@ -1534,7 +1574,7 @@
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(9, 10);
  +                     jjAddStates(17, 18);
                     break;
                  default : break;
               }
  @@ -1547,7 +1587,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 14 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1631,7 +1671,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 7;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1693,12 +1733,20 @@
               {
                  case 4:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(9, 12);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
  +               case 7:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(7, 0);
  +                  break;
  +               case 8:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(8, 5);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -1726,7 +1774,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1930,7 +1978,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 15;
  +   jjnewStateCnt = 17;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2038,14 +2086,14 @@
                        jjCheckNAdd(11);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(19, 22);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
                  case 7:
  -                  jjAddStates(9, 10);
  +                  jjAddStates(17, 18);
                     break;
                  case 10:
                     if ((0x7fffffe07fffffeL & l) == 0L)
  @@ -2067,8 +2115,16 @@
                     break;
                  case 14:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(19, 22);
  +                  break;
  +               case 15:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(15, 0);
                     break;
  +               case 16:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(16, 5);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -2087,7 +2143,7 @@
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(9, 10);
  +                     jjAddStates(17, 18);
                     break;
                  default : break;
               }
  @@ -2100,7 +2156,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 15 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 17 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2180,7 +2236,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 10;
  +   jjnewStateCnt = 12;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2261,12 +2317,20 @@
               {
                  case 4:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(23, 26);
                     break;
                  case 2:
                     if (kind > 17)
                        kind = 17;
                     break;
  +               case 10:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(10, 0);
  +                  break;
  +               case 11:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(11, 5);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -2294,7 +2358,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 10 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 12 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2524,7 +2588,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 16;
  +   jjnewStateCnt = 18;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2581,7 +2645,7 @@
                     break;
                  case 7:
                     if ((0x100000200L & l) != 0L)
  -                     jjAddStates(11, 13);
  +                     jjAddStates(27, 29);
                     break;
                  case 8:
                     if ((0x2400L & l) != 0L && kind > 47)
  @@ -2631,7 +2695,7 @@
                        jjCheckNAdd(14);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(30, 33);
                     if (curChar == 101)
                        jjstateSet[jjnewStateCnt++] = 11;
                     break;
  @@ -2644,7 +2708,7 @@
                        break;
                     if (kind > 47)
                        kind = 47;
  -                  jjAddStates(11, 13);
  +                  jjAddStates(27, 29);
                     break;
                  case 12:
                     if (curChar == 101)
  @@ -2659,8 +2723,16 @@
                     break;
                  case 15:
                     if (curChar == 92)
  -                     jjAddStates(7, 8);
  +                     jjCheckNAddStates(30, 33);
                     break;
  +               case 16:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(16, 0);
  +                  break;
  +               case 17:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(17, 5);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -2688,7 +2760,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 18 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2699,93 +2771,19 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 11;
  -         }
  -         if ((active0 & 0x101f80L) != 0L)
  -            return 13;
  +         if ((active0 & 0x100000L) != 0L)
  +            return 58;
            if ((active0 & 0x8000L) != 0L)
            {
               jjmatchedKind = 14;
               return -1;
            }
  -         return -1;
  -      case 1:
  -         if ((active0 & 0x40000L) != 0L)
  -            return 9;
  -         if ((active0 & 0x1f80L) != 0L)
  +         if ((active0 & 0x50000L) != 0L)
            {
               jjmatchedKind = 19;
  -            jjmatchedPos = 1;
  -            return -1;
  -         }
  -         if ((active0 & 0x8000L) != 0L)
  -         {
  -            if (jjmatchedPos == 0)
  -            {
  -               jjmatchedKind = 14;
  -               jjmatchedPos = 0;
  -            }
  -            return -1;
  -         }
  -         return -1;
  -      case 2:
  -         if ((active0 & 0x1f80L) != 0L)
  -         {
  -            if (jjmatchedPos < 1)
  -            {
  -               jjmatchedKind = 19;
  -               jjmatchedPos = 1;
  -            }
  -            return -1;
  +            return 54;
            }
            return -1;
  -      case 3:
  -         if ((active0 & 0x1f80L) != 0L)
  -         {
  -            if (jjmatchedPos < 1)
  -            {
  -               jjmatchedKind = 19;
  -               jjmatchedPos = 1;
  -            }
  -            return -1;
  -         }
  -         return -1;
  -      case 4:
  -         if ((active0 & 0x1e80L) != 0L)
  -         {
  -            if (jjmatchedPos < 1)
  -            {
  -               jjmatchedKind = 19;
  -               jjmatchedPos = 1;
  -            }
  -            return -1;
  -         }
  -         return -1;
  -      case 5:
  -         if ((active0 & 0x1c00L) != 0L)
  -         {
  -            if (jjmatchedPos < 1)
  -            {
  -               jjmatchedKind = 19;
  -               jjmatchedPos = 1;
  -            }
  -            return -1;
  -         }
  -         return -1;
  -      case 6:
  -         if ((active0 & 0x400L) != 0L)
  -         {
  -            if (jjmatchedPos < 1)
  -            {
  -               jjmatchedKind = 19;
  -               jjmatchedPos = 1;
  -            }
  -            return -1;
  -         }
  -         return -1;
         default :
            return -1;
      }
  @@ -2811,10 +2809,9 @@
         case 36:
            return jjMoveStringLiteralDfa1_3(0x8000L);
         case 92:
  -         jjmatchedKind = 20;
  -         return jjMoveStringLiteralDfa1_3(0x1f80L);
  +         return jjStartNfaWithStates_3(0, 20, 58);
         default :
  -         return jjMoveNfa_3(8, 0);
  +         return jjMoveNfa_3(10, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_3(long active0)
  @@ -2833,164 +2830,21 @@
         case 35:
            if ((active0 & 0x10000L) != 0L)
               return jjStopAtPos(1, 16);
  -         return jjMoveStringLiteralDfa2_3(active0, 0x1f80L);
  +         break;
         case 42:
            if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_3(1, 18, 9);
  +            return jjStartNfaWithStates_3(1, 18, 52);
            break;
         default :
            break;
      }
      return jjStartNfa_3(0, active0);
   }
  -private final int jjMoveStringLiteralDfa2_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(0, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(1, active0);
  -      return 2;
  -   }
  -   switch(curChar)
  -   {
  -      case 101:
  -         return jjMoveStringLiteralDfa3_3(active0, 0xe00L);
  -      case 105:
  -         return jjMoveStringLiteralDfa3_3(active0, 0x100L);
  -      case 115:
  -         return jjMoveStringLiteralDfa3_3(active0, 0x1080L);
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(1, active0);
  -}
  -private final int jjMoveStringLiteralDfa3_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(1, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(2, active0);
  -      return 3;
  -   }
  -   switch(curChar)
  -   {
  -      case 101:
  -         return jjMoveStringLiteralDfa4_3(active0, 0x80L);
  -      case 102:
  -         if ((active0 & 0x100L) != 0L)
  -            return jjStopAtPos(3, 8);
  -         break;
  -      case 108:
  -         return jjMoveStringLiteralDfa4_3(active0, 0xc00L);
  -      case 110:
  -         return jjMoveStringLiteralDfa4_3(active0, 0x200L);
  -      case 116:
  -         return jjMoveStringLiteralDfa4_3(active0, 0x1000L);
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(2, active0);
  -}
  -private final int jjMoveStringLiteralDfa4_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(2, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(3, active0);
  -      return 4;
  -   }
  -   switch(curChar)
  -   {
  -      case 100:
  -         if ((active0 & 0x200L) != 0L)
  -            return jjStopAtPos(4, 9);
  -         break;
  -      case 111:
  -         return jjMoveStringLiteralDfa5_3(active0, 0x1000L);
  -      case 115:
  -         return jjMoveStringLiteralDfa5_3(active0, 0xc00L);
  -      case 116:
  -         if ((active0 & 0x80L) != 0L)
  -            return jjStopAtPos(4, 7);
  -         break;
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(3, active0);
  -}
  -private final int jjMoveStringLiteralDfa5_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(3, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(4, active0);
  -      return 5;
  -   }
  -   switch(curChar)
  -   {
  -      case 101:
  -         if ((active0 & 0x800L) != 0L)
  -         {
  -            jjmatchedKind = 11;
  -            jjmatchedPos = 5;
  -         }
  -         return jjMoveStringLiteralDfa6_3(active0, 0x400L);
  -      case 112:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(5, 12);
  -         break;
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(4, active0);
  -}
  -private final int jjMoveStringLiteralDfa6_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(4, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(5, active0);
  -      return 6;
  -   }
  -   switch(curChar)
  -   {
  -      case 105:
  -         return jjMoveStringLiteralDfa7_3(active0, 0x400L);
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(5, active0);
  -}
  -private final int jjMoveStringLiteralDfa7_3(long old0, long active0)
  -{
  -   if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_3(5, old0); 
  -   try { curChar = input_stream.readChar(); }
  -   catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(6, active0);
  -      return 7;
  -   }
  -   switch(curChar)
  -   {
  -      case 102:
  -         if ((active0 & 0x400L) != 0L)
  -            return jjStopAtPos(7, 10);
  -         break;
  -      default :
  -         break;
  -   }
  -   return jjStartNfa_3(6, active0);
  -}
   private final int jjMoveNfa_3(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 13;
  +   jjnewStateCnt = 58;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -3005,72 +2859,112 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 11:
  +               case 54:
                     if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 9;
  -                  break;
  -               case 13:
  -                  if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  -                  else if (curChar == 36)
  -                  {
  -                     if (kind > 14)
  -                        kind = 14;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 52;
                     break;
  -               case 8:
  +               case 10:
                     if ((0xffffffe7ffffffffL & l) != 0L)
                     {
                        if (kind > 21)
                           kind = 21;
  -                     jjCheckNAdd(7);
  +                     jjCheckNAdd(9);
                     }
                     else if (curChar == 35)
  -                     jjCheckNAddTwoStates(3, 11);
  +                     jjCheckNAddTwoStates(5, 54);
                     else if (curChar == 36)
                     {
                        if (kind > 14)
                           kind = 14;
                     }
                     if ((0x100000200L & l) != 0L)
  -                     jjCheckNAddTwoStates(0, 4);
  +                     jjCheckNAddStates(34, 36);
                     else if (curChar == 35)
                     {
                        if (kind > 19)
                           kind = 19;
                     }
                     break;
  +               case 58:
  +                  if (curChar == 35)
  +                  {
  +                     if (kind > 19)
  +                        kind = 19;
  +                  }
  +                  else if (curChar == 36)
  +                  {
  +                     if (kind > 14)
  +                        kind = 14;
  +                  }
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 49;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 42;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 35;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 26;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 20;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 15;
  +                  break;
                  case 0:
                     if ((0x100000200L & l) != 0L)
  -                     jjCheckNAddTwoStates(0, 4);
  +                     jjCheckNAddStates(34, 36);
                     break;
  -               case 4:
  +               case 6:
                     if (curChar == 35)
  -                     jjCheckNAdd(3);
  +                     jjCheckNAdd(5);
                     break;
  -               case 5:
  +               case 7:
                     if (curChar == 36 && kind > 14)
                        kind = 14;
                     break;
  -               case 6:
  +               case 8:
                     if (curChar == 35 && kind > 19)
                        kind = 19;
                     break;
  -               case 7:
  +               case 9:
                     if ((0xffffffe7ffffffffL & l) == 0L)
                        break;
                     if (kind > 21)
                        kind = 21;
  -                  jjCheckNAdd(7);
  +                  jjCheckNAdd(9);
                     break;
  -               case 9:
  +               case 16:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 15;
  +                  break;
  +               case 21:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 20;
  +                  break;
  +               case 27:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 26;
  +                  break;
  +               case 36:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 35;
  +                  break;
  +               case 43:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 42;
  +                  break;
  +               case 50:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 49;
  +                  break;
  +               case 51:
  +                  if (curChar == 35)
  +                     jjCheckNAddTwoStates(5, 54);
  +                  break;
  +               case 52:
                     if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 10;
  +                     jjstateSet[jjnewStateCnt++] = 53;
                     break;
  -               case 10:
  +               case 53:
                     if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
                        kind = 17;
                     break;
  @@ -3085,43 +2979,217 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 11:
  -               case 3:
  +               case 54:
  +               case 5:
                     if (curChar == 115)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     break;
  -               case 8:
  +               case 10:
                     if ((0xffffffffefffffffL & l) != 0L)
                     {
                        if (kind > 21)
                           kind = 21;
  -                     jjCheckNAdd(7);
  +                     jjCheckNAdd(9);
                     }
                     else if (curChar == 92)
  -                     jjAddStates(14, 15);
  +                     jjCheckNAddStates(37, 40);
  +                  if (curChar == 92)
  +                     jjCheckNAddStates(41, 53);
  +                  break;
  +               case 58:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(57, 8);
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(56, 7);
  +                  if (curChar == 92)
  +                     jjAddStates(54, 55);
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 45;
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 38;
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 29;
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 23;
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 18;
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 12;
                     break;
                  case 1:
  +                  if (curChar == 92)
  +                     jjAddStates(54, 55);
  +                  break;
  +               case 2:
  +                  if (curChar == 92)
  +                     jjCheckNAdd(1);
  +                  break;
  +               case 3:
                     if (curChar == 116 && kind > 13)
                        kind = 13;
                     break;
  -               case 2:
  +               case 4:
                     if (curChar == 101)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
  -               case 7:
  +               case 9:
                     if ((0xffffffffefffffffL & l) == 0L)
                        break;
                     if (kind > 21)
                        kind = 21;
  -                  jjCheckNAdd(7);
  +                  jjCheckNAdd(9);
                     break;
  -               case 10:
  +               case 11:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 12;
  +                  break;
  +               case 12:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(11, 16);
  +                  break;
  +               case 13:
  +                  if (curChar == 116 && kind > 7)
  +                     kind = 7;
  +                  break;
  +               case 14:
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 13;
  +                  break;
  +               case 15:
  +                  if (curChar == 115)
  +                     jjstateSet[jjnewStateCnt++] = 14;
  +                  break;
  +               case 17:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 18;
  +                  break;
  +               case 18:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(17, 21);
  +                  break;
  +               case 19:
  +                  if (curChar == 102 && kind > 8)
  +                     kind = 8;
  +                  break;
  +               case 20:
  +                  if (curChar == 105)
  +                     jjstateSet[jjnewStateCnt++] = 19;
  +                  break;
  +               case 22:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 23;
  +                  break;
  +               case 23:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(22, 27);
  +                  break;
  +               case 24:
  +                  if (curChar == 100 && kind > 9)
  +                     kind = 9;
  +                  break;
  +               case 25:
  +                  if (curChar == 110)
  +                     jjstateSet[jjnewStateCnt++] = 24;
  +                  break;
  +               case 26:
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 25;
  +                  break;
  +               case 28:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 29;
  +                  break;
  +               case 29:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(28, 36);
  +                  break;
  +               case 30:
  +                  if (curChar == 102 && kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 31:
  +                  if (curChar == 105)
  +                     jjstateSet[jjnewStateCnt++] = 30;
  +                  break;
  +               case 32:
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 31;
  +                  break;
  +               case 33:
  +                  if (curChar == 115)
  +                     jjstateSet[jjnewStateCnt++] = 32;
  +                  break;
  +               case 34:
  +                  if (curChar == 108)
  +                     jjstateSet[jjnewStateCnt++] = 33;
  +                  break;
  +               case 35:
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 34;
  +                  break;
  +               case 37:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 38;
  +                  break;
  +               case 38:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(37, 43);
  +                  break;
  +               case 39:
  +                  if (curChar == 101 && kind > 11)
  +                     kind = 11;
  +                  break;
  +               case 40:
  +                  if (curChar == 115)
  +                     jjstateSet[jjnewStateCnt++] = 39;
  +                  break;
  +               case 41:
  +                  if (curChar == 108)
  +                     jjstateSet[jjnewStateCnt++] = 40;
  +                  break;
  +               case 42:
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 41;
  +                  break;
  +               case 44:
  +                  if (curChar == 92)
  +                     jjstateSet[jjnewStateCnt++] = 45;
  +                  break;
  +               case 45:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(44, 50);
  +                  break;
  +               case 46:
  +                  if (curChar == 112 && kind > 12)
  +                     kind = 12;
  +                  break;
  +               case 47:
  +                  if (curChar == 111)
  +                     jjstateSet[jjnewStateCnt++] = 46;
  +                  break;
  +               case 48:
  +                  if (curChar == 116)
  +                     jjstateSet[jjnewStateCnt++] = 47;
  +                  break;
  +               case 49:
  +                  if (curChar == 115)
  +                     jjstateSet[jjnewStateCnt++] = 48;
  +                  break;
  +               case 53:
                     if (kind > 17)
                        kind = 17;
                     break;
  -               case 12:
  +               case 55:
  +                  if (curChar == 92)
  +                     jjCheckNAddStates(37, 40);
  +                  break;
  +               case 56:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(56, 7);
  +                  break;
  +               case 57:
                     if (curChar == 92)
  -                     jjAddStates(14, 15);
  +                     jjCheckNAddTwoStates(57, 8);
                     break;
                  default : break;
               }
  @@ -3135,15 +3203,15 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 8:
  -               case 7:
  +               case 10:
  +               case 9:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
                     if (kind > 21)
                        kind = 21;
  -                  jjCheckNAdd(7);
  +                  jjCheckNAdd(9);
                     break;
  -               case 10:
  +               case 53:
                     if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
                        kind = 17;
                     break;
  @@ -3158,14 +3226,17 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 13 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 58 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
      }
   }
   static final int[] jjnextStates = {
  -   1, 2, 4, 5, 10, 12, 13, 0, 5, 7, 8, 7, 8, 10, 5, 6, 
  +   1, 2, 4, 20, 5, 21, 10, 12, 13, 7, 0, 8, 5, 14, 0, 15, 
  +   5, 7, 8, 15, 0, 16, 5, 10, 0, 11, 5, 7, 8, 10, 16, 0, 
  +   17, 5, 0, 2, 6, 56, 7, 57, 8, 11, 16, 17, 21, 22, 27, 28, 
  +   36, 37, 43, 44, 50, 1, 2, 6, 
   };
   public static final String[] jjstrLiteralImages = {
   null, null, null, null, null, null, null, null, null, null, null, null, null, 
  @@ -3202,8 +3273,8 @@
      0x20fc000L, 0x0L, 
   };
   private ASCII_CharStream input_stream;
  -private final int[] jjrounds = new int[20];
  -private final int[] jjstateSet = new int[40];
  +private final int[] jjrounds = new int[58];
  +private final int[] jjstateSet = new int[116];
   StringBuffer image;
   int jjimageLen;
   int lengthOfMatch;
  @@ -3230,7 +3301,7 @@
   {
      int i;
      jjround = 0x80000001;
  -   for (i = 20; i-- > 0;)
  +   for (i = 58; i-- > 0;)
         jjrounds[i] = 0x80000000;
   }
   public void ReInit(ASCII_CharStream stream, int lexState)
  @@ -3620,42 +3691,42 @@
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#set";
  +        matchedToken.image = escapedDirective( matchedToken.image, "#set");
            break;
         case 8 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#if";
  +         matchedToken.image = escapedDirective( matchedToken.image, "#if");
            break;
         case 9 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#end";
  +        matchedToken.image = escapedDirective( matchedToken.image, "#end");
            break;
         case 10 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#elseif";
  +        matchedToken.image = escapedDirective( matchedToken.image, "#elseif");
            break;
         case 11 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#else";
  +        matchedToken.image = escapedDirective( matchedToken.image, "#else");
            break;
         case 12 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -       matchedToken.image = "#stop";
  +        matchedToken.image = escapedDirective( matchedToken.image, "#stop");
            break;
         case 13 :
           if (image == null)
  
  
  
  1.3       +21 -19    
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTreeConstants.java
  
  Index: ParserTreeConstants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTreeConstants.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserTreeConstants.java  2000/10/03 17:03:16     1.2
  +++ ParserTreeConstants.java  2000/11/07 21:34:01     1.3
  @@ -20,25 +20,26 @@
     public int JJTFALSE = 13;
     public int JJTTEXT = 14;
     public int JJTIFSTATEMENT = 15;
  -  public int JJTELSESTATEMENT = 16;
  -  public int JJTELSEIFSTATEMENT = 17;
  -  public int JJTSETDIRECTIVE = 18;
  -  public int JJTEXPRESSION = 19;
  -  public int JJTASSIGNMENT = 20;
  -  public int JJTORNODE = 21;
  -  public int JJTANDNODE = 22;
  -  public int JJTEQNODE = 23;
  -  public int JJTNENODE = 24;
  -  public int JJTLTNODE = 25;
  -  public int JJTGTNODE = 26;
  -  public int JJTLENODE = 27;
  -  public int JJTGENODE = 28;
  -  public int JJTADDNODE = 29;
  -  public int JJTSUBTRACTNODE = 30;
  -  public int JJTMULNODE = 31;
  -  public int JJTDIVNODE = 32;
  -  public int JJTMODNODE = 33;
  -  public int JJTNOTNODE = 34;
  +  public int JJTENDSTATEMENT = 16;
  +  public int JJTELSESTATEMENT = 17;
  +  public int JJTELSEIFSTATEMENT = 18;
  +  public int JJTSETDIRECTIVE = 19;
  +  public int JJTEXPRESSION = 20;
  +  public int JJTASSIGNMENT = 21;
  +  public int JJTORNODE = 22;
  +  public int JJTANDNODE = 23;
  +  public int JJTEQNODE = 24;
  +  public int JJTNENODE = 25;
  +  public int JJTLTNODE = 26;
  +  public int JJTGTNODE = 27;
  +  public int JJTLENODE = 28;
  +  public int JJTGENODE = 29;
  +  public int JJTADDNODE = 30;
  +  public int JJTSUBTRACTNODE = 31;
  +  public int JJTMULNODE = 32;
  +  public int JJTDIVNODE = 33;
  +  public int JJTMODNODE = 34;
  +  public int JJTNOTNODE = 35;
   
   
     public String[] jjtNodeName = {
  @@ -58,6 +59,7 @@
       "False",
       "Text",
       "IfStatement",
  +    "EndStatement",
       "ElseStatement",
       "ElseIfStatement",
       "SetDirective",
  
  
  

Reply via email to