1 2 package com.steadystate.css.parser; 3 4 import java.io.*; 5 import java.net.*; 6 import java.util.*; 7 import org.w3c.css.sac.*; 8 import com.steadystate.css.parser.selectors.*; 9 10 14 public class SACParser implements Parser, SACParserConstants { 15 16 private InputSource _source = null; 17 private Locale _locale = null; 18 private DocumentHandler _docHandler = null; 19 private ErrorHandler _errHandler = null; 20 private SelectorFactory _selectorFactory = new SelectorFactoryImpl(); 21 private ConditionFactory _conditionFactory = new ConditionFactoryImpl(); 22 private boolean _quiet = true; 23 24 public SACParser() { 25 this((CharStream) null); 26 } 27 28 public void setLocale(Locale locale) throws CSSException { 29 _locale = locale; 30 31 33 throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR); 34 } 35 36 public void setDocumentHandler(DocumentHandler handler) { 37 _docHandler = handler; 38 } 39 40 public void setSelectorFactory(SelectorFactory selectorFactory) { 41 _selectorFactory = selectorFactory; 42 } 43 44 public void setConditionFactory(ConditionFactory conditionFactory) { 45 _conditionFactory = conditionFactory; 46 } 47 48 public void setErrorHandler(ErrorHandler handler) { 49 _errHandler = handler; 50 } 51 52 public void parseStyleSheet(InputSource source) 53 throws CSSException, IOException { 54 _source = source; 55 ReInit(getCharStream(source)); 56 try { 57 styleSheet(); 58 } catch (ParseException e) { 59 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 60 } 61 } 62 63 public void parseStyleSheet(String uri) throws CSSException, IOException { 64 parseStyleSheet(new InputSource(uri)); 65 } 66 67 public void parseStyleDeclaration(InputSource source) 68 throws CSSException, IOException { 69 _source = source; 70 ReInit(getCharStream(source)); 71 try { 72 styleDeclaration(); 73 } catch (ParseException e) { 74 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 75 } 76 } 77 78 public void parseRule(InputSource source) throws CSSException, IOException { 79 _source = source; 80 ReInit(getCharStream(source)); 81 try { 82 styleSheetRuleSingle(); 83 } catch (ParseException e) { 84 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 85 } 86 } 87 88 public String getParserVersion() { 89 return "http://www.w3.org/TR/REC-CSS2"; 90 } 91 92 public SelectorList parseSelectors(InputSource source) 93 throws CSSException, IOException { 94 _source = source; 95 ReInit(getCharStream(source)); 96 SelectorList sl = null; 97 try { 98 sl = selectorList(); 99 } catch (ParseException e) { 100 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 101 } 102 return sl; 103 } 104 105 public SACMediaList parseMedia(InputSource source) 106 throws CSSException, IOException { 107 _source = source; 108 ReInit(getCharStream(source)); 109 SACMediaListImpl sml = new SACMediaListImpl(); 110 try { 111 mediaList(sml); 112 } catch (ParseException e) { 113 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 114 } 115 return sml; 116 } 117 118 public LexicalUnit parsePropertyValue(InputSource source) 119 throws CSSException, IOException { 120 _source = source; 121 ReInit(getCharStream(source)); 122 LexicalUnit lu = null; 123 try { 124 lu = expr(); 125 } catch (ParseException e) { 126 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 127 } 128 return lu; 129 } 130 131 public boolean parsePriority(InputSource source) 132 throws CSSException, IOException { 133 _source = source; 134 ReInit(getCharStream(source)); 135 boolean b = false; 136 try { 137 b = prio(); 138 } catch (ParseException e) { 139 throw new CSSException(CSSException.SAC_SYNTAX_ERR, e.getMessage(), e); 140 } 141 return b; 142 } 143 144 private CharStream getCharStream(InputSource source) 145 throws CSSException, IOException { 146 if (source.getCharacterStream() != null) { 147 return new ASCII_CharStream(source.getCharacterStream(), 1, 1); 148 } else { 149 150 return null; 152 } 153 } 154 155 private Locator getLocator() { 156 return null; 157 } 158 159 final public void styleSheet() throws ParseException { 167 try { 168 _docHandler.startDocument(_source); 169 styleSheetRuleList(); 170 jj_consume_token(0); 171 } finally { 172 _docHandler.endDocument(_source); 173 } 174 } 175 176 final public void styleSheetRuleList() throws ParseException { 177 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 178 case CHARSET_SYM: 179 charsetRule(); 180 break; 181 default: 182 jj_la1[0] = jj_gen; 183 ; 184 } 185 label_1: 186 while (true) { 187 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 188 case S: 189 case CDO: 190 case CDC: 191 ; 192 break; 193 default: 194 jj_la1[1] = jj_gen; 195 break label_1; 196 } 197 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 198 case S: 199 jj_consume_token(S); 200 break; 201 case CDO: 202 jj_consume_token(CDO); 203 break; 204 case CDC: 205 jj_consume_token(CDC); 206 break; 207 default: 208 jj_la1[2] = jj_gen; 209 jj_consume_token(-1); 210 throw new ParseException(); 211 } 212 } 213 label_2: 214 while (true) { 215 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 216 case IMPORT_SYM: 217 ; 218 break; 219 default: 220 jj_la1[3] = jj_gen; 221 break label_2; 222 } 223 importRule(); 224 label_3: 225 while (true) { 226 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 227 case S: 228 case CDO: 229 case CDC: 230 ; 231 break; 232 default: 233 jj_la1[4] = jj_gen; 234 break label_3; 235 } 236 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 237 case S: 238 jj_consume_token(S); 239 break; 240 case CDO: 241 jj_consume_token(CDO); 242 break; 243 case CDC: 244 jj_consume_token(CDC); 245 break; 246 default: 247 jj_la1[5] = jj_gen; 248 jj_consume_token(-1); 249 throw new ParseException(); 250 } 251 } 252 } 253 label_4: 254 while (true) { 255 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 256 case DOT: 257 case COLON: 258 case ASTERISK: 259 case LSQUARE: 260 case HASH: 261 case PAGE_SYM: 262 case MEDIA_SYM: 263 case FONT_FACE_SYM: 264 case ATKEYWORD: 265 case IDENT: 266 ; 267 break; 268 default: 269 jj_la1[6] = jj_gen; 270 break label_4; 271 } 272 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 273 case DOT: 274 case COLON: 275 case ASTERISK: 276 case LSQUARE: 277 case HASH: 278 case IDENT: 279 styleRule(); 280 break; 281 case MEDIA_SYM: 282 mediaRule(); 283 break; 284 case PAGE_SYM: 285 pageRule(); 286 break; 287 case FONT_FACE_SYM: 288 fontFaceRule(); 289 break; 290 case ATKEYWORD: 291 unknownRule(); 292 break; 293 default: 294 jj_la1[7] = jj_gen; 295 jj_consume_token(-1); 296 throw new ParseException(); 297 } 298 label_5: 299 while (true) { 300 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 301 case S: 302 case CDO: 303 case CDC: 304 ; 305 break; 306 default: 307 jj_la1[8] = jj_gen; 308 break label_5; 309 } 310 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 311 case S: 312 jj_consume_token(S); 313 break; 314 case CDO: 315 jj_consume_token(CDO); 316 break; 317 case CDC: 318 jj_consume_token(CDC); 319 break; 320 default: 321 jj_la1[9] = jj_gen; 322 jj_consume_token(-1); 323 throw new ParseException(); 324 } 325 } 326 } 327 } 328 329 final public void styleSheetRuleSingle() throws ParseException { 333 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 334 case CHARSET_SYM: 335 charsetRule(); 336 break; 337 case IMPORT_SYM: 338 importRule(); 339 break; 340 case DOT: 341 case COLON: 342 case ASTERISK: 343 case LSQUARE: 344 case HASH: 345 case IDENT: 346 styleRule(); 347 break; 348 case MEDIA_SYM: 349 mediaRule(); 350 break; 351 case PAGE_SYM: 352 pageRule(); 353 break; 354 case FONT_FACE_SYM: 355 fontFaceRule(); 356 break; 357 case ATKEYWORD: 358 unknownRule(); 359 break; 360 default: 361 jj_la1[10] = jj_gen; 362 jj_consume_token(-1); 363 throw new ParseException(); 364 } 365 } 366 367 final public void charsetRule() throws ParseException { 368 Token t; 369 jj_consume_token(CHARSET_SYM); 370 label_6: 371 while (true) { 372 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 373 case S: 374 ; 375 break; 376 default: 377 jj_la1[11] = jj_gen; 378 break label_6; 379 } 380 jj_consume_token(S); 381 } 382 t = jj_consume_token(STRING); 383 label_7: 384 while (true) { 385 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 386 case S: 387 ; 388 break; 389 default: 390 jj_la1[12] = jj_gen; 391 break label_7; 392 } 393 jj_consume_token(S); 394 } 395 jj_consume_token(SEMICOLON); 396 } 397 398 final public void unknownRule() throws ParseException { 399 Token t; 400 String s; 401 t = jj_consume_token(ATKEYWORD); 402 s = skip(); 403 _docHandler.ignorableAtRule(s); 404 } 405 406 final public void importRule() throws ParseException { 413 Token t; 414 String s; 415 SACMediaListImpl ml = new SACMediaListImpl(); 416 jj_consume_token(IMPORT_SYM); 417 label_8: 418 while (true) { 419 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 420 case S: 421 ; 422 break; 423 default: 424 jj_la1[13] = jj_gen; 425 break label_8; 426 } 427 jj_consume_token(S); 428 } 429 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 430 case STRING: 431 t = jj_consume_token(STRING); 432 break; 433 case URI: 434 t = jj_consume_token(URI); 435 break; 436 default: 437 jj_la1[14] = jj_gen; 438 jj_consume_token(-1); 439 throw new ParseException(); 440 } 441 label_9: 442 while (true) { 443 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 444 case S: 445 ; 446 break; 447 default: 448 jj_la1[15] = jj_gen; 449 break label_9; 450 } 451 jj_consume_token(S); 452 } 453 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 454 case IDENT: 455 mediaList(ml); 456 break; 457 default: 458 jj_la1[16] = jj_gen; 459 ; 460 } 461 jj_consume_token(SEMICOLON); 462 _docHandler.importStyle(unescape(t.image), ml, null); 463 } 464 465 final public void mediaRule() throws ParseException { 471 boolean start = false; 472 SACMediaListImpl ml = new SACMediaListImpl(); 473 try { 474 jj_consume_token(MEDIA_SYM); 475 label_10: 476 while (true) { 477 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 478 case S: 479 ; 480 break; 481 default: 482 jj_la1[17] = jj_gen; 483 break label_10; 484 } 485 jj_consume_token(S); 486 } 487 mediaList(ml); 488 start = true; 489 _docHandler.startMedia(ml); 490 jj_consume_token(LBRACE); 491 label_11: 492 while (true) { 493 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 494 case S: 495 ; 496 break; 497 default: 498 jj_la1[18] = jj_gen; 499 break label_11; 500 } 501 jj_consume_token(S); 502 } 503 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 504 case DOT: 505 case COLON: 506 case ASTERISK: 507 case LSQUARE: 508 case HASH: 509 case PAGE_SYM: 510 case ATKEYWORD: 511 case IDENT: 512 mediaRuleList(); 513 break; 514 default: 515 jj_la1[19] = jj_gen; 516 ; 517 } 518 jj_consume_token(RBRACE); 519 } finally { 520 if (start) { 521 _docHandler.endMedia(ml); 522 } 523 } 524 } 525 526 final public void mediaList(SACMediaListImpl ml) throws ParseException { 527 String s; 528 s = medium(); 529 label_12: 530 while (true) { 531 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 532 case COMMA: 533 ; 534 break; 535 default: 536 jj_la1[20] = jj_gen; 537 break label_12; 538 } 539 jj_consume_token(COMMA); 540 label_13: 541 while (true) { 542 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 543 case S: 544 ; 545 break; 546 default: 547 jj_la1[21] = jj_gen; 548 break label_13; 549 } 550 jj_consume_token(S); 551 } 552 ml.add(s); 553 s = medium(); 554 } 555 ml.add(s); 556 } 557 558 final public void mediaRuleList() throws ParseException { 559 label_14: 560 while (true) { 561 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 562 case DOT: 563 case COLON: 564 case ASTERISK: 565 case LSQUARE: 566 case HASH: 567 case IDENT: 568 styleRule(); 569 break; 570 case PAGE_SYM: 571 pageRule(); 572 break; 573 case ATKEYWORD: 574 unknownRule(); 575 break; 576 default: 577 jj_la1[22] = jj_gen; 578 jj_consume_token(-1); 579 throw new ParseException(); 580 } 581 label_15: 582 while (true) { 583 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 584 case S: 585 ; 586 break; 587 default: 588 jj_la1[23] = jj_gen; 589 break label_15; 590 } 591 jj_consume_token(S); 592 } 593 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 594 case DOT: 595 case COLON: 596 case ASTERISK: 597 case LSQUARE: 598 case HASH: 599 case PAGE_SYM: 600 case ATKEYWORD: 601 case IDENT: 602 ; 603 break; 604 default: 605 jj_la1[24] = jj_gen; 606 break label_14; 607 } 608 } 609 } 610 611 final public void mediaRuleSingle() throws ParseException { 612 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 613 case DOT: 614 case COLON: 615 case ASTERISK: 616 case LSQUARE: 617 case HASH: 618 case IDENT: 619 styleRule(); 620 break; 621 case PAGE_SYM: 622 pageRule(); 623 break; 624 case ATKEYWORD: 625 unknownRule(); 626 break; 627 default: 628 jj_la1[25] = jj_gen; 629 jj_consume_token(-1); 630 throw new ParseException(); 631 } 632 } 633 634 final public String medium() throws ParseException { 640 Token t; 641 t = jj_consume_token(IDENT); 642 label_16: 643 while (true) { 644 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 645 case S: 646 ; 647 break; 648 default: 649 jj_la1[26] = jj_gen; 650 break label_16; 651 } 652 jj_consume_token(S); 653 } 654 {if (true) return t.image;} 655 throw new Error ("Missing return statement in function"); 656 } 657 658 final public void pageRule() throws ParseException { 665 Token t = null; 666 String s = null; 667 boolean start = false; 668 try { 669 jj_consume_token(PAGE_SYM); 670 label_17: 671 while (true) { 672 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 673 case S: 674 ; 675 break; 676 default: 677 jj_la1[27] = jj_gen; 678 break label_17; 679 } 680 jj_consume_token(S); 681 } 682 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 683 case COLON: 684 case IDENT: 685 if (jj_2_1(2)) { 686 t = jj_consume_token(IDENT); 687 label_18: 688 while (true) { 689 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 690 case S: 691 ; 692 break; 693 default: 694 jj_la1[28] = jj_gen; 695 break label_18; 696 } 697 jj_consume_token(S); 698 } 699 } else { 700 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 701 case IDENT: 702 t = jj_consume_token(IDENT); 703 s = pseudoPage(); 704 label_19: 705 while (true) { 706 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 707 case S: 708 ; 709 break; 710 default: 711 jj_la1[29] = jj_gen; 712 break label_19; 713 } 714 jj_consume_token(S); 715 } 716 break; 717 case COLON: 718 s = pseudoPage(); 719 label_20: 720 while (true) { 721 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 722 case S: 723 ; 724 break; 725 default: 726 jj_la1[30] = jj_gen; 727 break label_20; 728 } 729 jj_consume_token(S); 730 } 731 break; 732 default: 733 jj_la1[31] = jj_gen; 734 jj_consume_token(-1); 735 throw new ParseException(); 736 } 737 } 738 break; 739 default: 740 jj_la1[32] = jj_gen; 741 ; 742 } 743 jj_consume_token(LBRACE); 744 label_21: 745 while (true) { 746 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 747 case S: 748 ; 749 break; 750 default: 751 jj_la1[33] = jj_gen; 752 break label_21; 753 } 754 jj_consume_token(S); 755 } 756 start = true; 757 _docHandler.startPage((t != null) ? unescape(t.image) : null, s); 758 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 759 case IDENT: 760 declaration(); 761 break; 762 default: 763 jj_la1[34] = jj_gen; 764 ; 765 } 766 label_22: 767 while (true) { 768 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 769 case SEMICOLON: 770 ; 771 break; 772 default: 773 jj_la1[35] = jj_gen; 774 break label_22; 775 } 776 jj_consume_token(SEMICOLON); 777 label_23: 778 while (true) { 779 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 780 case S: 781 ; 782 break; 783 default: 784 jj_la1[36] = jj_gen; 785 break label_23; 786 } 787 jj_consume_token(S); 788 } 789 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 790 case IDENT: 791 declaration(); 792 break; 793 default: 794 jj_la1[37] = jj_gen; 795 ; 796 } 797 } 798 jj_consume_token(RBRACE); 799 } finally { 800 if (start) { 801 _docHandler.endPage((t != null) ? unescape(t.image) : null, s); 802 } 803 } 804 } 805 806 final public String pseudoPage() throws ParseException { 812 Token t; 813 jj_consume_token(COLON); 814 t = jj_consume_token(IDENT); 815 {if (true) return t.image;} 816 throw new Error ("Missing return statement in function"); 817 } 818 819 final public void fontFaceRule() throws ParseException { 826 boolean start = false; 827 try { 828 jj_consume_token(FONT_FACE_SYM); 829 label_24: 830 while (true) { 831 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 832 case S: 833 ; 834 break; 835 default: 836 jj_la1[38] = jj_gen; 837 break label_24; 838 } 839 jj_consume_token(S); 840 } 841 jj_consume_token(LBRACE); 842 label_25: 843 while (true) { 844 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 845 case S: 846 ; 847 break; 848 default: 849 jj_la1[39] = jj_gen; 850 break label_25; 851 } 852 jj_consume_token(S); 853 } 854 start = true; _docHandler.startFontFace(); 855 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 856 case IDENT: 857 declaration(); 858 break; 859 default: 860 jj_la1[40] = jj_gen; 861 ; 862 } 863 label_26: 864 while (true) { 865 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 866 case SEMICOLON: 867 ; 868 break; 869 default: 870 jj_la1[41] = jj_gen; 871 break label_26; 872 } 873 jj_consume_token(SEMICOLON); 874 label_27: 875 while (true) { 876 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 877 case S: 878 ; 879 break; 880 default: 881 jj_la1[42] = jj_gen; 882 break label_27; 883 } 884 jj_consume_token(S); 885 } 886 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 887 case IDENT: 888 declaration(); 889 break; 890 default: 891 jj_la1[43] = jj_gen; 892 ; 893 } 894 } 895 jj_consume_token(RBRACE); 896 } finally { 897 if (start) { 898 _docHandler.endFontFace(); 899 } 900 } 901 } 902 903 final public LexicalUnit operator(LexicalUnit prev) throws ParseException { 909 Token t; 910 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 911 case SLASH: 912 t = jj_consume_token(SLASH); 913 label_28: 914 while (true) { 915 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 916 case S: 917 ; 918 break; 919 default: 920 jj_la1[44] = jj_gen; 921 break label_28; 922 } 923 jj_consume_token(S); 924 } 925 {if (true) return new LexicalUnitImpl(prev, LexicalUnit.SAC_OPERATOR_SLASH);} 926 break; 927 case COMMA: 928 t = jj_consume_token(COMMA); 929 label_29: 930 while (true) { 931 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 932 case S: 933 ; 934 break; 935 default: 936 jj_la1[45] = jj_gen; 937 break label_29; 938 } 939 jj_consume_token(S); 940 } 941 {if (true) return new LexicalUnitImpl(prev, LexicalUnit.SAC_OPERATOR_COMMA);} 942 break; 943 default: 944 jj_la1[46] = jj_gen; 945 jj_consume_token(-1); 946 throw new ParseException(); 947 } 948 throw new Error ("Missing return statement in function"); 949 } 950 951 final public char combinator() throws ParseException { 957 char c = ' '; 958 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 959 case PLUS: 960 jj_consume_token(PLUS); 961 c='+'; 962 label_30: 963 while (true) { 964 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 965 case S: 966 ; 967 break; 968 default: 969 jj_la1[47] = jj_gen; 970 break label_30; 971 } 972 jj_consume_token(S); 973 } 974 break; 975 case GT: 976 jj_consume_token(GT); 977 c='>'; 978 label_31: 979 while (true) { 980 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 981 case S: 982 ; 983 break; 984 default: 985 jj_la1[48] = jj_gen; 986 break label_31; 987 } 988 jj_consume_token(S); 989 } 990 break; 991 case S: 992 jj_consume_token(S); 993 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 994 case PLUS: 995 case GT: 996 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 997 case PLUS: 998 jj_consume_token(PLUS); 999 c='+'; 1000 break; 1001 case GT: 1002 jj_consume_token(GT); 1003 c='>'; 1004 break; 1005 default: 1006 jj_la1[49] = jj_gen; 1007 jj_consume_token(-1); 1008 throw new ParseException(); 1009 } 1010 label_32: 1011 while (true) { 1012 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1013 case S: 1014 ; 1015 break; 1016 default: 1017 jj_la1[50] = jj_gen; 1018 break label_32; 1019 } 1020 jj_consume_token(S); 1021 } 1022 break; 1023 default: 1024 jj_la1[51] = jj_gen; 1025 ; 1026 } 1027 break; 1028 default: 1029 jj_la1[52] = jj_gen; 1030 jj_consume_token(-1); 1031 throw new ParseException(); 1032 } 1033 {if (true) return c;} 1034 throw new Error ("Missing return statement in function"); 1035 } 1036 1037 final public char unaryOperator() throws ParseException { 1043 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1044 case MINUS: 1045 jj_consume_token(MINUS); 1046 {if (true) return '-';} 1047 break; 1048 case PLUS: 1049 jj_consume_token(PLUS); 1050 {if (true) return '+';} 1051 break; 1052 default: 1053 jj_la1[53] = jj_gen; 1054 jj_consume_token(-1); 1055 throw new ParseException(); 1056 } 1057 throw new Error ("Missing return statement in function"); 1058 } 1059 1060 final public String property() throws ParseException { 1066 Token t; 1067 t = jj_consume_token(IDENT); 1068 label_33: 1069 while (true) { 1070 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1071 case S: 1072 ; 1073 break; 1074 default: 1075 jj_la1[54] = jj_gen; 1076 break label_33; 1077 } 1078 jj_consume_token(S); 1079 } 1080 {if (true) return unescape(t.image);} 1081 throw new Error ("Missing return statement in function"); 1082 } 1083 1084 final public void styleRule() throws ParseException { 1091 SelectorList selList = null; 1092 boolean start = false; 1093 boolean noError = true; 1094 try { 1095 selList = selectorList(); 1096 jj_consume_token(LBRACE); 1097 label_34: 1098 while (true) { 1099 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1100 case S: 1101 ; 1102 break; 1103 default: 1104 jj_la1[55] = jj_gen; 1105 break label_34; 1106 } 1107 jj_consume_token(S); 1108 } 1109 start = true; 1110 _docHandler.startSelector(selList); 1111 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1112 case IDENT: 1113 declaration(); 1114 break; 1115 default: 1116 jj_la1[56] = jj_gen; 1117 ; 1118 } 1119 label_35: 1120 while (true) { 1121 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1122 case SEMICOLON: 1123 ; 1124 break; 1125 default: 1126 jj_la1[57] = jj_gen; 1127 break label_35; 1128 } 1129 jj_consume_token(SEMICOLON); 1130 label_36: 1131 while (true) { 1132 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1133 case S: 1134 ; 1135 break; 1136 default: 1137 jj_la1[58] = jj_gen; 1138 break label_36; 1139 } 1140 jj_consume_token(S); 1141 } 1142 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1143 case IDENT: 1144 declaration(); 1145 break; 1146 default: 1147 jj_la1[59] = jj_gen; 1148 ; 1149 } 1150 } 1151 jj_consume_token(RBRACE); 1152 } catch (ParseException e) { 1153 noError = false; 1156 error_skipblock(); 1157 } finally { 1158 if (start) { 1159 _docHandler.endSelector(selList); 1160 } 1161 } 1162 } 1163 1164 final public SelectorList selectorList() throws ParseException { 1165 SelectorListImpl selList = new SelectorListImpl(); 1166 Selector sel; 1167 try { 1168 sel = selector(); 1169 label_37: 1170 while (true) { 1171 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1172 case COMMA: 1173 ; 1174 break; 1175 default: 1176 jj_la1[60] = jj_gen; 1177 break label_37; 1178 } 1179 jj_consume_token(COMMA); 1180 label_38: 1181 while (true) { 1182 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1183 case S: 1184 ; 1185 break; 1186 default: 1187 jj_la1[61] = jj_gen; 1188 break label_38; 1189 } 1190 jj_consume_token(S); 1191 } 1192 selList.add(sel); 1193 sel = selector(); 1194 } 1195 selList.add(sel); 1196 {if (true) return selList;} 1197 } catch (ParseException e) { 1198 System.err.println("Exception in selectorList()"); 1199 } 1200 throw new Error ("Missing return statement in function"); 1201 } 1202 1203 final public Selector selector() throws ParseException { 1209 Selector sel; 1210 char comb; 1211 try { 1212 sel = simpleSelector(null, ' '); 1213 label_39: 1214 while (true) { 1215 if (jj_2_2(2)) { 1216 ; 1217 } else { 1218 break label_39; 1219 } 1220 comb = combinator(); 1221 sel = simpleSelector(sel, comb); 1222 } 1223 label_40: 1224 while (true) { 1225 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1226 case S: 1227 ; 1228 break; 1229 default: 1230 jj_la1[62] = jj_gen; 1231 break label_40; 1232 } 1233 jj_consume_token(S); 1234 } 1235 {if (true) return sel;} 1236 } catch (ParseException e) { 1237 skipSelector(); 1238 } 1239 throw new Error ("Missing return statement in function"); 1240 } 1241 1242 final public Selector simpleSelector(Selector sel, char comb) throws ParseException { 1248 SimpleSelector simpleSel = null; 1249 Condition c = null; 1250 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1251 case ASTERISK: 1252 case IDENT: 1253 simpleSel = elementName(); 1254 label_41: 1255 while (true) { 1256 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1257 case DOT: 1258 case COLON: 1259 case LSQUARE: 1260 case HASH: 1261 ; 1262 break; 1263 default: 1264 jj_la1[63] = jj_gen; 1265 break label_41; 1266 } 1267 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1268 case HASH: 1269 c = hash(c); 1270 break; 1271 case DOT: 1272 c = _class(c); 1273 break; 1274 case LSQUARE: 1275 c = attrib(c); 1276 break; 1277 case COLON: 1278 c = pseudo(c); 1279 break; 1280 default: 1281 jj_la1[64] = jj_gen; 1282 jj_consume_token(-1); 1283 throw new ParseException(); 1284 } 1285 } 1286 break; 1287 case DOT: 1288 case COLON: 1289 case LSQUARE: 1290 case HASH: 1291 simpleSel = _selectorFactory.createElementSelector(null, null); 1292 label_42: 1293 while (true) { 1294 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1295 case HASH: 1296 c = hash(c); 1297 break; 1298 case DOT: 1299 c = _class(c); 1300 break; 1301 case LSQUARE: 1302 c = attrib(c); 1303 break; 1304 case COLON: 1305 c = pseudo(c); 1306 break; 1307 default: 1308 jj_la1[65] = jj_gen; 1309 jj_consume_token(-1); 1310 throw new ParseException(); 1311 } 1312 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1313 case DOT: 1314 case COLON: 1315 case LSQUARE: 1316 case HASH: 1317 ; 1318 break; 1319 default: 1320 jj_la1[66] = jj_gen; 1321 break label_42; 1322 } 1323 } 1324 break; 1325 default: 1326 jj_la1[67] = jj_gen; 1327 jj_consume_token(-1); 1328 throw new ParseException(); 1329 } 1330 if (c != null) { 1331 simpleSel = _selectorFactory.createConditionalSelector(simpleSel, c); 1332 } 1333 1334 if (sel != null) { 1335 switch (comb) { 1336 case ' ': 1337 sel = _selectorFactory.createDescendantSelector(sel, simpleSel); 1338 break; 1339 case '+': 1340 sel = _selectorFactory.createDirectAdjacentSelector(sel.getSelectorType(), sel, simpleSel); 1341 break; 1342 case '>': 1343 sel = _selectorFactory.createChildSelector(sel, simpleSel); 1344 break; 1345 } 1346 } else { 1347 sel = simpleSel; 1348 } 1349 1350 {if (true) return sel;} 1351 throw new Error ("Missing return statement in function"); 1352 } 1353 1354 final public Condition _class(Condition pred) throws ParseException { 1360 Token t; 1361 jj_consume_token(DOT); 1362 t = jj_consume_token(IDENT); 1363 Condition c = _conditionFactory.createClassCondition(null, t.image); 1364 {if (true) return (pred == null) ? c : _conditionFactory.createAndCondition(pred, c);} 1365 throw new Error ("Missing return statement in function"); 1366 } 1367 1368 final public SimpleSelector elementName() throws ParseException { 1374 Token t; 1375 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1376 case IDENT: 1377 t = jj_consume_token(IDENT); 1378 {if (true) return _selectorFactory.createElementSelector(null, unescape(t.image));} 1379 break; 1380 case ASTERISK: 1381 jj_consume_token(ASTERISK); 1382 {if (true) return _selectorFactory.createElementSelector(null, null);} 1383 break; 1384 default: 1385 jj_la1[68] = jj_gen; 1386 jj_consume_token(-1); 1387 throw new ParseException(); 1388 } 1389 throw new Error ("Missing return statement in function"); 1390 } 1391 1392 final public Condition attrib(Condition pred) throws ParseException { 1399 Token t; 1400 String name = null; 1401 String value = null; 1402 int type = 0; 1403 jj_consume_token(LSQUARE); 1404 label_43: 1405 while (true) { 1406 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1407 case S: 1408 ; 1409 break; 1410 default: 1411 jj_la1[69] = jj_gen; 1412 break label_43; 1413 } 1414 jj_consume_token(S); 1415 } 1416 t = jj_consume_token(IDENT); 1417 name = unescape(t.image); 1418 label_44: 1419 while (true) { 1420 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1421 case S: 1422 ; 1423 break; 1424 default: 1425 jj_la1[70] = jj_gen; 1426 break label_44; 1427 } 1428 jj_consume_token(S); 1429 } 1430 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1431 case EQUALS: 1432 case INCLUDES: 1433 case DASHMATCH: 1434 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1435 case EQUALS: 1436 jj_consume_token(EQUALS); 1437 type = 1; 1438 break; 1439 case INCLUDES: 1440 jj_consume_token(INCLUDES); 1441 type = 2; 1442 break; 1443 case DASHMATCH: 1444 jj_consume_token(DASHMATCH); 1445 type = 3; 1446 break; 1447 default: 1448 jj_la1[71] = jj_gen; 1449 jj_consume_token(-1); 1450 throw new ParseException(); 1451 } 1452 label_45: 1453 while (true) { 1454 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1455 case S: 1456 ; 1457 break; 1458 default: 1459 jj_la1[72] = jj_gen; 1460 break label_45; 1461 } 1462 jj_consume_token(S); 1463 } 1464 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1465 case IDENT: 1466 t = jj_consume_token(IDENT); 1467 value = t.image; 1468 break; 1469 case STRING: 1470 t = jj_consume_token(STRING); 1471 value = unescape(t.image); 1472 break; 1473 default: 1474 jj_la1[73] = jj_gen; 1475 jj_consume_token(-1); 1476 throw new ParseException(); 1477 } 1478 label_46: 1479 while (true) { 1480 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1481 case S: 1482 ; 1483 break; 1484 default: 1485 jj_la1[74] = jj_gen; 1486 break label_46; 1487 } 1488 jj_consume_token(S); 1489 } 1490 break; 1491 default: 1492 jj_la1[75] = jj_gen; 1493 ; 1494 } 1495 jj_consume_token(RSQUARE); 1496 Condition c = null; 1497 switch (type) { 1498 case 0: 1499 c = _conditionFactory.createAttributeCondition(name, null, false, null); 1500 break; 1501 case 1: 1502 c = _conditionFactory.createAttributeCondition(name, null, false, value); 1503 break; 1504 case 2: 1505 c = _conditionFactory.createOneOfAttributeCondition(name, null, false, value); 1506 break; 1507 case 3: 1508 c = _conditionFactory.createBeginHyphenAttributeCondition(name, null, false, value); 1509 break; 1510 } 1511 {if (true) return (pred == null) ? c : _conditionFactory.createAndCondition(pred, c);} 1512 throw new Error ("Missing return statement in function"); 1513 } 1514 1515 final public Condition pseudo(Condition pred) throws ParseException { 1521 Condition c; 1522 Token t; 1523 String function; 1524 String arg; 1525 jj_consume_token(COLON); 1526 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1527 case IDENT: 1528 t = jj_consume_token(IDENT); 1529 String s = unescape(t.image); 1531 c = _conditionFactory.createPseudoClassCondition(null, s); 1532 {if (true) return (pred == null) 1533 ? c 1534 : _conditionFactory.createAndCondition(pred, c);} 1535 break; 1536 case FUNCTION: 1537 t = jj_consume_token(FUNCTION); 1538 function = unescape(t.image); 1539 label_47: 1540 while (true) { 1541 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1542 case S: 1543 ; 1544 break; 1545 default: 1546 jj_la1[76] = jj_gen; 1547 break label_47; 1548 } 1549 jj_consume_token(S); 1550 } 1551 t = jj_consume_token(IDENT); 1552 arg = unescape(t.image); 1553 label_48: 1554 while (true) { 1555 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1556 case S: 1557 ; 1558 break; 1559 default: 1560 jj_la1[77] = jj_gen; 1561 break label_48; 1562 } 1563 jj_consume_token(S); 1564 } 1565 jj_consume_token(RROUND); 1566 if (function.equalsIgnoreCase("lang(")) { 1567 c = _conditionFactory.createLangCondition(unescape(arg)); 1568 {if (true) return (pred == null) 1569 ? c 1570 : _conditionFactory.createAndCondition(pred, c);} 1571 } else { 1572 {if (true) throw new CSSParseException( 1573 "Invalid pseudo function name " + function, 1574 getLocator());} 1575 } 1576 break; 1577 default: 1578 jj_la1[78] = jj_gen; 1579 jj_consume_token(-1); 1580 throw new ParseException(); 1581 } 1582 throw new Error ("Missing return statement in function"); 1583 } 1584 1585 final public Condition hash(Condition pred) throws ParseException { 1586 Token t; 1587 t = jj_consume_token(HASH); 1588 Condition c = _conditionFactory.createIdCondition(t.image.substring(1)); 1589 {if (true) return (pred == null) ? c : _conditionFactory.createAndCondition(pred, c);} 1590 throw new Error ("Missing return statement in function"); 1591 } 1592 1593 final public void styleDeclaration() throws ParseException { 1594 jj_consume_token(LBRACE); 1595 label_49: 1596 while (true) { 1597 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1598 case S: 1599 ; 1600 break; 1601 default: 1602 jj_la1[79] = jj_gen; 1603 break label_49; 1604 } 1605 jj_consume_token(S); 1606 } 1607 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1608 case IDENT: 1609 declaration(); 1610 break; 1611 default: 1612 jj_la1[80] = jj_gen; 1613 ; 1614 } 1615 label_50: 1616 while (true) { 1617 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1618 case SEMICOLON: 1619 ; 1620 break; 1621 default: 1622 jj_la1[81] = jj_gen; 1623 break label_50; 1624 } 1625 jj_consume_token(SEMICOLON); 1626 label_51: 1627 while (true) { 1628 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1629 case S: 1630 ; 1631 break; 1632 default: 1633 jj_la1[82] = jj_gen; 1634 break label_51; 1635 } 1636 jj_consume_token(S); 1637 } 1638 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1639 case IDENT: 1640 declaration(); 1641 break; 1642 default: 1643 jj_la1[83] = jj_gen; 1644 ; 1645 } 1646 } 1647 jj_consume_token(RBRACE); 1648 } 1649 1650 final public void declaration() throws ParseException { 1657 String p; 1658 LexicalUnit e; 1659 boolean priority = false; 1660 boolean noError = true; 1662 try { 1663 p = property(); 1664 jj_consume_token(COLON); 1665 label_52: 1666 while (true) { 1667 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1668 case S: 1669 ; 1670 break; 1671 default: 1672 jj_la1[84] = jj_gen; 1673 break label_52; 1674 } 1675 jj_consume_token(S); 1676 } 1677 e = expr(); 1678 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1679 case IMPORTANT_SYM: 1680 priority = prio(); 1681 break; 1682 default: 1683 jj_la1[85] = jj_gen; 1684 ; 1685 } 1686 _docHandler.property(p, e, priority); 1687 } catch (ParseException ex) { 1688 System.err.println("Exception in declaration()"); 1689 noError = false; 1690 error_skipdecl(); 1691 } 1692 } 1693 1694 final public boolean prio() throws ParseException { 1700 jj_consume_token(IMPORTANT_SYM); 1701 label_53: 1702 while (true) { 1703 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1704 case S: 1705 ; 1706 break; 1707 default: 1708 jj_la1[86] = jj_gen; 1709 break label_53; 1710 } 1711 jj_consume_token(S); 1712 } 1713 {if (true) return true;} 1714 throw new Error ("Missing return statement in function"); 1715 } 1716 1717 final public LexicalUnit expr() throws ParseException { 1725 LexicalUnit head; 1726 LexicalUnit body; 1727 head = term(null); 1728 body = head; 1729 label_54: 1730 while (true) { 1731 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1732 case COMMA: 1733 case SLASH: 1734 case PLUS: 1735 case MINUS: 1736 case HASH: 1737 case STRING: 1738 case URI: 1739 case INHERIT: 1740 case EMS: 1741 case EXS: 1742 case LENGTH_PX: 1743 case LENGTH_CM: 1744 case LENGTH_MM: 1745 case LENGTH_IN: 1746 case LENGTH_PT: 1747 case LENGTH_PC: 1748 case ANGLE_DEG: 1749 case ANGLE_RAD: 1750 case ANGLE_GRAD: 1751 case TIME_MS: 1752 case TIME_S: 1753 case FREQ_HZ: 1754 case FREQ_KHZ: 1755 case DIMEN: 1756 case PERCENTAGE: 1757 case NUMBER: 1758 case RGB: 1759 case FUNCTION: 1760 case IDENT: 1761 case UNICODERANGE: 1762 ; 1763 break; 1764 default: 1765 jj_la1[87] = jj_gen; 1766 break label_54; 1767 } 1768 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1769 case COMMA: 1770 case SLASH: 1771 body = operator(body); 1772 break; 1773 default: 1774 jj_la1[88] = jj_gen; 1775 ; 1776 } 1777 body = term(body); 1778 } 1779 {if (true) return head;} 1780 throw new Error ("Missing return statement in function"); 1781 } 1782 1783 final public LexicalUnit term(LexicalUnit prev) throws ParseException { 1792 Token t; 1793 char op = ' '; 1794 String s; 1795 LexicalUnit value = null; 1796 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1797 case PLUS: 1798 case MINUS: 1799 op = unaryOperator(); 1800 break; 1801 default: 1802 jj_la1[89] = jj_gen; 1803 ; 1804 } 1805 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1806 case EMS: 1807 case EXS: 1808 case LENGTH_PX: 1809 case LENGTH_CM: 1810 case LENGTH_MM: 1811 case LENGTH_IN: 1812 case LENGTH_PT: 1813 case LENGTH_PC: 1814 case ANGLE_DEG: 1815 case ANGLE_RAD: 1816 case ANGLE_GRAD: 1817 case TIME_MS: 1818 case TIME_S: 1819 case FREQ_HZ: 1820 case FREQ_KHZ: 1821 case PERCENTAGE: 1822 case NUMBER: 1823 case FUNCTION: 1824 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1825 case NUMBER: 1826 t = jj_consume_token(NUMBER); 1827 value = LexicalUnitImpl.createNumber(prev, value(op, t.image)); 1828 break; 1829 case PERCENTAGE: 1830 t = jj_consume_token(PERCENTAGE); 1831 value = LexicalUnitImpl.createPercentage(prev, value(op, t.image)); 1832 break; 1833 case LENGTH_PX: 1834 t = jj_consume_token(LENGTH_PX); 1835 value = LexicalUnitImpl.createPixel(prev, value(op, t.image)); 1836 break; 1837 case LENGTH_CM: 1838 t = jj_consume_token(LENGTH_CM); 1839 value = LexicalUnitImpl.createCentimeter(prev, value(op, t.image)); 1840 break; 1841 case LENGTH_MM: 1842 t = jj_consume_token(LENGTH_MM); 1843 value = LexicalUnitImpl.createMillimeter(prev, value(op, t.image)); 1844 break; 1845 case LENGTH_IN: 1846 t = jj_consume_token(LENGTH_IN); 1847 value = LexicalUnitImpl.createInch(prev, value(op, t.image)); 1848 break; 1849 case LENGTH_PT: 1850 t = jj_consume_token(LENGTH_PT); 1851 value = LexicalUnitImpl.createPoint(prev, value(op, t.image)); 1852 break; 1853 case LENGTH_PC: 1854 t = jj_consume_token(LENGTH_PC); 1855 value = LexicalUnitImpl.createPica(prev, value(op, t.image)); 1856 break; 1857 case EMS: 1858 t = jj_consume_token(EMS); 1859 value = LexicalUnitImpl.createEm(prev, value(op, t.image)); 1860 break; 1861 case EXS: 1862 t = jj_consume_token(EXS); 1863 value = LexicalUnitImpl.createEx(prev, value(op, t.image)); 1864 break; 1865 case ANGLE_DEG: 1866 t = jj_consume_token(ANGLE_DEG); 1867 value = LexicalUnitImpl.createDegree(prev, value(op, t.image)); 1868 break; 1869 case ANGLE_RAD: 1870 t = jj_consume_token(ANGLE_RAD); 1871 value = LexicalUnitImpl.createRadian(prev, value(op, t.image)); 1872 break; 1873 case ANGLE_GRAD: 1874 t = jj_consume_token(ANGLE_GRAD); 1875 value = LexicalUnitImpl.createGradian(prev, value(op, t.image)); 1876 break; 1877 case TIME_MS: 1878 t = jj_consume_token(TIME_MS); 1879 value = LexicalUnitImpl.createMillisecond(prev, value(op, t.image)); 1880 break; 1881 case TIME_S: 1882 t = jj_consume_token(TIME_S); 1883 value = LexicalUnitImpl.createSecond(prev, value(op, t.image)); 1884 break; 1885 case FREQ_HZ: 1886 t = jj_consume_token(FREQ_HZ); 1887 value = LexicalUnitImpl.createHertz(prev, value(op, t.image)); 1888 break; 1889 case FREQ_KHZ: 1890 t = jj_consume_token(FREQ_KHZ); 1891 value = LexicalUnitImpl.createKiloHertz(prev, value(op, t.image)); 1892 break; 1893 case FUNCTION: 1894 value = function(prev); 1895 break; 1896 default: 1897 jj_la1[90] = jj_gen; 1898 jj_consume_token(-1); 1899 throw new ParseException(); 1900 } 1901 break; 1902 case STRING: 1903 t = jj_consume_token(STRING); 1904 value = new LexicalUnitImpl(prev, LexicalUnit.SAC_STRING_VALUE, t.image); 1905 break; 1906 case IDENT: 1907 t = jj_consume_token(IDENT); 1908 value = new LexicalUnitImpl(prev, LexicalUnit.SAC_IDENT, t.image); 1909 break; 1910 case URI: 1911 t = jj_consume_token(URI); 1912 value = new LexicalUnitImpl(prev, LexicalUnit.SAC_URI, t.image); 1913 break; 1914 case UNICODERANGE: 1915 t = jj_consume_token(UNICODERANGE); 1916 value = new LexicalUnitImpl(prev, LexicalUnit.SAC_UNICODERANGE, t.image); 1917 break; 1918 case RGB: 1919 value = rgb(prev); 1920 break; 1921 case HASH: 1922 value = hexcolor(prev); 1923 break; 1924 case DIMEN: 1925 t = jj_consume_token(DIMEN); 1926 int n = getLastNumPos(t.image); 1927 value = LexicalUnitImpl.createDimension( 1928 prev, 1929 value(op, t.image.substring(0, n+1)), 1930 t.image.substring(n+1)); 1931 break; 1932 case INHERIT: 1933 t = jj_consume_token(INHERIT); 1934 value = new LexicalUnitImpl(prev, LexicalUnit.SAC_INHERIT, t.image); 1935 break; 1936 default: 1937 jj_la1[91] = jj_gen; 1938 jj_consume_token(-1); 1939 throw new ParseException(); 1940 } 1941 label_55: 1942 while (true) { 1943 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1944 case S: 1945 ; 1946 break; 1947 default: 1948 jj_la1[92] = jj_gen; 1949 break label_55; 1950 } 1951 jj_consume_token(S); 1952 } 1953 {if (true) return value;} 1954 throw new Error ("Missing return statement in function"); 1955 } 1956 1957 final public LexicalUnit function(LexicalUnit prev) throws ParseException { 1963 Token t; 1964 LexicalUnit params; 1965 t = jj_consume_token(FUNCTION); 1966 label_56: 1967 while (true) { 1968 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 1969 case S: 1970 ; 1971 break; 1972 default: 1973 jj_la1[93] = jj_gen; 1974 break label_56; 1975 } 1976 jj_consume_token(S); 1977 } 1978 params = expr(); 1979 jj_consume_token(RROUND); 1980 if (t.image.equalsIgnoreCase("counter(")) { 1981 {if (true) return LexicalUnitImpl.createCounter(prev, params);} 1982 } else if (t.image.equalsIgnoreCase("counters(")) { 1983 {if (true) return LexicalUnitImpl.createCounters(prev, params);} 1984 } else if (t.image.equalsIgnoreCase("attr(")) { 1985 {if (true) return LexicalUnitImpl.createAttr(prev, params);} 1986 } else if (t.image.equalsIgnoreCase("rect(")) { 1987 {if (true) return LexicalUnitImpl.createRect(prev, params);} 1988 } 1989 {if (true) return LexicalUnitImpl.createFunction( 1990 prev, 1991 t.image.substring(0, t.image.length() - 1), 1992 params);} 1993 throw new Error ("Missing return statement in function"); 1994 } 1995 1996 final public LexicalUnit rgb(LexicalUnit prev) throws ParseException { 2002 Token t; 2003 LexicalUnit params; 2004 t = jj_consume_token(RGB); 2005 label_57: 2006 while (true) { 2007 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 2008 case S: 2009 ; 2010 break; 2011 default: 2012 jj_la1[94] = jj_gen; 2013 break label_57; 2014 } 2015 jj_consume_token(S); 2016 } 2017 params = expr(); 2018 jj_consume_token(RROUND); 2019 {if (true) return LexicalUnitImpl.createRgbColor(prev, params);} 2020 throw new Error ("Missing return statement in function"); 2021 } 2022 2023 final public LexicalUnit hexcolor(LexicalUnit prev) throws ParseException { 2029 Token t; 2030 t = jj_consume_token(HASH); 2031 int i = 1; 2033 int r = 0; 2034 int g = 0; 2035 int b = 0; 2036 int len = t.image.length() - 1; 2037 2038 if (len == 3) { 2039 r = Integer.parseInt(t.image.substring(i + 0, i + 1), 16); 2040 g = Integer.parseInt(t.image.substring(i + 1, i + 2), 16); 2041 b = Integer.parseInt(t.image.substring(i + 2, i + 3), 16); 2042 r = (r << 4) | r; 2043 g = (g << 4) | g; 2044 b = (b << 4) | b; 2045 } else if (len == 6) { 2046 r = Integer.parseInt(t.image.substring(i + 0, i + 2), 16); 2047 g = Integer.parseInt(t.image.substring(i + 2, i + 4), 16); 2048 b = Integer.parseInt(t.image.substring(i + 4, i + 6), 16); 2049 } else { 2050 } 2052 2053 LexicalUnit lr = LexicalUnitImpl.createNumber(null, r); 2055 LexicalUnit lc1 = LexicalUnitImpl.createComma(lr); 2056 LexicalUnit lg = LexicalUnitImpl.createNumber(lc1, g); 2057 LexicalUnit lc2 = LexicalUnitImpl.createComma(lg); 2058 LexicalUnit lb = LexicalUnitImpl.createNumber(lc2, b); 2059 2060 {if (true) return LexicalUnitImpl.createRgbColor(prev, lr);} 2061 throw new Error ("Missing return statement in function"); 2062 } 2063 2064 float value(char op, String s) throws ParseException { 2065 return ((op == '-') ? -1 : 1) * Float.parseFloat(s); 2066 } 2067 2068 int getLastNumPos(String s) throws ParseException { 2069 int i; 2070 for (i = 0; i < s.length(); i++) { 2071 if (Character.isLetter(s.charAt(i))) { 2072 break; 2073 } 2074 } 2075 return i - 1; 2076 } 2077 2078 String unescape(String s) throws ParseException { 2079 int len = s.length(); 2080 StringBuffer buf = new StringBuffer (len); 2081 int index = 0; 2082 2083 while (index < len) { 2084 char c = s.charAt(index); 2085 if (c == '\\') { 2086 if (++index < len) { 2087 c = s.charAt(index); 2088 switch (c) { 2089 case '0': case '1': case '2': case '3': case '4': 2090 case '5': case '6': case '7': case '8': case '9': 2091 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': 2092 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': 2093 int numValue = Character.digit(c, 16); 2094 int count = 0; 2095 int p = 16; 2096 2097 while (index + 1 < len && count < 6) { 2098 c = s.charAt(index+1); 2099 2100 if (Character.digit(c, 16) != -1) { 2101 numValue = (numValue * 16) + Character.digit(c, 16); 2102 p *= 16; 2103 index++; 2104 } else { 2105 if (c == ' ') { 2106 index++; 2108 } 2109 break; 2110 } 2111 } 2112 buf.append((char) numValue); 2113 break; 2114 case '\n': 2115 case '\f': 2116 break; 2117 case '\r': 2118 if (index + 1 < len) { 2119 if (s.charAt(index + 1) == '\n') { 2120 index ++; 2121 } 2122 } 2123 break; 2124 default: 2125 buf.append(c); 2126 } 2127 } else { 2128 throw new CSSParseException("invalid string " + s, getLocator()); 2129 } 2130 } else { 2131 buf.append(c); 2132 } 2133 index++; 2134 } 2135 2136 return buf.toString(); 2137 } 2138 2139 void skipSelector() throws ParseException { 2140 Token t = getToken(1); 2141 while (t.kind != COMMA && t.kind != SEMICOLON && t.kind != LBRACE && t.kind != EOF ) { 2142 getNextToken(); 2143 t = getToken(1); 2144 } 2145 } 2146 2147 String skip() throws ParseException { 2148 StringBuffer sb = new StringBuffer (); 2149 int nesting = 0; 2150 Token t = getToken(0); 2151 if (t.image != null) { 2152 sb.append(t.image); 2153 } 2154 do { 2155 t = getNextToken(); 2156 if (t.kind == EOF) 2157 break; 2158 sb.append(t.image); 2159 if (t.kind == LBRACE) 2160 nesting++; 2161 else if (t.kind == RBRACE) 2162 nesting--; 2163 else if (t.kind == SEMICOLON && nesting <= 0) 2164 break; 2165 } 2166 while ((t.kind != RBRACE) || (nesting > 0)); 2167 2168 return sb.toString(); 2169 } 2170 2171 void error_skipblock() throws ParseException { 2172 if (!_quiet) { 2173 ParseException e = generateParseException(); 2174 System.err.println( "** error_skipblock **\n" + e.toString() ); 2175 } 2176 2177 Token t; 2178 int nesting = 0; 2179 do { 2180 t = getNextToken(); 2181 if( t.kind == LBRACE ) 2182 nesting++; 2183 else if( t.kind == RBRACE ) 2184 nesting--; 2185 else if( t.kind == EOF ) 2186 break; 2187 } 2188 while ((t.kind != RBRACE) || (nesting > 0)); 2189 } 2190 2191 void error_skipdecl() throws ParseException { 2192 if (!_quiet) { 2193 ParseException e = generateParseException(); 2194 System.err.println("** error_skipdecl **\n" + e.toString()); 2195 } 2196 2197 Token t = getToken(1); 2198 while (t.kind != SEMICOLON && t.kind != RBRACE && t.kind != EOF ) { 2199 getNextToken(); 2200 t = getToken(1); 2201 } 2202 } 2203 2204 final private boolean jj_2_1(int xla) { 2205 jj_la = xla; jj_lastpos = jj_scanpos = token; 2206 try { return !jj_3_1(); } 2207 catch(LookaheadSuccess ls) { return true; } 2208 finally { jj_save(0, xla); } 2209 } 2210 2211 final private boolean jj_2_2(int xla) { 2212 jj_la = xla; jj_lastpos = jj_scanpos = token; 2213 try { return !jj_3_2(); } 2214 catch(LookaheadSuccess ls) { return true; } 2215 finally { jj_save(1, xla); } 2216 } 2217 2218 final private boolean jj_3R_73() { 2219 if (jj_3R_77()) return true; 2220 return false; 2221 } 2222 2223 final private boolean jj_3R_60() { 2224 if (jj_scan_token(PLUS)) return true; 2225 Token xsp; 2226 while (true) { 2227 xsp = jj_scanpos; 2228 if (jj_scan_token(1)) { jj_scanpos = xsp; break; } 2229 } 2230 return false; 2231 } 2232 2233 final private boolean jj_3R_66() { 2234 Token xsp; 2235 xsp = jj_scanpos; 2236 if (jj_3R_70()) { 2237 jj_scanpos = xsp; 2238 if (jj_3R_71()) return true; 2239 } 2240 return false; 2241 } 2242 2243 final private boolean jj_3R_70() { 2244 if (jj_scan_token(IDENT)) return true; 2245 return false; 2246 } 2247 2248 final private boolean jj_3R_67() { 2249 Token xsp; 2250 xsp = jj_scanpos; 2251 if (jj_3R_72()) { 2252 jj_scanpos = xsp; 2253 if (jj_3R_73()) { 2254 jj_scanpos = xsp; 2255 if (jj_3R_74()) { 2256 jj_scanpos = xsp; 2257 if (jj_3R_75()) return true; 2258 } 2259 } 2260 } 2261 return false; 2262 } 2263 2264 final private boolean jj_3R_72() { 2265 if (jj_3R_76()) return true; 2266 return false; 2267 } 2268 2269 final private boolean jj_3R_58() { 2270 Token xsp; 2271 xsp = jj_scanpos; 2272 if (jj_3R_60()) { 2273 jj_scanpos = xsp; 2274 if (jj_3R_61()) { 2275 jj_scanpos = xsp; 2276 if (jj_3R_62()) return true; 2277 } 2278 } 2279 return false; 2280 } 2281 2282 final private boolean jj_3R_64() { 2283 Token xsp; 2284 if (jj_3R_67()) return true; 2285 while (true) { 2286 xsp = jj_scanpos; 2287 if (jj_3R_67()) { jj_scanpos = xsp; break; } 2288 } 2289 return false; 2290 } 2291 2292 final private boolean jj_3R_77() { 2293 if (jj_scan_token(DOT)) return true; 2294 return false; 2295 } 2296 2297 final private boolean jj_3R_63() { 2298 if (jj_3R_66()) return true; 2299 return false; 2300 } 2301 2302 final private boolean jj_3R_69() { 2303 if (jj_scan_token(GT)) return true; 2304 return false; 2305 } 2306 2307 final private boolean jj_3R_79() { 2308 if (jj_scan_token(COLON)) return true; 2309 return false; 2310 } 2311 2312 final private boolean jj_3R_59() { 2313 Token xsp; 2314 xsp = jj_scanpos; 2315 if (jj_3R_63()) { 2316 jj_scanpos = xsp; 2317 if (jj_3R_64()) return true; 2318 } 2319 return false; 2320 } 2321 2322 final private boolean jj_3R_78() { 2323 if (jj_scan_token(LSQUARE)) return true; 2324 return false; 2325 } 2326 2327 final private boolean jj_3R_76() { 2328 if (jj_scan_token(HASH)) return true; 2329 return false; 2330 } 2331 2332 final private boolean jj_3_1() { 2333 if (jj_scan_token(IDENT)) return true; 2334 Token xsp; 2335 while (true) { 2336 xsp = jj_scanpos; 2337 if (jj_scan_token(1)) { jj_scanpos = xsp; break; } 2338 } 2339 return false; 2340 } 2341 2342 final private boolean jj_3_2() { 2343 if (jj_3R_58()) return true; 2344 if (jj_3R_59()) return true; 2345 return false; 2346 } 2347 2348 final private boolean jj_3R_68() { 2349 if (jj_scan_token(PLUS)) return true; 2350 return false; 2351 } 2352 2353 final private boolean jj_3R_65() { 2354 Token xsp; 2355 xsp = jj_scanpos; 2356 if (jj_3R_68()) { 2357 jj_scanpos = xsp; 2358 if (jj_3R_69()) return true; 2359 } 2360 return false; 2361 } 2362 2363 final private boolean jj_3R_71() { 2364 if (jj_scan_token(ASTERISK)) return true; 2365 return false; 2366 } 2367 2368 final private boolean jj_3R_75() { 2369 if (jj_3R_79()) return true; 2370 return false; 2371 } 2372 2373 final private boolean jj_3R_62() { 2374 if (jj_scan_token(S)) return true; 2375 Token xsp; 2376 xsp = jj_scanpos; 2377 if (jj_3R_65()) jj_scanpos = xsp; 2378 return false; 2379 } 2380 2381 final private boolean jj_3R_74() { 2382 if (jj_3R_78()) return true; 2383 return false; 2384 } 2385 2386 final private boolean jj_3R_61() { 2387 if (jj_scan_token(GT)) return true; 2388 Token xsp; 2389 while (true) { 2390 xsp = jj_scanpos; 2391 if (jj_scan_token(1)) { jj_scanpos = xsp; break; } 2392 } 2393 return false; 2394 } 2395 2396 public SACParserTokenManager token_source; 2397 public Token token, jj_nt; 2398 private int jj_ntk; 2399 private Token jj_scanpos, jj_lastpos; 2400 private int jj_la; 2401 public boolean lookingAhead = false; 2402 private boolean jj_semLA; 2403 private int jj_gen; 2404 final private int[] jj_la1 = new int[95]; 2405 static private int[] jj_la1_0; 2406 static private int[] jj_la1_1; 2407 static private int[] jj_la1_2; 2408 static { 2409 jj_la1_0(); 2410 jj_la1_1(); 2411 jj_la1_2(); 2412 } 2413 private static void jj_la1_0() { 2414 jj_la1_0 = new int[] {0x0,0x3000002,0x3000002,0x10000000,0x3000002,0x3000002,0xe00a0d00,0xe00a0d00,0x3000002,0x3000002,0xf00a0d00,0x2,0x2,0x2,0x900000,0x2,0x0,0x2,0x2,0x200a0d00,0x80,0x2,0x200a0d00,0x2,0x200a0d00,0x200a0d00,0x2,0x2,0x2,0x2,0x2,0x400,0x400,0x2,0x0,0x200,0x2,0x0,0x2,0x2,0x0,0x200,0x2,0x0,0x2,0x2,0x1080,0x2,0x2,0x12000,0x2,0x12000,0x12002,0x6000,0x2,0x2,0x0,0x200,0x2,0x0,0x80,0x2,0x2,0xa0500,0xa0500,0xa0500,0xa0500,0xa0d00,0x800,0x2,0x2,0xc008000,0x2,0x100000,0x2,0xc008000,0x2,0x2,0x0,0x2,0x0,0x200,0x2,0x0,0x2,0x0,0x2,0x987080,0x1080,0x6000,0x0,0x980000,0x2,0x2,0x2,}; 2415 } 2416 private static void jj_la1_1() { 2417 jj_la1_1 = new int[] {0x1,0x0,0x0,0x0,0x0,0x0,0x1000002,0x1000002,0x0,0x0,0x1000003,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x1000002,0x0,0x0,0x1000002,0x0,0x1000002,0x1000002,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x0,0x1000000,0x0,0x0,0x1000000,0x0,0x0,0x1000000,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x1000000,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x1800000,0x0,0x1000000,0x0,0x0,0x1000000,0x0,0x4,0x0,0x9fffff8,0x0,0x0,0xb7fff0,0x9fffff8,0x0,0x0,0x0,}; 2418 } 2419 private static void jj_la1_2() { 2420 jj_la1_2 = new int[] {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,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,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; 2421 } 2422 final private JJCalls[] jj_2_rtns = new JJCalls[2]; 2423 private boolean jj_rescan = false; 2424 private int jj_gc = 0; 2425 2426 public SACParser(CharStream stream) { 2427 token_source = new SACParserTokenManager(stream); 2428 token = new Token(); 2429 jj_ntk = -1; 2430 jj_gen = 0; 2431 for (int i = 0; i < 95; i++) jj_la1[i] = -1; 2432 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 2433 } 2434 2435 public void ReInit(CharStream stream) { 2436 token_source.ReInit(stream); 2437 token = new Token(); 2438 jj_ntk = -1; 2439 jj_gen = 0; 2440 for (int i = 0; i < 95; i++) jj_la1[i] = -1; 2441 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 2442 } 2443 2444 public SACParser(SACParserTokenManager tm) { 2445 token_source = tm; 2446 token = new Token(); 2447 jj_ntk = -1; 2448 jj_gen = 0; 2449 for (int i = 0; i < 95; i++) jj_la1[i] = -1; 2450 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 2451 } 2452 2453 public void ReInit(SACParserTokenManager tm) { 2454 token_source = tm; 2455 token = new Token(); 2456 jj_ntk = -1; 2457 jj_gen = 0; 2458 for (int i = 0; i < 95; i++) jj_la1[i] = -1; 2459 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 2460 } 2461 2462 final private Token jj_consume_token(int kind) throws ParseException { 2463 Token oldToken; 2464 if ((oldToken = token).next != null) token = token.next; 2465 else token = token.next = token_source.getNextToken(); 2466 jj_ntk = -1; 2467 if (token.kind == kind) { 2468 jj_gen++; 2469 if (++jj_gc > 100) { 2470 jj_gc = 0; 2471 for (int i = 0; i < jj_2_rtns.length; i++) { 2472 JJCalls c = jj_2_rtns[i]; 2473 while (c != null) { 2474 if (c.gen < jj_gen) c.first = null; 2475 c = c.next; 2476 } 2477 } 2478 } 2479 return token; 2480 } 2481 token = oldToken; 2482 jj_kind = kind; 2483 throw generateParseException(); 2484 } 2485 2486 static private final class LookaheadSuccess extends java.lang.Error { } 2487 final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 2488 final private boolean jj_scan_token(int kind) { 2489 if (jj_scanpos == jj_lastpos) { 2490 jj_la--; 2491 if (jj_scanpos.next == null) { 2492 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 2493 } else { 2494 jj_lastpos = jj_scanpos = jj_scanpos.next; 2495 } 2496 } else { 2497 jj_scanpos = jj_scanpos.next; 2498 } 2499 if (jj_rescan) { 2500 int i = 0; Token tok = token; 2501 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 2502 if (tok != null) jj_add_error_token(kind, i); 2503 } 2504 if (jj_scanpos.kind != kind) return true; 2505 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 2506 return false; 2507 } 2508 2509 final public Token getNextToken() { 2510 if (token.next != null) token = token.next; 2511 else token = token.next = token_source.getNextToken(); 2512 jj_ntk = -1; 2513 jj_gen++; 2514 return token; 2515 } 2516 2517 final public Token getToken(int index) { 2518 Token t = lookingAhead ? jj_scanpos : token; 2519 for (int i = 0; i < index; i++) { 2520 if (t.next != null) t = t.next; 2521 else t = t.next = token_source.getNextToken(); 2522 } 2523 return t; 2524 } 2525 2526 final private int jj_ntk() { 2527 if ((jj_nt=token.next) == null) 2528 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 2529 else 2530 return (jj_ntk = jj_nt.kind); 2531 } 2532 2533 private java.util.Vector jj_expentries = new java.util.Vector (); 2534 private int[] jj_expentry; 2535 private int jj_kind = -1; 2536 private int[] jj_lasttokens = new int[100]; 2537 private int jj_endpos; 2538 2539 private void jj_add_error_token(int kind, int pos) { 2540 if (pos >= 100) return; 2541 if (pos == jj_endpos + 1) { 2542 jj_lasttokens[jj_endpos++] = kind; 2543 } else if (jj_endpos != 0) { 2544 jj_expentry = new int[jj_endpos]; 2545 for (int i = 0; i < jj_endpos; i++) { 2546 jj_expentry[i] = jj_lasttokens[i]; 2547 } 2548 boolean exists = false; 2549 for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { 2550 int[] oldentry = (int[])(e.nextElement()); 2551 if (oldentry.length == jj_expentry.length) { 2552 exists = true; 2553 for (int i = 0; i < jj_expentry.length; i++) { 2554 if (oldentry[i] != jj_expentry[i]) { 2555 exists = false; 2556 break; 2557 } 2558 } 2559 if (exists) break; 2560 } 2561 } 2562 if (!exists) jj_expentries.addElement(jj_expentry); 2563 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; 2564 } 2565 } 2566 2567 public ParseException generateParseException() { 2568 jj_expentries.removeAllElements(); 2569 boolean[] la1tokens = new boolean[78]; 2570 for (int i = 0; i < 78; i++) { 2571 la1tokens[i] = false; 2572 } 2573 if (jj_kind >= 0) { 2574 la1tokens[jj_kind] = true; 2575 jj_kind = -1; 2576 } 2577 for (int i = 0; i < 95; i++) { 2578 if (jj_la1[i] == jj_gen) { 2579 for (int j = 0; j < 32; j++) { 2580 if ((jj_la1_0[i] & (1<<j)) != 0) { 2581 la1tokens[j] = true; 2582 } 2583 if ((jj_la1_1[i] & (1<<j)) != 0) { 2584 la1tokens[32+j] = true; 2585 } 2586 if ((jj_la1_2[i] & (1<<j)) != 0) { 2587 la1tokens[64+j] = true; 2588 } 2589 } 2590 } 2591 } 2592 for (int i = 0; i < 78; i++) { 2593 if (la1tokens[i]) { 2594 jj_expentry = new int[1]; 2595 jj_expentry[0] = i; 2596 jj_expentries.addElement(jj_expentry); 2597 } 2598 } 2599 jj_endpos = 0; 2600 jj_rescan_token(); 2601 jj_add_error_token(0, 0); 2602 int[][] exptokseq = new int[jj_expentries.size()][]; 2603 for (int i = 0; i < jj_expentries.size(); i++) { 2604 exptokseq[i] = (int[])jj_expentries.elementAt(i); 2605 } 2606 return new ParseException(token, exptokseq, tokenImage); 2607 } 2608 2609 final public void enable_tracing() { 2610 } 2611 2612 final public void disable_tracing() { 2613 } 2614 2615 final private void jj_rescan_token() { 2616 jj_rescan = true; 2617 for (int i = 0; i < 2; i++) { 2618 JJCalls p = jj_2_rtns[i]; 2619 do { 2620 if (p.gen > jj_gen) { 2621 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 2622 switch (i) { 2623 case 0: jj_3_1(); break; 2624 case 1: jj_3_2(); break; 2625 } 2626 } 2627 p = p.next; 2628 } while (p != null); 2629 } 2630 jj_rescan = false; 2631 } 2632 2633 final private void jj_save(int index, int xla) { 2634 JJCalls p = jj_2_rtns[index]; 2635 while (p.gen > jj_gen) { 2636 if (p.next == null) { p = p.next = new JJCalls(); break; } 2637 p = p.next; 2638 } 2639 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; 2640 } 2641 2642 static final class JJCalls { 2643 int gen; 2644 Token first; 2645 int arg; 2646 JJCalls next; 2647 } 2648 2649} 2650 | Popular Tags |