Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 1,639   Methods: 88
NCLOC: 1,462   Classes: 3
 
 Source file Conditionals Statements Methods TOTAL
JspParser.java 38% 63.5% 85.2% 58.2%
coverage coverage
 1    /* Generated By:JJTree&JavaCC: Do not edit this line. JspParser.java */
 2    /**
 3    * JSP Parser for PMD.
 4    * @author Pieter � Application Engineers NV/SA � http://www.ae.be
 5    */
 6   
 7    package net.sourceforge.pmd.jsp.ast;
 8   
 9    public class JspParser/*@bgen(jjtree)*/implements JspParserTreeConstants, JspParserConstants {/*@bgen(jjtree)*/
 10    protected JJTJspParserState jjtree = new JJTJspParserState();
 11    /**
 12    * Return the contents of a quote.
 13    * @param quote String - starting and ending with " or '
 14    * @return String a substring of quote: quote without the first and list
 15    * character.
 16    */
 17  14 private static String quoteContent(String quote) {
 18  14 return quote.substring(1, quote.length()-1);
 19    }
 20   
 21    /**
 22    * Return the contents of a EL expression or a Value Binding expression.
 23    * @param expression String - starting with ${ or #{ and ending with }
 24    * @return String a substring of expression: expression without the first two and list
 25    * characters.
 26    */
 27  5 private static String expressionContent(String expression) {
 28  5 return expression.substring(2, expression.length()-1).trim();
 29    }
 30   
 31    /** ******************************************************************** */
 32    /** ************************* JSP GRAMMAR **************************** */
 33    /** ******************************************************************** */
 34   
 35    /**
 36    * The root of the AST of a JSP.
 37    */
 38  39 final public ASTCompilationUnit CompilationUnit() throws ParseException {
 39    /*@bgen(jjtree) CompilationUnit */
 40  39 ASTCompilationUnit jjtn000 = new ASTCompilationUnit(this, JJTCOMPILATIONUNIT);
 41  39 boolean jjtc000 = true;
 42  39 jjtree.openNodeScope(jjtn000);
 43  39 try {
 44  39 Prolog();
 45  39 Content();
 46  39 jj_consume_token(0);
 47  39 jjtree.closeNodeScope(jjtn000, true);
 48  39 jjtc000 = false;
 49  39 {if (true) return jjtn000;}
 50    } catch (Throwable jjte000) {
 51  0 if (jjtc000) {
 52  0 jjtree.clearNodeScope(jjtn000);
 53  0 jjtc000 = false;
 54    } else {
 55  0 jjtree.popNode();
 56    }
 57  0 if (jjte000 instanceof RuntimeException) {
 58  0 {if (true) throw (RuntimeException)jjte000;}
 59    }
 60  0 if (jjte000 instanceof ParseException) {
 61  0 {if (true) throw (ParseException)jjte000;}
 62    }
 63  0 {if (true) throw (Error)jjte000;}
 64    } finally {
 65  39 if (jjtc000) {
 66  0 jjtree.closeNodeScope(jjtn000, true);
 67    }
 68    }
 69  0 throw new RuntimeException("Missing return statement in function");
 70    }
 71   
 72    /**
 73    * The optional prolog of a JSP, including (xml) declarations and DTD.
 74    */
 75  39 final public void Prolog() throws ParseException {
 76  39 if (jj_2_1(2147483647)) {
 77  1 label_1:
 78    while (true) {
 79  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 80  0 case COMMENT_START:
 81  0 case JSP_COMMENT_START:
 82    ;
 83  0 break;
 84  1 default:
 85  1 jj_la1[0] = jj_gen;
 86  1 break label_1;
 87    }
 88  0 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 89  0 case COMMENT_START:
 90  0 CommentTag();
 91  0 break;
 92  0 case JSP_COMMENT_START:
 93  0 JspComment();
 94  0 break;
 95  0 default:
 96  0 jj_la1[1] = jj_gen;
 97  0 jj_consume_token(-1);
 98  0 throw new ParseException();
 99    }
 100    }
 101  1 Declaration();
 102    } else {
 103    ;
 104    }
 105  39 if (jj_2_2(2147483647)) {
 106  1 label_2:
 107    while (true) {
 108  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 109  0 case COMMENT_START:
 110  0 case JSP_COMMENT_START:
 111    ;
 112  0 break;
 113  1 default:
 114  1 jj_la1[2] = jj_gen;
 115  1 break label_2;
 116    }
 117  0 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 118  0 case COMMENT_START:
 119  0 CommentTag();
 120  0 break;
 121  0 case JSP_COMMENT_START:
 122  0 JspComment();
 123  0 break;
 124  0 default:
 125  0 jj_la1[3] = jj_gen;
 126  0 jj_consume_token(-1);
 127  0 throw new ParseException();
 128    }
 129    }
 130  1 DoctypeDeclaration();
 131    } else {
 132    ;
 133    }
 134    }
 135   
 136    /**
 137    * Everything between a start-tag and the corresponding end-tag of an element.
 138    */
 139  129 final public void Content() throws ParseException {
 140    /*@bgen(jjtree) Content */
 141  129 ASTContent jjtn000 = new ASTContent(this, JJTCONTENT);
 142  129 boolean jjtc000 = true;
 143  129 jjtree.openNodeScope(jjtn000);
 144  129 try {
 145  129 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 146  0 case EL_EXPRESSION:
 147  18 case UNPARSED_TEXT:
 148  18 Text();
 149  18 break;
 150  91 case TAG_START:
 151  6 case COMMENT_START:
 152  1 case CDATA_START:
 153  2 case JSP_COMMENT_START:
 154  1 case JSP_DECLARATION_START:
 155  1 case JSP_EXPRESSION_START:
 156  2 case JSP_SCRIPTLET_START:
 157  7 case JSP_DIRECTIVE_START:
 158  111 ContentElementPossiblyWithText();
 159  111 break;
 160  0 default:
 161  0 jj_la1[4] = jj_gen;
 162  0 jj_consume_token(-1);
 163  0 throw new ParseException();
 164    }
 165  129 label_3:
 166    while (true) {
 167  142 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 168  9 case TAG_START:
 169  0 case COMMENT_START:
 170  0 case CDATA_START:
 171  0 case JSP_COMMENT_START:
 172  0 case JSP_DECLARATION_START:
 173  0 case JSP_EXPRESSION_START:
 174  0 case JSP_SCRIPTLET_START:
 175  4 case JSP_DIRECTIVE_START:
 176    ;
 177  13 break;
 178  129 default:
 179  129 jj_la1[5] = jj_gen;
 180  129 break label_3;
 181    }
 182  13 ContentElementPossiblyWithText();
 183    }
 184    } catch (Throwable jjte000) {
 185  0 if (jjtc000) {
 186  0 jjtree.clearNodeScope(jjtn000);
 187  0 jjtc000 = false;
 188    } else {
 189  0 jjtree.popNode();
 190    }
 191  0 if (jjte000 instanceof RuntimeException) {
 192  0 {if (true) throw (RuntimeException)jjte000;}
 193    }
 194  0 if (jjte000 instanceof ParseException) {
 195  0 {if (true) throw (ParseException)jjte000;}
 196    }
 197  0 {if (true) throw (Error)jjte000;}
 198    } finally {
 199  129 if (jjtc000) {
 200  129 jjtree.closeNodeScope(jjtn000, true);
 201    }
 202    }
 203    }
 204   
 205    /**
 206    * A single (non-text) element that can occur between a start- and end-tag of an element.
 207    * Possibly followed by text.
 208    */
 209  124 final public void ContentElementPossiblyWithText() throws ParseException {
 210  124 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 211  6 case COMMENT_START:
 212  6 CommentTag();
 213  6 break;
 214  100 case TAG_START:
 215  100 Element();
 216  100 break;
 217  1 case CDATA_START:
 218  1 CData();
 219  1 break;
 220  2 case JSP_COMMENT_START:
 221  2 JspComment();
 222  2 break;
 223  1 case JSP_DECLARATION_START:
 224  1 JspDeclaration();
 225  1 break;
 226  1 case JSP_EXPRESSION_START:
 227  1 JspExpression();
 228  1 break;
 229  2 case JSP_SCRIPTLET_START:
 230  2 JspScriptlet();
 231  2 break;
 232  11 case JSP_DIRECTIVE_START:
 233  11 JspDirective();
 234  11 break;
 235  0 default:
 236  0 jj_la1[6] = jj_gen;
 237  0 jj_consume_token(-1);
 238  0 throw new ParseException();
 239    }
 240  124 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 241  0 case EL_EXPRESSION:
 242  8 case UNPARSED_TEXT:
 243  8 Text();
 244  8 break;
 245  116 default:
 246  116 jj_la1[7] = jj_gen;
 247    ;
 248    }
 249    }
 250   
 251  11 final public void JspDirective() throws ParseException {
 252    /*@bgen(jjtree) JspDirective */
 253  11 ASTJspDirective jjtn000 = new ASTJspDirective(this, JJTJSPDIRECTIVE);
 254  11 boolean jjtc000 = true;
 255  11 jjtree.openNodeScope(jjtn000);Token t;
 256  11 try {
 257  11 jj_consume_token(JSP_DIRECTIVE_START);
 258  11 t = jj_consume_token(JSP_DIRECTIVE_NAME);
 259  11 jjtn000.setName(t.image);
 260  11 label_4:
 261    while (true) {
 262  23 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 263  12 case JSP_DIRECTIVE_ATTRIBUTE_NAME:
 264    ;
 265  12 break;
 266  11 default:
 267  11 jj_la1[8] = jj_gen;
 268  11 break label_4;
 269    }
 270  12 JspDirectiveAttribute();
 271    }
 272  11 jj_consume_token(JSP_DIRECTIVE_END);
 273    } catch (Throwable jjte000) {
 274  0 if (jjtc000) {
 275  0 jjtree.clearNodeScope(jjtn000);
 276  0 jjtc000 = false;
 277    } else {
 278  0 jjtree.popNode();
 279    }
 280  0 if (jjte000 instanceof RuntimeException) {
 281  0 {if (true) throw (RuntimeException)jjte000;}
 282    }
 283  0 if (jjte000 instanceof ParseException) {
 284  0 {if (true) throw (ParseException)jjte000;}
 285    }
 286  0 {if (true) throw (Error)jjte000;}
 287    } finally {
 288  11 if (jjtc000) {
 289  11 jjtree.closeNodeScope(jjtn000, true);
 290    }
 291    }
 292    }
 293   
 294  12 final public void JspDirectiveAttribute() throws ParseException {
 295    /*@bgen(jjtree) JspDirectiveAttribute */
 296  12 ASTJspDirectiveAttribute jjtn000 = new ASTJspDirectiveAttribute(this, JJTJSPDIRECTIVEATTRIBUTE);
 297  12 boolean jjtc000 = true;
 298  12 jjtree.openNodeScope(jjtn000);Token t;
 299  12 try {
 300  12 t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_NAME);
 301  12 jjtn000.setName(t.image);
 302  12 jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_EQUALS);
 303  12 t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_VALUE);
 304  12 jjtree.closeNodeScope(jjtn000, true);
 305  12 jjtc000 = false;
 306  12 jjtn000.setValue(quoteContent(t.image));
 307    } finally {
 308  12 if (jjtc000) {
 309  0 jjtree.closeNodeScope(jjtn000, true);
 310    }
 311    }
 312    }
 313   
 314  2 final public void JspScriptlet() throws ParseException {
 315    /*@bgen(jjtree) JspScriptlet */
 316  2 ASTJspScriptlet jjtn000 = new ASTJspScriptlet(this, JJTJSPSCRIPTLET);
 317  2 boolean jjtc000 = true;
 318  2 jjtree.openNodeScope(jjtn000);Token t;
 319  2 try {
 320  2 jj_consume_token(JSP_SCRIPTLET_START);
 321  2 t = jj_consume_token(JSP_SCRIPTLET);
 322  2 jjtn000.setImage(t.image.trim());
 323  2 jj_consume_token(JSP_SCRIPTLET_END);
 324    } finally {
 325  2 if (jjtc000) {
 326  2 jjtree.closeNodeScope(jjtn000, true);
 327    }
 328    }
 329    }
 330   
 331  1 final public void JspExpression() throws ParseException {
 332    /*@bgen(jjtree) JspExpression */
 333  1 ASTJspExpression jjtn000 = new ASTJspExpression(this, JJTJSPEXPRESSION);
 334  1 boolean jjtc000 = true;
 335  1 jjtree.openNodeScope(jjtn000);Token t;
 336  1 try {
 337  1 jj_consume_token(JSP_EXPRESSION_START);
 338  1 t = jj_consume_token(JSP_EXPRESSION);
 339  1 jjtn000.setImage(t.image.trim());
 340  1 jj_consume_token(JSP_EXPRESSION_END);
 341    } finally {
 342  1 if (jjtc000) {
 343  1 jjtree.closeNodeScope(jjtn000, true);
 344    }
 345    }
 346    }
 347   
 348  1 final public void JspDeclaration() throws ParseException {
 349    /*@bgen(jjtree) JspDeclaration */
 350  1 ASTJspDeclaration jjtn000 = new ASTJspDeclaration(this, JJTJSPDECLARATION);
 351  1 boolean jjtc000 = true;
 352  1 jjtree.openNodeScope(jjtn000);Token t;
 353  1 try {
 354  1 jj_consume_token(JSP_DECLARATION_START);
 355  1 t = jj_consume_token(JSP_DECLARATION);
 356  1 jjtn000.setImage(t.image.trim());
 357  1 jj_consume_token(JSP_DECLARATION_END);
 358    } finally {
 359  1 if (jjtc000) {
 360  1 jjtree.closeNodeScope(jjtn000, true);
 361    }
 362    }
 363    }
 364   
 365  2 final public void JspComment() throws ParseException {
 366    /*@bgen(jjtree) JspComment */
 367  2 ASTJspComment jjtn000 = new ASTJspComment(this, JJTJSPCOMMENT);
 368  2 boolean jjtc000 = true;
 369  2 jjtree.openNodeScope(jjtn000);Token t;
 370  2 try {
 371  2 jj_consume_token(JSP_COMMENT_START);
 372  2 t = jj_consume_token(JSP_COMMENT_CONTENT);
 373  2 jjtn000.setImage(t.image.trim());
 374  2 jj_consume_token(JSP_COMMENT_END);
 375    } finally {
 376  2 if (jjtc000) {
 377  2 jjtree.closeNodeScope(jjtn000, true);
 378    }
 379    }
 380    }
 381   
 382    /**
 383    * This production groups all characters between two tags, where
 384    * tag is an xml-tag "<...>" or a jsp-page-tag "<%...%>" or CDATA "<![CDATA[...]]>".
 385    * Text consists of unparsed text and/or Expression Language expressions.
 386    */
 387  26 final public void Text() throws ParseException {
 388    /*@bgen(jjtree) Text */
 389  26 ASTText jjtn000 = new ASTText(this, JJTTEXT);
 390  26 boolean jjtc000 = true;
 391  26 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
 392  26 String tmp;
 393  26 try {
 394  26 label_5:
 395    while (true) {
 396  28 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 397  27 case UNPARSED_TEXT:
 398  27 tmp = UnparsedText();
 399  27 content.append(tmp);
 400  27 break;
 401  1 case EL_EXPRESSION:
 402  1 tmp = ElExpression();
 403  1 content.append(tmp);
 404  1 break;
 405  0 default:
 406  0 jj_la1[9] = jj_gen;
 407  0 jj_consume_token(-1);
 408  0 throw new ParseException();
 409    }
 410  28 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 411  1 case EL_EXPRESSION:
 412  1 case UNPARSED_TEXT:
 413    ;
 414  2 break;
 415  26 default:
 416  26 jj_la1[10] = jj_gen;
 417  26 break label_5;
 418    }
 419    }
 420  26 jjtree.closeNodeScope(jjtn000, true);
 421  26 jjtc000 = false;
 422  26 jjtn000.setImage(content.toString());
 423    } catch (Throwable jjte000) {
 424  0 if (jjtc000) {
 425  0 jjtree.clearNodeScope(jjtn000);
 426  0 jjtc000 = false;
 427    } else {
 428  0 jjtree.popNode();
 429    }
 430  0 if (jjte000 instanceof RuntimeException) {
 431  0 {if (true) throw (RuntimeException)jjte000;}
 432    }
 433  0 if (jjte000 instanceof ParseException) {
 434  0 {if (true) throw (ParseException)jjte000;}
 435    }
 436  0 {if (true) throw (Error)jjte000;}
 437    } finally {
 438  26 if (jjtc000) {
 439  0 jjtree.closeNodeScope(jjtn000, true);
 440    }
 441    }
 442    }
 443   
 444  27 final public String UnparsedText() throws ParseException {
 445    /*@bgen(jjtree) UnparsedText */
 446  27 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
 447  27 boolean jjtc000 = true;
 448  27 jjtree.openNodeScope(jjtn000);Token t;
 449  27 try {
 450  27 t = jj_consume_token(UNPARSED_TEXT);
 451  27 jjtree.closeNodeScope(jjtn000, true);
 452  27 jjtc000 = false;
 453  27 jjtn000.setImage(t.image);
 454  27 {if (true) return t.image;}
 455    } finally {
 456  27 if (jjtc000) {
 457  0 jjtree.closeNodeScope(jjtn000, true);
 458    }
 459    }
 460  0 throw new RuntimeException("Missing return statement in function");
 461    }
 462   
 463    /**
 464    * Text that contains no single quotes, and that does not contain the start
 465    * of a EL expression or value binding.
 466    */
 467  11 final public String UnparsedTextNoSingleQuotes() throws ParseException {
 468    /*@bgen(jjtree) UnparsedText */
 469  11 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
 470  11 boolean jjtc000 = true;
 471  11 jjtree.openNodeScope(jjtn000);Token t;
 472  11 try {
 473  11 t = jj_consume_token(UNPARSED_TEXT_NO_SINGLE_QUOTES);
 474  11 jjtree.closeNodeScope(jjtn000, true);
 475  11 jjtc000 = false;
 476  11 jjtn000.setImage(t.image);
 477  11 {if (true) return t.image;}
 478    } finally {
 479  11 if (jjtc000) {
 480  0 jjtree.closeNodeScope(jjtn000, true);
 481    }
 482    }
 483  0 throw new RuntimeException("Missing return statement in function");
 484    }
 485   
 486    /**
 487    * Text that contains no double quotes, and that does not contain the start
 488    * of a EL expression or value binding.
 489    */
 490  11 final public String UnparsedTextNoDoubleQuotes() throws ParseException {
 491    /*@bgen(jjtree) UnparsedText */
 492  11 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
 493  11 boolean jjtc000 = true;
 494  11 jjtree.openNodeScope(jjtn000);Token t;
 495  11 try {
 496  11 t = jj_consume_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES);
 497  11 jjtree.closeNodeScope(jjtn000, true);
 498  11 jjtc000 = false;
 499  11 jjtn000.setImage(t.image);
 500  11 {if (true) return t.image;}
 501    } finally {
 502  11 if (jjtc000) {
 503  0 jjtree.closeNodeScope(jjtn000, true);
 504    }
 505    }
 506  0 throw new RuntimeException("Missing return statement in function");
 507    }
 508   
 509    /**
 510    * An EL expression, not within an attribute value.
 511    */
 512  1 final public String ElExpression() throws ParseException {
 513    /*@bgen(jjtree) ElExpression */
 514  1 ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
 515  1 boolean jjtc000 = true;
 516  1 jjtree.openNodeScope(jjtn000);Token t;
 517  1 try {
 518  1 t = jj_consume_token(EL_EXPRESSION);
 519  1 jjtree.closeNodeScope(jjtn000, true);
 520  1 jjtc000 = false;
 521  1 jjtn000.setImage(expressionContent(t.image));
 522  1 {if (true) return t.image;}
 523    } finally {
 524  1 if (jjtc000) {
 525  0 jjtree.closeNodeScope(jjtn000, true);
 526    }
 527    }
 528  0 throw new RuntimeException("Missing return statement in function");
 529    }
 530   
 531  2 final public String ValueBindingInAttribute() throws ParseException {
 532    /*@bgen(jjtree) ValueBinding */
 533  2 ASTValueBinding jjtn000 = new ASTValueBinding(this, JJTVALUEBINDING);
 534  2 boolean jjtc000 = true;
 535  2 jjtree.openNodeScope(jjtn000);Token t;
 536  2 try {
 537  2 t = jj_consume_token(VALUE_BINDING_IN_ATTRIBUTE);
 538  2 jjtree.closeNodeScope(jjtn000, true);
 539  2 jjtc000 = false;
 540  2 jjtn000.setImage(expressionContent(t.image));
 541  2 {if (true) return t.image;}
 542    } finally {
 543  2 if (jjtc000) {
 544  0 jjtree.closeNodeScope(jjtn000, true);
 545    }
 546    }
 547  0 throw new RuntimeException("Missing return statement in function");
 548    }
 549   
 550  2 final public String ElExpressionInAttribute() throws ParseException {
 551    /*@bgen(jjtree) ElExpression */
 552  2 ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
 553  2 boolean jjtc000 = true;
 554  2 jjtree.openNodeScope(jjtn000);Token t;
 555  2 try {
 556  2 t = jj_consume_token(EL_EXPRESSION_IN_ATTRIBUTE);
 557  2 jjtree.closeNodeScope(jjtn000, true);
 558  2 jjtc000 = false;
 559  2 jjtn000.setImage(expressionContent(t.image));
 560  2 {if (true) return t.image;}
 561    } finally {
 562  2 if (jjtc000) {
 563  0 jjtree.closeNodeScope(jjtn000, true);
 564    }
 565    }
 566  0 throw new RuntimeException("Missing return statement in function");
 567    }
 568   
 569  1 final public void CData() throws ParseException {
 570    /*@bgen(jjtree) CData */
 571  1 ASTCData jjtn000 = new ASTCData(this, JJTCDATA);
 572  1 boolean jjtc000 = true;
 573  1 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
 574  1 Token t;
 575  1 try {
 576  1 jj_consume_token(CDATA_START);
 577  1 label_6:
 578    while (true) {
 579  21 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 580  20 case UNPARSED:
 581    ;
 582  20 break;
 583  1 default:
 584  1 jj_la1[11] = jj_gen;
 585  1 break label_6;
 586    }
 587  20 t = jj_consume_token(UNPARSED);
 588  20 content.append(t.image);
 589    }
 590  1 jj_consume_token(CDATA_END);
 591  1 jjtree.closeNodeScope(jjtn000, true);
 592  1 jjtc000 = false;
 593  1 jjtn000.setImage(content.toString());
 594    } finally {
 595  1 if (jjtc000) {
 596  0 jjtree.closeNodeScope(jjtn000, true);
 597    }
 598    }
 599    }
 600   
 601    /**
 602    * A XML element, either with a single empty tag, or with a starting and closing tag
 603    * with optional contained content.
 604    */
 605  100 final public void Element() throws ParseException {
 606    /*@bgen(jjtree) Element */
 607  100 ASTElement jjtn000 = new ASTElement(this, JJTELEMENT);
 608  100 boolean jjtc000 = true;
 609  100 jjtree.openNodeScope(jjtn000);Token startTagName;
 610  100 Token endTagName;
 611  100 String tagName;
 612  100 try {
 613  100 jj_consume_token(TAG_START);
 614  100 startTagName = jj_consume_token(TAG_NAME);
 615  100 tagName = startTagName.image; jjtn000.setName(tagName);
 616  100 label_7:
 617    while (true) {
 618  125 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 619  25 case ATTR_NAME:
 620    ;
 621  25 break;
 622  100 default:
 623  100 jj_la1[12] = jj_gen;
 624  100 break label_7;
 625    }
 626  25 Attribute();
 627    }
 628  100 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 629  94 case TAG_END:
 630  94 jj_consume_token(TAG_END);
 631  94 jjtn000.setEmpty(false);
 632  94 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 633  58 case TAG_START:
 634  6 case COMMENT_START:
 635  1 case CDATA_START:
 636  2 case JSP_COMMENT_START:
 637  1 case JSP_DECLARATION_START:
 638  1 case JSP_EXPRESSION_START:
 639  2 case JSP_SCRIPTLET_START:
 640  1 case JSP_DIRECTIVE_START:
 641  0 case EL_EXPRESSION:
 642  18 case UNPARSED_TEXT:
 643  90 Content();
 644  90 break;
 645  4 default:
 646  4 jj_la1[13] = jj_gen;
 647    ;
 648    }
 649  94 jj_consume_token(ENDTAG_START);
 650  94 endTagName = jj_consume_token(TAG_NAME);
 651  94 if (! tagName.equalsIgnoreCase(endTagName.image)) {
 652  0 {if (true) throw new StartAndEndTagMismatchException(
 653    startTagName.beginLine, startTagName.beginColumn,
 654    startTagName.image,
 655    endTagName.beginLine, endTagName.beginColumn,
 656    endTagName.image );}
 657    }
 658  94 jj_consume_token(TAG_END);
 659  94 break;
 660  6 case TAG_SLASHEND:
 661  6 jj_consume_token(TAG_SLASHEND);
 662  6 jjtree.closeNodeScope(jjtn000, true);
 663  6 jjtc000 = false;
 664  6 jjtn000.setEmpty(true);
 665  6 break;
 666  0 default:
 667  0 jj_la1[14] = jj_gen;
 668  0 jj_consume_token(-1);
 669  0 throw new ParseException();
 670    }
 671    } catch (Throwable jjte000) {
 672  0 if (jjtc000) {
 673  0 jjtree.clearNodeScope(jjtn000);
 674  0 jjtc000 = false;
 675    } else {
 676  0 jjtree.popNode();
 677    }
 678  0 if (jjte000 instanceof RuntimeException) {
 679  0 {if (true) throw (RuntimeException)jjte000;}
 680    }
 681  0 if (jjte000 instanceof ParseException) {
 682  0 {if (true) throw (ParseException)jjte000;}
 683    }
 684  0 {if (true) throw (Error)jjte000;}
 685    } finally {
 686  100 if (jjtc000) {
 687  94 jjtree.closeNodeScope(jjtn000, true);
 688    }
 689    }
 690    }
 691   
 692  27 final public void Attribute() throws ParseException {
 693    /*@bgen(jjtree) Attribute */
 694  27 ASTAttribute jjtn000 = new ASTAttribute(this, JJTATTRIBUTE);
 695  27 boolean jjtc000 = true;
 696  27 jjtree.openNodeScope(jjtn000);Token t;
 697  27 try {
 698  27 t = jj_consume_token(ATTR_NAME);
 699  27 jjtn000.setName(t.image);
 700  27 jj_consume_token(ATTR_EQ);
 701  27 AttributeValue();
 702    } catch (Throwable jjte000) {
 703  0 if (jjtc000) {
 704  0 jjtree.clearNodeScope(jjtn000);
 705  0 jjtc000 = false;
 706    } else {
 707  0 jjtree.popNode();
 708    }
 709  0 if (jjte000 instanceof RuntimeException) {
 710  0 {if (true) throw (RuntimeException)jjte000;}
 711    }
 712  0 if (jjte000 instanceof ParseException) {
 713  0 {if (true) throw (ParseException)jjte000;}
 714    }
 715  0 {if (true) throw (Error)jjte000;}
 716    } finally {
 717  27 if (jjtc000) {
 718  27 jjtree.closeNodeScope(jjtn000, true);
 719    }
 720    }
 721    }
 722   
 723    /**
 724    * The value of an attribute of an element.
 725    * EL expressions, JSF value bindings, and JSP expressions
 726    * are parsed as sub-nodes of the AttributeValue node.
 727    */
 728  27 final public void AttributeValue() throws ParseException {
 729    /*@bgen(jjtree) AttributeValue */
 730  27 ASTAttributeValue jjtn000 = new ASTAttributeValue(this, JJTATTRIBUTEVALUE);
 731  27 boolean jjtc000 = true;
 732  27 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
 733  27 String tmp;
 734  27 Token t;
 735  27 try {
 736  27 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 737  12 case DOUBLE_QUOTE:
 738  12 jj_consume_token(DOUBLE_QUOTE);
 739  12 label_8:
 740    while (true) {
 741  24 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 742  1 case EL_EXPRESSION_IN_ATTRIBUTE:
 743  0 case VALUE_BINDING_IN_ATTRIBUTE:
 744  0 case JSP_EXPRESSION_IN_ATTRIBUTE:
 745  11 case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
 746    ;
 747  12 break;
 748  12 default:
 749  12 jj_la1[15] = jj_gen;
 750  12 break label_8;
 751    }
 752  12 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 753  11 case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
 754  11 tmp = UnparsedTextNoDoubleQuotes();
 755  11 break;
 756  1 case EL_EXPRESSION_IN_ATTRIBUTE:
 757  0 case VALUE_BINDING_IN_ATTRIBUTE:
 758  0 case JSP_EXPRESSION_IN_ATTRIBUTE:
 759  1 tmp = QuoteIndependentAttributeValueContent();
 760  1 break;
 761  0 default:
 762  0 jj_la1[16] = jj_gen;
 763  0 jj_consume_token(-1);
 764  0 throw new ParseException();
 765    }
 766  12 content.append(tmp);
 767    }
 768  12 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 769  10 case ENDING_DOUBLE_QUOTE:
 770  10 jj_consume_token(ENDING_DOUBLE_QUOTE);
 771  10 break;
 772  2 case DOLLAR_OR_HASH_DOUBLE_QUOTE:
 773  2 t = jj_consume_token(DOLLAR_OR_HASH_DOUBLE_QUOTE);
 774  2 content.append(t.image.substring(0, 1));
 775  2 break;
 776  0 default:
 777  0 jj_la1[17] = jj_gen;
 778  0 jj_consume_token(-1);
 779  0 throw new ParseException();
 780    }
 781  12 break;
 782  15 case SINGLE_QUOTE:
 783  15 jj_consume_token(SINGLE_QUOTE);
 784  15 label_9:
 785    while (true) {
 786  30 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 787  1 case EL_EXPRESSION_IN_ATTRIBUTE:
 788  2 case VALUE_BINDING_IN_ATTRIBUTE:
 789  1 case JSP_EXPRESSION_IN_ATTRIBUTE:
 790  11 case UNPARSED_TEXT_NO_SINGLE_QUOTES:
 791    ;
 792  15 break;
 793  15 default:
 794  15 jj_la1[18] = jj_gen;
 795  15 break label_9;
 796    }
 797  15 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 798  11 case UNPARSED_TEXT_NO_SINGLE_QUOTES:
 799  11 tmp = UnparsedTextNoSingleQuotes();
 800  11 break;
 801  1 case EL_EXPRESSION_IN_ATTRIBUTE:
 802  2 case VALUE_BINDING_IN_ATTRIBUTE:
 803  1 case JSP_EXPRESSION_IN_ATTRIBUTE:
 804  4 tmp = QuoteIndependentAttributeValueContent();
 805  4 break;
 806  0 default:
 807  0 jj_la1[19] = jj_gen;
 808  0 jj_consume_token(-1);
 809  0 throw new ParseException();
 810    }
 811  15 content.append(tmp);
 812    }
 813  15 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 814  15 case ENDING_SINGLE_QUOTE:
 815  15 jj_consume_token(ENDING_SINGLE_QUOTE);
 816  15 break;
 817  0 case DOLLAR_OR_HASH_SINGLE_QUOTE:
 818  0 t = jj_consume_token(DOLLAR_OR_HASH_SINGLE_QUOTE);
 819  0 content.append(t.image.substring(0, 1));
 820  0 break;
 821  0 default:
 822  0 jj_la1[20] = jj_gen;
 823  0 jj_consume_token(-1);
 824  0 throw new ParseException();
 825    }
 826  15 break;
 827  0 default:
 828  0 jj_la1[21] = jj_gen;
 829  0 jj_consume_token(-1);
 830  0 throw new ParseException();
 831    }
 832  27 jjtree.closeNodeScope(jjtn000, true);
 833  27 jjtc000 = false;
 834  27 jjtn000.setImage( content.toString() );
 835    } catch (Throwable jjte000) {
 836  0 if (jjtc000) {
 837  0 jjtree.clearNodeScope(jjtn000);
 838  0 jjtc000 = false;
 839    } else {
 840  0 jjtree.popNode();
 841    }
 842  0 if (jjte000 instanceof RuntimeException) {
 843  0 {if (true) throw (RuntimeException)jjte000;}
 844    }
 845  0 if (jjte000 instanceof ParseException) {
 846  0 {if (true) throw (ParseException)jjte000;}
 847    }
 848  0 {if (true) throw (Error)jjte000;}
 849    } finally {
 850  27 if (jjtc000) {
 851  0 jjtree.closeNodeScope(jjtn000, true);
 852    }
 853    }
 854    }
 855   
 856    /**
 857    * Partial content of an attribute value that can contain all quotes.
 858    * This groups EL expressions, value bindings, and JSP expressions.
 859    */
 860  5 final public String QuoteIndependentAttributeValueContent() throws ParseException {
 861  5 String tmp;
 862  5 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 863  2 case EL_EXPRESSION_IN_ATTRIBUTE:
 864  2 tmp = ElExpressionInAttribute();
 865  2 break;
 866  2 case VALUE_BINDING_IN_ATTRIBUTE:
 867  2 tmp = ValueBindingInAttribute();
 868  2 break;
 869  1 case JSP_EXPRESSION_IN_ATTRIBUTE:
 870  1 tmp = JspExpressionInAttribute();
 871  1 break;
 872  0 default:
 873  0 jj_la1[22] = jj_gen;
 874  0 jj_consume_token(-1);
 875  0 throw new ParseException();
 876    }
 877  5 {if (true) return tmp;}
 878  0 throw new RuntimeException("Missing return statement in function");
 879    }
 880   
 881  1 final public String JspExpressionInAttribute() throws ParseException {
 882    /*@bgen(jjtree) JspExpressionInAttribute */
 883  1 ASTJspExpressionInAttribute jjtn000 = new ASTJspExpressionInAttribute(this, JJTJSPEXPRESSIONINATTRIBUTE);
 884  1 boolean jjtc000 = true;
 885  1 jjtree.openNodeScope(jjtn000);Token t;
 886  1 try {
 887  1 t = jj_consume_token(JSP_EXPRESSION_IN_ATTRIBUTE);
 888  1 jjtree.closeNodeScope(jjtn000, true);
 889  1 jjtc000 = false;
 890  1 jjtn000.setImage(t.image.substring(3, t.image.length()-2).trim()); // without <% and %>
 891  1 {if (true) return t.image;}
 892    } finally {
 893  1 if (jjtc000) {
 894  0 jjtree.closeNodeScope(jjtn000, true);
 895    }
 896    }
 897  0 throw new RuntimeException("Missing return statement in function");
 898    }
 899   
 900  6 final public void CommentTag() throws ParseException {
 901    /*@bgen(jjtree) CommentTag */
 902  6 ASTCommentTag jjtn000 = new ASTCommentTag(this, JJTCOMMENTTAG);
 903  6 boolean jjtc000 = true;
 904  6 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
 905  6 Token t;
 906  6 try {
 907  6 jj_consume_token(COMMENT_START);
 908  6 label_10:
 909    while (true) {
 910  631 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 911  625 case COMMENT_TEXT:
 912    ;
 913  625 break;
 914  6 default:
 915  6 jj_la1[23] = jj_gen;
 916  6 break label_10;
 917    }
 918  625 t = jj_consume_token(COMMENT_TEXT);
 919  625 content.append(t.image);
 920    }
 921  6 jj_consume_token(COMMENT_END);
 922  6 jjtree.closeNodeScope(jjtn000, true);
 923  6 jjtc000 = false;
 924  6 jjtn000.setImage(content.toString().trim());
 925    } finally {
 926  6 if (jjtc000) {
 927  0 jjtree.closeNodeScope(jjtn000, true);
 928    }
 929    }
 930    }
 931   
 932  1 final public void Declaration() throws ParseException {
 933    /*@bgen(jjtree) Declaration */
 934  1 ASTDeclaration jjtn000 = new ASTDeclaration(this, JJTDECLARATION);
 935  1 boolean jjtc000 = true;
 936  1 jjtree.openNodeScope(jjtn000);Token t;
 937  1 try {
 938  1 jj_consume_token(DECL_START);
 939  1 t = jj_consume_token(TAG_NAME);
 940  1 jjtn000.setName(t.image);
 941  1 label_11:
 942    while (true) {
 943  3 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 944  2 case ATTR_NAME:
 945    ;
 946  2 break;
 947  1 default:
 948  1 jj_la1[24] = jj_gen;
 949  1 break label_11;
 950    }
 951  2 Attribute();
 952    }
 953  1 jj_consume_token(DECL_END);
 954    } catch (Throwable jjte000) {
 955  0 if (jjtc000) {
 956  0 jjtree.clearNodeScope(jjtn000);
 957  0 jjtc000 = false;
 958    } else {
 959  0 jjtree.popNode();
 960    }
 961  0 if (jjte000 instanceof RuntimeException) {
 962  0 {if (true) throw (RuntimeException)jjte000;}
 963    }
 964  0 if (jjte000 instanceof ParseException) {
 965  0 {if (true) throw (ParseException)jjte000;}
 966    }
 967  0 {if (true) throw (Error)jjte000;}
 968    } finally {
 969  1 if (jjtc000) {
 970  1 jjtree.closeNodeScope(jjtn000, true);
 971    }
 972    }
 973    }
 974   
 975  1 final public void DoctypeDeclaration() throws ParseException {
 976    /*@bgen(jjtree) DoctypeDeclaration */
 977  1 ASTDoctypeDeclaration jjtn000 = new ASTDoctypeDeclaration(this, JJTDOCTYPEDECLARATION);
 978  1 boolean jjtc000 = true;
 979  1 jjtree.openNodeScope(jjtn000);Token t;
 980  1 try {
 981  1 jj_consume_token(DOCTYPE_DECL_START);
 982  1 jj_consume_token(WHITESPACES);
 983  1 t = jj_consume_token(NAME);
 984  1 jjtn000.setName(t.image);
 985  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 986  1 case WHITESPACES:
 987  1 jj_consume_token(WHITESPACES);
 988  1 break;
 989  0 default:
 990  0 jj_la1[25] = jj_gen;
 991    ;
 992    }
 993  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 994  1 case PUBLIC:
 995  0 case SYSTEM:
 996  1 DoctypeExternalId();
 997  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 998  0 case WHITESPACES:
 999  0 jj_consume_token(WHITESPACES);
 1000  0 break;
 1001  1 default:
 1002  1 jj_la1[26] = jj_gen;
 1003    ;
 1004    }
 1005  1 break;
 1006  0 default:
 1007  0 jj_la1[27] = jj_gen;
 1008    ;
 1009    }
 1010  1 jj_consume_token(DOCTYPE_DECL_END);
 1011    } catch (Throwable jjte000) {
 1012  0 if (jjtc000) {
 1013  0 jjtree.clearNodeScope(jjtn000);
 1014  0 jjtc000 = false;
 1015    } else {
 1016  0 jjtree.popNode();
 1017    }
 1018  0 if (jjte000 instanceof RuntimeException) {
 1019  0 {if (true) throw (RuntimeException)jjte000;}
 1020    }
 1021  0 if (jjte000 instanceof ParseException) {
 1022  0 {if (true) throw (ParseException)jjte000;}
 1023    }
 1024  0 {if (true) throw (Error)jjte000;}
 1025    } finally {
 1026  1 if (jjtc000) {
 1027  1 jjtree.closeNodeScope(jjtn000, true);
 1028    }
 1029    }
 1030    }
 1031   
 1032  1 final public void DoctypeExternalId() throws ParseException {
 1033    /*@bgen(jjtree) DoctypeExternalId */
 1034  1 ASTDoctypeExternalId jjtn000 = new ASTDoctypeExternalId(this, JJTDOCTYPEEXTERNALID);
 1035  1 boolean jjtc000 = true;
 1036  1 jjtree.openNodeScope(jjtn000);Token systemLiteral;
 1037  1 Token pubIdLiteral;
 1038  1 try {
 1039  1 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 1040  0 case SYSTEM:
 1041  0 jj_consume_token(SYSTEM);
 1042  0 jj_consume_token(WHITESPACES);
 1043  0 systemLiteral = jj_consume_token(QUOTED_LITERAL);
 1044  0 jjtree.closeNodeScope(jjtn000, true);
 1045  0 jjtc000 = false;
 1046  0 jjtn000.setUri(quoteContent(systemLiteral.image));
 1047  0 break;
 1048  1 case PUBLIC:
 1049  1 jj_consume_token(PUBLIC);
 1050  1 jj_consume_token(WHITESPACES);
 1051  1 pubIdLiteral = jj_consume_token(QUOTED_LITERAL);
 1052  1 jjtn000.setPublicId(quoteContent(pubIdLiteral.image));
 1053  1 jj_consume_token(WHITESPACES);
 1054  1 systemLiteral = jj_consume_token(QUOTED_LITERAL);
 1055  1 jjtree.closeNodeScope(jjtn000, true);
 1056  1 jjtc000 = false;
 1057  1 jjtn000.setUri(quoteContent(systemLiteral.image));
 1058  1 break;
 1059  0 default:
 1060  0 jj_la1[28] = jj_gen;
 1061  0 jj_consume_token(-1);
 1062  0 throw new ParseException();
 1063    }
 1064    } finally {
 1065  1 if (jjtc000) {
 1066  0 jjtree.closeNodeScope(jjtn000, true);
 1067    }
 1068    }
 1069    }
 1070   
 1071  39 final private boolean jj_2_1(int xla) {
 1072  39 jj_la = xla; jj_lastpos = jj_scanpos = token;
 1073  39 try { return !jj_3_1(); }
 1074  0 catch(LookaheadSuccess ls) { return true; }
 1075  39 finally { jj_save(0, xla); }
 1076    }
 1077   
 1078  39 final private boolean jj_2_2(int xla) {
 1079  39 jj_la = xla; jj_lastpos = jj_scanpos = token;
 1080  39 try { return !jj_3_2(); }
 1081  0 catch(LookaheadSuccess ls) { return true; }
 1082  39 finally { jj_save(1, xla); }
 1083    }
 1084   
 1085  1 final private boolean jj_3R_31() {
 1086  0 if (jj_scan_token(SINGLE_QUOTE)) return true;
 1087  1 Token xsp;
 1088  1 while (true) {
 1089  2 xsp = jj_scanpos;
 1090  1 if (jj_3R_34()) { jj_scanpos = xsp; break; }
 1091    }
 1092  1 xsp = jj_scanpos;
 1093  1 if (jj_scan_token(69)) {
 1094  0 jj_scanpos = xsp;
 1095  0 if (jj_3R_35()) return true;
 1096    }
 1097  1 return false;
 1098    }
 1099   
 1100  2 final private boolean jj_3R_46() {
 1101  2 if (jj_scan_token(EL_EXPRESSION_IN_ATTRIBUTE)) return true;
 1102  0 return false;
 1103    }
 1104   
 1105  2 final private boolean jj_3R_30() {
 1106  1 if (jj_scan_token(DOUBLE_QUOTE)) return true;
 1107  1 Token xsp;
 1108  1 while (true) {
 1109  2 xsp = jj_scanpos;
 1110  1 if (jj_3R_32()) { jj_scanpos = xsp; break; }
 1111    }
 1112  1 xsp = jj_scanpos;
 1113  1 if (jj_scan_token(72)) {
 1114  0 jj_scanpos = xsp;
 1115  0 if (jj_3R_33()) return true;
 1116    }
 1117  1 return false;
 1118    }
 1119   
 1120  1 final private boolean jj_3R_29() {
 1121  0 if (jj_scan_token(PUBLIC)) return true;
 1122  0 if (jj_scan_token(WHITESPACES)) return true;
 1123  0 if (jj_scan_token(QUOTED_LITERAL)) return true;
 1124  0 if (jj_scan_token(WHITESPACES)) return true;
 1125  0 if (jj_scan_token(QUOTED_LITERAL)) return true;
 1126  1 return false;
 1127    }
 1128   
 1129  2 final private boolean jj_3R_47() {
 1130  2 if (jj_scan_token(VALUE_BINDING_IN_ATTRIBUTE)) return true;
 1131  0 return false;
 1132    }
 1133   
 1134  2 final private boolean jj_3R_27() {
 1135  2 Token xsp;
 1136  2 xsp = jj_scanpos;
 1137  2 if (jj_3R_30()) {
 1138  1 jj_scanpos = xsp;
 1139  0 if (jj_3R_31()) return true;
 1140    }
 1141  2 return false;
 1142    }
 1143   
 1144  1 final private boolean jj_3R_25() {
 1145  1 Token xsp;
 1146  1 xsp = jj_scanpos;
 1147  1 if (jj_3R_28()) {
 1148  1 jj_scanpos = xsp;
 1149  0 if (jj_3R_29()) return true;
 1150    }
 1151  1 return false;
 1152    }
 1153   
 1154  1 final private boolean jj_3R_28() {
 1155  1 if (jj_scan_token(SYSTEM)) return true;
 1156  0 if (jj_scan_token(WHITESPACES)) return true;
 1157  0 if (jj_scan_token(QUOTED_LITERAL)) return true;
 1158  0 return false;
 1159    }
 1160   
 1161  1 final private boolean jj_3R_21() {
 1162  0 if (jj_3R_25()) return true;
 1163  1 Token xsp;
 1164  1 xsp = jj_scanpos;
 1165  1 if (jj_scan_token(48)) jj_scanpos = xsp;
 1166  1 return false;
 1167    }
 1168   
 1169  2 final private boolean jj_3R_40() {
 1170  1 if (jj_scan_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES)) return true;
 1171  1 return false;
 1172    }
 1173   
 1174  39 final private boolean jj_3R_15() {
 1175  38 if (jj_scan_token(DOCTYPE_DECL_START)) return true;
 1176  0 if (jj_scan_token(WHITESPACES)) return true;
 1177  0 if (jj_scan_token(NAME)) return true;
 1178  1 Token xsp;
 1179  1 xsp = jj_scanpos;
 1180  0 if (jj_scan_token(48)) jj_scanpos = xsp;
 1181  1 xsp = jj_scanpos;
 1182  0 if (jj_3R_21()) jj_scanpos = xsp;
 1183  0 if (jj_scan_token(DOCTYPE_DECL_END)) return true;
 1184  1 return false;
 1185    }
 1186   
 1187  3 final private boolean jj_3R_24() {
 1188  1 if (jj_scan_token(ATTR_NAME)) return true;
 1189  0 if (jj_scan_token(ATTR_EQ)) return true;
 1190  0 if (jj_3R_27()) return true;
 1191  2 return false;
 1192    }
 1193   
 1194  39 final private boolean jj_3R_20() {
 1195  39 if (jj_3R_23()) return true;
 1196  0 return false;
 1197    }
 1198   
 1199  2 final private boolean jj_3R_42() {
 1200  1 if (jj_scan_token(UNPARSED_TEXT_NO_SINGLE_QUOTES)) return true;
 1201  1 return false;
 1202    }
 1203   
 1204  3 final private boolean jj_3R_18() {
 1205  1 if (jj_3R_24()) return true;
 1206  2 return false;
 1207    }
 1208   
 1209  39 final private boolean jj_3R_13() {
 1210  38 if (jj_scan_token(DECL_START)) return true;
 1211  0 if (jj_scan_token(TAG_NAME)) return true;
 1212  1 Token xsp;
 1213  1 while (true) {
 1214  3 xsp = jj_scanpos;
 1215  1 if (jj_3R_18()) { jj_scanpos = xsp; break; }
 1216    }
 1217  0 if (jj_scan_token(DECL_END)) return true;
 1218  1 return false;
 1219    }
 1220   
 1221  39 final private boolean jj_3R_17() {
 1222  39 if (jj_3R_23()) return true;
 1223  0 return false;
 1224    }
 1225   
 1226  0 final private boolean jj_3R_26() {
 1227  0 if (jj_scan_token(COMMENT_TEXT)) return true;
 1228  0 return false;
 1229    }
 1230   
 1231  39 final private boolean jj_3R_19() {
 1232  39 if (jj_3R_22()) return true;
 1233  0 return false;
 1234    }
 1235   
 1236  39 final private boolean jj_3R_14() {
 1237  39 Token xsp;
 1238  39 xsp = jj_scanpos;
 1239  39 if (jj_3R_19()) {
 1240  39 jj_scanpos = xsp;
 1241  39 if (jj_3R_20()) return true;
 1242    }
 1243  0 return false;
 1244    }
 1245   
 1246  78 final private boolean jj_3R_22() {
 1247  78 if (jj_scan_token(COMMENT_START)) return true;
 1248  0 Token xsp;
 1249  0 while (true) {
 1250  0 xsp = jj_scanpos;
 1251  0 if (jj_3R_26()) { jj_scanpos = xsp; break; }
 1252    }
 1253  0 if (jj_scan_token(COMMENT_END)) return true;
 1254  0 return false;
 1255    }
 1256   
 1257  39 final private boolean jj_3_2() {
 1258  39 Token xsp;
 1259  39 while (true) {
 1260  39 xsp = jj_scanpos;
 1261  39 if (jj_3R_14()) { jj_scanpos = xsp; break; }
 1262    }
 1263  38 if (jj_3R_15()) return true;
 1264  1 return false;
 1265    }
 1266   
 1267  39 final private boolean jj_3R_12() {
 1268  39 Token xsp;
 1269  39 xsp = jj_scanpos;
 1270  39 if (jj_3R_16()) {
 1271  39 jj_scanpos = xsp;
 1272  39 if (jj_3R_17()) return true;
 1273    }
 1274  0 return false;
 1275    }
 1276   
 1277  39 final private boolean jj_3R_16() {
 1278  39 if (jj_3R_22()) return true;
 1279  0 return false;
 1280    }
 1281   
 1282  2 final private boolean jj_3R_48() {
 1283  2 if (jj_scan_token(JSP_EXPRESSION_IN_ATTRIBUTE)) return true;
 1284  0 return false;
 1285    }
 1286   
 1287  2 final private boolean jj_3R_45() {
 1288  2 if (jj_3R_48()) return true;
 1289  0 return false;
 1290    }
 1291   
 1292  39 final private boolean jj_3_1() {
 1293  39 Token xsp;
 1294  39 while (true) {
 1295  39 xsp = jj_scanpos;
 1296  39 if (jj_3R_12()) { jj_scanpos = xsp; break; }
 1297    }
 1298  38 if (jj_3R_13()) return true;
 1299  1 return false;
 1300    }
 1301   
 1302  2 final private boolean jj_3R_44() {
 1303  2 if (jj_3R_47()) return true;
 1304  0 return false;
 1305    }
 1306   
 1307  2 final private boolean jj_3R_43() {
 1308  2 if (jj_3R_46()) return true;
 1309  0 return false;
 1310    }
 1311   
 1312  1 final private boolean jj_3R_39() {
 1313  1 if (jj_3R_41()) return true;
 1314  0 return false;
 1315    }
 1316   
 1317  0 final private boolean jj_3R_35() {
 1318  0 if (jj_scan_token(DOLLAR_OR_HASH_SINGLE_QUOTE)) return true;
 1319  0 return false;
 1320    }
 1321   
 1322  2 final private boolean jj_3R_38() {
 1323  1 if (jj_3R_42()) return true;
 1324  1 return false;
 1325    }
 1326   
 1327  0 final private boolean jj_3R_33() {
 1328  0 if (jj_scan_token(DOLLAR_OR_HASH_DOUBLE_QUOTE)) return true;
 1329  0 return false;
 1330    }
 1331   
 1332  2 final private boolean jj_3R_41() {
 1333  2 Token xsp;
 1334  2 xsp = jj_scanpos;
 1335  2 if (jj_3R_43()) {
 1336  2 jj_scanpos = xsp;
 1337  2 if (jj_3R_44()) {
 1338  2 jj_scanpos = xsp;
 1339  2 if (jj_3R_45()) return true;
 1340    }
 1341    }
 1342  0 return false;
 1343    }
 1344   
 1345  2 final private boolean jj_3R_34() {
 1346  2 Token xsp;
 1347  2 xsp = jj_scanpos;
 1348  2 if (jj_3R_38()) {
 1349  1 jj_scanpos = xsp;
 1350  1 if (jj_3R_39()) return true;
 1351    }
 1352  1 return false;
 1353    }
 1354   
 1355  1 final private boolean jj_3R_37() {
 1356  1 if (jj_3R_41()) return true;
 1357  0 return false;
 1358    }
 1359   
 1360  2 final private boolean jj_3R_36() {
 1361  1 if (jj_3R_40()) return true;
 1362  1 return false;
 1363    }
 1364   
 1365  78 final private boolean jj_3R_23() {
 1366  78 if (jj_scan_token(JSP_COMMENT_START)) return true;
 1367  0 if (jj_scan_token(JSP_COMMENT_CONTENT)) return true;
 1368  0 if (jj_scan_token(JSP_COMMENT_END)) return true;
 1369  0 return false;
 1370    }
 1371   
 1372  2 final private boolean jj_3R_32() {
 1373  2 Token xsp;
 1374  2 xsp = jj_scanpos;
 1375  2 if (jj_3R_36()) {
 1376  1 jj_scanpos = xsp;
 1377  1 if (jj_3R_37()) return true;
 1378    }
 1379  1 return false;
 1380    }
 1381   
 1382    public JspParserTokenManager token_source;
 1383    public Token token, jj_nt;
 1384    private int jj_ntk;
 1385    private Token jj_scanpos, jj_lastpos;
 1386    private int jj_la;
 1387    public boolean lookingAhead = false;
 1388    private boolean jj_semLA;
 1389    private int jj_gen;
 1390    final private int[] jj_la1 = new int[29];
 1391    static private int[] jj_la1_0;
 1392    static private int[] jj_la1_1;
 1393    static private int[] jj_la1_2;
 1394    static {
 1395  12 jj_la1_0();
 1396  12 jj_la1_1();
 1397  12 jj_la1_2();
 1398    }
 1399  12 private static void jj_la1_0() {
 1400  12 jj_la1_0 = new int[] {0x11000000,0x11000000,0x11000000,0x11000000,0xf9400000,0xf9400000,0xf9400000,0x0,0x0,0x0,0x0,0x0,0x0,0xf9400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
 1401    }
 1402  12 private static void jj_la1_1() {
 1403  12 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x7,0x1,0x1,0x6,0x10,0x6,0x6,0x400000,0x4000000,0x7,0x28000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x10000,0x10000,0xc0000,0xc0000,};
 1404    }
 1405  12 private static void jj_la1_2() {
 1406  12 jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x21c,0x21c,0x500,0x5c,0x5c,0xa0,0x3,0x1c,0x1000,0x0,0x0,0x0,0x0,0x0,};
 1407    }
 1408    final private JJCalls[] jj_2_rtns = new JJCalls[2];
 1409    private boolean jj_rescan = false;
 1410    private int jj_gc = 0;
 1411   
 1412  39 public JspParser(CharStream stream) {
 1413  39 token_source = new JspParserTokenManager(stream);
 1414  39 token = new Token();
 1415  39 jj_ntk = -1;
 1416  39 jj_gen = 0;
 1417  1131 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
 1418  78 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
 1419    }
 1420   
 1421  0 public void ReInit(CharStream stream) {
 1422  0 token_source.ReInit(stream);
 1423  0 token = new Token();
 1424  0 jj_ntk = -1;
 1425  0 jjtree.reset();
 1426  0 jj_gen = 0;
 1427  0 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
 1428  0 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
 1429    }
 1430   
 1431  0 public JspParser(JspParserTokenManager tm) {
 1432  0 token_source = tm;
 1433  0 token = new Token();
 1434  0 jj_ntk = -1;
 1435  0 jj_gen = 0;
 1436  0 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
 1437  0 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
 1438    }
 1439   
 1440  0 public void ReInit(JspParserTokenManager tm) {
 1441  0 token_source = tm;
 1442  0 token = new Token();
 1443  0 jj_ntk = -1;
 1444  0 jjtree.reset();
 1445  0 jj_gen = 0;
 1446  0 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
 1447  0 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
 1448    }
 1449   
 1450  1543 final private Token jj_consume_token(int kind) throws ParseException {
 1451  1543 Token oldToken;
 1452  ? if ((oldToken = token).next != null) token = token.next;
 1453  360 else token = token.next = token_source.getNextToken();
 1454  1543 jj_ntk = -1;
 1455  1543 if (token.kind == kind) {
 1456  1543 jj_gen++;
 1457  1543 if (++jj_gc > 100) {
 1458  6 jj_gc = 0;
 1459  6 for (int i = 0; i < jj_2_rtns.length; i++) {
 1460  12 JJCalls c = jj_2_rtns[i];
 1461  12 while (c != null) {
 1462  12 if (c.gen < jj_gen) c.first = null;
 1463  12 c = c.next;
 1464    }
 1465    }
 1466    }
 1467  1543 return token;
 1468    }
 1469  0 token = oldToken;
 1470  0 jj_kind = kind;
 1471  0 throw generateParseException();
 1472    }
 1473   
 1474    static private final class LookaheadSuccess extends java.lang.Error { }
 1475    final private LookaheadSuccess jj_ls = new LookaheadSuccess();
 1476  267 final private boolean jj_scan_token(int kind) {
 1477  267 if (jj_scanpos == jj_lastpos) {
 1478  99 jj_la--;
 1479  99 if (jj_scanpos.next == null) {
 1480  61 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
 1481    } else {
 1482  38 jj_lastpos = jj_scanpos = jj_scanpos.next;
 1483    }
 1484    } else {
 1485  168 jj_scanpos = jj_scanpos.next;
 1486    }
 1487  267 if (jj_rescan) {
 1488  0 int i = 0; Token tok = token;
 1489  0 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
 1490  0 if (tok != null) jj_add_error_token(kind, i);
 1491    }
 1492  244 if (jj_scanpos.kind != kind) return true;
 1493  0 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
 1494  23 return false;
 1495    }
 1496   
 1497  0 final public Token getNextToken() {
 1498  0 if (token.next != null) token = token.next;
 1499  0 else token = token.next = token_source.getNextToken();
 1500  0 jj_ntk = -1;
 1501  0 jj_gen++;
 1502  0 return token;
 1503    }
 1504   
 1505  0 final public Token getToken(int index) {
 1506  0 Token t = lookingAhead ? jj_scanpos : token;
 1507  0 for (int i = 0; i < index; i++) {
 1508  0 if (t.next != null) t = t.next;
 1509  0 else t = t.next = token_source.getNextToken();
 1510    }
 1511  0 return t;
 1512    }
 1513   
 1514  1174 final private int jj_ntk() {
 1515  ? if ((jj_nt=token.next) == null)
 1516  1122 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
 1517    else
 1518  52 return (jj_ntk = jj_nt.kind);
 1519    }
 1520   
 1521    private java.util.Vector jj_expentries = new java.util.Vector();
 1522    private int[] jj_expentry;
 1523    private int jj_kind = -1;
 1524    private int[] jj_lasttokens = new int[100];
 1525    private int jj_endpos;
 1526   
 1527  0 private void jj_add_error_token(int kind, int pos) {
 1528  0 if (pos >= 100) return;
 1529  0 if (pos == jj_endpos + 1) {
 1530  0 jj_lasttokens[jj_endpos++] = kind;
 1531  0 } else if (jj_endpos != 0) {
 1532  0 jj_expentry = new int[jj_endpos];
 1533  0 for (int i = 0; i < jj_endpos; i++) {
 1534  0 jj_expentry[i] = jj_lasttokens[i];
 1535    }
 1536  0 boolean exists = false;
 1537  0 for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
 1538  0 int[] oldentry = (int[])(e.nextElement());
 1539  0 if (oldentry.length == jj_expentry.length) {
 1540  0 exists = true;
 1541  0 for (int i = 0; i < jj_expentry.length; i++) {
 1542  0 if (oldentry[i] != jj_expentry[i]) {
 1543  0 exists = false;
 1544  0 break;
 1545    }
 1546    }
 1547  0 if (exists) break;
 1548    }
 1549    }
 1550  0 if (!exists) jj_expentries.addElement(jj_expentry);
 1551  0 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
 1552    }
 1553    }
 1554   
 1555  0 public ParseException generateParseException() {
 1556  0 jj_expentries.removeAllElements();
 1557  0 boolean[] la1tokens = new boolean[77];
 1558  0 for (int i = 0; i < 77; i++) {
 1559  0 la1tokens[i] = false;
 1560    }
 1561  0 if (jj_kind >= 0) {
 1562  0 la1tokens[jj_kind] = true;
 1563  0 jj_kind = -1;
 1564    }
 1565  0 for (int i = 0; i < 29; i++) {
 1566  0 if (jj_la1[i] == jj_gen) {
 1567  0 for (int j = 0; j < 32; j++) {
 1568  0 if ((jj_la1_0[i] & (1<<j)) != 0) {
 1569  0 la1tokens[j] = true;
 1570    }
 1571  0 if ((jj_la1_1[i] & (1<<j)) != 0) {
 1572  0 la1tokens[32+j] = true;
 1573    }
 1574  0 if ((jj_la1_2[i] & (1<<j)) != 0) {
 1575  0 la1tokens[64+j] = true;
 1576    }
 1577    }
 1578    }
 1579    }
 1580  0 for (int i = 0; i < 77; i++) {
 1581  0 if (la1tokens[i]) {
 1582  0 jj_expentry = new int[1];
 1583  0 jj_expentry[0] = i;
 1584  0 jj_expentries.addElement(jj_expentry);
 1585    }
 1586    }
 1587  0 jj_endpos = 0;
 1588  0 jj_rescan_token();
 1589  0 jj_add_error_token(0, 0);
 1590  0 int[][] exptokseq = new int[jj_expentries.size()][];
 1591  0 for (int i = 0; i < jj_expentries.size(); i++) {
 1592  0 exptokseq[i] = (int[])jj_expentries.elementAt(i);
 1593    }
 1594  0 return new ParseException(token, exptokseq, tokenImage);
 1595    }
 1596   
 1597  0 final public void enable_tracing() {
 1598    }
 1599   
 1600  0 final public void disable_tracing() {
 1601    }
 1602   
 1603  0 final private void jj_rescan_token() {
 1604  0 jj_rescan = true;
 1605  0 for (int i = 0; i < 2; i++) {
 1606  0 try {
 1607  0 JJCalls p = jj_2_rtns[i];
 1608  0 do {
 1609  0 if (p.gen > jj_gen) {
 1610  0 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
 1611  0 switch (i) {
 1612  0 case 0: jj_3_1(); break;
 1613  0 case 1: jj_3_2(); break;
 1614    }
 1615    }
 1616  0 p = p.next;
 1617  0 } while (p != null);
 1618    } catch(LookaheadSuccess ls) { }
 1619    }
 1620  0 jj_rescan = false;
 1621    }
 1622   
 1623  78 final private void jj_save(int index, int xla) {
 1624  78 JJCalls p = jj_2_rtns[index];
 1625  78 while (p.gen > jj_gen) {
 1626  0 if (p.next == null) { p = p.next = new JJCalls(); break; }
 1627  0 p = p.next;
 1628    }
 1629  78 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
 1630    }
 1631   
 1632    static final class JJCalls {
 1633    int gen;
 1634    Token first;
 1635    int arg;
 1636    JJCalls next;
 1637    }
 1638   
 1639    }