Changeset 3867 in josm


Ignore:
Timestamp:
Feb 7, 2011 4:05:37 PM (2 years ago)
Author:
bastiK
Message:

mapcss: parser improvements

Location:
trunk/src/org/openstreetmap/josm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java

    r3865 r3867  
    3232import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData; 
    3333import org.openstreetmap.josm.gui.NavigatableComponent; 
    34 import org.openstreetmap.josm.gui.mappaint.ElemStyle; 
    3534import org.openstreetmap.josm.gui.mappaint.NodeElemStyle; 
    3635import org.openstreetmap.josm.gui.mappaint.NodeElemStyle.Symbol; 
    3736import org.openstreetmap.josm.tools.ImageProvider; 
    3837import org.openstreetmap.josm.tools.LanguageInfo; 
     38import org.openstreetmap.josm.tools.Utils; 
    3939 
    4040public class MapPainter { 
     
    309309            g.setPaint(texture); 
    310310            if (color.getAlpha() != 255) { 
    311                 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, ElemStyle.color_int2float(color.getAlpha()))); 
     311                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, Utils.color_int2float(color.getAlpha()))); 
    312312            } 
    313313            g.fill(polygon); 
  • 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.