Ignore:
Timestamp:
2011-02-07T16:05:37+01:00 (13 years ago)
Author:
bastiK
Message:

mapcss: parser improvements

Location:
trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Expression.java

    r3860 r3867  
    7171                if (args.length == 0)
    7272                    return 0f;
     73                if (args.length == 1) { // unary minus
     74                    return -args[0];
     75                }
    7376                float res = args[0];
    7477                for (int i=1; i<args.length; ++i) {
     
    167170                for (boolean b : bs) {
    168171                    if (b)
     172                        return true;
     173                }
     174                return false;
     175            }
     176
     177            public boolean greater_equal(float a, float b) {
     178                return a >= b;
     179            }
     180
     181            public boolean less_equal(float a, float b) {
     182                return a <= b;
     183            }
     184
     185            public boolean greater(float a, float b) {
     186                return a > b;
     187            }
     188
     189            public boolean less(float a, float b) {
     190                return a < b;
     191            }
     192
     193            public boolean equal(Object a, Object b) {
     194                // make sure the casts are done in a meaningful way, so
     195                // the 2 objects really can be considered equal
     196                for (Class klass : new Class[] {
     197                        Float.class, Boolean.class, Color.class, float[].class, String.class }) {
     198                    Object a2 = Cascade.convertTo(a, klass);
     199                    Object b2 = Cascade.convertTo(a, klass);
     200                    if (a2 != null && b2 != null && a2.equals(b2))
    169201                        return true;
    170202                }
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.java

    r3863 r3867  
    186186      }
    187187      r = rule();
    188                  sheet.rules.add(r);
     188                 if (r != null) { sheet.rules.add(r); }
    189189      w();
    190190    }
     
    196196    Selector sel;
    197197    List<Instruction> decl;
    198     sel = selector();
    199                      selectors.add(sel);
    200     w();
    201     label_4:
    202     while (true) {
    203       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    204       case COMMA:
    205         ;
    206         break;
    207       default:
    208         jj_la1[7] = jj_gen;
    209         break label_4;
    210       }
    211       jj_consume_token(COMMA);
    212       w();
     198    try {
    213199      sel = selector();
    214200                         selectors.add(sel);
    215201      w();
     202      label_4:
     203      while (true) {
     204        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     205        case COMMA:
     206          ;
     207          break;
     208        default:
     209          jj_la1[7] = jj_gen;
     210          break label_4;
     211        }
     212        jj_consume_token(COMMA);
     213        w();
     214        sel = selector();
     215                             selectors.add(sel);
     216        w();
     217      }
     218    } catch (ParseException ex) {
     219        error_skipto(RBRACE);
     220        {if (true) return null;}
    216221    }
    217222    decl = declaration();
     
    272277    }
    273278    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     279    case SLASH:
    274280    case DCOLON:
    275281      sub = subpart();
     
    338344      case HEXCOLOR:
    339345      case LPAR:
     346      case EXCLAMATION:
    340347      case PLUS:
    341348      case MINUS:
     
    414421  final public String subpart() throws ParseException {
    415422    Token t;
    416     jj_consume_token(DCOLON);
     423    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     424    case SLASH:
     425      jj_consume_token(SLASH);
     426      break;
     427    case DCOLON:
     428      jj_consume_token(DCOLON);
     429      break;
     430    default:
     431      jj_la1[20] = jj_gen;
     432      jj_consume_token(-1);
     433      throw new ParseException();
     434    }
    417435    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    418436    case IDENT:
     
    423441      break;
    424442    default:
    425       jj_la1[20] = jj_gen;
     443      jj_la1[21] = jj_gen;
    426444      jj_consume_token(-1);
    427445      throw new ParseException();
     
    442460      break;
    443461    default:
    444       jj_la1[21] = jj_gen;
     462      jj_la1[22] = jj_gen;
    445463      ;
    446464    }
     
    455473          break;
    456474        default:
    457           jj_la1[22] = jj_gen;
     475          jj_la1[23] = jj_gen;
    458476          break label_6;
    459477        }
     
    466484          break;
    467485        default:
    468           jj_la1[23] = jj_gen;
     486          jj_la1[24] = jj_gen;
    469487          ;
    470488        }
     
    499517      case HEXCOLOR:
    500518      case LPAR:
     519      case EXCLAMATION:
    501520      case PLUS:
    502521      case MINUS:
     
    504523        break;
    505524      default:
    506         jj_la1[24] = jj_gen;
     525        jj_la1[25] = jj_gen;
    507526        jj_consume_token(-1);
    508527        throw new ParseException();
     
    520539    Expression e;
    521540    String op = null;
    522     e = primary();
    523                   args.add(e);
    524     w();
    525     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    526     case STAR:
    527     case SLASH:
    528     case PIPE:
     541    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     542    case EXCLAMATION:
     543      jj_consume_token(EXCLAMATION);
     544                          op = "not";
     545      w();
     546      e = primary();
     547                                                          args.add(e);
     548      w();
     549      break;
     550    case MINUS:
     551      jj_consume_token(MINUS);
     552                    op = "minus";
     553      w();
     554      e = primary();
     555                                                      args.add(e);
     556      w();
     557      break;
     558    case IDENT:
     559    case UINT:
     560    case UFLOAT:
     561    case STRING:
     562    case HEXCOLOR:
     563    case LPAR:
    529564    case PLUS:
    530     case MINUS:
    531     case AMPERSAND:
    532     case QUESTION:
     565      e = primary();
     566                          args.add(e);
     567      w();
    533568      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     569      case STAR:
     570      case SLASH:
     571      case GREATER_EQUAL:
     572      case LESS_EQUAL:
     573      case GREATER:
     574      case LESS:
     575      case EQUAL:
     576      case PIPE:
    534577      case PLUS:
    535         label_7:
    536         while (true) {
    537           jj_consume_token(PLUS);
    538                        op = "plus";
     578      case MINUS:
     579      case AMPERSAND:
     580      case QUESTION:
     581        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     582        case PLUS:
     583          label_7:
     584          while (true) {
     585            jj_consume_token(PLUS);
     586                               op = "plus";
     587            w();
     588            e = primary();
     589                                                                args.add(e);
     590            w();
     591            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     592            case PLUS:
     593              ;
     594              break;
     595            default:
     596              jj_la1[26] = jj_gen;
     597              break label_7;
     598            }
     599          }
     600          break;
     601        case STAR:
     602          label_8:
     603          while (true) {
     604            jj_consume_token(STAR);
     605                               op = "times";
     606            w();
     607            e = primary();
     608                                                                 args.add(e);
     609            w();
     610            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     611            case STAR:
     612              ;
     613              break;
     614            default:
     615              jj_la1[27] = jj_gen;
     616              break label_8;
     617            }
     618          }
     619          break;
     620        case MINUS:
     621          label_9:
     622          while (true) {
     623            jj_consume_token(MINUS);
     624                                op = "minus";
     625            w();
     626            e = primary();
     627                                                                  args.add(e);
     628            w();
     629            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     630            case MINUS:
     631              ;
     632              break;
     633            default:
     634              jj_la1[28] = jj_gen;
     635              break label_9;
     636            }
     637          }
     638          break;
     639        case SLASH:
     640          label_10:
     641          while (true) {
     642            jj_consume_token(SLASH);
     643                                op = "divided_by";
     644            w();
     645            e = primary();
     646                                                                       args.add(e);
     647            w();
     648            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     649            case SLASH:
     650              ;
     651              break;
     652            default:
     653              jj_la1[29] = jj_gen;
     654              break label_10;
     655            }
     656          }
     657          break;
     658        case GREATER_EQUAL:
     659          jj_consume_token(GREATER_EQUAL);
     660                                        op = "greater_equal";
    539661          w();
    540662          e = primary();
    541                                                         args.add(e);
    542           w();
     663                                                                                  args.add(e);
     664          w();
     665          break;
     666        case LESS_EQUAL:
     667          jj_consume_token(LESS_EQUAL);
     668                                     op = "less_equal";
     669          w();
     670          e = primary();
     671                                                                            args.add(e);
     672          w();
     673          break;
     674        case GREATER:
     675          jj_consume_token(GREATER);
     676                                  op = "greater";
     677          w();
     678          e = primary();
     679                                                                      args.add(e);
     680          w();
     681          break;
     682        case EQUAL:
     683          jj_consume_token(EQUAL);
    543684          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    544           case PLUS:
    545             ;
     685          case EQUAL:
     686            jj_consume_token(EQUAL);
    546687            break;
    547688          default:
    548             jj_la1[25] = jj_gen;
    549             break label_7;
     689            jj_la1[30] = jj_gen;
     690            ;
    550691          }
     692                                             op = "equal";
     693          w();
     694          e = primary();
     695                                                                               args.add(e);
     696          w();
     697          break;
     698        case LESS:
     699          jj_consume_token(LESS);
     700                               op = "less";
     701          w();
     702          e = primary();
     703                                                                args.add(e);
     704          w();
     705          break;
     706        case AMPERSAND:
     707          jj_consume_token(AMPERSAND);
     708          jj_consume_token(AMPERSAND);
     709                                                op = "and";
     710          w();
     711          e = primary();
     712                                                                                args.add(e);
     713          w();
     714          break;
     715        case PIPE:
     716          jj_consume_token(PIPE);
     717          jj_consume_token(PIPE);
     718                                      op = "or";
     719          w();
     720          e = primary();
     721                                                                     args.add(e);
     722          w();
     723          break;
     724        case QUESTION:
     725          jj_consume_token(QUESTION);
     726                                   op = "cond";
     727          w();
     728          e = primary();
     729                                                                    args.add(e);
     730          w();
     731          jj_consume_token(COLON);
     732          w();
     733          e = primary();
     734                                                                                                                 args.add(e);
     735          w();
     736          break;
     737        default:
     738          jj_la1[31] = jj_gen;
     739          jj_consume_token(-1);
     740          throw new ParseException();
    551741        }
    552742        break;
    553       case STAR:
    554         label_8:
    555         while (true) {
    556           jj_consume_token(STAR);
    557                        op = "times";
    558           w();
    559           e = primary();
    560                                                          args.add(e);
    561           w();
    562           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    563           case STAR:
    564             ;
    565             break;
    566           default:
    567             jj_la1[26] = jj_gen;
    568             break label_8;
    569           }
    570         }
    571         break;
    572       case MINUS:
    573         label_9:
    574         while (true) {
    575           jj_consume_token(MINUS);
    576                         op = "minus";
    577           w();
    578           e = primary();
    579                                                           args.add(e);
    580           w();
    581           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    582           case MINUS:
    583             ;
    584             break;
    585           default:
    586             jj_la1[27] = jj_gen;
    587             break label_9;
    588           }
    589         }
    590         break;
    591       case SLASH:
    592         label_10:
    593         while (true) {
    594           jj_consume_token(SLASH);
    595                         op = "divided_by";
    596           w();
    597           e = primary();
    598                                                                args.add(e);
    599           w();
    600           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    601           case SLASH:
    602             ;
    603             break;
    604           default:
    605             jj_la1[28] = jj_gen;
    606             break label_10;
    607           }
    608         }
    609         break;
    610       case AMPERSAND:
    611         jj_consume_token(AMPERSAND);
    612         jj_consume_token(AMPERSAND);
    613                                         op = "and";
    614         w();
    615         e = primary();
    616                                                                         args.add(e);
    617         w();
    618         break;
    619       case PIPE:
    620         jj_consume_token(PIPE);
    621         jj_consume_token(PIPE);
    622                               op = "or";
    623         w();
    624         e = primary();
    625                                                              args.add(e);
    626         w();
    627         break;
    628       case QUESTION:
    629         jj_consume_token(QUESTION);
    630                            op = "cond";
    631         w();
    632         e = primary();
    633                                                             args.add(e);
    634         w();
    635         jj_consume_token(COLON);
    636         w();
    637         e = primary();
    638                                                                                                          args.add(e);
    639         w();
    640         break;
    641743      default:
    642         jj_la1[29] = jj_gen;
    643         jj_consume_token(-1);
    644         throw new ParseException();
    645       }
    646       break;
    647     default:
    648       jj_la1[30] = jj_gen;
    649       ;
     744        jj_la1[32] = jj_gen;
     745        ;
     746      }
     747      break;
     748    default:
     749      jj_la1[33] = jj_gen;
     750      jj_consume_token(-1);
     751      throw new ParseException();
    650752    }
    651753        if (op == null)
     
    671773      case HEXCOLOR:
    672774      case PLUS:
    673       case MINUS:
    674775        lit = literal();
    675776                        {if (true) return new LiteralExpression(lit);}
     
    683784        break;
    684785      default:
    685         jj_la1[31] = jj_gen;
     786        jj_la1[34] = jj_gen;
    686787        jj_consume_token(-1);
    687788        throw new ParseException();
     
    708809    case HEXCOLOR:
    709810    case LPAR:
     811    case EXCLAMATION:
    710812    case PLUS:
    711813    case MINUS:
     
    719821          break;
    720822        default:
    721           jj_la1[32] = jj_gen;
     823          jj_la1[35] = jj_gen;
    722824          break label_11;
    723825        }
     
    729831      break;
    730832    default:
    731       jj_la1[33] = jj_gen;
     833      jj_la1[36] = jj_gen;
    732834      ;
    733835    }
     
    751853      f = ufloat();
    752854                                {if (true) return new Instruction.RelativeFloat(f);}
    753       break;
    754     case MINUS:
    755       jj_consume_token(MINUS);
    756       f = ufloat();
    757                                  {if (true) return -f;}
    758855      break;
    759856    case UINT:
     
    773870      break;
    774871    default:
    775       jj_la1[34] = jj_gen;
     872      jj_la1[37] = jj_gen;
    776873      jj_consume_token(-1);
    777874      throw new ParseException();
     
    789886    do {
    790887        t = getNextToken();
    791     } while (t.kind != kind);
     888    } while (t.kind != kind && t.kind != EOF);
     889    if (t.kind == EOF)
     890        throw new ParseException("Reached end of file while parsing");
    792891  }
    793892
     
    820919  }
    821920
    822   private boolean jj_3R_20() {
    823     if (jj_scan_token(COMMA)) return true;
    824     return false;
    825   }
    826 
    827   private boolean jj_3R_16() {
    828     if (jj_scan_token(EXCLAMATION)) return true;
    829     return false;
    830   }
    831 
    832   private boolean jj_3R_25() {
    833     if (jj_scan_token(STRING)) return true;
    834     return false;
    835   }
    836 
    837921  private boolean jj_3R_12() {
    838922    Token xsp;
     
    840924    if (jj_3R_16()) jj_scanpos = xsp;
    841925    if (jj_3R_17()) return true;
     926    return false;
     927  }
     928
     929  private boolean jj_3R_20() {
     930    if (jj_scan_token(COMMA)) return true;
     931    return false;
     932  }
     933
     934  private boolean jj_3_4() {
     935    if (jj_3R_15()) return true;
     936    return false;
     937  }
     938
     939  private boolean jj_3R_25() {
     940    if (jj_scan_token(STRING)) return true;
    842941    return false;
    843942  }
     
    859958  }
    860959
    861   private boolean jj_3R_15() {
    862     if (jj_scan_token(IDENT)) return true;
    863     if (jj_3R_21()) return true;
    864     if (jj_scan_token(LPAR)) return true;
     960  private boolean jj_3_2() {
     961    if (jj_3R_13()) return true;
    865962    return false;
    866963  }
     
    881978  }
    882979
    883   private boolean jj_3_2() {
    884     if (jj_3R_13()) return true;
     980  private boolean jj_3_1() {
     981    if (jj_3R_12()) return true;
     982    if (jj_scan_token(RSQUARE)) return true;
    885983    return false;
    886984  }
     
    896994  }
    897995
    898   private boolean jj_3_1() {
    899     if (jj_3R_12()) return true;
    900     if (jj_scan_token(RSQUARE)) return true;
    901     return false;
    902   }
    903 
    904996  private boolean jj_3R_21() {
    905997    Token xsp;
     
    9161008  }
    9171009
    918   private boolean jj_3_4() {
    919     if (jj_3R_15()) return true;
    920     return false;
    921   }
    922 
    9231010  private boolean jj_3R_18() {
    9241011    if (jj_scan_token(EXCLAMATION_EQUAL)) return true;
     1012    return false;
     1013  }
     1014
     1015  private boolean jj_3R_15() {
     1016    if (jj_scan_token(IDENT)) return true;
     1017    if (jj_3R_21()) return true;
     1018    if (jj_scan_token(LPAR)) return true;
     1019    return false;
     1020  }
     1021
     1022  private boolean jj_3R_13() {
     1023    if (jj_3R_17()) return true;
     1024    Token xsp;
     1025    xsp = jj_scanpos;
     1026    if (jj_3R_18()) {
     1027    jj_scanpos = xsp;
     1028    if (jj_scan_token(20)) return true;
     1029    }
     1030    if (jj_3R_17()) return true;
    9251031    return false;
    9261032  }
     
    9411047  }
    9421048
    943   private boolean jj_3R_13() {
    944     if (jj_3R_17()) return true;
    945     Token xsp;
    946     xsp = jj_scanpos;
    947     if (jj_3R_18()) {
    948     jj_scanpos = xsp;
    949     if (jj_scan_token(16)) return true;
    950     }
    951     if (jj_3R_17()) return true;
     1049  private boolean jj_3R_16() {
     1050    if (jj_scan_token(EXCLAMATION)) return true;
    9521051    return false;
    9531052  }
     
    9641063  private int jj_la;
    9651064  private int jj_gen;
    966   final private int[] jj_la1 = new int[35];
     1065  final private int[] jj_la1 = new int[38];
    9671066  static private int[] jj_la1_0;
    9681067  static private int[] jj_la1_1;
     
    9721071   }
    9731072   private static void jj_la1_init_0() {
    974       jj_la1_0 = new int[] {0xc,0x12,0x80,0x20000080,0x20000080,0x400000,0x102,0x400000,0x102,0x1000000,0x81000,0x81000,0x100000,0x4,0x4000000,0x4000004,0x600405e,0x20000,0x50000,0x20000,0x102,0x800,0x200000,0x800,0x600405e,0x2000000,0x100,0x4000000,0x200,0x1e800300,0x1e800300,0x600405e,0x400000,0x600405e,0x600005e,};
     1073      jj_la1_0 = new int[] {0xc,0x12,0x80,0x80,0x80,0x4000000,0x102,0x4000000,0x102,0x10000000,0x801000,0x801000,0x1000200,0x4,0x40000000,0x40000004,0x6020405e,0x200000,0x500000,0x200000,0x1000200,0x102,0x800,0x2000000,0x800,0x6020405e,0x20000000,0x100,0x40000000,0x200,0x100000,0xe81f0300,0xe81f0300,0x6020405e,0x2000405e,0x4000000,0x6020405e,0x2000005e,};
    9751074   }
    9761075   private static void jj_la1_init_1() {
    977       jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
     1076      jj_la1_1 = new int[] {0x0,0x0,0x0,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,};
    9781077   }
    9791078  final private JJCalls[] jj_2_rtns = new JJCalls[4];
     
    9921091    jj_ntk = -1;
    9931092    jj_gen = 0;
    994     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1093    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    9951094    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    9961095  }
     
    10071106    jj_ntk = -1;
    10081107    jj_gen = 0;
    1009     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1108    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    10101109    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    10111110  }
     
    10181117    jj_ntk = -1;
    10191118    jj_gen = 0;
    1020     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1119    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    10211120    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    10221121  }
     
    10291128    jj_ntk = -1;
    10301129    jj_gen = 0;
    1031     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1130    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    10321131    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    10331132  }
     
    10391138    jj_ntk = -1;
    10401139    jj_gen = 0;
    1041     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1140    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    10421141    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    10431142  }
     
    10491148    jj_ntk = -1;
    10501149    jj_gen = 0;
    1051     for (int i = 0; i < 35; i++) jj_la1[i] = -1;
     1150    for (int i = 0; i < 38; i++) jj_la1[i] = -1;
    10521151    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    10531152  }
     
    11611260  public ParseException generateParseException() {
    11621261    jj_expentries.clear();
    1163     boolean[] la1tokens = new boolean[33];
     1262    boolean[] la1tokens = new boolean[37];
    11641263    if (jj_kind >= 0) {
    11651264      la1tokens[jj_kind] = true;
    11661265      jj_kind = -1;
    11671266    }
    1168     for (int i = 0; i < 35; i++) {
     1267    for (int i = 0; i < 38; i++) {
    11691268      if (jj_la1[i] == jj_gen) {
    11701269        for (int j = 0; j < 32; j++) {
     
    11781277      }
    11791278    }
    1180     for (int i = 0; i < 33; i++) {
     1279    for (int i = 0; i < 37; i++) {
    11811280      if (la1tokens[i]) {
    11821281        jj_expentry = new int[1];
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.jj

    r3863 r3867  
    4848|   < LPAR: "(" >
    4949|   < RPAR: ")" >
     50|   < GREATER_EQUAL: ">=" >
     51|   < LESS_EQUAL: "<=" >
     52|   < GREATER: ">" >
     53|   < LESS: "<" >
    5054|   < EQUAL: "=" >
    5155|   < EXCLAMATION: "!" >
     
    188192    { this.sheet = sheet; }
    189193    w()
    190     ( r=rule() { sheet.rules.add(r); } w() )*
     194    ( r=rule() { if (r != null) { sheet.rules.add(r); } } w() )*
    191195    <EOF>
    192196}
     
    199203}
    200204{
    201     sel=selector() { selectors.add(sel); } w()
    202     (
    203         <COMMA> w()
     205    try {
    204206        sel=selector() { selectors.add(sel); } w()
    205     )*
     207        (
     208            <COMMA> w()
     209            sel=selector() { selectors.add(sel); } w()
     210        )*
     211    } catch (ParseException ex) {
     212        error_skipto(RBRACE);
     213        return null;
     214    }
    206215    decl=declaration()
    207216    { return new MapCSSRule(selectors, decl); }
     
    298307}
    299308{
    300     <DCOLON>
     309    ( <SLASH> | <DCOLON> )
    301310    ( t=<IDENT> | t=<STAR> )
    302311    { return t.image; }
     
    354363}
    355364{
    356     e=primary() { args.add(e); } w()
    357365    (
    358             ( <PLUS> { op = "plus"; } w() e=primary() { args.add(e); } w() )+
    359         |
    360             ( <STAR> { op = "times"; } w() e=primary() { args.add(e); } w() )+
    361         |
    362             ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )+
    363         |
    364             ( <SLASH> { op = "divided_by"; } w() e=primary() { args.add(e); } w() )+
    365         |
    366             ( <AMPERSAND> <AMPERSAND> { op = "and"; } w() e=primary() { args.add(e); } w() )
    367         |
    368             ( <PIPE> <PIPE> { op = "or"; } w() e=primary() { args.add(e); } w() )
    369         |
    370             ( <QUESTION> { op = "cond"; } w() e=primary() { args.add(e); } w() <COLON> w() e=primary() { args.add(e); } w() )
    371     )?
     366        ( <EXCLAMATION> { op = "not"; } w() e=primary() { args.add(e); } w() )
     367    |
     368        ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )
     369    |
     370   
     371        (
     372            e=primary() { args.add(e); } w()
     373            (
     374                    ( <PLUS> { op = "plus"; } w() e=primary() { args.add(e); } w() )+
     375                |
     376                    ( <STAR> { op = "times"; } w() e=primary() { args.add(e); } w() )+
     377                |
     378                    ( <MINUS> { op = "minus"; } w() e=primary() { args.add(e); } w() )+
     379                |
     380                    ( <SLASH> { op = "divided_by"; } w() e=primary() { args.add(e); } w() )+
     381                |
     382                    ( <GREATER_EQUAL> { op = "greater_equal"; } w() e=primary() { args.add(e); } w() )
     383                |
     384                    ( <LESS_EQUAL> { op = "less_equal"; } w() e=primary() { args.add(e); } w() )
     385                |
     386                    ( <GREATER> { op = "greater"; } w() e=primary() { args.add(e); } w() )
     387                |
     388                    ( <EQUAL> ( <EQUAL> )? { op = "equal"; } w() e=primary() { args.add(e); } w() )
     389                |
     390                    ( <LESS> { op = "less"; } w() e=primary() { args.add(e); } w() )
     391                |
     392                    ( <AMPERSAND> <AMPERSAND> { op = "and"; } w() e=primary() { args.add(e); } w() )
     393                |
     394                    ( <PIPE> <PIPE> { op = "or"; } w() e=primary() { args.add(e); } w() )
     395                |
     396                    ( <QUESTION> { op = "cond"; } w() e=primary() { args.add(e); } w() <COLON> w() e=primary() { args.add(e); } w() )
     397            )?
     398        )
     399    )
    372400    {
    373401        if (op == null)
     
    420448    |
    421449        ( <PLUS> f=ufloat() ) { return new Instruction.RelativeFloat(f); }
    422     |
    423         ( <MINUS> f=ufloat() ) { return -f; }
    424450    |
    425451        f=ufloat() { return f; }
     
    447473    do {
    448474        t = getNextToken();
    449     } while (t.kind != kind);
    450 }
    451 
     475    } while (t.kind != kind && t.kind != EOF);
     476    if (t.kind == EOF)
     477        throw new ParseException("Reached end of file while parsing");
     478}
     479
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParserConstants.java

    r3856 r3867  
    4242  int RPAR = 15;
    4343  /** RegularExpression Id. */
    44   int EQUAL = 16;
     44  int GREATER_EQUAL = 16;
    4545  /** RegularExpression Id. */
    46   int EXCLAMATION = 17;
     46  int LESS_EQUAL = 17;
    4747  /** RegularExpression Id. */
    48   int EXCLAMATION_EQUAL = 18;
     48  int GREATER = 18;
    4949  /** RegularExpression Id. */
    50   int COLON = 19;
     50  int LESS = 19;
    5151  /** RegularExpression Id. */
    52   int DCOLON = 20;
     52  int EQUAL = 20;
    5353  /** RegularExpression Id. */
    54   int SEMICOLON = 21;
     54  int EXCLAMATION = 21;
    5555  /** RegularExpression Id. */
    56   int COMMA = 22;
     56  int EXCLAMATION_EQUAL = 22;
    5757  /** RegularExpression Id. */
    58   int PIPE = 23;
     58  int COLON = 23;
    5959  /** RegularExpression Id. */
    60   int PIPE_Z = 24;
     60  int DCOLON = 24;
    6161  /** RegularExpression Id. */
    62   int PLUS = 25;
     62  int SEMICOLON = 25;
    6363  /** RegularExpression Id. */
    64   int MINUS = 26;
     64  int COMMA = 26;
    6565  /** RegularExpression Id. */
    66   int AMPERSAND = 27;
     66  int PIPE = 27;
    6767  /** RegularExpression Id. */
    68   int QUESTION = 28;
     68  int PIPE_Z = 28;
    6969  /** RegularExpression Id. */
    70   int COMMENT_START = 29;
     70  int PLUS = 29;
    7171  /** RegularExpression Id. */
    72   int UNEXPECTED_CHAR = 30;
     72  int MINUS = 30;
    7373  /** RegularExpression Id. */
    74   int COMMENT_END = 31;
     74  int AMPERSAND = 31;
     75  /** RegularExpression Id. */
     76  int QUESTION = 32;
     77  /** RegularExpression Id. */
     78  int COMMENT_START = 33;
     79  /** RegularExpression Id. */
     80  int UNEXPECTED_CHAR = 34;
     81  /** RegularExpression Id. */
     82  int COMMENT_END = 35;
    7583
    7684  /** Lexical state. */
     
    97105    "\"(\"",
    98106    "\")\"",
     107    "\">=\"",
     108    "\"<=\"",
     109    "\">\"",
     110    "\"<\"",
    99111    "\"=\"",
    100112    "\"!\"",
     
    113125    "<UNEXPECTED_CHAR>",
    114126    "\"*/\"",
    115     "<token of kind 32>",
     127    "<token of kind 36>",
    116128  };
    117129
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParserTokenManager.java

    r3856 r3867  
    4545   {
    4646      case 33:
    47          jjmatchedKind = 17;
    48          return jjMoveStringLiteralDfa1_0(0x40000L);
     47         jjmatchedKind = 21;
     48         return jjMoveStringLiteralDfa1_0(0x400000L);
    4949      case 38:
    50          return jjStopAtPos(0, 27);
     50         return jjStopAtPos(0, 31);
    5151      case 40:
    5252         return jjStopAtPos(0, 14);
     
    5656         return jjStopAtPos(0, 8);
    5757      case 43:
    58          return jjStopAtPos(0, 25);
     58         return jjStopAtPos(0, 29);
    5959      case 44:
    60          return jjStopAtPos(0, 22);
     60         return jjStopAtPos(0, 26);
    6161      case 45:
    62          return jjStopAtPos(0, 26);
     62         return jjStopAtPos(0, 30);
    6363      case 47:
    6464         jjmatchedKind = 9;
    65          return jjMoveStringLiteralDfa1_0(0x20000000L);
     65         return jjMoveStringLiteralDfa1_0(0x200000000L);
    6666      case 58:
     67         jjmatchedKind = 23;
     68         return jjMoveStringLiteralDfa1_0(0x1000000L);
     69      case 59:
     70         return jjStopAtPos(0, 25);
     71      case 60:
    6772         jjmatchedKind = 19;
    68          return jjMoveStringLiteralDfa1_0(0x100000L);
    69       case 59:
    70          return jjStopAtPos(0, 21);
     73         return jjMoveStringLiteralDfa1_0(0x20000L);
    7174      case 61:
    72          return jjStopAtPos(0, 16);
     75         return jjStopAtPos(0, 20);
     76      case 62:
     77         jjmatchedKind = 18;
     78         return jjMoveStringLiteralDfa1_0(0x10000L);
    7379      case 63:
    74          return jjStopAtPos(0, 28);
     80         return jjStopAtPos(0, 32);
    7581      case 91:
    7682         return jjStopAtPos(0, 12);
     
    8086         return jjStopAtPos(0, 10);
    8187      case 124:
    82          jjmatchedKind = 23;
    83          return jjMoveStringLiteralDfa1_0(0x1000000L);
     88         jjmatchedKind = 27;
     89         return jjMoveStringLiteralDfa1_0(0x10000000L);
    8490      case 125:
    8591         return jjStopAtPos(0, 11);
     
    98104   {
    99105      case 42:
    100          if ((active0 & 0x20000000L) != 0L)
    101             return jjStopAtPos(1, 29);
     106         if ((active0 & 0x200000000L) != 0L)
     107            return jjStopAtPos(1, 33);
    102108         break;
    103109      case 58:
    104          if ((active0 & 0x100000L) != 0L)
    105             return jjStopAtPos(1, 20);
     110         if ((active0 & 0x1000000L) != 0L)
     111            return jjStopAtPos(1, 24);
    106112         break;
    107113      case 61:
    108          if ((active0 & 0x40000L) != 0L)
    109             return jjStopAtPos(1, 18);
     114         if ((active0 & 0x10000L) != 0L)
     115            return jjStopAtPos(1, 16);
     116         else if ((active0 & 0x20000L) != 0L)
     117            return jjStopAtPos(1, 17);
     118         else if ((active0 & 0x400000L) != 0L)
     119            return jjStopAtPos(1, 22);
    110120         break;
    111121      case 122:
    112          if ((active0 & 0x1000000L) != 0L)
    113             return jjStopAtPos(1, 24);
     122         if ((active0 & 0x10000000L) != 0L)
     123            return jjStopAtPos(1, 28);
    114124         break;
    115125      default :
     
    351361   {
    352362      case 42:
    353          return jjMoveStringLiteralDfa1_1(0x80000000L);
     363         return jjMoveStringLiteralDfa1_1(0x800000000L);
    354364      default :
    355365         return 1;
     
    365375   {
    366376      case 47:
    367          if ((active0 & 0x80000000L) != 0L)
    368             return jjStopAtPos(1, 31);
     377         if ((active0 & 0x800000000L) != 0L)
     378            return jjStopAtPos(1, 35);
    369379         break;
    370380      default :
     
    392402public static final String[] jjstrLiteralImages = {
    393403"", null, null, null, null, null, null, null, "\52", "\57", "\173", "\175",
    394 "\133", "\135", "\50", "\51", "\75", "\41", "\41\75", "\72", "\72\72", "\73", "\54",
    395 "\174", "\174\172", "\53", "\55", "\46", "\77", "\57\52", null, "\52\57", null, };
     404"\133", "\135", "\50", "\51", "\76\75", "\74\75", "\76", "\74", "\75", "\41",
     405"\41\75", "\72", "\72\72", "\73", "\54", "\174", "\174\172", "\53", "\55", "\46", "\77",
     406"\57\52", null, "\52\57", null, };
    396407
    397408/** Lexer state names. */
     
    404415public static final int[] jjnewLexState = {
    405416   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    406    -1, -1, -1, -1, 1, -1, 0, -1,
     417   -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 0, -1,
    407418};
    408419static final long[] jjtoToken = {
    409    0xffffffdfL,
     420   0xfffffffdfL,
    410421};
    411422static final long[] jjtoSkip = {
    412    0x100000000L,
     423   0x1000000000L,
    413424};
    414425protected SimpleCharStream input_stream;
     
    518529       jjmatchedPos = 0;
    519530       curPos = jjMoveStringLiteralDfa0_0();
    520        if (jjmatchedPos == 0 && jjmatchedKind > 30)
     531       if (jjmatchedPos == 0 && jjmatchedKind > 34)
    521532       {
    522           jjmatchedKind = 30;
     533          jjmatchedKind = 34;
    523534       }
    524535       break;
     
    527538       jjmatchedPos = 0;
    528539       curPos = jjMoveStringLiteralDfa0_1();
    529        if (jjmatchedPos == 0 && jjmatchedKind > 32)
     540       if (jjmatchedPos == 0 && jjmatchedKind > 36)
    530541       {
    531           jjmatchedKind = 32;
     542          jjmatchedKind = 36;
    532543       }
    533544       break;
Note: See TracChangeset for help on using the changeset viewer.