/plugins/XML/tags/release-2-0-8/sidekick/css/parser/CSS2Parser.java

# · Java · 2548 lines · 2306 code · 77 blank · 165 comment · 376 complexity · 2f8adba15a8207bafd32ef829b14e5c8 MD5 · raw file

Large files are truncated click here to view the full file

  1. /* Generated By:JavaCC: Do not edit this line. CSS2Parser.java */
  2. package sidekick.css.parser;
  3. import java.io.*;
  4. import java.net.*;
  5. import java.text.MessageFormat;
  6. import java.util.*;
  7. import java.util.regex.*;
  8. import sidekick.util.*;
  9. public class CSS2Parser implements CSS2ParserConstants {
  10. private boolean _quiet = true;
  11. private int lineOffset = 0;
  12. private List<ParseError> parseErrors = new ArrayList<ParseError>();
  13. private boolean proprietaryAsError = true;
  14. /*
  15. public CSS2Parser() {
  16. this((CharStream) null);
  17. }
  18. */
  19. public Location getStartLocation(Token t) {
  20. if (t == null)
  21. return new Location(0 + lineOffset, 0);
  22. return new Location(t.beginLine + lineOffset, t.beginColumn);
  23. }
  24. public Location getEndLocation(Token t) {
  25. if (t == null)
  26. return new Location(0 + lineOffset, 0);
  27. return new Location(t.endLine + lineOffset, t.endColumn);
  28. }
  29. public CSSNode createNode(Token t) {
  30. if (t == null) {
  31. return new CSSNode();
  32. }
  33. CSSNode node = new CSSNode(t.image);
  34. node.setStartLocation(getStartLocation(t));
  35. node.setEndLocation(getEndLocation(t));
  36. return node;
  37. }
  38. public void setLineOffset(int offset) {
  39. lineOffset = offset > 0 ? offset : 0;
  40. }
  41. public void setTabSize(int size) {
  42. jj_input_stream.setTabSize(size);
  43. }
  44. public int getTabSize() {
  45. return jj_input_stream.getTabSize(0);
  46. }
  47. public void setProprietaryAsError(boolean b) {
  48. proprietaryAsError = b;
  49. }
  50. private void addException(ParseException pe) {
  51. // check for a jsp tag, these can appear in several places and will cause
  52. // a parse error, but they can be ignored. It's easier to catch them and
  53. // ignore them than rewrite the grammar to allow them in all the appropriate
  54. // places.
  55. Token t = pe.currentToken;
  56. if (t != null) {
  57. if (t.next != null && t.next.image.startsWith("<%")) {
  58. return;
  59. }
  60. }
  61. Range range = getExceptionLocation( pe );
  62. parseErrors.add(new ParseError(pe.getMessage(), range));
  63. }
  64. public List<ParseError> getParseErrors() {
  65. return parseErrors;
  66. }
  67. /**
  68. * @return attempts to return a Location indicating the location of a parser
  69. * exception. If the ParseException contains a Token reference, all is well,
  70. * otherwise, this method attempts to parse the message string for the
  71. * exception.
  72. */
  73. private Range getExceptionLocation( ParseException pe ) {
  74. Token t = pe.currentToken;
  75. // handle a 1-off error when this parser is called to parse embedded css
  76. if ( t != null ) {
  77. return new Range( new Location( t.next.beginLine + lineOffset, t.next.beginColumn ),
  78. new Location( t.next.endLine + lineOffset, t.next.endColumn ) );
  79. }
  80. // ParseException message look like: "Parse error at line 116, column 5. Encountered: }"
  81. try {
  82. Pattern p = Pattern.compile( "(.*?)(\\d+)(.*?)(\\d+)(.*?)" );
  83. Matcher m = p.matcher( pe.getMessage() );
  84. if ( m.matches() ) {
  85. String ln = m.group( 2 );
  86. String cn = m.group( 4 );
  87. int line_number = -1;
  88. int column_number = 0;
  89. if ( ln != null )
  90. line_number = Integer.parseInt( ln );
  91. if ( cn != null )
  92. column_number = Integer.parseInt( cn );
  93. return line_number > -1 ? new Range( new Location( line_number + lineOffset, column_number - 1 ),
  94. new Location( line_number + lineOffset, column_number ) ) : null;
  95. }
  96. return new Range();
  97. }
  98. catch ( Exception e ) {
  99. //e.printStackTrace();
  100. return new Range();
  101. }
  102. }
  103. /**
  104. * Simple check to verify that all arguments are not null.
  105. */
  106. public boolean notNull(Object... args) {
  107. for (Object o : args) {
  108. if (o == null) {
  109. return false;
  110. }
  111. }
  112. return true;
  113. }
  114. // main entry point
  115. //
  116. // stylesheet
  117. // : [ CHARSET_SYM S* STRING S* ';' ]?
  118. // [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
  119. // [ [ ruleset | media | page | font_face ] [S|CDO|CDC]* ]*
  120. // ;
  121. //
  122. final public CSSNode styleSheet() throws ParseException {
  123. CSSNode node = new CSSNode("style");
  124. List<CSSNode> list = null;
  125. try {
  126. list = styleSheetRuleList();
  127. jj_consume_token(0);
  128. } catch (ParseException pe) {
  129. addException(pe);
  130. }
  131. if (notNull(list)) {
  132. node.addChildren(list);
  133. }
  134. {if (true) return node;}
  135. throw new Error("Missing return statement in function");
  136. }
  137. final public List<CSSNode> styleSheetRuleList() throws ParseException {
  138. List<CSSNode> list = new ArrayList<CSSNode>();
  139. CSSNode n = null;
  140. try {
  141. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  142. case CHARSET_SYM:
  143. n = charsetRule();
  144. if (n != null) list.add(n);
  145. break;
  146. default:
  147. jj_la1[0] = jj_gen;
  148. ;
  149. }
  150. label_1:
  151. while (true) {
  152. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  153. case S:
  154. case CDO:
  155. case CDC:
  156. ;
  157. break;
  158. default:
  159. jj_la1[1] = jj_gen;
  160. break label_1;
  161. }
  162. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  163. case S:
  164. jj_consume_token(S);
  165. break;
  166. case CDO:
  167. jj_consume_token(CDO);
  168. break;
  169. case CDC:
  170. jj_consume_token(CDC);
  171. break;
  172. default:
  173. jj_la1[2] = jj_gen;
  174. jj_consume_token(-1);
  175. throw new ParseException();
  176. }
  177. }
  178. label_2:
  179. while (true) {
  180. if (jj_2_1(2)) {
  181. ;
  182. } else {
  183. break label_2;
  184. }
  185. n = importRule();
  186. if (n != null) list.add(n);
  187. label_3:
  188. while (true) {
  189. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  190. case S:
  191. case CDO:
  192. case CDC:
  193. ;
  194. break;
  195. default:
  196. jj_la1[3] = jj_gen;
  197. break label_3;
  198. }
  199. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  200. case S:
  201. jj_consume_token(S);
  202. break;
  203. case CDO:
  204. jj_consume_token(CDO);
  205. break;
  206. case CDC:
  207. jj_consume_token(CDC);
  208. break;
  209. default:
  210. jj_la1[4] = jj_gen;
  211. jj_consume_token(-1);
  212. throw new ParseException();
  213. }
  214. }
  215. }
  216. label_4:
  217. while (true) {
  218. if (jj_2_2(2)) {
  219. ;
  220. } else {
  221. break label_4;
  222. }
  223. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  224. case DOT:
  225. case COLON:
  226. case ASTERISK:
  227. case LSQUARE:
  228. case HASH:
  229. case IDENT:
  230. n = styleRule();
  231. break;
  232. case MEDIA_SYM:
  233. n = mediaRule();
  234. break;
  235. case PAGE_SYM:
  236. n = pageRule();
  237. break;
  238. case FONT_FACE_SYM:
  239. n = fontFaceRule();
  240. break;
  241. case ATKEYWORD:
  242. n = unknownRule();
  243. break;
  244. default:
  245. jj_la1[5] = jj_gen;
  246. jj_consume_token(-1);
  247. throw new ParseException();
  248. }
  249. if (n != null) list.add(n);
  250. label_5:
  251. while (true) {
  252. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  253. case S:
  254. case CDO:
  255. case CDC:
  256. ;
  257. break;
  258. default:
  259. jj_la1[6] = jj_gen;
  260. break label_5;
  261. }
  262. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  263. case S:
  264. jj_consume_token(S);
  265. break;
  266. case CDO:
  267. jj_consume_token(CDO);
  268. break;
  269. case CDC:
  270. jj_consume_token(CDC);
  271. break;
  272. default:
  273. jj_la1[7] = jj_gen;
  274. jj_consume_token(-1);
  275. throw new ParseException();
  276. }
  277. }
  278. }
  279. label_6:
  280. while (true) {
  281. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  282. case DOT:
  283. case COLON:
  284. case ASTERISK:
  285. case LSQUARE:
  286. case HASH:
  287. case IMPORT_SYM:
  288. case PAGE_SYM:
  289. case MEDIA_SYM:
  290. case FONT_FACE_SYM:
  291. case ATKEYWORD:
  292. case IDENT:
  293. ;
  294. break;
  295. default:
  296. jj_la1[8] = jj_gen;
  297. break label_6;
  298. }
  299. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  300. case DOT:
  301. case COLON:
  302. case ASTERISK:
  303. case LSQUARE:
  304. case HASH:
  305. case IDENT:
  306. n = styleRule();
  307. break;
  308. case MEDIA_SYM:
  309. n = mediaRule();
  310. break;
  311. case PAGE_SYM:
  312. n = pageRule();
  313. break;
  314. case FONT_FACE_SYM:
  315. n = fontFaceRule();
  316. break;
  317. case IMPORT_SYM:
  318. n = importRuleIgnored();
  319. break;
  320. case ATKEYWORD:
  321. n = unknownRule();
  322. break;
  323. default:
  324. jj_la1[9] = jj_gen;
  325. jj_consume_token(-1);
  326. throw new ParseException();
  327. }
  328. if (n != null) list.add(n);
  329. label_7:
  330. while (true) {
  331. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  332. case S:
  333. case CDO:
  334. case CDC:
  335. ;
  336. break;
  337. default:
  338. jj_la1[10] = jj_gen;
  339. break label_7;
  340. }
  341. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  342. case S:
  343. jj_consume_token(S);
  344. break;
  345. case CDO:
  346. jj_consume_token(CDO);
  347. break;
  348. case CDC:
  349. jj_consume_token(CDC);
  350. break;
  351. default:
  352. jj_la1[11] = jj_gen;
  353. jj_consume_token(-1);
  354. throw new ParseException();
  355. }
  356. }
  357. }
  358. } catch (ParseException pe) {
  359. addException(pe);
  360. }
  361. {if (true) return list;}
  362. throw new Error("Missing return statement in function");
  363. }
  364. //
  365. // This is used by ASTStyleSheet.insertRule to parse a single rule
  366. //
  367. final public CSSNode styleSheetRuleSingle() throws ParseException {
  368. CSSNode n = null;
  369. try {
  370. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  371. case CHARSET_SYM:
  372. n = charsetRule();
  373. break;
  374. case IMPORT_SYM:
  375. n = importRule();
  376. break;
  377. case DOT:
  378. case COLON:
  379. case ASTERISK:
  380. case LSQUARE:
  381. case HASH:
  382. case IDENT:
  383. n = styleRule();
  384. break;
  385. case MEDIA_SYM:
  386. n = mediaRule();
  387. break;
  388. case PAGE_SYM:
  389. n = pageRule();
  390. break;
  391. case FONT_FACE_SYM:
  392. n = fontFaceRule();
  393. break;
  394. case ATKEYWORD:
  395. n = unknownRule();
  396. break;
  397. default:
  398. jj_la1[12] = jj_gen;
  399. jj_consume_token(-1);
  400. throw new ParseException();
  401. }
  402. } catch (ParseException pe) {
  403. addException(pe);
  404. }
  405. {if (true) return n;}
  406. throw new Error("Missing return statement in function");
  407. }
  408. final public CSSNode charsetRule() throws ParseException {
  409. Token start = null;
  410. Token middle = null;
  411. Token end = null;
  412. CSSNode node = null;
  413. try {
  414. start = jj_consume_token(CHARSET_SYM);
  415. label_8:
  416. while (true) {
  417. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  418. case S:
  419. ;
  420. break;
  421. default:
  422. jj_la1[13] = jj_gen;
  423. break label_8;
  424. }
  425. jj_consume_token(S);
  426. }
  427. middle = jj_consume_token(STRING);
  428. label_9:
  429. while (true) {
  430. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  431. case S:
  432. ;
  433. break;
  434. default:
  435. jj_la1[14] = jj_gen;
  436. break label_9;
  437. }
  438. jj_consume_token(S);
  439. }
  440. end = jj_consume_token(SEMICOLON);
  441. } catch (ParseException pe) {
  442. addException(pe);
  443. {if (true) return null;}
  444. }
  445. if (notNull(start, middle, end)) {
  446. String name = start.image + " " + middle.image;
  447. node = new CSSNode(name);
  448. node.setStartLocation(getStartLocation(start));
  449. node.setEndLocation(getEndLocation(end));
  450. }
  451. {if (true) return node;}
  452. throw new Error("Missing return statement in function");
  453. }
  454. final public CSSNode unknownRule() throws ParseException {
  455. Token t = null;
  456. CSSNode node = null;
  457. try {
  458. t = jj_consume_token(ATKEYWORD);
  459. } catch (ParseException pe) {
  460. addException(pe);
  461. {if (true) return null;}
  462. }
  463. if (notNull(t)) {
  464. node = new CSSNode(t.image);
  465. node.setStartLocation(getStartLocation(t));
  466. node.setEndLocation(getEndLocation(t));
  467. }
  468. {if (true) return node;}
  469. throw new Error("Missing return statement in function");
  470. }
  471. //
  472. // import
  473. // : IMPORT_SYM S*
  474. // [STRING|URI] S* [ medium [ ',' S* medium]* ]? ';' S*
  475. // ;
  476. //
  477. final public CSSNode importRule() throws ParseException {
  478. Token start = null;
  479. CSSNode middle = null;
  480. Token uri = null;
  481. Token end = null;
  482. CSSNode node = null;
  483. try {
  484. start = jj_consume_token(IMPORT_SYM);
  485. label_10:
  486. while (true) {
  487. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  488. case S:
  489. ;
  490. break;
  491. default:
  492. jj_la1[15] = jj_gen;
  493. break label_10;
  494. }
  495. jj_consume_token(S);
  496. }
  497. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  498. case STRING:
  499. uri = jj_consume_token(STRING);
  500. break;
  501. case URI:
  502. uri = jj_consume_token(URI);
  503. break;
  504. default:
  505. jj_la1[16] = jj_gen;
  506. jj_consume_token(-1);
  507. throw new ParseException();
  508. }
  509. label_11:
  510. while (true) {
  511. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  512. case S:
  513. ;
  514. break;
  515. default:
  516. jj_la1[17] = jj_gen;
  517. break label_11;
  518. }
  519. jj_consume_token(S);
  520. }
  521. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  522. case IDENT:
  523. middle = mediaList();
  524. break;
  525. default:
  526. jj_la1[18] = jj_gen;
  527. ;
  528. }
  529. end = jj_consume_token(SEMICOLON);
  530. } catch (ParseException pe) {
  531. addException(pe);
  532. {if (true) return null;}
  533. }
  534. if (notNull(start, end)) {
  535. String name = start.image + (uri != null ? " " + uri.image : "") + (middle != null ? " " + middle.getName() : "");
  536. node = new CSSNode(name);
  537. node.setStartLocation(getStartLocation(start));
  538. node.setEndLocation(getEndLocation(end));
  539. }
  540. {if (true) return node;}
  541. throw new Error("Missing return statement in function");
  542. }
  543. final public CSSNode importRuleIgnored() throws ParseException {
  544. Token start = null;
  545. CSSNode middle = null;
  546. Token uri = null;
  547. Token end = null;
  548. CSSNode node = null;
  549. try {
  550. start = jj_consume_token(IMPORT_SYM);
  551. label_12:
  552. while (true) {
  553. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  554. case S:
  555. ;
  556. break;
  557. default:
  558. jj_la1[19] = jj_gen;
  559. break label_12;
  560. }
  561. jj_consume_token(S);
  562. }
  563. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  564. case STRING:
  565. uri = jj_consume_token(STRING);
  566. break;
  567. case URI:
  568. uri = jj_consume_token(URI);
  569. break;
  570. default:
  571. jj_la1[20] = jj_gen;
  572. jj_consume_token(-1);
  573. throw new ParseException();
  574. }
  575. label_13:
  576. while (true) {
  577. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  578. case S:
  579. ;
  580. break;
  581. default:
  582. jj_la1[21] = jj_gen;
  583. break label_13;
  584. }
  585. jj_consume_token(S);
  586. }
  587. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  588. case IDENT:
  589. middle = mediaList();
  590. break;
  591. default:
  592. jj_la1[22] = jj_gen;
  593. ;
  594. }
  595. end = jj_consume_token(SEMICOLON);
  596. } catch (ParseException pe) {
  597. addException(pe);
  598. {if (true) return null;}
  599. }
  600. if (notNull(start, end)) {
  601. String name = start.image + (uri != null ? " " + uri.image : "") + (middle != null ? " " + middle.getName() : "");
  602. node = new CSSNode(name);
  603. node.setStartLocation(getStartLocation(start));
  604. node.setEndLocation(getEndLocation(end));
  605. }
  606. {if (true) return node;}
  607. throw new Error("Missing return statement in function");
  608. }
  609. //
  610. // media
  611. // : MEDIA_SYM S* medium [ ',' S* medium ]* '{' S* ruleset* '}' S*
  612. // ;
  613. //
  614. final public CSSNode mediaRule() throws ParseException {
  615. Token start = null;
  616. CSSNode ml = null;
  617. List<CSSNode> mrl = null;
  618. Token end = null;
  619. CSSNode node = null;
  620. try {
  621. start = jj_consume_token(MEDIA_SYM);
  622. label_14:
  623. while (true) {
  624. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  625. case S:
  626. ;
  627. break;
  628. default:
  629. jj_la1[23] = jj_gen;
  630. break label_14;
  631. }
  632. jj_consume_token(S);
  633. }
  634. ml = mediaList();
  635. jj_consume_token(LBRACE);
  636. label_15:
  637. while (true) {
  638. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  639. case S:
  640. ;
  641. break;
  642. default:
  643. jj_la1[24] = jj_gen;
  644. break label_15;
  645. }
  646. jj_consume_token(S);
  647. }
  648. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  649. case DOT:
  650. case COLON:
  651. case ASTERISK:
  652. case LSQUARE:
  653. case HASH:
  654. case PAGE_SYM:
  655. case ATKEYWORD:
  656. case IDENT:
  657. mrl = mediaRuleList();
  658. break;
  659. default:
  660. jj_la1[25] = jj_gen;
  661. ;
  662. }
  663. end = jj_consume_token(RBRACE);
  664. } catch (ParseException pe) {
  665. addException(pe);
  666. {if (true) return null;}
  667. }
  668. if (notNull(start, ml, end)) {
  669. String name = start.image + (ml != null ? " " + ml.getName() : "");
  670. node = new CSSNode(name);
  671. if (mrl != null) {
  672. node.addChildren(mrl);
  673. }
  674. node.setStartLocation(getStartLocation(start));
  675. node.setEndLocation(getEndLocation(end));
  676. }
  677. {if (true) return node;}
  678. throw new Error("Missing return statement in function");
  679. }
  680. // tv, projector, screen, etc
  681. final public CSSNode mediaList() throws ParseException {
  682. StringBuffer sb = new StringBuffer();
  683. CSSNode a = null;
  684. CSSNode b = null;
  685. CSSNode node = null;
  686. try {
  687. a = medium();
  688. sb.append(a.getName());
  689. label_16:
  690. while (true) {
  691. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  692. case COMMA:
  693. ;
  694. break;
  695. default:
  696. jj_la1[26] = jj_gen;
  697. break label_16;
  698. }
  699. jj_consume_token(COMMA);
  700. sb.append(",");
  701. label_17:
  702. while (true) {
  703. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  704. case S:
  705. ;
  706. break;
  707. default:
  708. jj_la1[27] = jj_gen;
  709. break label_17;
  710. }
  711. jj_consume_token(S);
  712. }
  713. b = medium();
  714. if (b != null) sb.append(b.getName());
  715. }
  716. } catch (ParseException pe) {
  717. addException(pe);
  718. {if (true) return null;}
  719. }
  720. if ( notNull(a) ) {
  721. node = new CSSNode(sb.toString());
  722. node.setStartLocation(a.getStartLocation());
  723. node.setEndLocation(b == null ? a.getEndLocation() : b.getEndLocation());
  724. }
  725. {if (true) return node;}
  726. throw new Error("Missing return statement in function");
  727. }
  728. final public List<CSSNode> mediaRuleList() throws ParseException {
  729. List<CSSNode> list = new ArrayList<CSSNode>();
  730. CSSNode n = null;
  731. try {
  732. label_18:
  733. while (true) {
  734. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  735. case DOT:
  736. case COLON:
  737. case ASTERISK:
  738. case LSQUARE:
  739. case HASH:
  740. case IDENT:
  741. n = styleRule();
  742. break;
  743. case PAGE_SYM:
  744. n = pageRule();
  745. break;
  746. case ATKEYWORD:
  747. n = unknownRule();
  748. break;
  749. default:
  750. jj_la1[28] = jj_gen;
  751. jj_consume_token(-1);
  752. throw new ParseException();
  753. }
  754. if (n != null) list.add(n);
  755. label_19:
  756. while (true) {
  757. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  758. case S:
  759. ;
  760. break;
  761. default:
  762. jj_la1[29] = jj_gen;
  763. break label_19;
  764. }
  765. jj_consume_token(S);
  766. }
  767. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  768. case DOT:
  769. case COLON:
  770. case ASTERISK:
  771. case LSQUARE:
  772. case HASH:
  773. case PAGE_SYM:
  774. case ATKEYWORD:
  775. case IDENT:
  776. ;
  777. break;
  778. default:
  779. jj_la1[30] = jj_gen;
  780. break label_18;
  781. }
  782. }
  783. } catch (ParseException pe) {
  784. addException(pe);
  785. }
  786. {if (true) return list;}
  787. throw new Error("Missing return statement in function");
  788. }
  789. final public CSSNode mediaRuleSingle() throws ParseException {
  790. CSSNode n = null;
  791. try {
  792. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  793. case DOT:
  794. case COLON:
  795. case ASTERISK:
  796. case LSQUARE:
  797. case HASH:
  798. case IDENT:
  799. n = styleRule();
  800. break;
  801. case PAGE_SYM:
  802. n = pageRule();
  803. break;
  804. case ATKEYWORD:
  805. n = unknownRule();
  806. break;
  807. default:
  808. jj_la1[31] = jj_gen;
  809. jj_consume_token(-1);
  810. throw new ParseException();
  811. }
  812. } catch (ParseException pe) {
  813. addException(pe);
  814. }
  815. {if (true) return n;}
  816. throw new Error("Missing return statement in function");
  817. }
  818. //
  819. // medium
  820. // : IDENT S*
  821. // ;
  822. //
  823. final public CSSNode medium() throws ParseException {
  824. Token t = null;
  825. CSSNode node = null;
  826. try {
  827. t = jj_consume_token(IDENT);
  828. label_20:
  829. while (true) {
  830. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  831. case S:
  832. ;
  833. break;
  834. default:
  835. jj_la1[32] = jj_gen;
  836. break label_20;
  837. }
  838. jj_consume_token(S);
  839. }
  840. } catch (ParseException pe) {
  841. addException(pe);
  842. {if (true) return null;}
  843. }
  844. if ( t != null ) {
  845. node = new CSSNode(t.image);
  846. node.setStartLocation(getStartLocation(t));
  847. node.setEndLocation(getEndLocation(t));
  848. }
  849. {if (true) return node;}
  850. throw new Error("Missing return statement in function");
  851. }
  852. //
  853. // page
  854. // : PAGE_SYM S* IDENT? pseudo_page? S*
  855. // '{' S* declaration [ ';' S* declaration ]* '}' S*
  856. // ;
  857. //
  858. final public CSSNode pageRule() throws ParseException {
  859. Token start = null;
  860. Token ident = null;
  861. CSSNode pp = null;
  862. CSSNode decl = null;
  863. List<CSSNode> list = new ArrayList<CSSNode>();
  864. Token end = null;
  865. try {
  866. start = jj_consume_token(PAGE_SYM);
  867. label_21:
  868. while (true) {
  869. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  870. case S:
  871. ;
  872. break;
  873. default:
  874. jj_la1[33] = jj_gen;
  875. break label_21;
  876. }
  877. jj_consume_token(S);
  878. }
  879. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  880. case COLON:
  881. case IDENT:
  882. if (jj_2_3(2)) {
  883. ident = jj_consume_token(IDENT);
  884. pp = pseudoPage();
  885. label_22:
  886. while (true) {
  887. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  888. case S:
  889. ;
  890. break;
  891. default:
  892. jj_la1[34] = jj_gen;
  893. break label_22;
  894. }
  895. jj_consume_token(S);
  896. }
  897. } else {
  898. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  899. case IDENT:
  900. jj_consume_token(IDENT);
  901. label_23:
  902. while (true) {
  903. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  904. case S:
  905. ;
  906. break;
  907. default:
  908. jj_la1[35] = jj_gen;
  909. break label_23;
  910. }
  911. jj_consume_token(S);
  912. }
  913. break;
  914. case COLON:
  915. pp = pseudoPage();
  916. label_24:
  917. while (true) {
  918. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  919. case S:
  920. ;
  921. break;
  922. default:
  923. jj_la1[36] = jj_gen;
  924. break label_24;
  925. }
  926. jj_consume_token(S);
  927. }
  928. break;
  929. default:
  930. jj_la1[37] = jj_gen;
  931. jj_consume_token(-1);
  932. throw new ParseException();
  933. }
  934. }
  935. break;
  936. default:
  937. jj_la1[38] = jj_gen;
  938. ;
  939. }
  940. jj_consume_token(LBRACE);
  941. label_25:
  942. while (true) {
  943. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  944. case S:
  945. ;
  946. break;
  947. default:
  948. jj_la1[39] = jj_gen;
  949. break label_25;
  950. }
  951. jj_consume_token(S);
  952. }
  953. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  954. case IDENT:
  955. decl = declaration();
  956. if (decl != null) list.add(decl);
  957. break;
  958. default:
  959. jj_la1[40] = jj_gen;
  960. ;
  961. }
  962. label_26:
  963. while (true) {
  964. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  965. case SEMICOLON:
  966. ;
  967. break;
  968. default:
  969. jj_la1[41] = jj_gen;
  970. break label_26;
  971. }
  972. jj_consume_token(SEMICOLON);
  973. label_27:
  974. while (true) {
  975. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  976. case S:
  977. ;
  978. break;
  979. default:
  980. jj_la1[42] = jj_gen;
  981. break label_27;
  982. }
  983. jj_consume_token(S);
  984. }
  985. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  986. case IDENT:
  987. decl = declaration();
  988. if (decl != null) list.add(decl);
  989. break;
  990. default:
  991. jj_la1[43] = jj_gen;
  992. ;
  993. }
  994. }
  995. end = jj_consume_token(RBRACE);
  996. } catch (ParseException pe) {
  997. addException(pe);
  998. {if (true) return null;}
  999. }
  1000. StringBuffer name = new StringBuffer();
  1001. name.append(start.image);
  1002. if (ident != null)
  1003. name.append(" ").append(ident.image);
  1004. if (pp != null)
  1005. name.append(" ").append(pp.getName());
  1006. CSSNode node = new CSSNode(name.toString());
  1007. node.setStartLocation(getStartLocation(start));
  1008. node.setEndLocation(getEndLocation(end));
  1009. node.addChildren(list);
  1010. {if (true) return node;}
  1011. throw new Error("Missing return statement in function");
  1012. }
  1013. //
  1014. // pseudoPage
  1015. // : ':' IDENT
  1016. // ;
  1017. //
  1018. final public CSSNode pseudoPage() throws ParseException {
  1019. Token t = null;
  1020. try {
  1021. jj_consume_token(COLON);
  1022. t = jj_consume_token(IDENT);
  1023. } catch (ParseException pe) {
  1024. addException(pe);
  1025. }
  1026. CSSNode node = createNode(t);
  1027. node.setName(":" + node.getName());
  1028. {if (true) return node;}
  1029. throw new Error("Missing return statement in function");
  1030. }
  1031. //
  1032. // font_face
  1033. // : FONT_FACE_SYM S*
  1034. // '{' S* declaration [ ';' S* declaration ]* '}' S*
  1035. // ;
  1036. //
  1037. final public CSSNode fontFaceRule() throws ParseException {
  1038. Token start = null;
  1039. CSSNode decl = null;
  1040. List<CSSNode> list = new ArrayList<CSSNode>();
  1041. Token end = null;
  1042. try {
  1043. start = jj_consume_token(FONT_FACE_SYM);
  1044. label_28:
  1045. while (true) {
  1046. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1047. case S:
  1048. ;
  1049. break;
  1050. default:
  1051. jj_la1[44] = jj_gen;
  1052. break label_28;
  1053. }
  1054. jj_consume_token(S);
  1055. }
  1056. jj_consume_token(LBRACE);
  1057. label_29:
  1058. while (true) {
  1059. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1060. case S:
  1061. ;
  1062. break;
  1063. default:
  1064. jj_la1[45] = jj_gen;
  1065. break label_29;
  1066. }
  1067. jj_consume_token(S);
  1068. }
  1069. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1070. case IDENT:
  1071. decl = declaration();
  1072. if (decl != null) list.add(decl);
  1073. break;
  1074. default:
  1075. jj_la1[46] = jj_gen;
  1076. ;
  1077. }
  1078. label_30:
  1079. while (true) {
  1080. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1081. case SEMICOLON:
  1082. ;
  1083. break;
  1084. default:
  1085. jj_la1[47] = jj_gen;
  1086. break label_30;
  1087. }
  1088. jj_consume_token(SEMICOLON);
  1089. label_31:
  1090. while (true) {
  1091. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1092. case S:
  1093. ;
  1094. break;
  1095. default:
  1096. jj_la1[48] = jj_gen;
  1097. break label_31;
  1098. }
  1099. jj_consume_token(S);
  1100. }
  1101. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1102. case IDENT:
  1103. decl = declaration();
  1104. if (decl != null) list.add(decl);
  1105. break;
  1106. default:
  1107. jj_la1[49] = jj_gen;
  1108. ;
  1109. }
  1110. }
  1111. end = jj_consume_token(RBRACE);
  1112. } catch (ParseException pe) {
  1113. addException(pe);
  1114. {if (true) return null;}
  1115. }
  1116. CSSNode node = new CSSNode(start.image);
  1117. node.setStartLocation(getStartLocation(start));
  1118. node.setEndLocation(getEndLocation(end));
  1119. node.addChildren(list);
  1120. {if (true) return node;}
  1121. throw new Error("Missing return statement in function");
  1122. }
  1123. //
  1124. // operator
  1125. // : '/' S* | ',' S* |
  1126. // ;
  1127. //
  1128. final public CSSNode operator() throws ParseException {
  1129. Token t = null;
  1130. try {
  1131. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1132. case SLASH:
  1133. t = jj_consume_token(SLASH);
  1134. label_32:
  1135. while (true) {
  1136. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1137. case S:
  1138. ;
  1139. break;
  1140. default:
  1141. jj_la1[50] = jj_gen;
  1142. break label_32;
  1143. }
  1144. jj_consume_token(S);
  1145. }
  1146. break;
  1147. case COMMA:
  1148. t = jj_consume_token(COMMA);
  1149. label_33:
  1150. while (true) {
  1151. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1152. case S:
  1153. ;
  1154. break;
  1155. default:
  1156. jj_la1[51] = jj_gen;
  1157. break label_33;
  1158. }
  1159. jj_consume_token(S);
  1160. }
  1161. break;
  1162. default:
  1163. jj_la1[52] = jj_gen;
  1164. jj_consume_token(-1);
  1165. throw new ParseException();
  1166. }
  1167. } catch (ParseException pe) {
  1168. addException(pe);
  1169. }
  1170. {if (true) return createNode(t);}
  1171. throw new Error("Missing return statement in function");
  1172. }
  1173. //
  1174. // combinator
  1175. // : '+' S* | '>' S* |
  1176. // ;
  1177. //
  1178. final public CSSNode combinator() throws ParseException {
  1179. Token t = null;
  1180. try {
  1181. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1182. case PLUS:
  1183. t = jj_consume_token(PLUS);
  1184. label_34:
  1185. while (true) {
  1186. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1187. case S:
  1188. ;
  1189. break;
  1190. default:
  1191. jj_la1[53] = jj_gen;
  1192. break label_34;
  1193. }
  1194. jj_consume_token(S);
  1195. }
  1196. break;
  1197. case GT:
  1198. t = jj_consume_token(GT);
  1199. label_35:
  1200. while (true) {
  1201. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1202. case S:
  1203. ;
  1204. break;
  1205. default:
  1206. jj_la1[54] = jj_gen;
  1207. break label_35;
  1208. }
  1209. jj_consume_token(S);
  1210. }
  1211. break;
  1212. case S:
  1213. jj_consume_token(S);
  1214. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1215. case PLUS:
  1216. case GT:
  1217. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1218. case PLUS:
  1219. t = jj_consume_token(PLUS);
  1220. break;
  1221. case GT:
  1222. t = jj_consume_token(GT);
  1223. break;
  1224. default:
  1225. jj_la1[55] = jj_gen;
  1226. jj_consume_token(-1);
  1227. throw new ParseException();
  1228. }
  1229. label_36:
  1230. while (true) {
  1231. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1232. case S:
  1233. ;
  1234. break;
  1235. default:
  1236. jj_la1[56] = jj_gen;
  1237. break label_36;
  1238. }
  1239. jj_consume_token(S);
  1240. }
  1241. break;
  1242. default:
  1243. jj_la1[57] = jj_gen;
  1244. ;
  1245. }
  1246. break;
  1247. default:
  1248. jj_la1[58] = jj_gen;
  1249. jj_consume_token(-1);
  1250. throw new ParseException();
  1251. }
  1252. } catch (ParseException pe) {
  1253. addException(pe);
  1254. }
  1255. {if (true) return createNode(t);}
  1256. throw new Error("Missing return statement in function");
  1257. }
  1258. //
  1259. // unary_operator
  1260. // : '-' | '+'
  1261. // ;
  1262. //
  1263. final public CSSNode unaryOperator() throws ParseException {
  1264. Token t = null;
  1265. try {
  1266. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1267. case MINUS:
  1268. t = jj_consume_token(MINUS);
  1269. break;
  1270. case PLUS:
  1271. t = jj_consume_token(PLUS);
  1272. break;
  1273. default:
  1274. jj_la1[59] = jj_gen;
  1275. jj_consume_token(-1);
  1276. throw new ParseException();
  1277. }
  1278. } catch (ParseException pe) {
  1279. addException(pe);
  1280. }
  1281. {if (true) return createNode(t);}
  1282. throw new Error("Missing return statement in function");
  1283. }
  1284. //
  1285. // property
  1286. // : IDENT S*
  1287. // ;
  1288. //
  1289. final public CSSNode property() throws ParseException {
  1290. Token t = null;
  1291. try {
  1292. t = jj_consume_token(IDENT);
  1293. label_37:
  1294. while (true) {
  1295. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1296. case S:
  1297. ;
  1298. break;
  1299. default:
  1300. jj_la1[60] = jj_gen;
  1301. break label_37;
  1302. }
  1303. jj_consume_token(S);
  1304. }
  1305. } catch (ParseException pe) {
  1306. addException(pe);
  1307. }
  1308. if (t != null && t.image.startsWith("-") && proprietaryAsError) {
  1309. ParseException pe = new ParseException("Parse warning at line " + token.beginLine + ", column " + token.beginColumn + ". Encountered: " + token.image + ", which is a proprietary property name.");
  1310. addException(pe);
  1311. }
  1312. {if (true) return createNode(t);}
  1313. throw new Error("Missing return statement in function");
  1314. }
  1315. //
  1316. // ruleset
  1317. // : selector [ ',' S* selector ]*
  1318. // '{' S* declaration [ ';' S* declaration ]* '}' S*
  1319. // ;
  1320. //
  1321. final public CSSNode styleRule() throws ParseException {
  1322. CSSNode n = null;
  1323. List<CSSNode> list = null;
  1324. try {
  1325. n = selectorList();
  1326. jj_consume_token(LBRACE);
  1327. label_38:
  1328. while (true) {
  1329. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1330. case S:
  1331. ;
  1332. break;
  1333. default:
  1334. jj_la1[61] = jj_gen;
  1335. break label_38;
  1336. }
  1337. jj_consume_token(S);
  1338. }
  1339. list = styleDeclaration();
  1340. jj_consume_token(RBRACE);
  1341. } catch (ParseException pe) {
  1342. addException(pe);
  1343. }
  1344. if (n == null)
  1345. {if (true) return null;}
  1346. if (list != null) {
  1347. n.addChildren(list);
  1348. }
  1349. {if (true) return n;}
  1350. throw new Error("Missing return statement in function");
  1351. }
  1352. final public CSSNode selectorList() throws ParseException {
  1353. List<CSSNode> list = new ArrayList<CSSNode>();
  1354. CSSNode n = null;
  1355. try {
  1356. n = selector();
  1357. if (n != null) list.add(n);
  1358. label_39:
  1359. while (true) {
  1360. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1361. case COMMA:
  1362. ;
  1363. break;
  1364. default:
  1365. jj_la1[62] = jj_gen;
  1366. break label_39;
  1367. }
  1368. jj_consume_token(COMMA);
  1369. label_40:
  1370. while (true) {
  1371. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1372. case S:
  1373. ;
  1374. break;
  1375. default:
  1376. jj_la1[63] = jj_gen;
  1377. break label_40;
  1378. }
  1379. jj_consume_token(S);
  1380. }
  1381. n = selector();
  1382. if (n != null) list.add(n);
  1383. }
  1384. } catch (ParseException pe) {
  1385. addException(pe);
  1386. {if (true) return null;}
  1387. }
  1388. if (list.isEmpty())
  1389. {if (true) return null;}
  1390. CSSNode start = null;
  1391. CSSNode end = null;
  1392. StringBuffer sb = new StringBuffer();
  1393. for (Iterator it = list.iterator(); it.hasNext(); ) {
  1394. CSSNode node = (CSSNode)it.next();
  1395. if (node != null) {
  1396. if (start == null) {
  1397. start = node;
  1398. }
  1399. end = node;
  1400. sb.append(node.getName().trim());
  1401. if (it.hasNext()) {
  1402. sb.append(",");
  1403. }
  1404. }
  1405. }
  1406. if (start == null) {
  1407. {if (true) return null;}
  1408. }
  1409. CSSNode node = new CSSNode(sb.toString());
  1410. node.setStartLocation(start.getStartLocation());
  1411. node.setEndLocation(end.getEndLocation());
  1412. {if (true) return node;}
  1413. throw new Error("Missing return statement in function");
  1414. }
  1415. //
  1416. // selector
  1417. // : simple_selector [ combinator simple_selector ]*
  1418. // ;
  1419. //
  1420. final public CSSNode selector() throws ParseException {
  1421. List<CSSNode> list = new ArrayList<CSSNode>();
  1422. CSSNode n = null;
  1423. try {
  1424. n = simpleSelector();
  1425. list.add(n);
  1426. label_41:
  1427. while (true) {
  1428. if (jj_2_4(2)) {
  1429. ;
  1430. } else {
  1431. break label_41;
  1432. }
  1433. n = combinator();
  1434. list.add(n);
  1435. n = simpleSelector();
  1436. list.add(n);
  1437. }
  1438. label_42:
  1439. while (true) {
  1440. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1441. case S:
  1442. ;
  1443. break;
  1444. default:
  1445. jj_la1[64] = jj_gen;
  1446. break label_42;
  1447. }
  1448. jj_consume_token(S);
  1449. }
  1450. } catch (ParseException pe) {
  1451. addException(pe);
  1452. {if (true) return null;}
  1453. }
  1454. if (list.isEmpty())
  1455. {if (true) return null;}
  1456. CSSNode start = null;
  1457. CSSNode end = null;
  1458. StringBuffer sb = new StringBuffer();
  1459. for (CSSNode node : list) {
  1460. if (node != null) {
  1461. if (start == null) {
  1462. start = node;
  1463. }
  1464. end = node;
  1465. sb.append(node.getName()).append(" ");
  1466. }
  1467. }
  1468. if (start == null) {
  1469. {if (true) return null;}
  1470. }
  1471. CSSNode node = new CSSNode(sb.toString());
  1472. node.setStartLocation(start.getStartLocation());
  1473. node.setEndLocation(end.getEndLocation());
  1474. {if (true) return node;}
  1475. throw new Error("Missing return statement in function");
  1476. }
  1477. //
  1478. // simple_selector
  1479. // : element_name? [ HASH | class | attrib | pseudo ]* S*
  1480. // ;
  1481. //
  1482. final public CSSNode simpleSelector() throws ParseException {
  1483. List<CSSNode> list = new ArrayList<CSSNode>();
  1484. CSSNode n = null;
  1485. try {
  1486. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1487. case ASTERISK:
  1488. case IDENT:
  1489. n = elementName();
  1490. list.add(n);
  1491. label_43:
  1492. while (true) {
  1493. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1494. case DOT:
  1495. case COLON:
  1496. case LSQUARE:
  1497. case HASH:
  1498. ;
  1499. break;
  1500. default:
  1501. jj_la1[65] = jj_gen;
  1502. break label_43;
  1503. }
  1504. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1505. case HASH:
  1506. n = hash();
  1507. list.add(n);
  1508. break;
  1509. case DOT:
  1510. n = _class();
  1511. list.add(n);
  1512. break;
  1513. case LSQUARE:
  1514. n = attrib();
  1515. list.add(n);
  1516. break;
  1517. case COLON:
  1518. n = pseudo();
  1519. list.add(n);
  1520. break;
  1521. default:
  1522. jj_la1[66] = jj_gen;
  1523. jj_consume_token(-1);
  1524. throw new ParseException();
  1525. }
  1526. }
  1527. break;
  1528. case DOT:
  1529. case COLON:
  1530. case LSQUARE:
  1531. case HASH:
  1532. label_44:
  1533. while (true) {
  1534. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1535. case HASH:
  1536. n = hash();
  1537. list.add(n);
  1538. break;
  1539. case DOT:
  1540. n = _class();
  1541. list.add(n);
  1542. break;
  1543. case LSQUARE:
  1544. n = attrib();
  1545. list.add(n);
  1546. break;
  1547. case COLON:
  1548. n = pseudo();
  1549. list.add(n);
  1550. break;
  1551. default:
  1552. jj_la1[67] = jj_gen;
  1553. jj_consume_token(-1);
  1554. throw new ParseException();
  1555. }
  1556. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1557. case DOT:
  1558. case COLON:
  1559. case LSQUARE:
  1560. case HASH:
  1561. ;
  1562. break;
  1563. default:
  1564. jj_la1[68] = jj_gen;
  1565. break label_44;
  1566. }
  1567. }
  1568. break;
  1569. default:
  1570. jj_la1[69] = jj_gen;
  1571. jj_consume_token(-1);
  1572. throw new ParseException();
  1573. }
  1574. } catch (ParseException pe) {
  1575. addException(pe);
  1576. {if (true) return null;}
  1577. }
  1578. if (list.isEmpty())
  1579. {if (true) return null;}
  1580. CSSNode start = null;
  1581. CSSNode end = null;
  1582. StringBuffer sb = new StringBuffer();
  1583. for (CSSNode node : list) {
  1584. if (node != null && node.getName() != null) {
  1585. if (start == null) {
  1586. start = node;
  1587. }
  1588. sb.append(node.getName()).append(" ");
  1589. end = node;
  1590. }
  1591. }
  1592. if (start == null) {
  1593. {if (true) return null;}
  1594. }
  1595. CSSNode node = new CSSNode(sb.toString());
  1596. node.setStartLocation(start.getStartLocation());
  1597. node.setEndLocation(end.getEndLocation());
  1598. {if (true) return node;}
  1599. throw new Error("Missing return statement in function");
  1600. }
  1601. //
  1602. // class
  1603. // : '.' IDENT
  1604. // ;
  1605. //
  1606. final public CSSNode _class() throws ParseException {
  1607. Token t = null;
  1608. try {
  1609. jj_consume_token(DOT);
  1610. t = jj_consume_token(IDENT);
  1611. } catch (ParseException pe) {
  1612. addException(pe);
  1613. {if (true) return null;}
  1614. }
  1615. CSSNode node = createNode(t);
  1616. node.setName("." + node.getName());
  1617. {if (true) return node;}
  1618. throw new Error("Missing return statement in function");
  1619. }
  1620. //
  1621. // element_name
  1622. // : IDENT | '*'
  1623. // ;
  1624. //
  1625. final public CSSNode elementName() throws ParseException {
  1626. Token t = null;
  1627. try {
  1628. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1629. case IDENT:
  1630. t = jj_consume_token(IDENT);
  1631. break;
  1632. case ASTERISK:
  1633. t = jj_consume_token(ASTERISK);
  1634. break;
  1635. default:
  1636. jj_la1[70] = jj_gen;
  1637. jj_consume_token(-1);
  1638. throw new ParseException();
  1639. }
  1640. } catch (ParseException pe) {
  1641. addException(pe);
  1642. }
  1643. {if (true) return createNode(t);}
  1644. throw new Error("Missing return statement in function");
  1645. }
  1646. //
  1647. // attrib
  1648. // : '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*
  1649. // [ IDENT | STRING ] S* ]? ']'
  1650. // ;
  1651. //
  1652. final public CSSNode attrib() throws ParseException {
  1653. Token start = null;
  1654. Token a = null;
  1655. Token b = null;
  1656. Token c = null;
  1657. Token end = null;
  1658. try {
  1659. start = jj_consume_token(LSQUARE);
  1660. label_45:
  1661. while (true) {
  1662. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1663. case S:
  1664. ;
  1665. break;
  1666. default:
  1667. jj_la1[71] = jj_gen;
  1668. break label_45;
  1669. }
  1670. jj_consume_token(S);
  1671. }
  1672. a = jj_consume_token(IDENT);
  1673. label_46:
  1674. while (true) {
  1675. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1676. case S:
  1677. ;
  1678. break;
  1679. default:
  1680. jj_la1[72] = jj_gen;
  1681. break label_46;
  1682. }
  1683. jj_consume_token(S);
  1684. }
  1685. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1686. case EQUALS:
  1687. case INCLUDES:
  1688. case DASHMATCH:
  1689. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1690. case EQUALS:
  1691. b = jj_consume_token(EQUALS);
  1692. break;
  1693. case INCLUDES:
  1694. b = jj_consume_token(INCLUDES);
  1695. break;
  1696. case DASHMATCH:
  1697. b = jj_consume_token(DASHMATCH);
  1698. break;
  1699. default:
  1700. jj_la1[73] = jj_gen;
  1701. jj_consume_token(-1);
  1702. throw new ParseException();
  1703. }
  1704. label_47:
  1705. while (true) {
  1706. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1707. case S:
  1708. ;
  1709. break;
  1710. default:
  1711. jj_la1[74] = jj_gen;
  1712. break label_47;
  1713. }
  1714. jj_consume_token(S);
  1715. }
  1716. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1717. case IDENT:
  1718. c = jj_consume_token(IDENT);
  1719. break;
  1720. case STRING:
  1721. c = jj_consume_token(STRING);
  1722. break;
  1723. default:
  1724. jj_la1[75] = jj_gen;
  1725. jj_consume_token(-1);
  1726. throw new ParseException();
  1727. }
  1728. label_48:
  1729. while (true) {
  1730. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1731. case S:
  1732. ;
  1733. break;
  1734. default:
  1735. jj_la1[76] = jj_gen;
  1736. break label_48;
  1737. }
  1738. jj_consume_token(S);
  1739. }
  1740. break;
  1741. default:
  1742. jj_la1[77] = jj_gen;
  1743. ;
  1744. }
  1745. end = jj_consume_token(RSQUARE);
  1746. } catch (ParseException pe) {
  1747. addException(pe);
  1748. {if (true) return null;}
  1749. }
  1750. if (a != null) {
  1751. StringBuffer name = new StringBuffer();
  1752. name.append(a.image);
  1753. if (b != null)
  1754. name.append(" ").append(b.image);
  1755. if (c != null)
  1756. name.append(" ").append(c.image);
  1757. CSSNode node = new CSSNode(name.toString());
  1758. node.setStartLocation(getStartLocation(start));
  1759. node.setEndLocation(getEndLocation(end));
  1760. {if (true) return node;}
  1761. }
  1762. {if (true) return null;}
  1763. throw new Error("Missing return statement in function");
  1764. }
  1765. //
  1766. // pseudo
  1767. // : ':' [ IDENT | FUNCTION S* IDENT S* ')' ]
  1768. // ;
  1769. //
  1770. final public CSSNode pseudo() throws ParseException {
  1771. Token start = null;
  1772. Token ident = null;
  1773. Token func = null;
  1774. Token end = null;
  1775. try {
  1776. start = jj_consume_token(COLON);
  1777. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1778. case IDENT:
  1779. ident = jj_consume_token(IDENT);
  1780. break;
  1781. case FUNCTION:
  1782. func = jj_consume_token(FUNCTION);
  1783. label_49:
  1784. while (true) {
  1785. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1786. case S:
  1787. ;
  1788. break;
  1789. default:
  1790. jj_la1[78] = jj_gen;
  1791. break label_49;
  1792. }
  1793. jj_consume_token(S);
  1794. }
  1795. ident = jj_consume_token(IDENT);
  1796. label_50:
  1797. while (true) {
  1798. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1799. case S:
  1800. ;
  1801. break;
  1802. default:
  1803. jj_la1[79] = jj_gen;
  1804. break label_50;
  1805. }
  1806. jj_consume_token(S);
  1807. }
  1808. end = jj_consume_token(RROUND);
  1809. break;
  1810. default:
  1811. jj_la1[80] = jj_gen;
  1812. jj_consume_token(-1);
  1813. throw new ParseException();
  1814. }
  1815. } catch (ParseException pe) {
  1816. addException(pe);
  1817. {if (true) return null;}
  1818. }
  1819. String name = ":" + (func != null ? func.image : "") + (ident != null ? ident.image : "");
  1820. CSSNode node = new CSSNode(name);
  1821. node.setStartLocation(getStartLocation(start));
  1822. node.setEndLocation(end != null ? getEndLocation(end) : getEndLocation(ident));
  1823. {if (true) return node;}
  1824. throw new Error("Missing return statement in function");
  1825. }
  1826. final public CSSNode hash() throws ParseException {
  1827. Token t = null;
  1828. try {
  1829. t = jj_consume_token(HASH);
  1830. } catch (ParseException pe) {
  1831. addException(pe);
  1832. }
  1833. {if (true) return createNode(t);}
  1834. throw new Error("Missing return statement in function");
  1835. }
  1836. final public List<CSSNode> styleDeclaration() throws ParseException {
  1837. List<CSSNode> list = new ArrayList<CSSNode>();
  1838. CSSNode n = null;
  1839. try {
  1840. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1841. case IDENT:
  1842. n = declaration();
  1843. list.add(n);
  1844. break;
  1845. default:
  1846. jj_la1[81] = jj_gen;
  1847. ;
  1848. }
  1849. label_51:
  1850. while (true) {
  1851. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1852. case SEMICOLON:
  1853. ;
  1854. break;
  1855. default:
  1856. jj_la1[82] = jj_gen;
  1857. break label_51;
  1858. }
  1859. jj_consume_token(SEMICOLON);
  1860. label_52:
  1861. while (true) {
  1862. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1863. case S:
  1864. ;
  1865. break;
  1866. default:
  1867. jj_la1[83] = jj_gen;
  1868. break label_52;
  1869. }
  1870. jj_consume_token(S);
  1871. }