geirm       00/11/11 14:47:58

  Modified:    src/java/org/apache/velocity/runtime/parser Parser.java
                        Parser.jj ParserConstants.java
                        ParserTokenManager.java ParserTreeConstants.java
  Log:
  Camp followers... (escape refactoring in Parser.jjt)
  
  Revision  Changes    Path
  1.30      +552 -483  
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.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Parser.java       2000/11/08 02:52:17     1.29
  +++ Parser.java       2000/11/11 22:47:57     1.30
  @@ -20,7 +20,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.29 2000/11/08 02:52:17 jon Exp $ 
  + * @version $Id: Parser.java,v 1.30 2000/11/11 22:47:57 geirm Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants 
{/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();/**
  @@ -68,7 +68,7 @@
           catch (ParseException pe)
           {
               Runtime.error ("Parser Exception: " + StringUtils.stackTrace(pe));
  -            throw new ParseException (pe.currentToken, 
  +            throw new ParseException (pe.currentToken,
                   pe.expectedTokenSequences, pe.tokenImage);
           }
           catch (Exception e)
  @@ -105,6 +105,52 @@
               return false;
       }
   
  +  /**
  +     *  Produces a processed output for an escaped control or pluggable directive
  +     */
  +    private String escapedDirective( String strImage )
  +    {
  +        int iLast = strImage.lastIndexOf("\\");
  +
  +        String strDirective = strImage.substring(iLast + 1);
  +
  +        boolean bRecognizedDirective = false;
  +
  +        /*
  +         *  is this a PD or a control directive?
  +         */
  +
  +        if ( isDirective( strDirective.substring(1)))
  +        {
  +           bRecognizedDirective = true;
  +        }
  +        else
  +        {
  +            /* order for speed? */
  +
  +            if ( strDirective.substring(1).equals("if")
  +                || strDirective.substring(1).equals("end")
  +                || strDirective.substring(1).equals("set")
  +                || strDirective.substring(1).equals("else")
  +                || strDirective.substring(1).equals("elseif")
  +                || strDirective.substring(1).equals("stop")
  +            )
  +            {
  +                bRecognizedDirective = true;
  +            }
  +        }
  +
  +        /*
  +         *  if so, make the proper prefix string (let the escapes do their thing..)
  +         *  otherwise, just return what it is..
  +         */
  +
  +        if (bRecognizedDirective)
  +            return ( strImage.substring(0,iLast/2) + strDirective);
  +        else
  +            return ( strImage );
  +    }
  +
   /**
    * This method is what starts the whole parsing
    * process. After the parsing is complete and
  @@ -125,20 +171,15 @@
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case LPAREN:
           case RPAREN:
  -        case ESCAPE_SET_DIRECTIVE:
  -        case ESCAPE_IF_DIRECTIVE:
  -        case ESCAPE_END_DIRECTIVE:
  -        case ESCAPE_ELSEIF_DIRECTIVE:
  -        case ESCAPE_ELSE_DIRECTIVE:
  -        case ESCAPE_STOP_DIRECTIVE:
  +        case ESCAPE_DIRECTIVE:
           case SET_DIRECTIVE:
  +        case DOUBLE_ESCAPE:
           case ESCAPE:
           case TEXT:
           case SINGLE_LINE_COMMENT:
           case FORMAL_COMMENT:
           case MULTI_LINE_COMMENT:
           case STRING_LITERAL:
  -        case NEWLINE:
           case IF_DIRECTIVE:
           case STOP_DIRECTIVE:
           case NUMBER_LITERAL:
  @@ -204,21 +245,20 @@
       case SET_DIRECTIVE:
         SetDirective();
         break;
  +    case ESCAPE_DIRECTIVE:
  +      EscapedDirective();
  +      break;
  +    case DOUBLE_ESCAPE:
  +      Escape();
  +      break;
       case WORD:
         Directive();
         break;
       case LPAREN:
       case RPAREN:
  -    case ESCAPE_SET_DIRECTIVE:
  -    case ESCAPE_IF_DIRECTIVE:
  -    case ESCAPE_END_DIRECTIVE:
  -    case ESCAPE_ELSEIF_DIRECTIVE:
  -    case ESCAPE_ELSE_DIRECTIVE:
  -    case ESCAPE_STOP_DIRECTIVE:
       case ESCAPE:
       case TEXT:
       case STRING_LITERAL:
  -    case NEWLINE:
       case NUMBER_LITERAL:
       case DOT:
         Text();
  @@ -230,6 +270,93 @@
       }
     }
   
  +/**
  + *  used to separate the notion of a valid directive that has been
  + *  escaped, versus something that looks like a directive and
  + *  is just schmoo.  This is important to do as a separate production
  + *  that creates a node, because we want this, in either case, to stop
  + *  the further parsing of the Directive() tree.
  + */
  +  final public void EscapedDirective() throws ParseException {
  +                           /*@bgen(jjtree) EscapedDirective */
  +  ASTEscapedDirective jjtn000 = new ASTEscapedDirective(this, JJTESCAPEDDIRECTIVE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +        Token t = null;
  +      t = jj_consume_token(ESCAPE_DIRECTIVE);
  +      jjtree.closeNodeScope(jjtn000, true);
  +      jjtc000 = false;
  +        /*
  +         *  churn and burn..
  +         */
  +        t.image = escapedDirective( t.image );
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +  }
  +
  +/**
  + *  Used to catch and process escape sequences in grammatical constructs
  + *  as escapes outside of VTL are just characters.  Right now we hav both
  + *  this and the EscapeDirective() construction because in the EscapeDirective()
  + *  case, we want to suck in the #<directive> and here we don't.  We just want
  + *  the escapes to render correctly
  + */
  +  final public void Escape() throws ParseException {
  +                 /*@bgen(jjtree) Escape */
  +  ASTEscape jjtn000 = new ASTEscape(this, JJTESCAPE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +        Token t = null;
  +        int iCount = 0;
  +        boolean bControl = false;
  +      label_2:
  +      while (true) {
  +        t = jj_consume_token(DOUBLE_ESCAPE);
  +        iCount++;
  +        if (jj_2_1(2)) {
  +          ;
  +        } else {
  +          break label_2;
  +        }
  +      }
  +      jjtree.closeNodeScope(jjtn000, true);
  +      jjtc000 = false;
  +        /*
  +         * first, check to see if we have a control directive
  +         */
  +        switch(t.next.kind ) {
  +            case IF_DIRECTIVE :
  +            case ELSE_DIRECTIVE :
  +            case ELSEIF_DIRECTIVE :
  +            case END :
  +            case STOP_DIRECTIVE :
  +                bControl = true;
  +                break;
  +        }
  +
  +        /*
  +         * if that failed, lets lookahead to see if we matched a PD
  +         */
  +
  +        if ( isDirective( t.next.image.substring(1)))
  +            bControl = true;
  +
  +        t.image = "";
  +
  +        for( int i = 0; i < iCount; i++)
  +            t.image += (bControl ? "\\" : "\\\\");
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +  }
  +
     final public void Comment() throws ParseException {
                     /*@bgen(jjtree) Comment */
     ASTComment jjtn000 = new ASTComment(this, JJTCOMMENT);
  @@ -362,49 +489,36 @@
    /*@bgen(jjtree) Directive */
       ASTDirective jjtn000 = new ASTDirective(this, JJTDIRECTIVE);
       boolean jjtc000 = true;
  -    jjtree.openNodeScope(jjtn000);Token t;
  +    jjtree.openNodeScope(jjtn000);Token t = null;
       Directive d;
       try {
         /*
  -           *  There are two things we do here :
  -           *  1) If the first char is a \, then this has been escaped, so don't 
  -           *     continue.  We will take care of the rest in ASTDirective.java
  -           *  2) Get the directive identifier and check to see if this is a 
directive.
  -           *     Note that because '#' is a <MORE> token, the identifier is 
preceeded by the '#'
  +           *  note that if we were escaped, that is now handled by 
EscapedDirective()
              */
         
             t = jj_consume_token(WORD);
  +        d = (Directive) directives.get(t.image.substring(1));
  +
           /*
  -         *  We need to count the preceeding \'s.  If t starts with an odd number of 
\'s...
  +         *  set the directive name from here.  No reason for the thing to know 
about parser tokens
            */
  -
  -         int i = 0;
  -         int iLen = t.image.length();
   
  -         while( i < iLen && t.image.charAt(i) == '\\' )
  -            i++;
  +        jjtn000.setDirectiveName( t.image.substring(1) );
   
  -        if( t.image.startsWith("\\") && (i % 2) != 0 )
  +        if (d == null)
           {
               token_source.stateStackPop();
               token_source.inDirective = false;
               {if (true) return jjtn000;}
           }
  -        else
  -        {
  -            d = (Directive) directives.get(t.image.substring(i+1));
   
  -            if (d == null)
  -            {
  -                token_source.stateStackPop();
  -                token_source.inDirective = false;
  -                {if (true) return jjtn000;}
  -            }
  -        }
  +        /*
  +         *  now, switch us out of PRE_DIRECTIVE
  +         */
   
  -        token_source.SwitchTo( DIRECTIVE );
  +        token_source.SwitchTo(DIRECTIVE);
         jj_consume_token(LPAREN);
  -      label_2:
  +      label_3:
         while (true) {
           DirectiveArg();
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -418,7 +532,7 @@
             break;
           default:
             jj_la1[4] = jj_gen;
  -          break label_2;
  +          break label_3;
           }
         }
         jj_consume_token(RPAREN);
  @@ -428,26 +542,21 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_3:
  +        label_4:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case LPAREN:
             case RPAREN:
  -          case ESCAPE_SET_DIRECTIVE:
  -          case ESCAPE_IF_DIRECTIVE:
  -          case ESCAPE_END_DIRECTIVE:
  -          case ESCAPE_ELSEIF_DIRECTIVE:
  -          case ESCAPE_ELSE_DIRECTIVE:
  -          case ESCAPE_STOP_DIRECTIVE:
  +          case ESCAPE_DIRECTIVE:
             case SET_DIRECTIVE:
  +          case DOUBLE_ESCAPE:
             case ESCAPE:
             case TEXT:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
             case STRING_LITERAL:
  -          case NEWLINE:
             case IF_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
  @@ -459,7 +568,7 @@
               break;
             default:
               jj_la1[5] = jj_gen;
  -            break label_3;
  +            break label_4;
             }
           }
         } catch (Throwable jjte001) {
  @@ -481,7 +590,7 @@
           jjtree.closeNodeScope(jjtn001, true);
         }
         }
  -      EndStatement();
  +      jj_consume_token(END);
         jjtree.closeNodeScope(jjtn000, true);
         jjtc000 = false;
           {if (true) return jjtn000;}
  @@ -523,7 +632,7 @@
         case IDENTIFIER:
         case LCURLY:
           Parameter();
  -        label_4:
  +        label_5:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case COMMA:
  @@ -531,7 +640,7 @@
               break;
             default:
               jj_la1[6] = jj_gen;
  -            break label_4;
  +            break label_5;
             }
             jj_consume_token(COMMA);
             Parameter();
  @@ -618,7 +727,7 @@
         case IDENTIFIER:
         case LCURLY:
           Parameter();
  -        label_5:
  +        label_6:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case COMMA:
  @@ -626,7 +735,7 @@
               break;
             default:
               jj_la1[9] = jj_gen;
  -            break label_5;
  +            break label_6;
             }
             jj_consume_token(COMMA);
             Parameter();
  @@ -638,23 +747,23 @@
         }
         jj_consume_token(REFMOD2_RPAREN);
       } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        {if (true) throw (ParseException)jjte000;}
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        {if (true) throw (RuntimeException)jjte000;}
  -      }
  -      {if (true) throw (Error)jjte000;}
  +     if (jjtc000) {
  +       jjtree.clearNodeScope(jjtn000);
  +       jjtc000 = false;
  +     } else {
  +       jjtree.popNode();
  +     }
  +     if (jjte000 instanceof ParseException) {
  +       {if (true) throw (ParseException)jjte000;}
  +     }
  +     if (jjte000 instanceof RuntimeException) {
  +       {if (true) throw (RuntimeException)jjte000;}
  +     }
  +     {if (true) throw (Error)jjte000;}
       } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  +     if (jjtc000) {
  +       jjtree.closeNodeScope(jjtn000, true);
  +     }
       }
     }
   
  @@ -681,15 +790,15 @@
           jj_la1[12] = jj_gen;
           ;
         }
  -      label_6:
  +      label_7:
         while (true) {
  -        if (jj_2_1(2)) {
  +        if (jj_2_2(2)) {
             ;
           } else {
  -          break label_6;
  +          break label_7;
           }
           jj_consume_token(DOT);
  -        if (jj_2_2(3)) {
  +        if (jj_2_3(3)) {
             Method();
           } else {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -766,18 +875,15 @@
    * unscathed.
    */
     final public void Text() throws ParseException {
  - /*@bgen(jjtree) Text */
  -    ASTText jjtn000 = new ASTText(this, JJTTEXT);
  -    boolean jjtc000 = true;
  -    jjtree.openNodeScope(jjtn000);Token t;
  +               /*@bgen(jjtree) Text */
  +  ASTText jjtn000 = new ASTText(this, JJTTEXT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
       try {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case TEXT:
           jj_consume_token(TEXT);
           break;
  -      case NEWLINE:
  -        jj_consume_token(NEWLINE);
  -        break;
         case DOT:
           jj_consume_token(DOT);
           break;
  @@ -796,24 +902,6 @@
         case ESCAPE:
           jj_consume_token(ESCAPE);
           break;
  -      case ESCAPE_SET_DIRECTIVE:
  -        jj_consume_token(ESCAPE_SET_DIRECTIVE);
  -        break;
  -      case ESCAPE_IF_DIRECTIVE:
  -        jj_consume_token(ESCAPE_IF_DIRECTIVE);
  -        break;
  -      case ESCAPE_END_DIRECTIVE:
  -        jj_consume_token(ESCAPE_END_DIRECTIVE);
  -        break;
  -      case ESCAPE_ELSEIF_DIRECTIVE:
  -        jj_consume_token(ESCAPE_ELSEIF_DIRECTIVE);
  -        break;
  -      case ESCAPE_ELSE_DIRECTIVE:
  -        jj_consume_token(ESCAPE_ELSE_DIRECTIVE);
  -        break;
  -      case ESCAPE_STOP_DIRECTIVE:
  -        jj_consume_token(ESCAPE_STOP_DIRECTIVE);
  -        break;
         default:
           jj_la1[15] = jj_gen;
           jj_consume_token(-1);
  @@ -845,26 +933,21 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_7:
  +        label_8:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case LPAREN:
             case RPAREN:
  -          case ESCAPE_SET_DIRECTIVE:
  -          case ESCAPE_IF_DIRECTIVE:
  -          case ESCAPE_END_DIRECTIVE:
  -          case ESCAPE_ELSEIF_DIRECTIVE:
  -          case ESCAPE_ELSE_DIRECTIVE:
  -          case ESCAPE_STOP_DIRECTIVE:
  +          case ESCAPE_DIRECTIVE:
             case SET_DIRECTIVE:
  +          case DOUBLE_ESCAPE:
             case ESCAPE:
             case TEXT:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
             case STRING_LITERAL:
  -          case NEWLINE:
             case IF_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
  @@ -876,7 +959,7 @@
               break;
             default:
               jj_la1[16] = jj_gen;
  -            break label_7;
  +            break label_8;
             }
           }
         } catch (Throwable jjte001) {
  @@ -900,7 +983,7 @@
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case ELSEIF_DIRECTIVE:
  -        label_8:
  +        label_9:
           while (true) {
             ElseIfStatement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -909,7 +992,7 @@
               break;
             default:
               jj_la1[17] = jj_gen;
  -            break label_8;
  +            break label_9;
             }
           }
           break;
  @@ -925,7 +1008,7 @@
           jj_la1[19] = jj_gen;
           ;
         }
  -      EndStatement();
  +      jj_consume_token(END);
       } catch (Throwable jjte000) {
         if (jjtc000) {
           jjtree.clearNodeScope(jjtn000);
  @@ -947,20 +1030,6 @@
       }
     }
   
  -  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);
  @@ -972,26 +1041,21 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_9:
  +        label_10:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case LPAREN:
             case RPAREN:
  -          case ESCAPE_SET_DIRECTIVE:
  -          case ESCAPE_IF_DIRECTIVE:
  -          case ESCAPE_END_DIRECTIVE:
  -          case ESCAPE_ELSEIF_DIRECTIVE:
  -          case ESCAPE_ELSE_DIRECTIVE:
  -          case ESCAPE_STOP_DIRECTIVE:
  +          case ESCAPE_DIRECTIVE:
             case SET_DIRECTIVE:
  +          case DOUBLE_ESCAPE:
             case ESCAPE:
             case TEXT:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
             case STRING_LITERAL:
  -          case NEWLINE:
             case IF_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
  @@ -1003,7 +1067,7 @@
               break;
             default:
               jj_la1[20] = jj_gen;
  -            break label_9;
  +            break label_10;
             }
           }
         } catch (Throwable jjte001) {
  @@ -1026,23 +1090,23 @@
         }
         }
       } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        {if (true) throw (ParseException)jjte000;}
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        {if (true) throw (RuntimeException)jjte000;}
  -      }
  -      {if (true) throw (Error)jjte000;}
  +     if (jjtc000) {
  +       jjtree.clearNodeScope(jjtn000);
  +       jjtc000 = false;
  +     } else {
  +       jjtree.popNode();
  +     }
  +     if (jjte000 instanceof ParseException) {
  +       {if (true) throw (ParseException)jjte000;}
  +     }
  +     if (jjte000 instanceof RuntimeException) {
  +       {if (true) throw (RuntimeException)jjte000;}
  +     }
  +     {if (true) throw (Error)jjte000;}
       } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  +     if (jjtc000) {
  +       jjtree.closeNodeScope(jjtn000, true);
  +     }
       }
     }
   
  @@ -1060,26 +1124,21 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_10:
  +        label_11:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case LPAREN:
             case RPAREN:
  -          case ESCAPE_SET_DIRECTIVE:
  -          case ESCAPE_IF_DIRECTIVE:
  -          case ESCAPE_END_DIRECTIVE:
  -          case ESCAPE_ELSEIF_DIRECTIVE:
  -          case ESCAPE_ELSE_DIRECTIVE:
  -          case ESCAPE_STOP_DIRECTIVE:
  +          case ESCAPE_DIRECTIVE:
             case SET_DIRECTIVE:
  +          case DOUBLE_ESCAPE:
             case ESCAPE:
             case TEXT:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
             case STRING_LITERAL:
  -          case NEWLINE:
             case IF_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
  @@ -1091,7 +1150,7 @@
               break;
             default:
               jj_la1[21] = jj_gen;
  -            break label_10;
  +            break label_11;
             }
           }
         } catch (Throwable jjte001) {
  @@ -1193,7 +1252,7 @@
     boolean jjtc000 = true;
     jjtree.openNodeScope(jjtn000);
       try {
  -      if (jj_2_3(2147483647)) {
  +      if (jj_2_4(2147483647)) {
           Assignment();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -1267,7 +1326,7 @@
   
     final public void ConditionalOrExpression() throws ParseException {
       ConditionalAndExpression();
  -    label_11:
  +    label_12:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_OR:
  @@ -1275,7 +1334,7 @@
           break;
         default:
           jj_la1[24] = jj_gen;
  -        break label_11;
  +        break label_12;
         }
         jj_consume_token(LOGICAL_OR);
                      ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
  @@ -1307,7 +1366,7 @@
   
     final public void ConditionalAndExpression() throws ParseException {
       EqualityExpression();
  -    label_12:
  +    label_13:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_AND:
  @@ -1315,7 +1374,7 @@
           break;
         default:
           jj_la1[25] = jj_gen;
  -        break label_12;
  +        break label_13;
         }
         jj_consume_token(LOGICAL_AND);
                        ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
  @@ -1347,7 +1406,7 @@
   
     final public void EqualityExpression() throws ParseException {
       RelationalExpression();
  -    label_13:
  +    label_14:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_EQUALS:
  @@ -1356,7 +1415,7 @@
           break;
         default:
           jj_la1[26] = jj_gen;
  -        break label_13;
  +        break label_14;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_EQUALS:
  @@ -1423,7 +1482,7 @@
   
     final public void RelationalExpression() throws ParseException {
       AdditiveExpression();
  -    label_14:
  +    label_15:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_LT:
  @@ -1434,7 +1493,7 @@
           break;
         default:
           jj_la1[28] = jj_gen;
  -        break label_14;
  +        break label_15;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_LT:
  @@ -1555,7 +1614,7 @@
   
     final public void AdditiveExpression() throws ParseException {
       MultiplicativeExpression();
  -    label_15:
  +    label_16:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MINUS:
  @@ -1564,7 +1623,7 @@
           break;
         default:
           jj_la1[30] = jj_gen;
  -        break label_15;
  +        break label_16;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case PLUS:
  @@ -1631,7 +1690,7 @@
   
     final public void MultiplicativeExpression() throws ParseException {
       UnaryExpression();
  -    label_16:
  +    label_17:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MULTIPLY:
  @@ -1641,7 +1700,7 @@
           break;
         default:
           jj_la1[32] = jj_gen;
  -        break label_16;
  +        break label_17;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MULTIPLY:
  @@ -1833,589 +1892,602 @@
       return retval;
     }
   
  -  final private boolean jj_3R_56() {
  -    if (jj_scan_token(COMMA)) return true;
  +  final private boolean jj_2_4(int xla) {
  +    jj_la = xla; jj_lastpos = jj_scanpos = token;
  +    boolean retval = !jj_3_4();
  +    jj_save(3, xla);
  +    return retval;
  +  }
  +
  +  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_20() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    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()) {
  +    jj_scanpos = xsp;
       if (jj_3R_29()) 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;
       return false;
     }
   
  -  final private boolean jj_3R_54() {
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_75() {
  +    if (jj_3R_20()) 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_3_2() {
  -    if (jj_3R_18()) return true;
  +  final private boolean jj_3R_78() {
  +    if (jj_scan_token(MODULUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_70()) return true;
       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_74() {
  +    if (jj_scan_token(LOGICAL_NOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_54()) return true;
  +    if (jj_3R_70()) return true;
       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_70() {
       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_74()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_75()) 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_52() {
  -    if (jj_3R_54()) return true;
  +  final private boolean jj_3R_77() {
  +    if (jj_scan_token(DIVIDE)) 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;
  -    }
  +    if (jj_3R_70()) 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_18() {
  +    if (jj_3R_21()) 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;
  +  final private boolean jj_3R_76() {
  +    if (jj_scan_token(MULTIPLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_52()) return true;
  +    if (jj_3R_70()) 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_71() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_76()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_77()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_78()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(EQUALS)) return true;
  +    } 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_73() {
  +    if (jj_scan_token(MINUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_64()) 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_64() {
  +    if (jj_3R_70()) 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_3R_71()) { 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_72() {
  +    if (jj_scan_token(PLUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_64()) 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;
  +  final private boolean jj_3R_65() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_72()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_73()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(EQUALS)) return true;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_69() {
  +    if (jj_scan_token(LOGICAL_GE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_36()) return true;
  +    if (jj_3R_60()) 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_60() {
  +    if (jj_3R_64()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3_2()) {
  -    jj_scanpos = xsp;
  -    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;
  -    xsp = jj_scanpos;
  -    if (jj_3R_48()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_65()) { jj_scanpos = xsp; break; }
  +      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_57() {
  +    if (jj_scan_token(COMMA)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_47() {
  -    if (jj_3R_51()) return true;
  +  final private boolean jj_3R_68() {
  +    if (jj_scan_token(LOGICAL_LE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_60()) 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_67() {
  +    if (jj_scan_token(LOGICAL_GT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_60()) 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_66() {
  +    if (jj_scan_token(LOGICAL_LT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_60()) 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_61() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_46()) {
  +    if (jj_3R_66()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_67()) {
       jj_scanpos = xsp;
  -    if (jj_3R_47()) return true;
  +    if (jj_3R_68()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_69()) 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_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_3_1() {
  +    if (jj_scan_token(DOUBLE_ESCAPE)) 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;
  -    }
       return false;
     }
   
  -  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_29()) return true;
  +  final private boolean jj_3_3() {
  +    if (jj_3R_19()) return true;
       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_63() {
  +    if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(LPAREN)) return true;
  +    if (jj_3R_58()) 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;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_58() {
  +    if (jj_3R_60()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_61()) { jj_scanpos = xsp; break; }
  +      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_62() {
  +    if (jj_scan_token(LOGICAL_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_58()) 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_59() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_62()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_63()) 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_45() {
  -    if (jj_3R_29()) return true;
  +  final private boolean jj_3R_22() {
  +    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_49()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_57()) { 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_36() {
  +    if (jj_scan_token(FALSE)) 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;
  +  final private boolean jj_3R_55() {
  +    if (jj_3R_58()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_59()) { jj_scanpos = xsp; break; }
  +      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_35() {
  +    if (jj_scan_token(TRUE)) 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_56() {
  +    if (jj_scan_token(LOGICAL_AND)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_55()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_29() {
  +  final private boolean jj_3_2() {
  +    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_37()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_38()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_39()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_40()) {
  +    if (jj_3_3()) {
       jj_scanpos = xsp;
  -    if (jj_3R_41()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_42()) return true;
  +    if (jj_3R_18()) 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;
  +    xsp = jj_scanpos;
  +    if (jj_3R_49()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  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;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RPAREN)) return true;
  +  final private boolean jj_3R_45() {
  +    if (jj_scan_token(RCURLY)) 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_53() {
  +    if (jj_3R_55()) 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_27() {
  -    if (jj_3R_35()) return true;
  +  final private boolean jj_3R_44() {
  +    if (jj_scan_token(LCURLY)) 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_54() {
  +    if (jj_scan_token(LOGICAL_OR)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_53()) return true;
       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_33() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_44()) 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_45()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3_2()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_24() {
  -    if (jj_3R_32()) return true;
  +  final private boolean jj_3_4() {
  +    if (jj_3R_20()) 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;
       return false;
     }
   
  -  final private boolean jj_3R_23() {
  -    if (jj_3R_31()) return true;
  +  final private boolean jj_3R_52() {
  +    if (jj_3R_53()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_54()) { jj_scanpos = xsp; break; }
  +      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_50() {
  +    if (jj_scan_token(COMMA)) 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_3R_30()) 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_51() {
  +    if (jj_3R_20()) 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_37()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
     final private boolean jj_3R_19() {
  +    if (jj_3R_21()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(LPAREN)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_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;
  -    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;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_74() {
  -    if (jj_3R_19()) return true;
  +    if (jj_3R_22()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(REFMOD2_RPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
     final private boolean jj_3R_48() {
  -    if (jj_scan_token(RCURLY)) 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_77() {
  -    if (jj_scan_token(MODULUS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_21() {
  +    if (jj_scan_token(IDENTIFIER)) 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;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    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;
       return false;
     }
   
  -  final private boolean jj_3R_69() {
  +  final private boolean jj_3R_37() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_73()) {
  +    if (jj_3R_47()) {
       jj_scanpos = xsp;
  -    if (jj_3R_74()) return true;
  +    if (jj_3R_48()) 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_76() {
  -    if (jj_scan_token(DIVIDE)) 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_75() {
  -    if (jj_scan_token(MULTIPLY)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_43() {
  +    if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_70() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_75()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_76()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_77()) return true;
  +  final private boolean jj_3R_42() {
  +    if (jj_3R_33()) 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_30() {
  -    if (jj_scan_token(STRING_LITERAL)) return true;
  +  final private boolean jj_3R_46() {
  +    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_50()) { jj_scanpos = xsp; break; }
  +      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_41() {
  +    if (jj_3R_36()) 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;
  +  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_63() {
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_39() {
  +    if (jj_3R_34()) 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_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_38() {
  +    if (jj_3R_31()) 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_30() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_71()) {
  +    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()) {
       jj_scanpos = xsp;
  -    if (jj_3R_72()) return true;
  +    if (jj_3R_43()) 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_17() {
  -    if (jj_3R_20()) return true;
  +  final private boolean jj_3R_31() {
  +    if (jj_scan_token(STRING_LITERAL)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_68() {
  -    if (jj_scan_token(LOGICAL_GE)) return true;
  +  final private boolean jj_3R_34() {
  +    if (jj_scan_token(LBRACKET)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_46()) 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_3R_59() {
  -    if (jj_3R_63()) return true;
  +  final private boolean jj_3R_32() {
  +    if (jj_scan_token(NUMBER_LITERAL)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      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_67() {
  -    if (jj_scan_token(LOGICAL_LE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +  final private boolean jj_3R_49() {
  +    if (jj_scan_token(RCURLY)) 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_29() {
  +    if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +    if (jj_3R_37()) 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_scan_token(RPAREN)) 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;
  +  final private boolean jj_3R_28() {
  +    if (jj_3R_36()) 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_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_27() {
  +    if (jj_3R_35()) 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_26() {
  +    if (jj_3R_34()) 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_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_25() {
  +    if (jj_3R_33()) 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_24() {
  +    if (jj_3R_32()) 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;
     }
   
  @@ -2429,10 +2501,9 @@
     private boolean jj_semLA;
     private int jj_gen;
     final private int[] jj_la1 = new int[36];
  -  final private int[] jj_la1_0 = 
{0x91f03fb0,0x91f03fb0,0x1c00000,0x10000002,0x10000002,0x91f03fb0,0x8,0x70000002,0x70000002,0x8,0x70000002,0x0,0x0,0x0,0x0,0x90301fb0,0x91f03fb0,0x0,0x0,0x0,0x91f03fb0,0x91f03fb0,0x80000000,0x70000012,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70000012,0x70000012,};
  -  final private int[] jj_la1_1 = 
{0x38a90000,0x38a90000,0x0,0x28a00000,0x28a00000,0x38a90000,0x0,0x28200000,0x28200000,0x0,0x28200000,0x20000000,0x40000000,0x8000000,0x40000000,0x10200000,0x38a90000,0x20000,0x20000,0x40000,0x38a90000,0x38a90000,0x0,0x28202000,0x40,0x20,0x1800,0x1800,0x780,0x780,0x3,0x3,0x1c,0x1c,0x28202000,0x28200000,};
  -  final private int[] jj_la1_2 = 
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
  -  final private JJCalls[] jj_2_rtns = new JJCalls[3];
  +  final private int[] jj_la1_0 = 
{0x11f81b0,0x11f81b0,0x1c0000,0x1000002,0x1000002,0x11f81b0,0x8,0x7000002,0x7000002,0x8,0x7000002,0x0,0x0,0x0,0x0,0x1030030,0x11f81b0,0x0,0x0,0x0,0x11f81b0,0x11f81b0,0x8000000,0x7000012,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x30000000,0xc0000000,0xc0000000,0x7000012,0x7000012,};
  +  final private int[] jj_la1_1 = 
{0x38a9000,0x38a9000,0x0,0x28a0000,0x28a0000,0x38a9000,0x0,0x2820000,0x2820000,0x0,0x2820000,0x2000000,0x4000000,0x800000,0x4000000,0x1020000,0x38a9000,0x2000,0x2000,0x4000,0x38a9000,0x38a9000,0x0,0x2820200,0x4,0x2,0x180,0x180,0x78,0x78,0x0,0x0,0x1,0x1,0x2820200,0x2820000,};
  +  final private JJCalls[] jj_2_rtns = new JJCalls[4];
     private boolean jj_rescan = false;
     private int jj_gc = 0;
   
  @@ -2600,8 +2671,8 @@
   
     final public ParseException generateParseException() {
       jj_expentries.removeAllElements();
  -    boolean[] la1tokens = new boolean[65];
  -    for (int i = 0; i < 65; i++) {
  +    boolean[] la1tokens = new boolean[61];
  +    for (int i = 0; i < 61; i++) {
         la1tokens[i] = false;
       }
       if (jj_kind >= 0) {
  @@ -2617,13 +2688,10 @@
             if ((jj_la1_1[i] & (1<<j)) != 0) {
               la1tokens[32+j] = true;
             }
  -          if ((jj_la1_2[i] & (1<<j)) != 0) {
  -            la1tokens[64+j] = true;
  -          }
           }
         }
       }
  -    for (int i = 0; i < 65; i++) {
  +    for (int i = 0; i < 61; i++) {
         if (la1tokens[i]) {
           jj_expentry = new int[1];
           jj_expentry[0] = i;
  @@ -2648,7 +2716,7 @@
   
     final private void jj_rescan_token() {
       jj_rescan = true;
  -    for (int i = 0; i < 3; i++) {
  +    for (int i = 0; i < 4; i++) {
         JJCalls p = jj_2_rtns[i];
         do {
           if (p.gen > jj_gen) {
  @@ -2657,6 +2725,7 @@
               case 0: jj_3_1(); break;
               case 1: jj_3_2(); break;
               case 2: jj_3_3(); break;
  +            case 3: jj_3_4(); break;
             }
           }
           p = p.next;
  
  
  
  1.28      +241 -156  
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.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- Parser.jj 2000/11/08 02:32:18     1.27
  +++ Parser.jj 2000/11/11 22:47:57     1.28
  @@ -105,7 +105,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.27 2000/11/08 02:32:18 geirm Exp $ 
  + * @version $Id: Parser.jj,v 1.28 2000/11/11 22:47:57 geirm Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -152,10 +152,16 @@
           {
               token_source.clearStateVars();
               ReInit(stream);
  -            n = process();
  +            sn = process();
           }
  -        catch (Exception e )
  +        catch (ParseException pe)
           {
  +            Runtime.error ("Parser Exception: " + StringUtils.stackTrace(pe));
  +            throw new ParseException (pe.currentToken, 
  +                pe.expectedTokenSequences, pe.tokenImage);
  +        }
  +        catch (Exception e)
  +        {
               Runtime.error ("Parser Error: " + StringUtils.stackTrace(e));
           }
           return sn;
  @@ -187,6 +193,52 @@
           else
               return false;
       }            
  +
  +  /**
  +     *  Produces a processed output for an escaped control or pluggable directive
  +     */
  +    private String escapedDirective( String strImage )
  +    {
  +        int iLast = strImage.lastIndexOf("\\");
  +
  +        String strDirective = strImage.substring(iLast + 1);
  +
  +        boolean bRecognizedDirective = false;
  +
  +        /*
  +         *  is this a PD or a control directive?
  +         */
  +
  +        if ( isDirective( strDirective.substring(1)))
  +        {
  +           bRecognizedDirective = true;
  +        }
  +        else
  +        {
  +            /* order for speed? */
  +
  +            if ( strDirective.substring(1).equals("if")
  +                || strDirective.substring(1).equals("end")
  +                || strDirective.substring(1).equals("set")
  +                || strDirective.substring(1).equals("else")
  +                || strDirective.substring(1).equals("elseif")
  +                || strDirective.substring(1).equals("stop")
  +            )
  +            {
  +                bRecognizedDirective = true;
  +            }
  +        }
  +
  +        /*
  +         *  if so, make the proper prefix string (let the escapes do their thing..)
  +         *  otherwise, just return what it is..
  +         */
  +
  +        if (bRecognizedDirective)
  +            return ( strImage.substring(0,iLast/2) + strDirective);
  +        else
  +            return ( strImage );
  +    }
   }
   
   PARSER_END(Parser)
  @@ -337,15 +389,7 @@
           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
        */
  @@ -398,6 +442,7 @@
               } 
           }
       }
  +
   } 
   
   /* ------------------------------------------------------------------------
  @@ -491,37 +536,8 @@
        *  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_ELSE_DIRECTIVE: ("\\\\")* "\\#else"> 
  -     { 
  -        matchedToken.image = escapedDirective( matchedToken.image, "#else");
  -     }
  -
  -|    <ESCAPE_STOP_DIRECTIVE: ("\\\\")* "\\#stop">
  -     { 
  -        matchedToken.image = escapedDirective( matchedToken.image, "#stop");
  -     }
  -
  +    
  +    <ESCAPE_DIRECTIVE :  (<DOUBLE_ESCAPE>)* "\\#" <WORD> >
   }
   
   
  @@ -532,7 +548,7 @@
    */
   TOKEN:
   {
  -  <SET_DIRECTIVE: (" "|"\t")* ("\\\\")*  "#set" >
  +  <SET_DIRECTIVE: (" "|"\t")*  "#set" >
       { 
           if (! inComment)
           {
  @@ -605,7 +621,7 @@
           SwitchTo( IN_MULTI_LINE_COMMENT ); 
       } 
   
  -|   <HASH : ("\\")* "#" > 
  +|   <HASH : "#" > 
       { 
           if (! inComment)
           {
  @@ -622,7 +638,8 @@
   
   TOKEN :
   {
  -    <ESCAPE: "\\">
  +    <DOUBLE_ESCAPE : "\\\\">
  +|   <ESCAPE: "\\" >   
   |   <TEXT: (~["$", "#", "\\"])+ >
   }    
   
  @@ -945,10 +962,117 @@
   |   Reference()
   |   Comment()
   |   SetDirective()
  +|   EscapedDirective()
  +|   Escape()
   |   Directive()
   |   Text()
   }
   
  +/**
  + *  used to separate the notion of a valid directive that has been
  + *  escaped, versus something that looks like a directive and
  + *  is just schmoo.  This is important to do as a separate production
  + *  that creates a node, because we want this, in either case, to stop
  + *  the further parsing of the Directive() tree.
  + */
  +void EscapedDirective() : {/*@bgen(jjtree) EscapedDirective */
  +  ASTEscapedDirective jjtn000 = new ASTEscapedDirective(this, JJTESCAPEDDIRECTIVE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) EscapedDirective */
  +    try {
  +/*@egen*/ 
  +    {    
  +        Token t = null; 
  +    }
  +
  +    t = <ESCAPE_DIRECTIVE>/*@bgen(jjtree)*/
  +    {
  +      jjtree.closeNodeScope(jjtn000, true);
  +      jjtc000 = false;
  +    }
  +/*@egen*/
  +    {
  +        /*
  +         *  churn and burn..
  +         */
  +        t.image = escapedDirective( t.image );
  +    }/*@bgen(jjtree)*/
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +/*@egen*/
  +}
  +
  +/**
  + *  Used to catch and process escape sequences in grammatical constructs
  + *  as escapes outside of VTL are just characters.  Right now we hav both
  + *  this and the EscapeDirective() construction because in the EscapeDirective()
  + *  case, we want to suck in the #<directive> and here we don't.  We just want
  + *  the escapes to render correctly
  + */
  +void Escape() : {/*@bgen(jjtree) Escape */
  +  ASTEscape jjtn000 = new ASTEscape(this, JJTESCAPE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) Escape */
  +    try {
  +/*@egen*/   
  +    {
  +        Token t = null;
  +        int iCount = 0;
  +        boolean bControl = false;
  +    }
  +
  +   ( LOOKAHEAD(2)  t = <DOUBLE_ESCAPE>
  +    {
  +        iCount++;
  +    }
  +   )+/*@bgen(jjtree)*/
  +    {
  +      jjtree.closeNodeScope(jjtn000, true);
  +      jjtc000 = false;
  +    }
  +/*@egen*/
  +    {
  +        /*
  +         * first, check to see if we have a control directive
  +         */
  +        switch(t.next.kind ) {
  +            case IF_DIRECTIVE :
  +            case ELSE_DIRECTIVE :
  +            case ELSEIF_DIRECTIVE :
  +            case END :
  +            case STOP_DIRECTIVE :
  +                bControl = true;
  +                break;
  +        }
  +
  +        /*
  +         * if that failed, lets lookahead to see if we matched a PD
  +         */ 
  +
  +        if ( isDirective( t.next.image.substring(1)))
  +            bControl = true;
  +        
  +        t.image = "";
  +        
  +        for( int i = 0; i < iCount; i++)
  +            t.image += (bControl ? "\\" : "\\\\");
  +    }/*@bgen(jjtree)*/
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +/*@egen*/
  +
  +}
  +
   void Comment() : {/*@bgen(jjtree) Comment */
     ASTComment jjtn000 = new ASTComment(this, JJTCOMMENT);
     boolean jjtc000 = true;
  @@ -1070,58 +1194,45 @@
       boolean jjtc000 = true;
       jjtree.openNodeScope(jjtn000);
   /*@egen*/
  -    Token t;
  +    Token t = null;
       Directive d;
   }
   {/*@bgen(jjtree) Directive */
       try {
   /*@egen*/
       /*
  -     *  There are two things we do here :
  -     *  1) If the first char is a \, then this has been escaped, so don't 
  -     *     continue.  We will take care of the rest in ASTDirective.java
  -     *  2) Get the directive identifier and check to see if this is a directive.
  -     *     Note that because '#' is a <MORE> token, the identifier is preceeded by 
the '#'
  +     *  note that if we were escaped, that is now handled by EscapedDirective()
        */
  -
  -    t = <WORD>
  +  
  +    t = <WORD> 
       {
  +        d = (Directive) directives.get(t.image.substring(1));
  +
           /*
  -         *  We need to count the preceeding \'s.  If t starts with an odd number of 
\'s...
  +         *  set the directive name from here.  No reason for the thing to know 
about parser tokens
            */
   
  -         int i = 0;
  -         int iLen = t.image.length();
  +        jjtn000.setDirectiveName( t.image.substring(1) );
   
  -         while( i < iLen && t.image.charAt(i) == '\\' )
  -            i++;         
  -                
  -        if( t.image.startsWith("\\") && (i % 2) != 0 )
  +        if (d == null)
           {
               token_source.stateStackPop();
               token_source.inDirective = false;
  -            return jjtn000;            
  -        }
  -        else
  -        {
  -            d = (Directive) directives.get(t.image.substring(i+1));
  -        
  -            if (d == null)
  -            {
  -                token_source.stateStackPop();
  -                token_source.inDirective = false;
  -                return jjtn000;
  -            }
  -        }            
  +            return jjtn000;
  +        }         
  +    
  +        /*
  +         *  now, switch us out of PRE_DIRECTIVE
  +         */
   
  -        token_source.SwitchTo( DIRECTIVE );
  +        token_source.SwitchTo(DIRECTIVE);
       }
   
       /*
        *  if this is indeed a token, match the #foo ( arg ) pattern
        */
   
  -    <LPAREN> (DirectiveArg())+ <RPAREN>
  +    <LPAREN> ( DirectiveArg() )+ <RPAREN>
       {
           if (d.getType() == Directive.LINE)
               return jjtn000;
  @@ -1137,7 +1248,7 @@
       /*
        *  and the following block if the PD needs it
        */
  -    
  +   
       ( Statement() )+/*@bgen(jjtree)*/
       } catch (Throwable jjte001) {
         if (jjtc001) {
  @@ -1159,12 +1270,12 @@
         }
       }
   /*@egen*/ 
  -    EndStatement()/*@bgen(jjtree)*/
  +    <END>/*@bgen(jjtree)*/
       {
         jjtree.closeNodeScope(jjtn000, true);
         jjtc000 = false;
       }
  -/*@egen*/
  +/*@egen*/ 
       {
           return jjtn000;
       }/*@bgen(jjtree)*/
  @@ -1247,28 +1358,28 @@
     jjtree.openNodeScope(jjtn000);
   /*@egen*/}
   {/*@bgen(jjtree) Method */
  -    try {
  +   try {
   /*@egen*/
  -    Identifier() <LPAREN> [ Parameter() ( <COMMA> Parameter() )* ] 
<REFMOD2_RPAREN>/*@bgen(jjtree)*/
  -    } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        throw (ParseException)jjte000;
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        throw (RuntimeException)jjte000;
  -      }
  -      throw (Error)jjte000;
  -    } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  -    }
  +   Identifier() <LPAREN> [ Parameter() ( <COMMA> Parameter() )* ] 
<REFMOD2_RPAREN>/*@bgen(jjtree)*/
  +   } catch (Throwable jjte000) {
  +     if (jjtc000) {
  +       jjtree.clearNodeScope(jjtn000);
  +       jjtc000 = false;
  +     } else {
  +       jjtree.popNode();
  +     }
  +     if (jjte000 instanceof ParseException) {
  +       throw (ParseException)jjte000;
  +     }
  +     if (jjte000 instanceof RuntimeException) {
  +       throw (RuntimeException)jjte000;
  +     }
  +     throw (Error)jjte000;
  +   } finally {
  +     if (jjtc000) {
  +       jjtree.closeNodeScope(jjtn000, true);
  +     }
  +   }
   /*@egen*/
   }
   
  @@ -1347,31 +1458,21 @@
    * all non-grammar text to pass through
    * unscathed.
    */
  -void Text() : 
  -{/*@bgen(jjtree) Text */
  -    ASTText jjtn000 = new ASTText(this, JJTTEXT);
  -    boolean jjtc000 = true;
  -    jjtree.openNodeScope(jjtn000);
  -/*@egen*/
  -    Token t;
  -}
  +void Text() : {/*@bgen(jjtree) Text */
  +  ASTText jjtn000 = new ASTText(this, JJTTEXT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
   {/*@bgen(jjtree) Text */
       try {
   /*@egen*/
       <TEXT>
  -|   <NEWLINE>  
   |   <DOT>
   |   <RPAREN>
   |   <LPAREN>
   |   <NUMBER_LITERAL>
   |   <STRING_LITERAL>
  -|   <ESCAPE>
  -|   <ESCAPE_SET_DIRECTIVE>
  -|   <ESCAPE_IF_DIRECTIVE>
  -|   <ESCAPE_END_DIRECTIVE>   
  -|   <ESCAPE_ELSEIF_DIRECTIVE>
  -|   <ESCAPE_ELSE_DIRECTIVE> 
  -|   <ESCAPE_STOP_DIRECTIVE>/*@bgen(jjtree)*/
  +|   <ESCAPE>/*@bgen(jjtree)*/
       } finally {
         if (jjtc000) {
           jjtree.closeNodeScope(jjtn000, true);
  @@ -1422,10 +1523,10 @@
           jjtree.closeNodeScope(jjtn001, true);
         }
       }
  -/*@egen*/
  +/*@egen*/ 
       [ LOOKAHEAD(1) ( ElseIfStatement() )+ ]
       [ LOOKAHEAD(1) ElseStatement() ]
  -    EndStatement()/*@bgen(jjtree)*/
  +    <END>/*@bgen(jjtree)*/
       } catch (Throwable jjte000) {
         if (jjtc000) {
           jjtree.clearNodeScope(jjtn000);
  @@ -1446,23 +1547,7 @@
         }
       }
   /*@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 */
  @@ -1471,9 +1556,9 @@
     jjtree.openNodeScope(jjtn000);
   /*@egen*/}
   {/*@bgen(jjtree) ElseStatement */
  -    try {
  +   try {
   /*@egen*/
  -    <ELSE_DIRECTIVE>/*@bgen(jjtree) Block */
  +   <ELSE_DIRECTIVE>/*@bgen(jjtree) Block */
       {
         ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
         boolean jjtc001 = true;
  @@ -1502,25 +1587,25 @@
         }
       }
   /*@egen*//*@bgen(jjtree)*/
  -    } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        throw (ParseException)jjte000;
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        throw (RuntimeException)jjte000;
  -      }
  -      throw (Error)jjte000;
  -    } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  -    }
  +   } catch (Throwable jjte000) {
  +     if (jjtc000) {
  +       jjtree.clearNodeScope(jjtn000);
  +       jjtc000 = false;
  +     } else {
  +       jjtree.popNode();
  +     }
  +     if (jjte000 instanceof ParseException) {
  +       throw (ParseException)jjte000;
  +     }
  +     if (jjte000 instanceof RuntimeException) {
  +       throw (RuntimeException)jjte000;
  +     }
  +     throw (Error)jjte000;
  +   } finally {
  +     if (jjtc000) {
  +       jjtree.closeNodeScope(jjtn000, true);
  +     }
  +   }
   /*@egen*/
   }
   
  @@ -1592,7 +1677,7 @@
   {/*@bgen(jjtree) SetDirective */
      try {
   /*@egen*/
  -   (<SET_DIRECTIVE> Expression() [<NEWLINE>] )/*@bgen(jjtree)*/
  +   (  <SET_DIRECTIVE>  Expression()  [<NEWLINE>] )/*@bgen(jjtree)*/
      } catch (Throwable jjte000) {
        if (jjtc000) {
          jjtree.clearNodeScope(jjtn000);
  
  
  
  1.14      +53 -61    
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ParserConstants.java      2000/11/07 21:33:56     1.13
  +++ ParserConstants.java      2000/11/11 22:47:57     1.14
  @@ -10,58 +10,54 @@
     int LPAREN = 4;
     int RPAREN = 5;
     int REFMOD2_RPAREN = 6;
  -  int ESCAPE_SET_DIRECTIVE = 7;
  -  int ESCAPE_IF_DIRECTIVE = 8;
  -  int ESCAPE_END_DIRECTIVE = 9;
  -  int ESCAPE_ELSEIF_DIRECTIVE = 10;
  -  int ESCAPE_ELSE_DIRECTIVE = 11;
  -  int ESCAPE_STOP_DIRECTIVE = 12;
  -  int SET_DIRECTIVE = 13;
  -  int DOLLAR = 14;
  -  int DOLLARBANG = 15;
  -  int HASH = 19;
  -  int ESCAPE = 20;
  -  int TEXT = 21;
  -  int SINGLE_LINE_COMMENT = 22;
  -  int FORMAL_COMMENT = 23;
  -  int MULTI_LINE_COMMENT = 24;
  -  int STRING_LITERAL = 28;
  -  int TRUE = 29;
  -  int FALSE = 30;
  -  int NEWLINE = 31;
  -  int MINUS = 32;
  -  int PLUS = 33;
  -  int MULTIPLY = 34;
  -  int DIVIDE = 35;
  -  int MODULUS = 36;
  -  int LOGICAL_AND = 37;
  -  int LOGICAL_OR = 38;
  -  int LOGICAL_LT = 39;
  -  int LOGICAL_LE = 40;
  -  int LOGICAL_GT = 41;
  -  int LOGICAL_GE = 42;
  -  int LOGICAL_EQUALS = 43;
  -  int LOGICAL_NOT_EQUALS = 44;
  -  int LOGICAL_NOT = 45;
  -  int EQUALS = 46;
  -  int END = 47;
  -  int IF_DIRECTIVE = 48;
  -  int ELSEIF_DIRECTIVE = 49;
  -  int ELSE_DIRECTIVE = 50;
  -  int STOP_DIRECTIVE = 51;
  -  int DIGIT = 52;
  -  int NUMBER_LITERAL = 53;
  -  int LETTER = 54;
  -  int WORD = 55;
  -  int ALPHA_CHAR = 56;
  -  int ALPHANUM_CHAR = 57;
  -  int IDENTIFIER_CHAR = 58;
  -  int IDENTIFIER = 59;
  -  int DOT = 60;
  -  int LCURLY = 61;
  -  int RCURLY = 62;
  -  int REFERENCE_TERMINATOR = 63;
  -  int DIRECTIVE_TERMINATOR = 64;
  +  int ESCAPE_DIRECTIVE = 7;
  +  int SET_DIRECTIVE = 8;
  +  int DOLLAR = 9;
  +  int DOLLARBANG = 10;
  +  int HASH = 14;
  +  int DOUBLE_ESCAPE = 15;
  +  int ESCAPE = 16;
  +  int TEXT = 17;
  +  int SINGLE_LINE_COMMENT = 18;
  +  int FORMAL_COMMENT = 19;
  +  int MULTI_LINE_COMMENT = 20;
  +  int STRING_LITERAL = 24;
  +  int TRUE = 25;
  +  int FALSE = 26;
  +  int NEWLINE = 27;
  +  int MINUS = 28;
  +  int PLUS = 29;
  +  int MULTIPLY = 30;
  +  int DIVIDE = 31;
  +  int MODULUS = 32;
  +  int LOGICAL_AND = 33;
  +  int LOGICAL_OR = 34;
  +  int LOGICAL_LT = 35;
  +  int LOGICAL_LE = 36;
  +  int LOGICAL_GT = 37;
  +  int LOGICAL_GE = 38;
  +  int LOGICAL_EQUALS = 39;
  +  int LOGICAL_NOT_EQUALS = 40;
  +  int LOGICAL_NOT = 41;
  +  int EQUALS = 42;
  +  int END = 43;
  +  int IF_DIRECTIVE = 44;
  +  int ELSEIF_DIRECTIVE = 45;
  +  int ELSE_DIRECTIVE = 46;
  +  int STOP_DIRECTIVE = 47;
  +  int DIGIT = 48;
  +  int NUMBER_LITERAL = 49;
  +  int LETTER = 50;
  +  int WORD = 51;
  +  int ALPHA_CHAR = 52;
  +  int ALPHANUM_CHAR = 53;
  +  int IDENTIFIER_CHAR = 54;
  +  int IDENTIFIER = 55;
  +  int DOT = 56;
  +  int LCURLY = 57;
  +  int RCURLY = 58;
  +  int REFERENCE_TERMINATOR = 59;
  +  int DIRECTIVE_TERMINATOR = 60;
   
     int DIRECTIVE = 0;
     int REFMODIFIER = 1;
  @@ -81,25 +77,21 @@
       "\"(\"",
       "<RPAREN>",
       "\")\"",
  -    "<ESCAPE_SET_DIRECTIVE>",
  -    "<ESCAPE_IF_DIRECTIVE>",
  -    "<ESCAPE_END_DIRECTIVE>",
  -    "<ESCAPE_ELSEIF_DIRECTIVE>",
  -    "<ESCAPE_ELSE_DIRECTIVE>",
  -    "<ESCAPE_STOP_DIRECTIVE>",
  +    "<ESCAPE_DIRECTIVE>",
       "<SET_DIRECTIVE>",
       "<DOLLAR>",
       "\"$!\"",
       "\"##\"",
  -    "<token of kind 17>",
  +    "<token of kind 12>",
       "\"#*\"",
  -    "<HASH>",
  +    "\"#\"",
  +    "\"\\\\\\\\\"",
       "\"\\\\\"",
       "<TEXT>",
       "<SINGLE_LINE_COMMENT>",
       "\"*#\"",
       "\"*#\"",
  -    "<token of kind 25>",
  +    "<token of kind 21>",
       "\" \"",
       "\"\\t\"",
       "<STRING_LITERAL>",
  
  
  
  1.26      +754 -1149 
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.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- ParserTokenManager.java   2000/11/08 02:32:22     1.25
  +++ ParserTokenManager.java   2000/11/11 22:47:57     1.26
  @@ -137,14 +137,6 @@
           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
  @@ -203,57 +195,54 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x60000000L) != 0L)
  -         {
  -            jjmatchedKind = 55;
  -            return 18;
  -         }
  -         if ((active0 & 0x50000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 9;
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 19;
  -            return 8;
  -         }
  -         if ((active0 & 0x8000L) != 0L)
  -         {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
  -         return -1;
  -      case 1:
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  -            jjmatchedPos = 1;
  +            jjmatchedKind = 51;
               return 18;
            }
  -         if ((active0 & 0x40000L) != 0L)
  -            return 6;
  -         if ((active0 & 0x8000L) != 0L)
  +         return -1;
  +      case 1:
  +         if ((active0 & 0x400L) != 0L)
            {
               if (jjmatchedPos == 0)
               {
  -               jjmatchedKind = 14;
  +               jjmatchedKind = 9;
                  jjmatchedPos = 0;
               }
               return -1;
            }
  +         if ((active0 & 0x2000L) != 0L)
  +            return 7;
  +         if ((active0 & 0x6000000L) != 0L)
  +         {
  +            jjmatchedKind = 51;
  +            jjmatchedPos = 1;
  +            return 18;
  +         }
            return -1;
         case 2:
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               jjmatchedPos = 2;
               return 18;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x40000000L) != 0L)
  +         if ((active0 & 0x4000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               jjmatchedPos = 3;
               return 18;
            }
  -         if ((active0 & 0x20000000L) != 0L)
  +         if ((active0 & 0x2000000L) != 0L)
               return 18;
            return -1;
         default :
  @@ -283,47 +272,48 @@
      switch(curChar)
      {
         case 33:
  -         jjmatchedKind = 45;
  -         return jjMoveStringLiteralDfa1_0(0x100000000000L);
  +         jjmatchedKind = 41;
  +         return jjMoveStringLiteralDfa1_0(0x10000000000L);
         case 35:
  -         return jjMoveStringLiteralDfa1_0(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_0(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_0(0x8000L);
  +         return jjMoveStringLiteralDfa1_0(0x400L);
         case 37:
  -         return jjStopAtPos(0, 36);
  +         return jjStopAtPos(0, 32);
         case 38:
  -         return jjMoveStringLiteralDfa1_0(0x2000000000L);
  +         return jjMoveStringLiteralDfa1_0(0x200000000L);
         case 40:
            return jjStopAtPos(0, 4);
         case 42:
  -         return jjStopAtPos(0, 34);
  +         return jjStopAtPos(0, 30);
         case 43:
  -         return jjStopAtPos(0, 33);
  +         return jjStopAtPos(0, 29);
         case 44:
            return jjStopAtPos(0, 3);
         case 45:
  -         return jjStopAtPos(0, 32);
  +         return jjStopAtPos(0, 28);
         case 47:
  -         return jjStopAtPos(0, 35);
  +         return jjStopAtPos(0, 31);
         case 60:
  -         jjmatchedKind = 39;
  -         return jjMoveStringLiteralDfa1_0(0x10000000000L);
  +         jjmatchedKind = 35;
  +         return jjMoveStringLiteralDfa1_0(0x1000000000L);
         case 61:
  -         jjmatchedKind = 46;
  -         return jjMoveStringLiteralDfa1_0(0x80000000000L);
  +         jjmatchedKind = 42;
  +         return jjMoveStringLiteralDfa1_0(0x8000000000L);
         case 62:
  -         jjmatchedKind = 41;
  -         return jjMoveStringLiteralDfa1_0(0x40000000000L);
  +         jjmatchedKind = 37;
  +         return jjMoveStringLiteralDfa1_0(0x4000000000L);
         case 91:
            return jjStopAtPos(0, 1);
         case 93:
            return jjStopAtPos(0, 2);
         case 102:
  -         return jjMoveStringLiteralDfa1_0(0x40000000L);
  +         return jjMoveStringLiteralDfa1_0(0x4000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_0(0x20000000L);
  +         return jjMoveStringLiteralDfa1_0(0x2000000L);
         case 124:
  -         return jjMoveStringLiteralDfa1_0(0x4000000000L);
  +         return jjMoveStringLiteralDfa1_0(0x400000000L);
         default :
            return jjMoveNfa_0(0, 0);
      }
  @@ -338,38 +328,38 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 38:
  -         if ((active0 & 0x2000000000L) != 0L)
  -            return jjStopAtPos(1, 37);
  +         if ((active0 & 0x200000000L) != 0L)
  +            return jjStopAtPos(1, 33);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 18, 6);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 13, 7);
            break;
         case 61:
  -         if ((active0 & 0x10000000000L) != 0L)
  +         if ((active0 & 0x1000000000L) != 0L)
  +            return jjStopAtPos(1, 36);
  +         else if ((active0 & 0x4000000000L) != 0L)
  +            return jjStopAtPos(1, 38);
  +         else if ((active0 & 0x8000000000L) != 0L)
  +            return jjStopAtPos(1, 39);
  +         else if ((active0 & 0x10000000000L) != 0L)
               return jjStopAtPos(1, 40);
  -         else if ((active0 & 0x40000000000L) != 0L)
  -            return jjStopAtPos(1, 42);
  -         else if ((active0 & 0x80000000000L) != 0L)
  -            return jjStopAtPos(1, 43);
  -         else if ((active0 & 0x100000000000L) != 0L)
  -            return jjStopAtPos(1, 44);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x4000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x2000000L);
         case 124:
  -         if ((active0 & 0x4000000000L) != 0L)
  -            return jjStopAtPos(1, 38);
  +         if ((active0 & 0x400000000L) != 0L)
  +            return jjStopAtPos(1, 34);
            break;
         default :
            break;
  @@ -388,9 +378,9 @@
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x4000000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x2000000L);
         default :
            break;
      }
  @@ -408,11 +398,11 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStartNfaWithStates_0(3, 29, 18);
  +         if ((active0 & 0x2000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 25, 18);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L);
         default :
            break;
      }
  @@ -430,8 +420,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x40000000L) != 0L)
  -            return jjStartNfaWithStates_0(4, 30, 18);
  +         if ((active0 & 0x4000000L) != 0L)
  +            return jjStartNfaWithStates_0(4, 26, 18);
            break;
         default :
            break;
  @@ -475,7 +465,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 22;
  +   jjnewStateCnt = 19;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -493,26 +483,23 @@
                  case 0:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 53)
  -                        kind = 53;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(17);
                     }
                     else if ((0x2400L & l) != 0L)
                     {
  -                     if (kind > 31)
  -                        kind = 31;
  +                     if (kind > 27)
  +                        kind = 27;
                     }
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(12, 13);
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 9;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
                     else if (curChar == 41)
                     {
  @@ -522,8 +509,6 @@
                     }
                     if (curChar == 13)
                        jjstateSet[jjnewStateCnt++] = 15;
  -                  else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  case 1:
                     if ((0x100000200L & l) != 0L)
  @@ -541,29 +526,25 @@
                     if (curChar == 13)
                        jjstateSet[jjnewStateCnt++] = 3;
                     break;
  -               case 5:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
  -                  break;
                  case 6:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 7;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 7:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  case 8:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 6;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  case 9:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 8;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 7;
                     break;
                  case 10:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 9;
                     break;
                  case 11:
                     if (curChar == 34)
  @@ -574,16 +555,16 @@
                        jjCheckNAddTwoStates(12, 13);
                     break;
                  case 13:
  -                  if (curChar == 34 && kind > 28)
  -                     kind = 28;
  +                  if (curChar == 34 && kind > 24)
  +                     kind = 24;
                     break;
                  case 14:
  -                  if ((0x2400L & l) != 0L && kind > 31)
  -                     kind = 31;
  +                  if ((0x2400L & l) != 0L && kind > 27)
  +                     kind = 27;
                     break;
                  case 15:
  -                  if (curChar == 10 && kind > 31)
  -                     kind = 31;
  +                  if (curChar == 10 && kind > 27)
  +                     kind = 27;
                     break;
                  case 16:
                     if (curChar == 13)
  @@ -592,8 +573,8 @@
                  case 17:
                     if ((0x3ff000000000000L & l) == 0L)
                        break;
  -                  if (kind > 53)
  -                     kind = 53;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(17);
                     break;
                  default : break;
  @@ -610,39 +591,31 @@
                  case 0:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 55)
  -                        kind = 55;
  +                     if (kind > 51)
  +                        kind = 51;
                        jjCheckNAdd(18);
                     }
                     else if (curChar == 92)
  -                     jjCheckNAddStates(3, 6);
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
  -               case 7:
  -                  if (kind > 17)
  -                     kind = 17;
  +               case 5:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
  +               case 8:
  +                  if (kind > 12)
  +                     kind = 12;
  +                  break;
                  case 12:
  -                  jjAddStates(7, 8);
  +                  jjAddStates(3, 4);
                     break;
                  case 18:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 55)
  -                     kind = 55;
  +                  if (kind > 51)
  +                     kind = 51;
                     jjCheckNAdd(18);
                     break;
  -               case 19:
  -                  if (curChar == 92)
  -                     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);
  @@ -655,13 +628,13 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 7:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 8:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  case 12:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(7, 8);
  +                     jjAddStates(3, 4);
                     break;
                  default : break;
               }
  @@ -674,7 +647,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 22 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 19 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -685,14 +658,11 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 3;
  -         }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
            return -1;
  @@ -717,13 +687,14 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_6(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_6(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_6(0x8000L);
  +         return jjMoveStringLiteralDfa1_6(0x400L);
         case 42:
  -         return jjMoveStringLiteralDfa1_6(0x1000000L);
  +         return jjMoveStringLiteralDfa1_6(0x100000L);
         default :
  -         return jjMoveNfa_6(4, 0);
  +         return jjMoveNfa_6(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_6(long active0)
  @@ -736,18 +707,18 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  -         else if ((active0 & 0x1000000L) != 0L)
  -            return jjStopAtPos(1, 24);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
  +         else if ((active0 & 0x100000L) != 0L)
  +            return jjStopAtPos(1, 20);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_6(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_6(1, 13, 2);
            break;
         default :
            break;
  @@ -758,7 +729,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 9;
  +   jjnewStateCnt = 6;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -773,39 +744,30 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  -                  break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
                     break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  default : break;
               }
  @@ -818,21 +780,14 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(9, 12);
  -                  break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  -                  break;
  -               case 7:
  +               case 5:
  +               case 0:
                     if (curChar == 92)
  -                     jjCheckNAddTwoStates(7, 0);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 8:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(8, 5);
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -846,9 +801,9 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -861,7 +816,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 6 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -872,58 +827,55 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 3;
  -         }
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               return 10;
            }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
            return -1;
         case 1:
  -         if ((active0 & 0x40000L) != 0L)
  -            return 1;
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
  +         {
  +            jjmatchedKind = 55;
  +            jjmatchedPos = 1;
  +            return 10;
  +         }
  +         if ((active0 & 0x400L) != 0L)
            {
               if (jjmatchedPos == 0)
               {
  -               jjmatchedKind = 14;
  +               jjmatchedKind = 9;
                  jjmatchedPos = 0;
               }
               return -1;
            }
  -         if ((active0 & 0x60000000L) != 0L)
  -         {
  -            jjmatchedKind = 59;
  -            jjmatchedPos = 1;
  -            return 10;
  -         }
  +         if ((active0 & 0x2000L) != 0L)
  +            return 2;
            return -1;
         case 2:
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 2;
               return 10;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return 10;
  -         if ((active0 & 0x40000000L) != 0L)
  +         if ((active0 & 0x4000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 3;
               return 10;
            }
  +         if ((active0 & 0x2000000L) != 0L)
  +            return 10;
            return -1;
         default :
            return -1;
  @@ -946,19 +898,20 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_5(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_5(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_5(0x8000L);
  +         return jjMoveStringLiteralDfa1_5(0x400L);
         case 102:
  -         return jjMoveStringLiteralDfa1_5(0x40000000L);
  +         return jjMoveStringLiteralDfa1_5(0x4000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_5(0x20000000L);
  +         return jjMoveStringLiteralDfa1_5(0x2000000L);
         case 123:
  -         return jjStopAtPos(0, 61);
  +         return jjStopAtPos(0, 57);
         case 125:
  -         return jjStopAtPos(0, 62);
  +         return jjStopAtPos(0, 58);
         default :
  -         return jjMoveNfa_5(4, 0);
  +         return jjMoveNfa_5(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_5(long active0)
  @@ -971,21 +924,21 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_5(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_5(1, 13, 2);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_5(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa2_5(active0, 0x4000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_5(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa2_5(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1003,9 +956,9 @@
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_5(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa3_5(active0, 0x4000000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_5(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa3_5(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1023,11 +976,11 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStartNfaWithStates_5(3, 29, 10);
  +         if ((active0 & 0x2000000L) != 0L)
  +            return jjStartNfaWithStates_5(3, 25, 10);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_5(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa4_5(active0, 0x4000000L);
         default :
            break;
      }
  @@ -1045,8 +998,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x40000000L) != 0L)
  -            return jjStartNfaWithStates_5(4, 30, 10);
  +         if ((active0 & 0x4000000L) != 0L)
  +            return jjStartNfaWithStates_5(4, 26, 10);
            break;
         default :
            break;
  @@ -1057,7 +1010,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 16;
  +   jjnewStateCnt = 13;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1072,43 +1025,34 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if (curChar == 46)
                        jjstateSet[jjnewStateCnt++] = 12;
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(7, 8);
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
  -                  break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  case 6:
                     if (curChar == 34)
  @@ -1119,14 +1063,14 @@
                        jjCheckNAddTwoStates(7, 8);
                     break;
                  case 8:
  -                  if (curChar == 34 && kind > 28)
  -                     kind = 28;
  +                  if (curChar == 34 && kind > 24)
  +                     kind = 24;
                     break;
                  case 10:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjstateSet[jjnewStateCnt++] = 10;
                     break;
                  case 11:
  @@ -1144,53 +1088,45 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 59)
  -                        kind = 59;
  +                     if (kind > 55)
  +                        kind = 55;
                        jjCheckNAdd(10);
                     }
                     else if (curChar == 92)
  -                     jjCheckNAddStates(13, 16);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  +               case 0:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(0, 1);
  +                  break;
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  case 7:
  -                  jjAddStates(17, 18);
  +                  jjAddStates(5, 6);
                     break;
                  case 9:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(10);
                     break;
                  case 10:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(10);
                     break;
                  case 12:
  -                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 60)
  -                     kind = 60;
  -                  break;
  -               case 13:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(13, 16);
  +                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 56)
  +                     kind = 56;
                     break;
  -               case 14:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(14, 0);
  -                  break;
  -               case 15:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(15, 5);
  -                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -1203,13 +1139,13 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(17, 18);
  +                     jjAddStates(5, 6);
                     break;
                  default : break;
               }
  @@ -1222,7 +1158,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 13 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1233,58 +1169,55 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 3;
  -         }
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               return 10;
            }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
            return -1;
         case 1:
  -         if ((active0 & 0x40000L) != 0L)
  -            return 1;
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
  +         {
  +            jjmatchedKind = 55;
  +            jjmatchedPos = 1;
  +            return 10;
  +         }
  +         if ((active0 & 0x400L) != 0L)
            {
               if (jjmatchedPos == 0)
               {
  -               jjmatchedKind = 14;
  +               jjmatchedKind = 9;
                  jjmatchedPos = 0;
               }
               return -1;
  -         }
  -         if ((active0 & 0x60000000L) != 0L)
  -         {
  -            jjmatchedKind = 59;
  -            jjmatchedPos = 1;
  -            return 10;
            }
  +         if ((active0 & 0x2000L) != 0L)
  +            return 2;
            return -1;
         case 2:
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 2;
               return 10;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return 10;
  -         if ((active0 & 0x40000000L) != 0L)
  +         if ((active0 & 0x4000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 3;
               return 10;
            }
  +         if ((active0 & 0x2000000L) != 0L)
  +            return 10;
            return -1;
         default :
            return -1;
  @@ -1307,9 +1240,10 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_1(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_1(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_1(0x8000L);
  +         return jjMoveStringLiteralDfa1_1(0x400L);
         case 40:
            return jjStopAtPos(0, 4);
         case 91:
  @@ -1317,15 +1251,15 @@
         case 93:
            return jjStopAtPos(0, 2);
         case 102:
  -         return jjMoveStringLiteralDfa1_1(0x40000000L);
  +         return jjMoveStringLiteralDfa1_1(0x4000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_1(0x20000000L);
  +         return jjMoveStringLiteralDfa1_1(0x2000000L);
         case 123:
  -         return jjStopAtPos(0, 61);
  +         return jjStopAtPos(0, 57);
         case 125:
  -         return jjStopAtPos(0, 62);
  +         return jjStopAtPos(0, 58);
         default :
  -         return jjMoveNfa_1(4, 0);
  +         return jjMoveNfa_1(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_1(long active0)
  @@ -1338,21 +1272,21 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_1(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_1(1, 13, 2);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa2_1(active0, 0x4000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa2_1(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1370,9 +1304,9 @@
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa3_1(active0, 0x4000000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa3_1(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1390,11 +1324,11 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStartNfaWithStates_1(3, 29, 10);
  +         if ((active0 & 0x2000000L) != 0L)
  +            return jjStartNfaWithStates_1(3, 25, 10);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_1(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa4_1(active0, 0x4000000L);
         default :
            break;
      }
  @@ -1412,8 +1346,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x40000000L) != 0L)
  -            return jjStartNfaWithStates_1(4, 30, 10);
  +         if ((active0 & 0x4000000L) != 0L)
  +            return jjStartNfaWithStates_1(4, 26, 10);
            break;
         default :
            break;
  @@ -1424,7 +1358,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 16;
  +   jjnewStateCnt = 13;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1439,43 +1373,34 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if (curChar == 46)
                        jjstateSet[jjnewStateCnt++] = 12;
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(7, 8);
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  -                  break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
                     break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  case 6:
                     if (curChar == 34)
  @@ -1486,14 +1411,14 @@
                        jjCheckNAddTwoStates(7, 8);
                     break;
                  case 8:
  -                  if (curChar == 34 && kind > 28)
  -                     kind = 28;
  +                  if (curChar == 34 && kind > 24)
  +                     kind = 24;
                     break;
                  case 10:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjstateSet[jjnewStateCnt++] = 10;
                     break;
                  case 11:
  @@ -1511,52 +1436,44 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 59)
  -                        kind = 59;
  +                     if (kind > 55)
  +                        kind = 55;
                        jjCheckNAdd(10);
                     }
                     else if (curChar == 92)
  -                     jjCheckNAddStates(13, 16);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  +               case 0:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
  +                  break;
                  case 7:
  -                  jjAddStates(17, 18);
  +                  jjAddStates(5, 6);
                     break;
                  case 9:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(10);
                     break;
                  case 10:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(10);
                     break;
                  case 12:
  -                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 60)
  -                     kind = 60;
  -                  break;
  -               case 13:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(13, 16);
  -                  break;
  -               case 14:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(14, 0);
  -                  break;
  -               case 15:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(15, 5);
  +                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 56)
  +                     kind = 56;
                     break;
                  default : break;
               }
  @@ -1570,13 +1487,13 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(17, 18);
  +                     jjAddStates(5, 6);
                     break;
                  default : break;
               }
  @@ -1589,7 +1506,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 13 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1600,14 +1517,11 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 3;
  -         }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
            return -1;
  @@ -1632,13 +1546,14 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_7(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_7(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_7(0x8000L);
  +         return jjMoveStringLiteralDfa1_7(0x400L);
         case 42:
  -         return jjMoveStringLiteralDfa1_7(0x800000L);
  +         return jjMoveStringLiteralDfa1_7(0x80000L);
         default :
  -         return jjMoveNfa_7(4, 0);
  +         return jjMoveNfa_7(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_7(long active0)
  @@ -1651,18 +1566,18 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  -         else if ((active0 & 0x800000L) != 0L)
  -            return jjStopAtPos(1, 23);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
  +         else if ((active0 & 0x80000L) != 0L)
  +            return jjStopAtPos(1, 19);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_7(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_7(1, 13, 2);
            break;
         default :
            break;
  @@ -1673,7 +1588,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 9;
  +   jjnewStateCnt = 6;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1688,39 +1603,30 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  -                  break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
                     break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  default : break;
               }
  @@ -1733,21 +1639,14 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(9, 12);
  -                  break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  -                  break;
  -               case 7:
  +               case 5:
  +               case 0:
                     if (curChar == 92)
  -                     jjCheckNAddTwoStates(7, 0);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 8:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(8, 5);
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -1761,9 +1660,9 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -1776,7 +1675,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 6 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1787,58 +1686,55 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 19;
  -            return 3;
  +            jjmatchedKind = 55;
  +            return 11;
            }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
  -         if ((active0 & 0x60000000L) != 0L)
  -         {
  -            jjmatchedKind = 59;
  -            return 11;
  -         }
            return -1;
         case 1:
  -         if ((active0 & 0x60000000L) != 0L)
  -         {
  -            jjmatchedKind = 59;
  -            jjmatchedPos = 1;
  -            return 11;
  -         }
  -         if ((active0 & 0x40000L) != 0L)
  -            return 1;
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
               if (jjmatchedPos == 0)
               {
  -               jjmatchedKind = 14;
  +               jjmatchedKind = 9;
                  jjmatchedPos = 0;
               }
               return -1;
            }
  +         if ((active0 & 0x2000L) != 0L)
  +            return 2;
  +         if ((active0 & 0x6000000L) != 0L)
  +         {
  +            jjmatchedKind = 55;
  +            jjmatchedPos = 1;
  +            return 11;
  +         }
            return -1;
         case 2:
  -         if ((active0 & 0x60000000L) != 0L)
  +         if ((active0 & 0x6000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 2;
               return 11;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return 11;
  -         if ((active0 & 0x40000000L) != 0L)
  +         if ((active0 & 0x4000000L) != 0L)
            {
  -            jjmatchedKind = 59;
  +            jjmatchedKind = 55;
               jjmatchedPos = 3;
               return 11;
            }
  +         if ((active0 & 0x2000000L) != 0L)
  +            return 11;
            return -1;
         default :
            return -1;
  @@ -1861,9 +1757,10 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_2(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_2(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_2(0x8000L);
  +         return jjMoveStringLiteralDfa1_2(0x400L);
         case 41:
            return jjStopAtPos(0, 6);
         case 44:
  @@ -1873,15 +1770,15 @@
         case 93:
            return jjStopAtPos(0, 2);
         case 102:
  -         return jjMoveStringLiteralDfa1_2(0x40000000L);
  +         return jjMoveStringLiteralDfa1_2(0x4000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_2(0x20000000L);
  +         return jjMoveStringLiteralDfa1_2(0x2000000L);
         case 123:
  -         return jjStopAtPos(0, 61);
  +         return jjStopAtPos(0, 57);
         case 125:
  -         return jjStopAtPos(0, 62);
  +         return jjStopAtPos(0, 58);
         default :
  -         return jjMoveNfa_2(4, 0);
  +         return jjMoveNfa_2(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_2(long active0)
  @@ -1894,21 +1791,21 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_2(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_2(1, 13, 2);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x4000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1926,9 +1823,9 @@
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x4000000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x20000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x2000000L);
         default :
            break;
      }
  @@ -1946,11 +1843,11 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStartNfaWithStates_2(3, 29, 11);
  +         if ((active0 & 0x2000000L) != 0L)
  +            return jjStartNfaWithStates_2(3, 25, 11);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_2(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa4_2(active0, 0x4000000L);
         default :
            break;
      }
  @@ -1968,8 +1865,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x40000000L) != 0L)
  -            return jjStartNfaWithStates_2(4, 30, 11);
  +         if ((active0 & 0x4000000L) != 0L)
  +            return jjStartNfaWithStates_2(4, 26, 11);
            break;
         default :
            break;
  @@ -1980,7 +1877,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 17;
  +   jjnewStateCnt = 14;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1995,11 +1892,11 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 53)
  -                        kind = 53;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(9);
                     }
                     else if (curChar == 46)
  @@ -2007,37 +1904,28 @@
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(7, 8);
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  -                  break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
                     break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  case 6:
                     if (curChar == 34)
  @@ -2048,21 +1936,21 @@
                        jjCheckNAddTwoStates(7, 8);
                     break;
                  case 8:
  -                  if (curChar == 34 && kind > 28)
  -                     kind = 28;
  +                  if (curChar == 34 && kind > 24)
  +                     kind = 24;
                     break;
                  case 9:
                     if ((0x3ff000000000000L & l) == 0L)
                        break;
  -                  if (kind > 53)
  -                     kind = 53;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(9);
                     break;
                  case 11:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjstateSet[jjnewStateCnt++] = 11;
                     break;
                  case 12:
  @@ -2080,52 +1968,44 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 59)
  -                        kind = 59;
  +                     if (kind > 55)
  +                        kind = 55;
                        jjCheckNAdd(11);
                     }
                     else if (curChar == 92)
  -                     jjCheckNAddStates(19, 22);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  +               case 0:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(0, 1);
  +                  break;
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  case 7:
  -                  jjAddStates(17, 18);
  +                  jjAddStates(5, 6);
                     break;
                  case 10:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(11);
                     break;
                  case 11:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 59)
  -                     kind = 59;
  +                  if (kind > 55)
  +                     kind = 55;
                     jjCheckNAdd(11);
                     break;
                  case 13:
  -                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 60)
  -                     kind = 60;
  -                  break;
  -               case 14:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(19, 22);
  -                  break;
  -               case 15:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(15, 0);
  -                  break;
  -               case 16:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(16, 5);
  +                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 56)
  +                     kind = 56;
                     break;
                  default : break;
               }
  @@ -2139,13 +2019,13 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  case 7:
                     if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(17, 18);
  +                     jjAddStates(5, 6);
                     break;
                  default : break;
               }
  @@ -2158,7 +2038,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 17 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 14 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2169,14 +2049,11 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 3;
  -         }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
            return -1;
  @@ -2201,11 +2078,12 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_8(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_8(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_8(0x8000L);
  +         return jjMoveStringLiteralDfa1_8(0x400L);
         default :
  -         return jjMoveNfa_8(4, 0);
  +         return jjMoveNfa_8(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_8(long active0)
  @@ -2218,16 +2096,16 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_8(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_8(1, 13, 2);
            break;
         default :
            break;
  @@ -2238,7 +2116,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 12;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2253,54 +2131,45 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x2400L & l) != 0L)
                     {
  -                     if (kind > 22)
  -                        kind = 22;
  +                     if (kind > 18)
  +                        kind = 18;
                     }
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
                     if (curChar == 13)
                        jjstateSet[jjnewStateCnt++] = 7;
  -                  else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  -                  break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
                     break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  case 6:
  -                  if ((0x2400L & l) != 0L && kind > 22)
  -                     kind = 22;
  +                  if ((0x2400L & l) != 0L && kind > 18)
  +                     kind = 18;
                     break;
                  case 7:
  -                  if (curChar == 10 && kind > 22)
  -                     kind = 22;
  +                  if (curChar == 10 && kind > 18)
  +                     kind = 18;
                     break;
                  case 8:
                     if (curChar == 13)
  @@ -2317,21 +2186,14 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  -                  if (curChar == 92)
  -                     jjCheckNAddStates(23, 26);
  -                  break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  -                  break;
  -               case 10:
  +               case 5:
  +               case 0:
                     if (curChar == 92)
  -                     jjCheckNAddTwoStates(10, 0);
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 11:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(11, 5);
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -2345,9 +2207,9 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -2360,7 +2222,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 12 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2371,64 +2233,61 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x6000000000000L) != 0L)
  +         if ((active0 & 0x6800L) != 0L)
  +            return 4;
  +         if ((active0 & 0x600000000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               return 11;
  -         }
  -         if ((active0 & 0x9000000000000L) != 0L)
  -         {
  -            jjmatchedKind = 55;
  -            return 14;
            }
  -         if ((active0 & 0x50000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 19;
  -            return 3;
  +            jjmatchedKind = 9;
  +            return -1;
            }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x900000000000L) != 0L)
            {
  -            jjmatchedKind = 14;
  -            return -1;
  +            jjmatchedKind = 51;
  +            return 14;
            }
            return -1;
         case 1:
  -         if ((active0 & 0x1000000000000L) != 0L)
  +         if ((active0 & 0x100000000000L) != 0L)
               return 14;
  -         if ((active0 & 0x40000L) != 0L)
  -            return 1;
  -         if ((active0 & 0xe000000000000L) != 0L)
  +         if ((active0 & 0xe00000000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               jjmatchedPos = 1;
               return 14;
            }
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x400L) != 0L)
            {
               if (jjmatchedPos == 0)
               {
  -               jjmatchedKind = 14;
  +               jjmatchedKind = 9;
                  jjmatchedPos = 0;
               }
               return -1;
            }
  +         if ((active0 & 0x2000L) != 0L)
  +            return 2;
            return -1;
         case 2:
  -         if ((active0 & 0xe000000000000L) != 0L)
  +         if ((active0 & 0xe00000000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               jjmatchedPos = 2;
               return 14;
            }
            return -1;
         case 3:
  -         if ((active0 & 0xe000000000000L) != 0L)
  +         if ((active0 & 0xe00000000000L) != 0L)
               return 14;
            return -1;
         case 4:
  -         if ((active0 & 0x2000000000000L) != 0L)
  +         if ((active0 & 0x200000000000L) != 0L)
            {
  -            jjmatchedKind = 55;
  +            jjmatchedKind = 51;
               jjmatchedPos = 4;
               return 14;
            }
  @@ -2454,17 +2313,18 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_4(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_4(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_4(0x8000L);
  +         return jjMoveStringLiteralDfa1_4(0x400L);
         case 101:
  -         return jjMoveStringLiteralDfa1_4(0x6000000000000L);
  +         return jjMoveStringLiteralDfa1_4(0x600000000000L);
         case 105:
  -         return jjMoveStringLiteralDfa1_4(0x1000000000000L);
  +         return jjMoveStringLiteralDfa1_4(0x100000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa1_4(0x8000000000000L);
  +         return jjMoveStringLiteralDfa1_4(0x800000000000L);
         default :
  -         return jjMoveNfa_4(4, 0);
  +         return jjMoveNfa_4(5, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_4(long active0)
  @@ -2477,25 +2337,25 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_4(1, 18, 1);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_4(1, 13, 2);
            break;
         case 102:
  -         if ((active0 & 0x1000000000000L) != 0L)
  -            return jjStartNfaWithStates_4(1, 48, 14);
  +         if ((active0 & 0x100000000000L) != 0L)
  +            return jjStartNfaWithStates_4(1, 44, 14);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa2_4(active0, 0x6000000000000L);
  +         return jjMoveStringLiteralDfa2_4(active0, 0x600000000000L);
         case 116:
  -         return jjMoveStringLiteralDfa2_4(active0, 0x8000000000000L);
  +         return jjMoveStringLiteralDfa2_4(active0, 0x800000000000L);
         default :
            break;
      }
  @@ -2513,9 +2373,9 @@
      switch(curChar)
      {
         case 111:
  -         return jjMoveStringLiteralDfa3_4(active0, 0x8000000000000L);
  +         return jjMoveStringLiteralDfa3_4(active0, 0x800000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa3_4(active0, 0x6000000000000L);
  +         return jjMoveStringLiteralDfa3_4(active0, 0x600000000000L);
         default :
            break;
      }
  @@ -2533,15 +2393,15 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x4000000000000L) != 0L)
  +         if ((active0 & 0x400000000000L) != 0L)
            {
  -            jjmatchedKind = 50;
  +            jjmatchedKind = 46;
               jjmatchedPos = 3;
            }
  -         return jjMoveStringLiteralDfa4_4(active0, 0x2000000000000L);
  +         return jjMoveStringLiteralDfa4_4(active0, 0x200000000000L);
         case 112:
  -         if ((active0 & 0x8000000000000L) != 0L)
  -            return jjStartNfaWithStates_4(3, 51, 14);
  +         if ((active0 & 0x800000000000L) != 0L)
  +            return jjStartNfaWithStates_4(3, 47, 14);
            break;
         default :
            break;
  @@ -2560,7 +2420,7 @@
      switch(curChar)
      {
         case 105:
  -         return jjMoveStringLiteralDfa5_4(active0, 0x2000000000000L);
  +         return jjMoveStringLiteralDfa5_4(active0, 0x200000000000L);
         default :
            break;
      }
  @@ -2578,8 +2438,8 @@
      switch(curChar)
      {
         case 102:
  -         if ((active0 & 0x2000000000000L) != 0L)
  -            return jjStartNfaWithStates_4(5, 49, 14);
  +         if ((active0 & 0x200000000000L) != 0L)
  +            return jjStartNfaWithStates_4(5, 45, 14);
            break;
         default :
            break;
  @@ -2590,7 +2450,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 18;
  +   jjnewStateCnt = 15;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2605,57 +2465,48 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 4:
  +               case 5:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 53)
  -                        kind = 53;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(13);
                     }
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
  -               case 0:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
  -                  break;
                  case 1:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
                     break;
                  case 2:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 3;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 1;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
  -               case 5:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  +               case 4:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  case 7:
                     if ((0x100000200L & l) != 0L)
  -                     jjAddStates(27, 29);
  +                     jjAddStates(7, 9);
                     break;
                  case 8:
  -                  if ((0x2400L & l) != 0L && kind > 47)
  -                     kind = 47;
  +                  if ((0x2400L & l) != 0L && kind > 43)
  +                     kind = 43;
                     break;
                  case 9:
  -                  if (curChar == 10 && kind > 47)
  -                     kind = 47;
  +                  if (curChar == 10 && kind > 43)
  +                     kind = 43;
                     break;
                  case 10:
                     if (curChar == 13)
  @@ -2664,8 +2515,8 @@
                  case 13:
                     if ((0x3ff000000000000L & l) == 0L)
                        break;
  -                  if (kind > 53)
  -                     kind = 53;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(13);
                     break;
                  default : break;
  @@ -2679,38 +2530,42 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 11:
  +               case 5:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 55)
  -                        kind = 55;
  +                     if (kind > 51)
  +                        kind = 51;
                        jjCheckNAdd(14);
                     }
  -                  if (curChar == 110)
  -                     jjstateSet[jjnewStateCnt++] = 6;
  +                  else if (curChar == 92)
  +                     jjCheckNAddTwoStates(0, 1);
  +                  if (curChar == 101)
  +                     jjstateSet[jjnewStateCnt++] = 11;
                     break;
  -               case 4:
  +               case 11:
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 55)
  -                        kind = 55;
  +                     if (kind > 51)
  +                        kind = 51;
                        jjCheckNAdd(14);
                     }
  -                  else if (curChar == 92)
  -                     jjCheckNAddStates(30, 33);
  -                  if (curChar == 101)
  -                     jjstateSet[jjnewStateCnt++] = 11;
  +                  if (curChar == 110)
  +                     jjstateSet[jjnewStateCnt++] = 6;
                     break;
  -               case 2:
  -                  if (kind > 17)
  -                     kind = 17;
  +               case 0:
  +                  if (curChar == 92)
  +                     jjCheckNAddTwoStates(0, 1);
                     break;
  -               case 6:
  -                  if (curChar != 100)
  +               case 3:
  +                  if (kind > 12)
  +                     kind = 12;
  +                  break;
  +               case 6:
  +                  if (curChar != 100)
                        break;
  -                  if (kind > 47)
  -                     kind = 47;
  -                  jjAddStates(27, 29);
  +                  if (kind > 43)
  +                     kind = 43;
  +                  jjAddStates(7, 9);
                     break;
                  case 12:
                     if (curChar == 101)
  @@ -2719,22 +2574,10 @@
                  case 14:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 55)
  -                     kind = 55;
  +                  if (kind > 51)
  +                     kind = 51;
                     jjCheckNAdd(14);
                     break;
  -               case 15:
  -                  if (curChar == 92)
  -                     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);
  @@ -2747,9 +2590,9 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 2:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  -                     kind = 17;
  +               case 3:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -2762,7 +2605,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 18 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 15 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -2773,18 +2616,15 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x100000L) != 0L)
  -            return 58;
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x18000L) != 0L)
  +            return 9;
  +         if ((active0 & 0x6800L) != 0L)
  +            return 15;
  +         if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 14;
  +            jjmatchedKind = 9;
               return -1;
            }
  -         if ((active0 & 0x50000L) != 0L)
  -         {
  -            jjmatchedKind = 19;
  -            return 54;
  -         }
            return -1;
         default :
            return -1;
  @@ -2807,13 +2647,15 @@
      switch(curChar)
      {
         case 35:
  -         return jjMoveStringLiteralDfa1_3(0x50000L);
  +         jjmatchedKind = 14;
  +         return jjMoveStringLiteralDfa1_3(0x2800L);
         case 36:
  -         return jjMoveStringLiteralDfa1_3(0x8000L);
  +         return jjMoveStringLiteralDfa1_3(0x400L);
         case 92:
  -         return jjStartNfaWithStates_3(0, 20, 58);
  +         jjmatchedKind = 16;
  +         return jjMoveStringLiteralDfa1_3(0x8000L);
         default :
  -         return jjMoveNfa_3(10, 0);
  +         return jjMoveNfa_3(12, 0);
      }
   }
   private final int jjMoveStringLiteralDfa1_3(long active0)
  @@ -2826,17 +2668,21 @@
      switch(curChar)
      {
         case 33:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x400L) != 0L)
  +            return jjStopAtPos(1, 10);
            break;
         case 35:
  -         if ((active0 & 0x10000L) != 0L)
  -            return jjStopAtPos(1, 16);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStopAtPos(1, 11);
            break;
         case 42:
  -         if ((active0 & 0x40000L) != 0L)
  -            return jjStartNfaWithStates_3(1, 18, 52);
  +         if ((active0 & 0x2000L) != 0L)
  +            return jjStartNfaWithStates_3(1, 13, 13);
            break;
  +      case 92:
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStartNfaWithStates_3(1, 15, 16);
  +         break;
         default :
            break;
      }
  @@ -2846,7 +2692,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 58;
  +   jjnewStateCnt = 16;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -2861,114 +2707,67 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 54:
  +               case 15:
                     if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 52;
  +                     jjstateSet[jjnewStateCnt++] = 13;
                     break;
  -               case 10:
  -                  if ((0xffffffe7ffffffffL & l) != 0L)
  -                  {
  -                     if (kind > 21)
  -                        kind = 21;
  -                     jjCheckNAdd(9);
  -                  }
  -                  else if (curChar == 35)
  -                     jjCheckNAddTwoStates(5, 54);
  -                  else if (curChar == 36)
  +               case 16:
  +               case 6:
  +                  if (curChar == 36 && kind > 9)
  +                     kind = 9;
  +                  break;
  +               case 9:
  +                  if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  if ((0x100000200L & l) != 0L)
  -                     jjCheckNAddStates(34, 36);
                     else if (curChar == 35)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  +                     jjstateSet[jjnewStateCnt++] = 11;
                     break;
  -               case 58:
  -                  if (curChar == 35)
  +               case 12:
  +                  if ((0xffffffe7ffffffffL & l) != 0L)
                     {
  -                     if (kind > 19)
  -                        kind = 19;
  +                     if (kind > 17)
  +                        kind = 17;
  +                     jjCheckNAdd(7);
                     }
  +                  else if (curChar == 35)
  +                     jjCheckNAddTwoStates(3, 15);
                     else if (curChar == 36)
                     {
  -                     if (kind > 14)
  -                        kind = 14;
  +                     if (kind > 9)
  +                        kind = 9;
                     }
  -                  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;
  +                  if ((0x100000200L & l) != 0L)
  +                     jjCheckNAddTwoStates(0, 4);
                     break;
                  case 0:
                     if ((0x100000200L & l) != 0L)
  -                     jjCheckNAddStates(34, 36);
  +                     jjCheckNAddTwoStates(0, 4);
                     break;
  -               case 6:
  +               case 4:
                     if (curChar == 35)
  -                     jjCheckNAdd(5);
  +                     jjCheckNAdd(3);
                     break;
                  case 7:
  -                  if (curChar == 36 && kind > 14)
  -                     kind = 14;
  -                  break;
  -               case 8:
  -                  if (curChar == 35 && kind > 19)
  -                     kind = 19;
  -                  break;
  -               case 9:
                     if ((0xffffffe7ffffffffL & l) == 0L)
                        break;
  -                  if (kind > 21)
  -                     kind = 21;
  -                  jjCheckNAdd(9);
  -                  break;
  -               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;
  +                  if (kind > 17)
  +                     kind = 17;
  +                  jjCheckNAdd(7);
                     break;
  -               case 51:
  +               case 10:
                     if (curChar == 35)
  -                     jjCheckNAddTwoStates(5, 54);
  +                     jjstateSet[jjnewStateCnt++] = 11;
                     break;
  -               case 52:
  +               case 13:
                     if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 53;
  +                     jjstateSet[jjnewStateCnt++] = 14;
                     break;
  -               case 53:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 17)
  -                     kind = 17;
  +               case 14:
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -2981,217 +2780,68 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 54:
  -               case 5:
  +               case 15:
  +               case 3:
                     if (curChar == 115)
  -                     jjstateSet[jjnewStateCnt++] = 4;
  -                  break;
  -               case 10:
  -                  if ((0xffffffffefffffffL & l) != 0L)
  -                  {
  -                     if (kind > 21)
  -                        kind = 21;
  -                     jjCheckNAdd(9);
  -                  }
  -                  else if (curChar == 92)
  -                     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;
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
  -               case 1:
  +               case 16:
                     if (curChar == 92)
  -                     jjAddStates(54, 55);
  -                  break;
  -               case 2:
  +                     jjAddStates(10, 11);
                     if (curChar == 92)
  -                     jjCheckNAdd(1);
  -                  break;
  -               case 3:
  -                  if (curChar == 116 && kind > 13)
  -                     kind = 13;
  -                  break;
  -               case 4:
  -                  if (curChar == 101)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
                  case 9:
  -                  if ((0xffffffffefffffffL & l) == 0L)
  -                     break;
  -                  if (kind > 21)
  -                     kind = 21;
  -                  jjCheckNAdd(9);
  -                  break;
  -               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:
  +                     jjCheckNAddTwoStates(5, 6);
                     if (curChar == 92)
  -                     jjstateSet[jjnewStateCnt++] = 18;
  +                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
  -               case 18:
  +               case 12:
  +                  if ((0xffffffffefffffffL & l) != 0L)
  +                  {
  +                     if (kind > 17)
  +                        kind = 17;
  +                     jjCheckNAdd(7);
  +                  }
  +                  else if (curChar == 92)
  +                     jjAddStates(10, 11);
                     if (curChar == 92)
  -                     jjCheckNAddTwoStates(17, 21);
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
  -               case 19:
  -                  if (curChar == 102 && kind > 8)
  +               case 1:
  +                  if (curChar == 116 && 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:
  +               case 2:
                     if (curChar == 101)
  -                     jjstateSet[jjnewStateCnt++] = 41;
  -                  break;
  -               case 44:
  -                  if (curChar == 92)
  -                     jjstateSet[jjnewStateCnt++] = 45;
  +                     jjstateSet[jjnewStateCnt++] = 1;
                     break;
  -               case 45:
  +               case 5:
                     if (curChar == 92)
  -                     jjCheckNAddTwoStates(44, 50);
  +                     jjCheckNAddTwoStates(5, 6);
                     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:
  +               case 7:
  +                  if ((0xffffffffefffffffL & l) == 0L)
  +                     break;
                     if (kind > 17)
                        kind = 17;
  +                  jjCheckNAdd(7);
                     break;
  -               case 55:
  +               case 8:
                     if (curChar == 92)
  -                     jjCheckNAddStates(37, 40);
  +                     jjAddStates(10, 11);
                     break;
  -               case 56:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(56, 7);
  +               case 11:
  +                  if ((0x7fffffe07fffffeL & l) == 0L)
  +                     break;
  +                  if (kind > 7)
  +                     kind = 7;
  +                  jjstateSet[jjnewStateCnt++] = 11;
                     break;
  -               case 57:
  -                  if (curChar == 92)
  -                     jjCheckNAddTwoStates(57, 8);
  +               case 14:
  +                  if (kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -3205,17 +2855,17 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 10:
  -               case 9:
  +               case 12:
  +               case 7:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
  -                  if (kind > 21)
  -                     kind = 21;
  -                  jjCheckNAdd(9);
  -                  break;
  -               case 53:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
  +                  if (kind > 17)
                        kind = 17;
  +                  jjCheckNAdd(7);
  +                  break;
  +               case 14:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
  +                     kind = 12;
                     break;
                  default : break;
               }
  @@ -3228,24 +2878,21 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 58 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 16 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
      }
   }
   static final int[] jjnextStates = {
  -   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, 
  +   1, 2, 4, 12, 13, 7, 8, 7, 8, 10, 9, 10, 
   };
   public static final String[] jjstrLiteralImages = {
   null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
  -null, null, null, null, null, null, null, null, null, null, };
  +null, null, null, null, null, null, };
   public static final String[] lexStateNames = {
      "DIRECTIVE", 
      "REFMODIFIER", 
  @@ -3260,23 +2907,23 @@
   public static final int[] jjnewLexState = {
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, 
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, 
  -   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   };
   static final long[] jjtoToken = {
  -   0x78affffff1f03fffL, 0x0L, 
  +   0x78affffff1f81ffL, 
   };
   static final long[] jjtoSkip = {
  -   0x800000000c000000L, 0x1L, 
  +   0x1800000000c00000L, 
   };
   static final long[] jjtoSpecial = {
  -   0x8000000000000000L, 0x1L, 
  +   0x1800000000000000L, 
   };
   static final long[] jjtoMore = {
  -   0x20fc000L, 0x0L, 
  +   0x207e00L, 
   };
   private ASCII_CharStream input_stream;
  -private final int[] jjrounds = new int[58];
  -private final int[] jjstateSet = new int[116];
  +private final int[] jjrounds = new int[19];
  +private final int[] jjstateSet = new int[38];
   StringBuffer image;
   int jjimageLen;
   int lengthOfMatch;
  @@ -3303,7 +2950,7 @@
   {
      int i;
      jjround = 0x80000001;
  -   for (i = 58; i-- > 0;)
  +   for (i = 19; i-- > 0;)
         jjrounds[i] = 0x80000000;
   }
   public void ReInit(ASCII_CharStream stream, int lexState)
  @@ -3382,9 +3029,9 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_1();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 63)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 59)
            {
  -            jjmatchedKind = 63;
  +            jjmatchedKind = 59;
            }
            break;
          case 2:
  @@ -3396,9 +3043,9 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_2();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 63)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 59)
            {
  -            jjmatchedKind = 63;
  +            jjmatchedKind = 59;
            }
            break;
          case 3:
  @@ -3410,45 +3057,45 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_4();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 64)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 60)
            {
  -            jjmatchedKind = 64;
  +            jjmatchedKind = 60;
            }
            break;
          case 5:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_5();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 63)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 59)
            {
  -            jjmatchedKind = 63;
  +            jjmatchedKind = 59;
            }
            break;
          case 6:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_6();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 25)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 21)
            {
  -            jjmatchedKind = 25;
  +            jjmatchedKind = 21;
            }
            break;
          case 7:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_7();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 25)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 21)
            {
  -            jjmatchedKind = 25;
  +            jjmatchedKind = 21;
            }
            break;
          case 8:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_8();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 25)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 21)
            {
  -            jjmatchedKind = 25;
  +            jjmatchedKind = 21;
            }
            break;
        }
  @@ -3525,7 +3172,7 @@
   {
      switch(jjmatchedKind)
      {
  -      case 63 :
  +      case 59 :
            if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3543,7 +3190,7 @@
   
           stateStackPop();
            break;
  -      case 64 :
  +      case 60 :
            if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3564,7 +3211,7 @@
      jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
      switch(jjmatchedKind)
      {
  -      case 14 :
  +      case 9 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3581,7 +3228,7 @@
               SwitchTo(REFERENCE);
           }
            break;
  -      case 15 :
  +      case 10 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3598,7 +3245,7 @@
               SwitchTo(REFERENCE);
           }
            break;
  -      case 16 :
  +      case 11 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3608,7 +3255,7 @@
           stateStackPush();
           SwitchTo(IN_SINGLE_LINE_COMMENT);
            break;
  -      case 17 :
  +      case 12 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3619,7 +3266,7 @@
           stateStackPush();
           SwitchTo( IN_FORMAL_COMMENT);
            break;
  -      case 18 :
  +      case 13 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3629,7 +3276,7 @@
           stateStackPush();
           SwitchTo( IN_MULTI_LINE_COMMENT );
            break;
  -      case 19 :
  +      case 14 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -3688,53 +3335,11 @@
   
           SwitchTo( REFERENCE );
            break;
  -      case 7 :
  -        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 = 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 = 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 = 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 = 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 = 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 = escapedDirective( matchedToken.image, "#stop");
  -         break;
  -      case 13 :
  -        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))));
           if (! inComment)
           {
               inDirective = true;
  @@ -3747,7 +3352,7 @@
               SwitchTo(DIRECTIVE);
           }
            break;
  -      case 22 :
  +      case 18 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3755,7 +3360,7 @@
        inComment = false;
        stateStackPop();
            break;
  -      case 23 :
  +      case 19 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3763,7 +3368,7 @@
       inComment = false;
       stateStackPop();
            break;
  -      case 24 :
  +      case 20 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3771,7 +3376,7 @@
       inComment = false;
       stateStackPop();
            break;
  -      case 28 :
  +      case 24 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3788,7 +3393,7 @@
           else if( curLexState == DIRECTIVE && !inSet && lparen == 0)
               stateStackPop();
            break;
  -      case 31 :
  +      case 27 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3804,7 +3409,7 @@
           if (inDirective)
               inDirective = false;
            break;
  -      case 47 :
  +      case 43 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3812,21 +3417,21 @@
           inDirective = false;
           stateStackPop();
            break;
  -      case 48 :
  +      case 44 :
           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))));
           SwitchTo(DIRECTIVE);
            break;
  -      case 49 :
  +      case 45 :
           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))));
           SwitchTo(DIRECTIVE);
            break;
  -      case 50 :
  +      case 46 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3834,7 +3439,7 @@
           inDirective = false;
           stateStackPop();
            break;
  -      case 51 :
  +      case 47 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3842,7 +3447,7 @@
           matchedToken.kind = EOF;
           fileDepth = 0;
            break;
  -      case 53 :
  +      case 49 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3856,7 +3461,7 @@
           if ( lparen == 0 && !inSet && curLexState != REFMOD2)
               stateStackPop();
            break;
  -      case 60 :
  +      case 56 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -3877,7 +3482,7 @@
               System.out.print("DOT : switching to " + REFMODIFIER);
           SwitchTo(REFMODIFIER);
            break;
  -      case 62 :
  +      case 58 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  
  
  
  1.4       +37 -35    
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ParserTreeConstants.java  2000/11/07 21:34:01     1.3
  +++ ParserTreeConstants.java  2000/11/11 22:47:57     1.4
  @@ -6,45 +6,48 @@
   {
     public int JJTPROCESS = 0;
     public int JJTVOID = 1;
  -  public int JJTCOMMENT = 2;
  -  public int JJTNUMBERLITERAL = 3;
  -  public int JJTSTRINGLITERAL = 4;
  -  public int JJTIDENTIFIER = 5;
  -  public int JJTWORD = 6;
  -  public int JJTDIRECTIVE = 7;
  -  public int JJTBLOCK = 8;
  -  public int JJTOBJECTARRAY = 9;
  -  public int JJTMETHOD = 10;
  -  public int JJTREFERENCE = 11;
  -  public int JJTTRUE = 12;
  -  public int JJTFALSE = 13;
  -  public int JJTTEXT = 14;
  -  public int JJTIFSTATEMENT = 15;
  -  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 int JJTESCAPEDDIRECTIVE = 2;
  +  public int JJTESCAPE = 3;
  +  public int JJTCOMMENT = 4;
  +  public int JJTNUMBERLITERAL = 5;
  +  public int JJTSTRINGLITERAL = 6;
  +  public int JJTIDENTIFIER = 7;
  +  public int JJTWORD = 8;
  +  public int JJTDIRECTIVE = 9;
  +  public int JJTBLOCK = 10;
  +  public int JJTOBJECTARRAY = 11;
  +  public int JJTMETHOD = 12;
  +  public int JJTREFERENCE = 13;
  +  public int JJTTRUE = 14;
  +  public int JJTFALSE = 15;
  +  public int JJTTEXT = 16;
  +  public int JJTIFSTATEMENT = 17;
  +  public int JJTELSESTATEMENT = 18;
  +  public int JJTELSEIFSTATEMENT = 19;
  +  public int JJTSETDIRECTIVE = 20;
  +  public int JJTEXPRESSION = 21;
  +  public int JJTASSIGNMENT = 22;
  +  public int JJTORNODE = 23;
  +  public int JJTANDNODE = 24;
  +  public int JJTEQNODE = 25;
  +  public int JJTNENODE = 26;
  +  public int JJTLTNODE = 27;
  +  public int JJTGTNODE = 28;
  +  public int JJTLENODE = 29;
  +  public int JJTGENODE = 30;
  +  public int JJTADDNODE = 31;
  +  public int JJTSUBTRACTNODE = 32;
  +  public int JJTMULNODE = 33;
  +  public int JJTDIVNODE = 34;
  +  public int JJTMODNODE = 35;
  +  public int JJTNOTNODE = 36;
   
   
     public String[] jjtNodeName = {
       "process",
       "void",
  +    "EscapedDirective",
  +    "Escape",
       "Comment",
       "NumberLiteral",
       "StringLiteral",
  @@ -59,7 +62,6 @@
       "False",
       "Text",
       "IfStatement",
  -    "EndStatement",
       "ElseStatement",
       "ElseIfStatement",
       "SetDirective",
  
  
  

Reply via email to