source: josm/trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.java@ 3888

Last change on this file since 3888 was 3888, checked in by bastiK, 13 years ago

mapcss: several small fixes

  • Property svn:eol-style set to native
File size: 49.1 KB
Line 
1/* Generated By:JavaCC: Do not edit this line. MapCSSParser.java */
2package org.openstreetmap.josm.gui.mappaint.mapcss.parser;
3
4import java.awt.Color;
5import java.util.ArrayList;
6import java.util.List;
7
8import org.openstreetmap.josm.gui.mappaint.mapcss.Condition;
9import org.openstreetmap.josm.gui.mappaint.mapcss.Expression;
10import org.openstreetmap.josm.gui.mappaint.mapcss.Instruction;
11import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule;
12import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
13import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
14import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.FunctionExpression;
15import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.LiteralExpression;
16import org.openstreetmap.josm.tools.Pair;
17
18public class MapCSSParser implements MapCSSParserConstants {
19 MapCSSStyleSource sheet;
20
21/*************
22 * Parser definitions
23 *
24 * rule
25 * _______________________|______________________________
26 * | |
27 * selector declaration
28 * _________|___________________ _________|____________
29 * | | | |
30 *
31 * way|z11-12[highway=residential] { color: red; width: 3 }
32 *
33 * |_____||___________________| |_________|
34 * | | |
35 * zoom condition instruction
36 *
37 * more general:
38 *
39 * way|z13-[a=b][c=d]::subpart, way|z-3[u=v]:closed::subpart2 { p1 : val; p2 : val; }
40 *
41 * 'val' can be a literal, or an expression like "prop(width, default) + 0.8".
42 *
43 */
44 final public int uint() throws ParseException {
45 Token i;
46 i = jj_consume_token(UINT);
47 {if (true) return Integer.parseInt(i.image);}
48 throw new Error("Missing return statement in function");
49 }
50
51 final public float ufloat() throws ParseException {
52 Token f;
53 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
54 case UFLOAT:
55 f = jj_consume_token(UFLOAT);
56 break;
57 case UINT:
58 f = jj_consume_token(UINT);
59 break;
60 default:
61 jj_la1[0] = jj_gen;
62 jj_consume_token(-1);
63 throw new ParseException();
64 }
65 {if (true) return Float.parseFloat(f.image);}
66 throw new Error("Missing return statement in function");
67 }
68
69 final public float float_() throws ParseException {
70 float f;
71 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
72 case MINUS:
73 jj_consume_token(MINUS);
74 f = ufloat();
75 {if (true) return -f;}
76 break;
77 case UINT:
78 case UFLOAT:
79 f = ufloat();
80 {if (true) return f;}
81 break;
82 default:
83 jj_la1[1] = jj_gen;
84 jj_consume_token(-1);
85 throw new ParseException();
86 }
87 throw new Error("Missing return statement in function");
88 }
89
90 final public String string() throws ParseException {
91 Token t;
92 t = jj_consume_token(STRING);
93 {if (true) return t.image.substring(1, t.image.length() - 1).replace("\\\"", "\"").replace("\\\\", "\\");}
94 throw new Error("Missing return statement in function");
95 }
96
97 final public String string_or_ident() throws ParseException {
98 Token t;
99 String s;
100 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
101 case IDENT:
102 t = jj_consume_token(IDENT);
103 {if (true) return t.image;}
104 break;
105 case STRING:
106 s = string();
107 {if (true) return s;}
108 break;
109 default:
110 jj_la1[2] = jj_gen;
111 jj_consume_token(-1);
112 throw new ParseException();
113 }
114 throw new Error("Missing return statement in function");
115 }
116
117 final public String regex() throws ParseException {
118 Token t;
119 t = jj_consume_token(REGEX);
120 {if (true) return t.image.substring(1, t.image.length() - 1);}
121 throw new Error("Missing return statement in function");
122 }
123
124/**
125 * white-space
126 */
127 final public void s() throws ParseException {
128 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
129 case S:
130 jj_consume_token(S);
131 break;
132 default:
133 jj_la1[3] = jj_gen;
134 ;
135 }
136 }
137
138/**
139 * mix of white-space and comments
140 */
141 final public void w() throws ParseException {
142 label_1:
143 while (true) {
144 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
145 case S:
146 case COMMENT_START:
147 ;
148 break;
149 default:
150 jj_la1[4] = jj_gen;
151 break label_1;
152 }
153 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
154 case S:
155 jj_consume_token(S);
156 break;
157 case COMMENT_START:
158 jj_consume_token(COMMENT_START);
159 jj_consume_token(COMMENT_END);
160 break;
161 default:
162 jj_la1[5] = jj_gen;
163 jj_consume_token(-1);
164 throw new ParseException();
165 }
166 }
167 }
168
169/**
170 * comma delimited list of floats (at least 2, all >= 0)
171 */
172 final public List<Float> float_array() throws ParseException {
173 float f;
174 List<Float> fs = new ArrayList<Float>();
175 f = ufloat();
176 fs.add(f);
177 label_2:
178 while (true) {
179 jj_consume_token(COMMA);
180 s();
181 f = ufloat();
182 fs.add(f);
183 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
184 case COMMA:
185 ;
186 break;
187 default:
188 jj_la1[6] = jj_gen;
189 break label_2;
190 }
191 }
192 {if (true) return fs;}
193 throw new Error("Missing return statement in function");
194 }
195
196/**
197 * root
198 */
199 final public void sheet(MapCSSStyleSource sheet) throws ParseException {
200 MapCSSRule r;
201 Token com = null;
202 this.sheet = sheet;
203 w();
204 label_3:
205 while (true) {
206 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
207 case IDENT:
208 case STAR:
209 ;
210 break;
211 default:
212 jj_la1[7] = jj_gen;
213 break label_3;
214 }
215 try {
216 r = rule();
217 if (r != null) { sheet.rules.add(r); }
218 w();
219 } catch (ParseException ex) {
220 error_skipto(RBRACE);
221 w();
222 }
223 }
224 jj_consume_token(0);
225 }
226
227 final public MapCSSRule rule() throws ParseException {
228 List<Selector> selectors = new ArrayList<Selector>();
229 Selector sel;
230 List<Instruction> decl;
231 sel = selector();
232 selectors.add(sel);
233 w();
234 label_4:
235 while (true) {
236 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
237 case COMMA:
238 ;
239 break;
240 default:
241 jj_la1[8] = jj_gen;
242 break label_4;
243 }
244 jj_consume_token(COMMA);
245 w();
246 sel = selector();
247 selectors.add(sel);
248 w();
249 }
250 decl = declaration();
251 {if (true) return new MapCSSRule(selectors, decl);}
252 throw new Error("Missing return statement in function");
253 }
254
255 final public Selector selector() throws ParseException {
256 Token base;
257 Condition c;
258 Pair<Integer, Integer> r = null;
259 List<Condition> conditions = new ArrayList<Condition>();
260 String sub = null;
261 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
262 case IDENT:
263 base = jj_consume_token(IDENT);
264 break;
265 case STAR:
266 base = jj_consume_token(STAR);
267 break;
268 default:
269 jj_la1[9] = jj_gen;
270 jj_consume_token(-1);
271 throw new ParseException();
272 }
273 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
274 case PIPE_Z:
275 r = zoom();
276 break;
277 default:
278 jj_la1[10] = jj_gen;
279 ;
280 }
281 label_5:
282 while (true) {
283 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
284 case LSQUARE:
285 case EXCLAMATION:
286 case COLON:
287 ;
288 break;
289 default:
290 jj_la1[11] = jj_gen;
291 break label_5;
292 }
293 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
294 case LSQUARE:
295 c = condition();
296 break;
297 case EXCLAMATION:
298 case COLON:
299 c = pseudoclass();
300 break;
301 default:
302 jj_la1[12] = jj_gen;
303 jj_consume_token(-1);
304 throw new ParseException();
305 }
306 conditions.add(c);
307 }
308 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
309 case DCOLON:
310 sub = subpart();
311 break;
312 default:
313 jj_la1[13] = jj_gen;
314 ;
315 }
316 {if (true) return new Selector(base.image, r, conditions, sub);}
317 throw new Error("Missing return statement in function");
318 }
319
320 final public Pair<Integer, Integer> zoom() throws ParseException {
321 Integer min = 0;
322 Integer max = Integer.MAX_VALUE;
323 jj_consume_token(PIPE_Z);
324 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
325 case MINUS:
326 jj_consume_token(MINUS);
327 max = uint();
328 break;
329 case UINT:
330 min = uint();
331 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
332 case MINUS:
333 jj_consume_token(MINUS);
334 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
335 case UINT:
336 max = uint();
337 break;
338 default:
339 jj_la1[14] = jj_gen;
340 ;
341 }
342 break;
343 default:
344 jj_la1[15] = jj_gen;
345 ;
346 }
347 break;
348 default:
349 jj_la1[16] = jj_gen;
350 jj_consume_token(-1);
351 throw new ParseException();
352 }
353 {if (true) return new Pair<Integer, Integer>(min, max);}
354 throw new Error("Missing return statement in function");
355 }
356
357 final public Condition condition() throws ParseException {
358 Condition c;
359 Expression e;
360 jj_consume_token(LSQUARE);
361 if (jj_2_1(3)) {
362 c = simple_key_condition();
363 jj_consume_token(RSQUARE);
364 {if (true) return c;}
365 } else if (jj_2_2(5)) {
366 c = simple_key_value_condition();
367 jj_consume_token(RSQUARE);
368 {if (true) return c;}
369 } else {
370 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
371 case IDENT:
372 case UINT:
373 case UFLOAT:
374 case STRING:
375 case HEXCOLOR:
376 case LPAR:
377 case EXCLAMATION:
378 case PLUS:
379 case MINUS:
380 e = expression();
381 jj_consume_token(RSQUARE);
382 {if (true) return new Condition.ExpressionCondition(e);}
383 break;
384 default:
385 jj_la1[17] = jj_gen;
386 jj_consume_token(-1);
387 throw new ParseException();
388 }
389 }
390 throw new Error("Missing return statement in function");
391 }
392
393 final public Condition simple_key_condition() throws ParseException {
394 boolean not = false;
395 String key;
396 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
397 case EXCLAMATION:
398 jj_consume_token(EXCLAMATION);
399 not = true;
400 break;
401 default:
402 jj_la1[18] = jj_gen;
403 ;
404 }
405 key = string_or_ident();
406 {if (true) return new Condition.KeyCondition(key, not);}
407 throw new Error("Missing return statement in function");
408 }
409
410 final public Condition simple_key_value_condition() throws ParseException {
411 String key;
412 String val;
413 float f;
414 Condition.Op op;
415 key = string_or_ident();
416 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
417 case STAR:
418 case EQUAL:
419 case EXCLAMATION:
420 case TILDE:
421 case DOLLAR:
422 case CARET:
423 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
424 case EXCLAMATION:
425 jj_consume_token(EXCLAMATION);
426 jj_consume_token(EQUAL);
427 op=Condition.Op.NEQ;
428 val = string_or_ident();
429 break;
430 case EQUAL:
431 jj_consume_token(EQUAL);
432 op=Condition.Op.EQ;
433 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
434 case TILDE:
435 jj_consume_token(TILDE);
436 op=Condition.Op.REGEX;
437 val = regex();
438 break;
439 case IDENT:
440 case STRING:
441 val = string_or_ident();
442 break;
443 default:
444 jj_la1[19] = jj_gen;
445 jj_consume_token(-1);
446 throw new ParseException();
447 }
448 break;
449 case TILDE:
450 jj_consume_token(TILDE);
451 jj_consume_token(EQUAL);
452 op=Condition.Op.ONE_OF;
453 val = string_or_ident();
454 break;
455 case CARET:
456 jj_consume_token(CARET);
457 jj_consume_token(EQUAL);
458 op=Condition.Op.BEGINS_WITH;
459 val = string_or_ident();
460 break;
461 case DOLLAR:
462 jj_consume_token(DOLLAR);
463 jj_consume_token(EQUAL);
464 op=Condition.Op.ENDS_WITH;
465 val = string_or_ident();
466 break;
467 case STAR:
468 jj_consume_token(STAR);
469 jj_consume_token(EQUAL);
470 op=Condition.Op.CONTAINS;
471 val = string_or_ident();
472 break;
473 default:
474 jj_la1[20] = jj_gen;
475 jj_consume_token(-1);
476 throw new ParseException();
477 }
478 {if (true) return new Condition.KeyValueCondition(key, val, op);}
479 break;
480 case GREATER_EQUAL:
481 case LESS_EQUAL:
482 case GREATER:
483 case LESS:
484 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
485 case GREATER_EQUAL:
486 jj_consume_token(GREATER_EQUAL);
487 op=Condition.Op.GREATER_OR_EQUAL;
488 break;
489 case GREATER:
490 jj_consume_token(GREATER);
491 op=Condition.Op.GREATER;
492 break;
493 case LESS_EQUAL:
494 jj_consume_token(LESS_EQUAL);
495 op=Condition.Op.LESS_OR_EQUAL;
496 break;
497 case LESS:
498 jj_consume_token(LESS);
499 op=Condition.Op.LESS;
500 break;
501 default:
502 jj_la1[21] = jj_gen;
503 jj_consume_token(-1);
504 throw new ParseException();
505 }
506 f = float_();
507 {if (true) return new Condition.KeyValueCondition(key, Float.toString(f), op);}
508 break;
509 default:
510 jj_la1[22] = jj_gen;
511 jj_consume_token(-1);
512 throw new ParseException();
513 }
514 throw new Error("Missing return statement in function");
515 }
516
517 final public Condition pseudoclass() throws ParseException {
518 Token t;
519 boolean not = false;
520 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
521 case EXCLAMATION:
522 jj_consume_token(EXCLAMATION);
523 not = true;
524 break;
525 default:
526 jj_la1[23] = jj_gen;
527 ;
528 }
529 jj_consume_token(COLON);
530 t = jj_consume_token(IDENT);
531 {if (true) return new Condition.PseudoClassCondition(t.image, not);}
532 throw new Error("Missing return statement in function");
533 }
534
535 final public String subpart() throws ParseException {
536 Token t;
537 jj_consume_token(DCOLON);
538 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
539 case IDENT:
540 t = jj_consume_token(IDENT);
541 break;
542 case STAR:
543 t = jj_consume_token(STAR);
544 break;
545 default:
546 jj_la1[24] = jj_gen;
547 jj_consume_token(-1);
548 throw new ParseException();
549 }
550 {if (true) return t.image;}
551 throw new Error("Missing return statement in function");
552 }
553
554 final public List<Instruction> declaration() throws ParseException {
555 List<Instruction> ins = new ArrayList<Instruction>();
556 Instruction i;
557 Token key;
558 Object val;
559 jj_consume_token(LBRACE);
560 w();
561 label_6:
562 while (true) {
563 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
564 case IDENT:
565 ;
566 break;
567 default:
568 jj_la1[25] = jj_gen;
569 break label_6;
570 }
571 key = jj_consume_token(IDENT);
572 w();
573 jj_consume_token(COLON);
574 w();
575 if (jj_2_3(2147483647)) {
576 val = float_array();
577 ins.add(new Instruction.AssignmentInstruction(key.image, val));
578 w();
579 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
580 case RBRACE:
581 jj_consume_token(RBRACE);
582 {if (true) return ins;}
583 break;
584 case SEMICOLON:
585 jj_consume_token(SEMICOLON);
586 w();
587 break;
588 default:
589 jj_la1[26] = jj_gen;
590 jj_consume_token(-1);
591 throw new ParseException();
592 }
593 } else if (jj_2_4(2147483647)) {
594 val = expression();
595 ins.add(new Instruction.AssignmentInstruction(key.image, val));
596 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
597 case RBRACE:
598 jj_consume_token(RBRACE);
599 {if (true) return ins;}
600 break;
601 case SEMICOLON:
602 jj_consume_token(SEMICOLON);
603 w();
604 break;
605 default:
606 jj_la1[27] = jj_gen;
607 jj_consume_token(-1);
608 throw new ParseException();
609 }
610 } else {
611 val = readRaw();
612 w();
613 ins.add(new Instruction.AssignmentInstruction(key.image, val));
614 }
615 }
616 jj_consume_token(RBRACE);
617 {if (true) return ins;}
618 throw new Error("Missing return statement in function");
619 }
620
621 final public Expression expression() throws ParseException {
622 List<Expression> args = new ArrayList<Expression>();
623 Expression e;
624 String op = null;
625 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
626 case EXCLAMATION:
627 jj_consume_token(EXCLAMATION);
628 op = "not";
629 w();
630 e = primary();
631 args.add(e);
632 w();
633 break;
634 case MINUS:
635 jj_consume_token(MINUS);
636 op = "minus";
637 w();
638 e = primary();
639 args.add(e);
640 w();
641 break;
642 case IDENT:
643 case UINT:
644 case UFLOAT:
645 case STRING:
646 case HEXCOLOR:
647 case LPAR:
648 case PLUS:
649 e = primary();
650 args.add(e);
651 w();
652 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
653 case STAR:
654 case SLASH:
655 case GREATER_EQUAL:
656 case LESS_EQUAL:
657 case GREATER:
658 case LESS:
659 case EQUAL:
660 case PIPE:
661 case PLUS:
662 case MINUS:
663 case AMPERSAND:
664 case QUESTION:
665 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
666 case PLUS:
667 label_7:
668 while (true) {
669 jj_consume_token(PLUS);
670 op = "plus";
671 w();
672 e = primary();
673 args.add(e);
674 w();
675 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
676 case PLUS:
677 ;
678 break;
679 default:
680 jj_la1[28] = jj_gen;
681 break label_7;
682 }
683 }
684 break;
685 case STAR:
686 label_8:
687 while (true) {
688 jj_consume_token(STAR);
689 op = "times";
690 w();
691 e = primary();
692 args.add(e);
693 w();
694 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
695 case STAR:
696 ;
697 break;
698 default:
699 jj_la1[29] = jj_gen;
700 break label_8;
701 }
702 }
703 break;
704 case MINUS:
705 label_9:
706 while (true) {
707 jj_consume_token(MINUS);
708 op = "minus";
709 w();
710 e = primary();
711 args.add(e);
712 w();
713 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
714 case MINUS:
715 ;
716 break;
717 default:
718 jj_la1[30] = jj_gen;
719 break label_9;
720 }
721 }
722 break;
723 case SLASH:
724 label_10:
725 while (true) {
726 jj_consume_token(SLASH);
727 op = "divided_by";
728 w();
729 e = primary();
730 args.add(e);
731 w();
732 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
733 case SLASH:
734 ;
735 break;
736 default:
737 jj_la1[31] = jj_gen;
738 break label_10;
739 }
740 }
741 break;
742 case GREATER_EQUAL:
743 jj_consume_token(GREATER_EQUAL);
744 op = "greater_equal";
745 w();
746 e = primary();
747 args.add(e);
748 w();
749 break;
750 case LESS_EQUAL:
751 jj_consume_token(LESS_EQUAL);
752 op = "less_equal";
753 w();
754 e = primary();
755 args.add(e);
756 w();
757 break;
758 case GREATER:
759 jj_consume_token(GREATER);
760 op = "greater";
761 w();
762 e = primary();
763 args.add(e);
764 w();
765 break;
766 case EQUAL:
767 jj_consume_token(EQUAL);
768 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
769 case EQUAL:
770 jj_consume_token(EQUAL);
771 break;
772 default:
773 jj_la1[32] = jj_gen;
774 ;
775 }
776 op = "equal";
777 w();
778 e = primary();
779 args.add(e);
780 w();
781 break;
782 case LESS:
783 jj_consume_token(LESS);
784 op = "less";
785 w();
786 e = primary();
787 args.add(e);
788 w();
789 break;
790 case AMPERSAND:
791 jj_consume_token(AMPERSAND);
792 jj_consume_token(AMPERSAND);
793 op = "and";
794 w();
795 e = primary();
796 args.add(e);
797 w();
798 break;
799 case PIPE:
800 jj_consume_token(PIPE);
801 jj_consume_token(PIPE);
802 op = "or";
803 w();
804 e = primary();
805 args.add(e);
806 w();
807 break;
808 case QUESTION:
809 jj_consume_token(QUESTION);
810 op = "cond";
811 w();
812 e = primary();
813 args.add(e);
814 w();
815 jj_consume_token(COLON);
816 w();
817 e = primary();
818 args.add(e);
819 w();
820 break;
821 default:
822 jj_la1[33] = jj_gen;
823 jj_consume_token(-1);
824 throw new ParseException();
825 }
826 break;
827 default:
828 jj_la1[34] = jj_gen;
829 ;
830 }
831 break;
832 default:
833 jj_la1[35] = jj_gen;
834 jj_consume_token(-1);
835 throw new ParseException();
836 }
837 if (op == null)
838 {if (true) return args.get(0);}
839 {if (true) return new FunctionExpression(op, args);}
840 throw new Error("Missing return statement in function");
841 }
842
843 final public Expression primary() throws ParseException {
844 Expression nested;
845 FunctionExpression fn;
846 Object lit;
847 if (jj_2_5(2)) {
848 // both function and identifier start with an identifier
849 fn = function();
850 {if (true) return fn;}
851 } else {
852 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
853 case IDENT:
854 case UINT:
855 case UFLOAT:
856 case STRING:
857 case HEXCOLOR:
858 case PLUS:
859 lit = literal();
860 {if (true) return new LiteralExpression(lit);}
861 break;
862 case LPAR:
863 jj_consume_token(LPAR);
864 w();
865 nested = expression();
866 jj_consume_token(RPAR);
867 {if (true) return nested;}
868 break;
869 default:
870 jj_la1[36] = jj_gen;
871 jj_consume_token(-1);
872 throw new ParseException();
873 }
874 }
875 throw new Error("Missing return statement in function");
876 }
877
878 final public FunctionExpression function() throws ParseException {
879 Token tmp;
880 Expression arg;
881 String name;
882 List<Expression> args = new ArrayList<Expression>();
883 tmp = jj_consume_token(IDENT);
884 name = tmp.image;
885 w();
886 jj_consume_token(LPAR);
887 w();
888 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
889 case IDENT:
890 case UINT:
891 case UFLOAT:
892 case STRING:
893 case HEXCOLOR:
894 case LPAR:
895 case EXCLAMATION:
896 case PLUS:
897 case MINUS:
898 arg = expression();
899 args.add(arg);
900 label_11:
901 while (true) {
902 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
903 case COMMA:
904 ;
905 break;
906 default:
907 jj_la1[37] = jj_gen;
908 break label_11;
909 }
910 jj_consume_token(COMMA);
911 w();
912 arg = expression();
913 args.add(arg);
914 }
915 break;
916 default:
917 jj_la1[38] = jj_gen;
918 ;
919 }
920 jj_consume_token(RPAR);
921 {if (true) return new FunctionExpression(name, args);}
922 throw new Error("Missing return statement in function");
923 }
924
925 final public Object literal() throws ParseException {
926 Object val;
927 Token t;
928 float f;
929 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
930 case IDENT:
931 case STRING:
932 val = string_or_ident();
933 {if (true) return val;}
934 break;
935 case PLUS:
936 jj_consume_token(PLUS);
937 f = ufloat();
938 {if (true) return new Instruction.RelativeFloat(f);}
939 break;
940 case UINT:
941 case UFLOAT:
942 f = ufloat();
943 {if (true) return f;}
944 break;
945 case HEXCOLOR:
946 t = jj_consume_token(HEXCOLOR);
947 String clr = t.image.substring(1);
948 if (clr.length() == 3) {
949 clr = new String(new char[] {clr.charAt(0),clr.charAt(0),clr.charAt(1),clr.charAt(1),clr.charAt(2),clr.charAt(2)});
950 }
951 if (clr.length() != 6)
952 {if (true) throw new AssertionError();}
953 {if (true) return new Color(Integer.parseInt(clr, 16));}
954 break;
955 default:
956 jj_la1[39] = jj_gen;
957 jj_consume_token(-1);
958 throw new ParseException();
959 }
960 throw new Error("Missing return statement in function");
961 }
962
963 void error_skipto(int kind) throws ParseException {
964 ParseException e = generateParseException();
965 System.err.println("Skipping to the next rule, because of an error:");
966 System.err.println(e);
967 if (sheet != null) {
968 sheet.logError(e);
969 }
970 Token t;
971 do {
972 t = getNextToken();
973 } while (t.kind != kind && t.kind != EOF);
974 if (t.kind == EOF)
975 throw new ParseException("Reached end of file while parsing");
976 }
977
978/**
979 * read everything to the next semicolon
980 */
981 String readRaw() throws ParseException {
982 Token t;
983 StringBuilder s = new StringBuilder();
984 while (true) {
985 t = getNextToken();
986 if (t.kind == SEMICOLON || t.kind == EOF)
987 break;
988 s.append(t.image);
989 }
990 if (t.kind == EOF)
991 throw new ParseException("Reached end of file while parsing");
992 return s.toString();
993 }
994
995 private boolean jj_2_1(int xla) {
996 jj_la = xla; jj_lastpos = jj_scanpos = token;
997 try { return !jj_3_1(); }
998 catch(LookaheadSuccess ls) { return true; }
999 finally { jj_save(0, xla); }
1000 }
1001
1002 private boolean jj_2_2(int xla) {
1003 jj_la = xla; jj_lastpos = jj_scanpos = token;
1004 try { return !jj_3_2(); }
1005 catch(LookaheadSuccess ls) { return true; }
1006 finally { jj_save(1, xla); }
1007 }
1008
1009 private boolean jj_2_3(int xla) {
1010 jj_la = xla; jj_lastpos = jj_scanpos = token;
1011 try { return !jj_3_3(); }
1012 catch(LookaheadSuccess ls) { return true; }
1013 finally { jj_save(2, xla); }
1014 }
1015
1016 private boolean jj_2_4(int xla) {
1017 jj_la = xla; jj_lastpos = jj_scanpos = token;
1018 try { return !jj_3_4(); }
1019 catch(LookaheadSuccess ls) { return true; }
1020 finally { jj_save(3, xla); }
1021 }
1022
1023 private boolean jj_2_5(int xla) {
1024 jj_la = xla; jj_lastpos = jj_scanpos = token;
1025 try { return !jj_3_5(); }
1026 catch(LookaheadSuccess ls) { return true; }
1027 finally { jj_save(4, xla); }
1028 }
1029
1030 private boolean jj_3R_17() {
1031 if (jj_scan_token(IDENT)) return true;
1032 if (jj_3R_15()) return true;
1033 if (jj_scan_token(LPAR)) return true;
1034 if (jj_3R_15()) return true;
1035 Token xsp;
1036 xsp = jj_scanpos;
1037 if (jj_3R_70()) jj_scanpos = xsp;
1038 if (jj_scan_token(RPAR)) return true;
1039 return false;
1040 }
1041
1042 private boolean jj_3R_29() {
1043 if (jj_3R_45()) return true;
1044 return false;
1045 }
1046
1047 private boolean jj_3R_24() {
1048 Token xsp;
1049 xsp = jj_scanpos;
1050 if (jj_scan_token(9)) {
1051 jj_scanpos = xsp;
1052 if (jj_3R_42()) return true;
1053 }
1054 return false;
1055 }
1056
1057 private boolean jj_3R_15() {
1058 Token xsp;
1059 while (true) {
1060 xsp = jj_scanpos;
1061 if (jj_3R_24()) { jj_scanpos = xsp; break; }
1062 }
1063 return false;
1064 }
1065
1066 private boolean jj_3R_51() {
1067 if (jj_scan_token(LPAR)) return true;
1068 if (jj_3R_15()) return true;
1069 if (jj_3R_16()) return true;
1070 if (jj_scan_token(RPAR)) return true;
1071 return false;
1072 }
1073
1074 private boolean jj_3R_50() {
1075 if (jj_3R_65()) return true;
1076 return false;
1077 }
1078
1079 private boolean jj_3R_41() {
1080 Token xsp;
1081 xsp = jj_scanpos;
1082 if (jj_scan_token(9)) jj_scanpos = xsp;
1083 return false;
1084 }
1085
1086 private boolean jj_3R_49() {
1087 if (jj_3R_22()) return true;
1088 return false;
1089 }
1090
1091 private boolean jj_3R_43() {
1092 Token xsp;
1093 xsp = jj_scanpos;
1094 if (jj_3_5()) {
1095 jj_scanpos = xsp;
1096 if (jj_3R_50()) {
1097 jj_scanpos = xsp;
1098 if (jj_3R_51()) return true;
1099 }
1100 }
1101 return false;
1102 }
1103
1104 private boolean jj_3_5() {
1105 if (jj_3R_17()) return true;
1106 return false;
1107 }
1108
1109 private boolean jj_3R_63() {
1110 if (jj_scan_token(QUESTION)) return true;
1111 if (jj_3R_15()) return true;
1112 if (jj_3R_43()) return true;
1113 if (jj_3R_15()) return true;
1114 if (jj_scan_token(COLON)) return true;
1115 if (jj_3R_15()) return true;
1116 if (jj_3R_43()) return true;
1117 if (jj_3R_15()) return true;
1118 return false;
1119 }
1120
1121 private boolean jj_3R_62() {
1122 if (jj_scan_token(PIPE)) return true;
1123 if (jj_scan_token(PIPE)) return true;
1124 if (jj_3R_15()) return true;
1125 if (jj_3R_43()) return true;
1126 if (jj_3R_15()) return true;
1127 return false;
1128 }
1129
1130 private boolean jj_3R_39() {
1131 if (jj_scan_token(LESS)) return true;
1132 return false;
1133 }
1134
1135 private boolean jj_3R_61() {
1136 if (jj_scan_token(AMPERSAND)) return true;
1137 if (jj_scan_token(AMPERSAND)) return true;
1138 if (jj_3R_15()) return true;
1139 if (jj_3R_43()) return true;
1140 if (jj_3R_15()) return true;
1141 return false;
1142 }
1143
1144 private boolean jj_3R_38() {
1145 if (jj_scan_token(LESS_EQUAL)) return true;
1146 return false;
1147 }
1148
1149 private boolean jj_3R_60() {
1150 if (jj_scan_token(LESS)) return true;
1151 if (jj_3R_15()) return true;
1152 if (jj_3R_43()) return true;
1153 if (jj_3R_15()) return true;
1154 return false;
1155 }
1156
1157 private boolean jj_3R_37() {
1158 if (jj_scan_token(GREATER)) return true;
1159 return false;
1160 }
1161
1162 private boolean jj_3R_64() {
1163 if (jj_scan_token(REGEX)) return true;
1164 return false;
1165 }
1166
1167 private boolean jj_3R_59() {
1168 if (jj_scan_token(EQUAL)) return true;
1169 Token xsp;
1170 xsp = jj_scanpos;
1171 if (jj_scan_token(22)) jj_scanpos = xsp;
1172 if (jj_3R_15()) return true;
1173 if (jj_3R_43()) return true;
1174 if (jj_3R_15()) return true;
1175 return false;
1176 }
1177
1178 private boolean jj_3R_36() {
1179 if (jj_scan_token(GREATER_EQUAL)) return true;
1180 return false;
1181 }
1182
1183 private boolean jj_3R_58() {
1184 if (jj_scan_token(GREATER)) return true;
1185 if (jj_3R_15()) return true;
1186 if (jj_3R_43()) return true;
1187 if (jj_3R_15()) return true;
1188 return false;
1189 }
1190
1191 private boolean jj_3R_57() {
1192 if (jj_scan_token(LESS_EQUAL)) return true;
1193 if (jj_3R_15()) return true;
1194 if (jj_3R_43()) return true;
1195 if (jj_3R_15()) return true;
1196 return false;
1197 }
1198
1199 private boolean jj_3R_35() {
1200 if (jj_scan_token(STAR)) return true;
1201 if (jj_scan_token(EQUAL)) return true;
1202 if (jj_3R_19()) return true;
1203 return false;
1204 }
1205
1206 private boolean jj_3R_69() {
1207 if (jj_scan_token(SLASH)) return true;
1208 if (jj_3R_15()) return true;
1209 if (jj_3R_43()) return true;
1210 if (jj_3R_15()) return true;
1211 return false;
1212 }
1213
1214 private boolean jj_3R_56() {
1215 if (jj_scan_token(GREATER_EQUAL)) return true;
1216 if (jj_3R_15()) return true;
1217 if (jj_3R_43()) return true;
1218 if (jj_3R_15()) return true;
1219 return false;
1220 }
1221
1222 private boolean jj_3R_47() {
1223 if (jj_3R_19()) return true;
1224 return false;
1225 }
1226
1227 private boolean jj_3R_19() {
1228 Token xsp;
1229 xsp = jj_scanpos;
1230 if (jj_3R_28()) {
1231 jj_scanpos = xsp;
1232 if (jj_3R_29()) return true;
1233 }
1234 return false;
1235 }
1236
1237 private boolean jj_3R_28() {
1238 if (jj_scan_token(IDENT)) return true;
1239 return false;
1240 }
1241
1242 private boolean jj_3R_34() {
1243 if (jj_scan_token(DOLLAR)) return true;
1244 if (jj_scan_token(EQUAL)) return true;
1245 if (jj_3R_19()) return true;
1246 return false;
1247 }
1248
1249 private boolean jj_3R_68() {
1250 if (jj_scan_token(MINUS)) return true;
1251 if (jj_3R_15()) return true;
1252 if (jj_3R_43()) return true;
1253 if (jj_3R_15()) return true;
1254 return false;
1255 }
1256
1257 private boolean jj_3R_55() {
1258 Token xsp;
1259 if (jj_3R_69()) return true;
1260 while (true) {
1261 xsp = jj_scanpos;
1262 if (jj_3R_69()) { jj_scanpos = xsp; break; }
1263 }
1264 return false;
1265 }
1266
1267 private boolean jj_3R_46() {
1268 if (jj_scan_token(TILDE)) return true;
1269 if (jj_3R_64()) return true;
1270 return false;
1271 }
1272
1273 private boolean jj_3R_21() {
1274 Token xsp;
1275 xsp = jj_scanpos;
1276 if (jj_3R_36()) {
1277 jj_scanpos = xsp;
1278 if (jj_3R_37()) {
1279 jj_scanpos = xsp;
1280 if (jj_3R_38()) {
1281 jj_scanpos = xsp;
1282 if (jj_3R_39()) return true;
1283 }
1284 }
1285 }
1286 if (jj_3R_40()) return true;
1287 return false;
1288 }
1289
1290 private boolean jj_3R_33() {
1291 if (jj_scan_token(CARET)) return true;
1292 if (jj_scan_token(EQUAL)) return true;
1293 if (jj_3R_19()) return true;
1294 return false;
1295 }
1296
1297 private boolean jj_3R_67() {
1298 if (jj_scan_token(STAR)) return true;
1299 if (jj_3R_15()) return true;
1300 if (jj_3R_43()) return true;
1301 if (jj_3R_15()) return true;
1302 return false;
1303 }
1304
1305 private boolean jj_3R_54() {
1306 Token xsp;
1307 if (jj_3R_68()) return true;
1308 while (true) {
1309 xsp = jj_scanpos;
1310 if (jj_3R_68()) { jj_scanpos = xsp; break; }
1311 }
1312 return false;
1313 }
1314
1315 private boolean jj_3R_32() {
1316 if (jj_scan_token(TILDE)) return true;
1317 if (jj_scan_token(EQUAL)) return true;
1318 if (jj_3R_19()) return true;
1319 return false;
1320 }
1321
1322 private boolean jj_3R_66() {
1323 if (jj_scan_token(PLUS)) return true;
1324 if (jj_3R_15()) return true;
1325 if (jj_3R_43()) return true;
1326 if (jj_3R_15()) return true;
1327 return false;
1328 }
1329
1330 private boolean jj_3R_53() {
1331 Token xsp;
1332 if (jj_3R_67()) return true;
1333 while (true) {
1334 xsp = jj_scanpos;
1335 if (jj_3R_67()) { jj_scanpos = xsp; break; }
1336 }
1337 return false;
1338 }
1339
1340 private boolean jj_3R_52() {
1341 Token xsp;
1342 if (jj_3R_66()) return true;
1343 while (true) {
1344 xsp = jj_scanpos;
1345 if (jj_3R_66()) { jj_scanpos = xsp; break; }
1346 }
1347 return false;
1348 }
1349
1350 private boolean jj_3R_44() {
1351 Token xsp;
1352 xsp = jj_scanpos;
1353 if (jj_3R_52()) {
1354 jj_scanpos = xsp;
1355 if (jj_3R_53()) {
1356 jj_scanpos = xsp;
1357 if (jj_3R_54()) {
1358 jj_scanpos = xsp;
1359 if (jj_3R_55()) {
1360 jj_scanpos = xsp;
1361 if (jj_3R_56()) {
1362 jj_scanpos = xsp;
1363 if (jj_3R_57()) {
1364 jj_scanpos = xsp;
1365 if (jj_3R_58()) {
1366 jj_scanpos = xsp;
1367 if (jj_3R_59()) {
1368 jj_scanpos = xsp;
1369 if (jj_3R_60()) {
1370 jj_scanpos = xsp;
1371 if (jj_3R_61()) {
1372 jj_scanpos = xsp;
1373 if (jj_3R_62()) {
1374 jj_scanpos = xsp;
1375 if (jj_3R_63()) return true;
1376 }
1377 }
1378 }
1379 }
1380 }
1381 }
1382 }
1383 }
1384 }
1385 }
1386 }
1387 return false;
1388 }
1389
1390 private boolean jj_3R_45() {
1391 if (jj_scan_token(STRING)) return true;
1392 return false;
1393 }
1394
1395 private boolean jj_3R_31() {
1396 if (jj_scan_token(EQUAL)) return true;
1397 Token xsp;
1398 xsp = jj_scanpos;
1399 if (jj_3R_46()) {
1400 jj_scanpos = xsp;
1401 if (jj_3R_47()) return true;
1402 }
1403 return false;
1404 }
1405
1406 private boolean jj_3R_30() {
1407 if (jj_scan_token(EXCLAMATION)) return true;
1408 if (jj_scan_token(EQUAL)) return true;
1409 if (jj_3R_19()) return true;
1410 return false;
1411 }
1412
1413 private boolean jj_3R_48() {
1414 if (jj_scan_token(MINUS)) return true;
1415 if (jj_3R_22()) return true;
1416 return false;
1417 }
1418
1419 private boolean jj_3R_40() {
1420 Token xsp;
1421 xsp = jj_scanpos;
1422 if (jj_3R_48()) {
1423 jj_scanpos = xsp;
1424 if (jj_3R_49()) return true;
1425 }
1426 return false;
1427 }
1428
1429 private boolean jj_3R_27() {
1430 if (jj_3R_43()) return true;
1431 if (jj_3R_15()) return true;
1432 Token xsp;
1433 xsp = jj_scanpos;
1434 if (jj_3R_44()) jj_scanpos = xsp;
1435 return false;
1436 }
1437
1438 private boolean jj_3R_20() {
1439 Token xsp;
1440 xsp = jj_scanpos;
1441 if (jj_3R_30()) {
1442 jj_scanpos = xsp;
1443 if (jj_3R_31()) {
1444 jj_scanpos = xsp;
1445 if (jj_3R_32()) {
1446 jj_scanpos = xsp;
1447 if (jj_3R_33()) {
1448 jj_scanpos = xsp;
1449 if (jj_3R_34()) {
1450 jj_scanpos = xsp;
1451 if (jj_3R_35()) return true;
1452 }
1453 }
1454 }
1455 }
1456 }
1457 return false;
1458 }
1459
1460 private boolean jj_3R_26() {
1461 if (jj_scan_token(MINUS)) return true;
1462 if (jj_3R_15()) return true;
1463 if (jj_3R_43()) return true;
1464 if (jj_3R_15()) return true;
1465 return false;
1466 }
1467
1468 private boolean jj_3R_22() {
1469 Token xsp;
1470 xsp = jj_scanpos;
1471 if (jj_scan_token(3)) {
1472 jj_scanpos = xsp;
1473 if (jj_scan_token(2)) return true;
1474 }
1475 return false;
1476 }
1477
1478 private boolean jj_3R_25() {
1479 if (jj_scan_token(EXCLAMATION)) return true;
1480 if (jj_3R_15()) return true;
1481 if (jj_3R_43()) return true;
1482 if (jj_3R_15()) return true;
1483 return false;
1484 }
1485
1486 private boolean jj_3R_16() {
1487 Token xsp;
1488 xsp = jj_scanpos;
1489 if (jj_3R_25()) {
1490 jj_scanpos = xsp;
1491 if (jj_3R_26()) {
1492 jj_scanpos = xsp;
1493 if (jj_3R_27()) return true;
1494 }
1495 }
1496 return false;
1497 }
1498
1499 private boolean jj_3_4() {
1500 if (jj_3R_16()) return true;
1501 Token xsp;
1502 xsp = jj_scanpos;
1503 if (jj_scan_token(27)) {
1504 jj_scanpos = xsp;
1505 if (jj_scan_token(13)) return true;
1506 }
1507 return false;
1508 }
1509
1510 private boolean jj_3R_13() {
1511 if (jj_3R_19()) return true;
1512 Token xsp;
1513 xsp = jj_scanpos;
1514 if (jj_3R_20()) {
1515 jj_scanpos = xsp;
1516 if (jj_3R_21()) return true;
1517 }
1518 return false;
1519 }
1520
1521 private boolean jj_3R_74() {
1522 if (jj_scan_token(HEXCOLOR)) return true;
1523 return false;
1524 }
1525
1526 private boolean jj_3R_73() {
1527 if (jj_3R_22()) return true;
1528 return false;
1529 }
1530
1531 private boolean jj_3_3() {
1532 if (jj_3R_14()) return true;
1533 if (jj_3R_15()) return true;
1534 Token xsp;
1535 xsp = jj_scanpos;
1536 if (jj_scan_token(27)) {
1537 jj_scanpos = xsp;
1538 if (jj_scan_token(13)) return true;
1539 }
1540 return false;
1541 }
1542
1543 private boolean jj_3R_72() {
1544 if (jj_scan_token(PLUS)) return true;
1545 if (jj_3R_22()) return true;
1546 return false;
1547 }
1548
1549 private boolean jj_3R_71() {
1550 if (jj_3R_19()) return true;
1551 return false;
1552 }
1553
1554 private boolean jj_3R_65() {
1555 Token xsp;
1556 xsp = jj_scanpos;
1557 if (jj_3R_71()) {
1558 jj_scanpos = xsp;
1559 if (jj_3R_72()) {
1560 jj_scanpos = xsp;
1561 if (jj_3R_73()) {
1562 jj_scanpos = xsp;
1563 if (jj_3R_74()) return true;
1564 }
1565 }
1566 }
1567 return false;
1568 }
1569
1570 private boolean jj_3R_18() {
1571 if (jj_scan_token(EXCLAMATION)) return true;
1572 return false;
1573 }
1574
1575 private boolean jj_3R_12() {
1576 Token xsp;
1577 xsp = jj_scanpos;
1578 if (jj_3R_18()) jj_scanpos = xsp;
1579 if (jj_3R_19()) return true;
1580 return false;
1581 }
1582
1583 private boolean jj_3R_23() {
1584 if (jj_scan_token(COMMA)) return true;
1585 if (jj_3R_41()) return true;
1586 if (jj_3R_22()) return true;
1587 return false;
1588 }
1589
1590 private boolean jj_3R_75() {
1591 if (jj_scan_token(COMMA)) return true;
1592 if (jj_3R_15()) return true;
1593 if (jj_3R_16()) return true;
1594 return false;
1595 }
1596
1597 private boolean jj_3R_14() {
1598 if (jj_3R_22()) return true;
1599 Token xsp;
1600 if (jj_3R_23()) return true;
1601 while (true) {
1602 xsp = jj_scanpos;
1603 if (jj_3R_23()) { jj_scanpos = xsp; break; }
1604 }
1605 return false;
1606 }
1607
1608 private boolean jj_3R_70() {
1609 if (jj_3R_16()) return true;
1610 Token xsp;
1611 while (true) {
1612 xsp = jj_scanpos;
1613 if (jj_3R_75()) { jj_scanpos = xsp; break; }
1614 }
1615 return false;
1616 }
1617
1618 private boolean jj_3_2() {
1619 if (jj_3R_13()) return true;
1620 if (jj_scan_token(RSQUARE)) return true;
1621 return false;
1622 }
1623
1624 private boolean jj_3R_42() {
1625 if (jj_scan_token(COMMENT_START)) return true;
1626 if (jj_scan_token(COMMENT_END)) return true;
1627 return false;
1628 }
1629
1630 private boolean jj_3_1() {
1631 if (jj_3R_12()) return true;
1632 if (jj_scan_token(RSQUARE)) return true;
1633 return false;
1634 }
1635
1636 /** Generated Token Manager. */
1637 public MapCSSParserTokenManager token_source;
1638 SimpleCharStream jj_input_stream;
1639 /** Current token. */
1640 public Token token;
1641 /** Next token. */
1642 public Token jj_nt;
1643 private int jj_ntk;
1644 private Token jj_scanpos, jj_lastpos;
1645 private int jj_la;
1646 private int jj_gen;
1647 final private int[] jj_la1 = new int[40];
1648 static private int[] jj_la1_0;
1649 static private int[] jj_la1_1;
1650 static {
1651 jj_la1_init_0();
1652 jj_la1_init_1();
1653 }
1654 private static void jj_la1_init_0() {
1655 jj_la1_0 = new int[] {0xc,0xc,0x12,0x200,0x200,0x200,0x10000000,0x402,0x10000000,0x402,0x40000000,0x2804000,0x2804000,0x4000000,0x4,0x0,0x4,0x8081011e,0x800000,0x1000012,0x1c00400,0x3c0000,0x1fc0400,0x800000,0x402,0x2,0x8002000,0x8002000,0x80000000,0x400,0x0,0x800,0x400000,0xa07c0c00,0xa07c0c00,0x8081011e,0x8001011e,0x10000000,0x8081011e,0x8000011e,};
1656 }
1657 private static void jj_la1_init_1() {
1658 jj_la1_1 = new int[] {0x0,0x1,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x18,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7,0x7,0x1,0x0,0x0,0x1,0x0,};
1659 }
1660 final private JJCalls[] jj_2_rtns = new JJCalls[5];
1661 private boolean jj_rescan = false;
1662 private int jj_gc = 0;
1663
1664 /** Constructor with InputStream. */
1665 public MapCSSParser(java.io.InputStream stream) {
1666 this(stream, null);
1667 }
1668 /** Constructor with InputStream and supplied encoding */
1669 public MapCSSParser(java.io.InputStream stream, String encoding) {
1670 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
1671 token_source = new MapCSSParserTokenManager(jj_input_stream);
1672 token = new Token();
1673 jj_ntk = -1;
1674 jj_gen = 0;
1675 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1676 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1677 }
1678
1679 /** Reinitialise. */
1680 public void ReInit(java.io.InputStream stream) {
1681 ReInit(stream, null);
1682 }
1683 /** Reinitialise. */
1684 public void ReInit(java.io.InputStream stream, String encoding) {
1685 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
1686 token_source.ReInit(jj_input_stream);
1687 token = new Token();
1688 jj_ntk = -1;
1689 jj_gen = 0;
1690 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1691 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1692 }
1693
1694 /** Constructor. */
1695 public MapCSSParser(java.io.Reader stream) {
1696 jj_input_stream = new SimpleCharStream(stream, 1, 1);
1697 token_source = new MapCSSParserTokenManager(jj_input_stream);
1698 token = new Token();
1699 jj_ntk = -1;
1700 jj_gen = 0;
1701 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1702 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1703 }
1704
1705 /** Reinitialise. */
1706 public void ReInit(java.io.Reader stream) {
1707 jj_input_stream.ReInit(stream, 1, 1);
1708 token_source.ReInit(jj_input_stream);
1709 token = new Token();
1710 jj_ntk = -1;
1711 jj_gen = 0;
1712 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1713 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1714 }
1715
1716 /** Constructor with generated Token Manager. */
1717 public MapCSSParser(MapCSSParserTokenManager tm) {
1718 token_source = tm;
1719 token = new Token();
1720 jj_ntk = -1;
1721 jj_gen = 0;
1722 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1723 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1724 }
1725
1726 /** Reinitialise. */
1727 public void ReInit(MapCSSParserTokenManager tm) {
1728 token_source = tm;
1729 token = new Token();
1730 jj_ntk = -1;
1731 jj_gen = 0;
1732 for (int i = 0; i < 40; i++) jj_la1[i] = -1;
1733 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1734 }
1735
1736 private Token jj_consume_token(int kind) throws ParseException {
1737 Token oldToken;
1738 if ((oldToken = token).next != null) token = token.next;
1739 else token = token.next = token_source.getNextToken();
1740 jj_ntk = -1;
1741 if (token.kind == kind) {
1742 jj_gen++;
1743 if (++jj_gc > 100) {
1744 jj_gc = 0;
1745 for (int i = 0; i < jj_2_rtns.length; i++) {
1746 JJCalls c = jj_2_rtns[i];
1747 while (c != null) {
1748 if (c.gen < jj_gen) c.first = null;
1749 c = c.next;
1750 }
1751 }
1752 }
1753 return token;
1754 }
1755 token = oldToken;
1756 jj_kind = kind;
1757 throw generateParseException();
1758 }
1759
1760 static private final class LookaheadSuccess extends java.lang.Error { }
1761 final private LookaheadSuccess jj_ls = new LookaheadSuccess();
1762 private boolean jj_scan_token(int kind) {
1763 if (jj_scanpos == jj_lastpos) {
1764 jj_la--;
1765 if (jj_scanpos.next == null) {
1766 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
1767 } else {
1768 jj_lastpos = jj_scanpos = jj_scanpos.next;
1769 }
1770 } else {
1771 jj_scanpos = jj_scanpos.next;
1772 }
1773 if (jj_rescan) {
1774 int i = 0; Token tok = token;
1775 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
1776 if (tok != null) jj_add_error_token(kind, i);
1777 }
1778 if (jj_scanpos.kind != kind) return true;
1779 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
1780 return false;
1781 }
1782
1783
1784/** Get the next Token. */
1785 final public Token getNextToken() {
1786 if (token.next != null) token = token.next;
1787 else token = token.next = token_source.getNextToken();
1788 jj_ntk = -1;
1789 jj_gen++;
1790 return token;
1791 }
1792
1793/** Get the specific Token. */
1794 final public Token getToken(int index) {
1795 Token t = token;
1796 for (int i = 0; i < index; i++) {
1797 if (t.next != null) t = t.next;
1798 else t = t.next = token_source.getNextToken();
1799 }
1800 return t;
1801 }
1802
1803 private int jj_ntk() {
1804 if ((jj_nt=token.next) == null)
1805 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
1806 else
1807 return (jj_ntk = jj_nt.kind);
1808 }
1809
1810 private java.util.List jj_expentries = new java.util.ArrayList();
1811 private int[] jj_expentry;
1812 private int jj_kind = -1;
1813 private int[] jj_lasttokens = new int[100];
1814 private int jj_endpos;
1815
1816 private void jj_add_error_token(int kind, int pos) {
1817 if (pos >= 100) return;
1818 if (pos == jj_endpos + 1) {
1819 jj_lasttokens[jj_endpos++] = kind;
1820 } else if (jj_endpos != 0) {
1821 jj_expentry = new int[jj_endpos];
1822 for (int i = 0; i < jj_endpos; i++) {
1823 jj_expentry[i] = jj_lasttokens[i];
1824 }
1825 jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator(); it.hasNext();) {
1826 int[] oldentry = (int[])(it.next());
1827 if (oldentry.length == jj_expentry.length) {
1828 for (int i = 0; i < jj_expentry.length; i++) {
1829 if (oldentry[i] != jj_expentry[i]) {
1830 continue jj_entries_loop;
1831 }
1832 }
1833 jj_expentries.add(jj_expentry);
1834 break jj_entries_loop;
1835 }
1836 }
1837 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
1838 }
1839 }
1840
1841 /** Generate ParseException. */
1842 public ParseException generateParseException() {
1843 jj_expentries.clear();
1844 boolean[] la1tokens = new boolean[41];
1845 if (jj_kind >= 0) {
1846 la1tokens[jj_kind] = true;
1847 jj_kind = -1;
1848 }
1849 for (int i = 0; i < 40; i++) {
1850 if (jj_la1[i] == jj_gen) {
1851 for (int j = 0; j < 32; j++) {
1852 if ((jj_la1_0[i] & (1<<j)) != 0) {
1853 la1tokens[j] = true;
1854 }
1855 if ((jj_la1_1[i] & (1<<j)) != 0) {
1856 la1tokens[32+j] = true;
1857 }
1858 }
1859 }
1860 }
1861 for (int i = 0; i < 41; i++) {
1862 if (la1tokens[i]) {
1863 jj_expentry = new int[1];
1864 jj_expentry[0] = i;
1865 jj_expentries.add(jj_expentry);
1866 }
1867 }
1868 jj_endpos = 0;
1869 jj_rescan_token();
1870 jj_add_error_token(0, 0);
1871 int[][] exptokseq = new int[jj_expentries.size()][];
1872 for (int i = 0; i < jj_expentries.size(); i++) {
1873 exptokseq[i] = (int[])jj_expentries.get(i);
1874 }
1875 return new ParseException(token, exptokseq, tokenImage);
1876 }
1877
1878 /** Enable tracing. */
1879 final public void enable_tracing() {
1880 }
1881
1882 /** Disable tracing. */
1883 final public void disable_tracing() {
1884 }
1885
1886 private void jj_rescan_token() {
1887 jj_rescan = true;
1888 for (int i = 0; i < 5; i++) {
1889 try {
1890 JJCalls p = jj_2_rtns[i];
1891 do {
1892 if (p.gen > jj_gen) {
1893 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
1894 switch (i) {
1895 case 0: jj_3_1(); break;
1896 case 1: jj_3_2(); break;
1897 case 2: jj_3_3(); break;
1898 case 3: jj_3_4(); break;
1899 case 4: jj_3_5(); break;
1900 }
1901 }
1902 p = p.next;
1903 } while (p != null);
1904 } catch(LookaheadSuccess ls) { }
1905 }
1906 jj_rescan = false;
1907 }
1908
1909 private void jj_save(int index, int xla) {
1910 JJCalls p = jj_2_rtns[index];
1911 while (p.gen > jj_gen) {
1912 if (p.next == null) { p = p.next = new JJCalls(); break; }
1913 p = p.next;
1914 }
1915 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
1916 }
1917
1918 static final class JJCalls {
1919 int gen;
1920 Token first;
1921 int arg;
1922 JJCalls next;
1923 }
1924
1925}
Note: See TracBrowser for help on using the repository browser.