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

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

fix last ci

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