Changeset 3902 in josm


Ignore:
Timestamp:
Feb 14, 2011 4:13:57 PM (2 years ago)
Author:
bastiK
Message:

mapcss: minor improvements, fixes #5937 - MapCSS matching of piste:type=downhill, fixes #5938 - matching of relation members

Location:
trunk
Files:
2 added
8 edited

Legend:

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

    r3896 r3902  
    1818import org.openstreetmap.josm.gui.mappaint.Range; 
    1919import org.openstreetmap.josm.gui.mappaint.StyleSource; 
     20import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector; 
    2021import org.openstreetmap.josm.gui.mappaint.mapcss.parser.MapCSSParser; 
    2122import org.openstreetmap.josm.gui.mappaint.mapcss.parser.ParseException; 
     
    109110        for (MapCSSRule r : rules) { 
    110111            for (Selector s : r.selectors) { 
    111                 if (s.base.equals(type)) { 
    112                     for (Condition cnd : s.conds) { 
    113                         if (!cnd.applies(env)) 
    114                             continue NEXT_RULE; 
    115                     } 
    116                     for (Instruction i : r.declaration) { 
    117                         i.execute(env); 
     112                if ((s instanceof GeneralSelector)) { 
     113                    GeneralSelector gs = (GeneralSelector) s; 
     114                    if (gs.base.equals(type)) 
     115                     { 
     116                        for (Condition cnd : gs.conds) { 
     117                            if (!cnd.applies(env)) 
     118                                continue NEXT_RULE; 
     119                        } 
     120                        for (Instruction i : r.declaration) { 
     121                            i.execute(env); 
     122                        } 
    118123                    } 
    119124                } 
     
    133138            for (Selector s : r.selectors) { 
    134139                if (s.applies(env)) { 
    135                     if (s.range.contains(scale)) { 
    136                         mc.range = Range.cut(mc.range, s.range); 
     140                    if (s.getRange().contains(scale)) { 
     141                        mc.range = Range.cut(mc.range, s.getRange()); 
    137142                    } else { 
    138                         mc.range = mc.range.reduceAround(scale, s.range); 
     143                        mc.range = mc.range.reduceAround(scale, s.getRange()); 
    139144                        continue; 
    140145                    } 
    141146 
    142                     String sub = s.subpart; 
     147                    String sub = s.getSubpart(); 
    143148                    if (sub == null) { 
    144149                        sub = "default"; 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java

    r3880 r3902  
    44import java.util.List; 
    55 
     6import org.openstreetmap.josm.data.osm.Node; 
    67import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    78import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 
     
    1314import org.openstreetmap.josm.tools.Utils; 
    1415 
    15 public class Selector { 
    16     public String base; 
    17     public Range range; 
    18     protected List<Condition> conds; 
    19     public String subpart; 
     16public interface Selector { 
     17     
     18    public boolean applies(Environment e); 
    2019 
    21     public Selector(String base, Pair<Integer, Integer> zoom, List<Condition> conds, String subpart) { 
    22         this.base = base; 
    23         if (zoom != null) { 
    24             int a = zoom.a == null ? 0 : zoom.a; 
    25             int b = zoom.b == null ? Integer.MAX_VALUE : zoom.b; 
    26             if (a <= b) { 
    27                 range = fromLevel(a, b); 
     20    public String getSubpart(); 
     21    public Range getRange(); 
     22 
     23    public static class DescendentSelector implements Selector { 
     24        Selector a, b; 
     25        boolean child; 
     26 
     27        public DescendentSelector(Selector a, Selector b, boolean child) { 
     28            this.a = a; 
     29            this.b = b; 
     30            this.child = child; 
     31        } 
     32 
     33        @Override 
     34        public boolean applies(Environment e) { 
     35            if (!b.applies(e)) 
     36                return false; 
     37 
     38            Environment e2 = new Environment(null, e.mc, e.layer, e.source); 
     39            if (child) { 
     40                for (OsmPrimitive osm : e.osm.getReferrers()) { 
     41                    e2.osm = osm; 
     42                    if (a.applies(e2)) 
     43                        return true; 
     44                } 
     45            } else { 
     46                if (e.osm instanceof Relation) { 
     47                    for (OsmPrimitive chld : ((Relation) e.osm).getMemberPrimitives()) { 
     48                        e2.osm = chld; 
     49                        if (a.applies(e2)) 
     50                            return true; 
     51                    } 
     52                } else if (e.osm instanceof Way) { 
     53                    for (Node n : ((Way) e.osm).getNodes()) { 
     54                        e2.osm = n; 
     55                        if (a.applies(e2)) 
     56                            return true; 
     57                    } 
     58                } 
    2859            } 
     60            return false; 
    2961        } 
    30         if (range == null) { 
    31             range = new Range(); 
     62 
     63        @Override 
     64        public String getSubpart() { 
     65            return b.getSubpart(); 
    3266        } 
    33         this.conds = conds; 
    34         this.subpart = subpart; 
     67 
     68        @Override 
     69        public Range getRange() { 
     70            return b.getRange(); 
     71        } 
    3572    } 
    3673 
    37     public boolean applies(Environment e) { 
    38         if (!baseApplies(e.osm)) 
     74    public static class GeneralSelector implements Selector { 
     75        public String base; 
     76        public Range range; 
     77        protected List<Condition> conds; 
     78        private String subpart; 
     79 
     80        public GeneralSelector(String base, Pair<Integer, Integer> zoom, List<Condition> conds, String subpart) { 
     81            this.base = base; 
     82            if (zoom != null) { 
     83                int a = zoom.a == null ? 0 : zoom.a; 
     84                int b = zoom.b == null ? Integer.MAX_VALUE : zoom.b; 
     85                if (a <= b) { 
     86                    range = fromLevel(a, b); 
     87                } 
     88            } 
     89            if (range == null) { 
     90                range = new Range(); 
     91            } 
     92            this.conds = conds; 
     93            this.subpart = subpart; 
     94        } 
     95 
     96        @Override 
     97        public String getSubpart() { 
     98            return subpart; 
     99        } 
     100        @Override 
     101        public Range getRange() { 
     102            return range; 
     103        } 
     104 
     105        @Override 
     106        public boolean applies(Environment e) { 
     107            if (!baseApplies(e.osm)) 
     108                return false; 
     109            for (Condition c : conds) { 
     110                if (!c.applies(e)) 
     111                    return false; 
     112            } 
     113            return true; 
     114        } 
     115 
     116        private boolean baseApplies(OsmPrimitive osm) { 
     117            if (base.equals("*")) 
     118                return true; 
     119            if (base.equals("area")) { 
     120                if (osm instanceof Way) 
     121                    return true; 
     122                if (osm instanceof Relation && ((Relation) osm).isMultipolygon()) 
     123                    return true; 
     124            } 
     125            if (base.equals(OsmPrimitiveType.from(osm).getAPIName())) 
     126                return true; 
    39127            return false; 
    40         for (Condition c : conds) { 
    41             if (!c.applies(e)) 
    42                 return false; 
    43128        } 
    44         return true; 
     129 
     130        public static Range fromLevel(int a, int b) { 
     131            if (a > b) 
     132                throw new AssertionError(); 
     133            double lower = 0; 
     134            double upper = Double.POSITIVE_INFINITY; 
     135            if (b != Integer.MAX_VALUE) { 
     136                lower = level2scale(b + 1); 
     137            } 
     138            if (a != 0) { 
     139                upper = level2scale(a); 
     140            } 
     141            return new Range(lower, upper); 
     142        } 
     143 
     144        final static double R = 6378135; 
     145 
     146        public static double level2scale(int lvl) { 
     147            if (lvl < 0) 
     148                throw new IllegalArgumentException(); 
     149            // preliminary formula - map such that mapnik imagery tiles of the same 
     150            // or similar level are displayed at the given scale 
     151            return 2.0 * Math.PI * R / Math.pow(2.0, lvl) / 2.56; 
     152        } 
     153 
     154        @Override 
     155        public String toString() { 
     156            return base + (range == null ? "" : range) + Utils.join("", conds) + (subpart != null ? ("::" + subpart) : ""); 
     157        } 
    45158    } 
    46  
    47     private boolean baseApplies(OsmPrimitive osm) { 
    48         if (base.equals("*")) 
    49             return true; 
    50         if (base.equals("area")) { 
    51             if (osm instanceof Way) 
    52                 return true; 
    53             if (osm instanceof Relation && ((Relation) osm).isMultipolygon()) 
    54                 return true; 
    55         } 
    56         if (base.equals(OsmPrimitiveType.from(osm).getAPIName())) 
    57             return true; 
    58         return false; 
    59     } 
    60  
    61     public static Range fromLevel(int a, int b) { 
    62         if (a > b) 
    63             throw new AssertionError(); 
    64         double lower = 0; 
    65         double upper = Double.POSITIVE_INFINITY; 
    66         if (b != Integer.MAX_VALUE) { 
    67             lower = level2scale(b + 1); 
    68         } 
    69         if (a != 0) { 
    70             upper = level2scale(a); 
    71         } 
    72         return new Range(lower, upper); 
    73     } 
    74  
    75     final static double R = 6378135; 
    76  
    77     public static double level2scale(int lvl) { 
    78         if (lvl < 0) 
    79             throw new IllegalArgumentException(); 
    80         // preliminary formula - map such that mapnik imagery tiles of the same 
    81         // or similar level are displayed at the given scale 
    82         return 2.0 * Math.PI * R / Math.pow(2.0, lvl) / 2.56; 
    83     } 
    84  
    85     @Override 
    86     public String toString() { 
    87         return base + (range == null ? "" : range) + Utils.join("", conds) + (subpart != null ? ("::" + subpart) : ""); 
    88     } 
    89  
    90159} 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.java

    r3893 r3902  
    1414import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.FunctionExpression; 
    1515import 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; 
    1618import org.openstreetmap.josm.tools.Pair; 
    1719 
     
    229231    Selector sel; 
    230232    List<Instruction> decl; 
    231     sel = selector(); 
    232                      selectors.add(sel); 
    233     w(); 
     233    sel = child_selector(); 
     234                           selectors.add(sel); 
    234235    label_4: 
    235236    while (true) { 
     
    244245      jj_consume_token(COMMA); 
    245246      w(); 
    246       sel = selector(); 
    247                          selectors.add(sel); 
    248       w(); 
     247      sel = child_selector(); 
     248                               selectors.add(sel); 
    249249    } 
    250250    decl = declaration(); 
    251251      {if (true) return new MapCSSRule(selectors, decl);} 
     252    throw new Error("Missing return statement in function"); 
     253  } 
     254 
     255  final public Selector child_selector() throws ParseException { 
     256    boolean child = false; 
     257    Selector sel1, sel2 = null; 
     258    sel1 = selector(); 
     259    w(); 
     260    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     261    case GREATER: 
     262    case LESS: 
     263      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     264      case GREATER: 
     265        jj_consume_token(GREATER); 
     266                      child = true; 
     267        break; 
     268      case LESS: 
     269        jj_consume_token(LESS); 
     270                                                 child = false; 
     271        break; 
     272      default: 
     273        jj_la1[9] = jj_gen; 
     274        jj_consume_token(-1); 
     275        throw new ParseException(); 
     276      } 
     277      w(); 
     278      sel2 = selector(); 
     279      w(); 
     280      break; 
     281    default: 
     282      jj_la1[10] = jj_gen; 
     283      ; 
     284    } 
     285      {if (true) return sel2 != null ? new DescendentSelector(sel1, sel2, child) : sel1;} 
    252286    throw new Error("Missing return statement in function"); 
    253287  } 
     
    267301      break; 
    268302    default: 
    269       jj_la1[9] = jj_gen; 
     303      jj_la1[11] = jj_gen; 
    270304      jj_consume_token(-1); 
    271305      throw new ParseException(); 
     
    276310      break; 
    277311    default: 
    278       jj_la1[10] = jj_gen; 
     312      jj_la1[12] = jj_gen; 
    279313      ; 
    280314    } 
     
    288322        break; 
    289323      default: 
    290         jj_la1[11] = jj_gen; 
     324        jj_la1[13] = jj_gen; 
    291325        break label_5; 
    292326      } 
     
    300334        break; 
    301335      default: 
    302         jj_la1[12] = jj_gen; 
     336        jj_la1[14] = jj_gen; 
    303337        jj_consume_token(-1); 
    304338        throw new ParseException(); 
     
    311345      break; 
    312346    default: 
    313       jj_la1[13] = jj_gen; 
     347      jj_la1[15] = jj_gen; 
    314348      ; 
    315349    } 
    316       {if (true) return new Selector(base.image, r, conditions, sub);} 
     350      {if (true) return new GeneralSelector(base.image, r, conditions, sub);} 
    317351    throw new Error("Missing return statement in function"); 
    318352  } 
     
    337371          break; 
    338372        default: 
    339           jj_la1[14] = jj_gen; 
     373          jj_la1[16] = jj_gen; 
    340374          ; 
    341375        } 
    342376        break; 
    343377      default: 
    344         jj_la1[15] = jj_gen; 
     378        jj_la1[17] = jj_gen; 
    345379        ; 
    346380      } 
    347381      break; 
    348382    default: 
    349       jj_la1[16] = jj_gen; 
     383      jj_la1[18] = jj_gen; 
    350384      jj_consume_token(-1); 
    351385      throw new ParseException(); 
     
    359393    Expression e; 
    360394    jj_consume_token(LSQUARE); 
    361     if (jj_2_1(3)) { 
     395    if (jj_2_1(2147483647)) { 
    362396      c = simple_key_condition(); 
    363397      jj_consume_token(RSQUARE); 
    364398                                                 {if (true) return c;} 
    365     } else if (jj_2_2(5)) { 
     399    } else if (jj_2_2(2147483647)) { 
    366400      c = simple_key_value_condition(); 
    367401      jj_consume_token(RSQUARE); 
     
    383417        break; 
    384418      default: 
    385         jj_la1[17] = jj_gen; 
     419        jj_la1[19] = jj_gen; 
    386420        jj_consume_token(-1); 
    387421        throw new ParseException(); 
    388422      } 
     423    } 
     424    throw new Error("Missing return statement in function"); 
     425  } 
     426 
     427  final public String tag_key() throws ParseException { 
     428    String s; 
     429    Token t; 
     430    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     431    case STRING: 
     432      s = string(); 
     433                     {if (true) return s;} 
     434      break; 
     435    case IDENT: 
     436      t = jj_consume_token(IDENT); 
     437                    s = t.image; 
     438      label_6: 
     439      while (true) { 
     440        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     441        case COLON: 
     442          ; 
     443          break; 
     444        default: 
     445          jj_la1[20] = jj_gen; 
     446          break label_6; 
     447        } 
     448        jj_consume_token(COLON); 
     449        t = jj_consume_token(IDENT); 
     450                                                         s += ':' + t.image; 
     451      } 
     452                                                                                    {if (true) return s;} 
     453      break; 
     454    default: 
     455      jj_la1[21] = jj_gen; 
     456      jj_consume_token(-1); 
     457      throw new ParseException(); 
    389458    } 
    390459    throw new Error("Missing return statement in function"); 
     
    401470      break; 
    402471    default: 
    403       jj_la1[18] = jj_gen; 
     472      jj_la1[22] = jj_gen; 
    404473      ; 
    405474    } 
    406     key = string_or_ident(); 
     475    key = tag_key(); 
    407476    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
    408477    case QUESTION: 
     
    411480      break; 
    412481    default: 
    413       jj_la1[19] = jj_gen; 
     482      jj_la1[23] = jj_gen; 
    414483      ; 
    415484    } 
     
    423492    float f; 
    424493    Condition.Op op; 
    425     key = string_or_ident(); 
     494    key = tag_key(); 
    426495    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
    427496    case STAR: 
     
    452521          break; 
    453522        default: 
    454           jj_la1[20] = jj_gen; 
     523          jj_la1[24] = jj_gen; 
    455524          jj_consume_token(-1); 
    456525          throw new ParseException(); 
     
    482551        break; 
    483552      default: 
    484         jj_la1[21] = jj_gen; 
     553        jj_la1[25] = jj_gen; 
    485554        jj_consume_token(-1); 
    486555        throw new ParseException(); 
     
    510579        break; 
    511580      default: 
    512         jj_la1[22] = jj_gen; 
     581        jj_la1[26] = jj_gen; 
    513582        jj_consume_token(-1); 
    514583        throw new ParseException(); 
     
    518587      break; 
    519588    default: 
    520       jj_la1[23] = jj_gen; 
     589      jj_la1[27] = jj_gen; 
    521590      jj_consume_token(-1); 
    522591      throw new ParseException(); 
     
    534603      break; 
    535604    default: 
    536       jj_la1[24] = jj_gen; 
     605      jj_la1[28] = jj_gen; 
    537606      ; 
    538607    } 
     
    554623      break; 
    555624    default: 
    556       jj_la1[25] = jj_gen; 
     625      jj_la1[29] = jj_gen; 
    557626      jj_consume_token(-1); 
    558627      throw new ParseException(); 
     
    569638    jj_consume_token(LBRACE); 
    570639    w(); 
    571     label_6: 
     640    label_7: 
    572641    while (true) { 
    573642      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     
    576645        break; 
    577646      default: 
    578         jj_la1[26] = jj_gen; 
    579         break label_6; 
     647        jj_la1[30] = jj_gen; 
     648        break label_7; 
    580649      } 
    581650      key = jj_consume_token(IDENT); 
     
    597666          break; 
    598667        default: 
    599           jj_la1[27] = jj_gen; 
     668          jj_la1[31] = jj_gen; 
    600669          jj_consume_token(-1); 
    601670          throw new ParseException(); 
     
    614683          break; 
    615684        default: 
    616           jj_la1[28] = jj_gen; 
     685          jj_la1[32] = jj_gen; 
    617686          jj_consume_token(-1); 
    618687          throw new ParseException(); 
     
    675744        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
    676745        case PLUS: 
    677           label_7: 
     746          label_8: 
    678747          while (true) { 
    679748            jj_consume_token(PLUS); 
     
    688757              break; 
    689758            default: 
    690               jj_la1[29] = jj_gen; 
    691               break label_7; 
     759              jj_la1[33] = jj_gen; 
     760              break label_8; 
    692761            } 
    693762          } 
    694763          break; 
    695764        case STAR: 
    696           label_8: 
     765          label_9: 
    697766          while (true) { 
    698767            jj_consume_token(STAR); 
     
    707776              break; 
    708777            default: 
    709               jj_la1[30] = jj_gen; 
    710               break label_8; 
     778              jj_la1[34] = jj_gen; 
     779              break label_9; 
    711780            } 
    712781          } 
    713782          break; 
    714783        case MINUS: 
    715           label_9: 
     784          label_10: 
    716785          while (true) { 
    717786            jj_consume_token(MINUS); 
     
    726795              break; 
    727796            default: 
    728               jj_la1[31] = jj_gen; 
    729               break label_9; 
     797              jj_la1[35] = jj_gen; 
     798              break label_10; 
    730799            } 
    731800          } 
    732801          break; 
    733802        case SLASH: 
    734           label_10: 
     803          label_11: 
    735804          while (true) { 
    736805            jj_consume_token(SLASH); 
     
    745814              break; 
    746815            default: 
    747               jj_la1[32] = jj_gen; 
    748               break label_10; 
     816              jj_la1[36] = jj_gen; 
     817              break label_11; 
    749818            } 
    750819          } 
     
    781850            break; 
    782851          default: 
    783             jj_la1[33] = jj_gen; 
     852            jj_la1[37] = jj_gen; 
    784853            ; 
    785854          } 
     
    830899          break; 
    831900        default: 
    832           jj_la1[34] = jj_gen; 
     901          jj_la1[38] = jj_gen; 
    833902          jj_consume_token(-1); 
    834903          throw new ParseException(); 
     
    836905        break; 
    837906      default: 
    838         jj_la1[35] = jj_gen; 
     907        jj_la1[39] = jj_gen; 
    839908        ; 
    840909      } 
    841910      break; 
    842911    default: 
    843       jj_la1[36] = jj_gen; 
     912      jj_la1[40] = jj_gen; 
    844913      jj_consume_token(-1); 
    845914      throw new ParseException(); 
     
    878947        break; 
    879948      default: 
    880         jj_la1[37] = jj_gen; 
     949        jj_la1[41] = jj_gen; 
    881950        jj_consume_token(-1); 
    882951        throw new ParseException(); 
     
    908977      arg = expression(); 
    909978                           args.add(arg); 
    910       label_11: 
     979      label_12: 
    911980      while (true) { 
    912981        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     
    915984          break; 
    916985        default: 
    917           jj_la1[38] = jj_gen; 
    918           break label_11; 
     986          jj_la1[42] = jj_gen; 
     987          break label_12; 
    919988        } 
    920989        jj_consume_token(COMMA); 
     
    925994      break; 
    926995    default: 
    927       jj_la1[39] = jj_gen; 
     996      jj_la1[43] = jj_gen; 
    928997      ; 
    929998    } 
     
    9641033      break; 
    9651034    default: 
    966       jj_la1[40] = jj_gen; 
     1035      jj_la1[44] = jj_gen; 
    9671036      jj_consume_token(-1); 
    9681037      throw new ParseException(); 
     
    10481117  } 
    10491118 
    1050   private boolean jj_3R_30() { 
    1051     if (jj_3R_46()) return true; 
    1052     return false; 
    1053   } 
    1054  
    1055   private boolean jj_3R_25() { 
     1119  private boolean jj_3R_69() { 
     1120    if (jj_3R_47()) return true; 
     1121    return false; 
     1122  } 
     1123 
     1124  private boolean jj_3R_26() { 
    10561125    Token xsp; 
    10571126    xsp = jj_scanpos; 
    10581127    if (jj_scan_token(9)) { 
    10591128    jj_scanpos = xsp; 
     1129    if (jj_3R_44()) return true; 
     1130    } 
     1131    return false; 
     1132  } 
     1133 
     1134  private boolean jj_3R_16() { 
     1135    Token xsp; 
     1136    while (true) { 
     1137      xsp = jj_scanpos; 
     1138      if (jj_3R_26()) { jj_scanpos = xsp; break; } 
     1139    } 
     1140    return false; 
     1141  } 
     1142 
     1143  private boolean jj_3R_37() { 
     1144    if (jj_scan_token(STAR)) return true; 
     1145    if (jj_scan_token(EQUAL)) return true; 
     1146    if (jj_3R_49()) return true; 
     1147    return false; 
     1148  } 
     1149 
     1150  private boolean jj_3R_51() { 
     1151    if (jj_3R_49()) return true; 
     1152    return false; 
     1153  } 
     1154 
     1155  private boolean jj_3R_36() { 
     1156    if (jj_scan_token(DOLLAR)) return true; 
     1157    if (jj_scan_token(EQUAL)) return true; 
     1158    if (jj_3R_49()) return true; 
     1159    return false; 
     1160  } 
     1161 
     1162  private boolean jj_3R_35() { 
     1163    if (jj_scan_token(CARET)) return true; 
     1164    if (jj_scan_token(EQUAL)) return true; 
     1165    if (jj_3R_49()) return true; 
     1166    return false; 
     1167  } 
     1168 
     1169  private boolean jj_3R_23() { 
     1170    Token xsp; 
     1171    xsp = jj_scanpos; 
     1172    if (jj_3R_38()) { 
     1173    jj_scanpos = xsp; 
     1174    if (jj_3R_39()) { 
     1175    jj_scanpos = xsp; 
     1176    if (jj_3R_40()) { 
     1177    jj_scanpos = xsp; 
     1178    if (jj_3R_41()) return true; 
     1179    } 
     1180    } 
     1181    } 
     1182    if (jj_3R_42()) return true; 
     1183    return false; 
     1184  } 
     1185 
     1186  private boolean jj_3R_50() { 
     1187    if (jj_scan_token(TILDE)) return true; 
     1188    if (jj_3R_70()) return true; 
     1189    return false; 
     1190  } 
     1191 
     1192  private boolean jj_3R_34() { 
     1193    if (jj_scan_token(TILDE)) return true; 
     1194    if (jj_scan_token(EQUAL)) return true; 
     1195    if (jj_3R_49()) return true; 
     1196    return false; 
     1197  } 
     1198 
     1199  private boolean jj_3R_43() { 
     1200    Token xsp; 
     1201    xsp = jj_scanpos; 
     1202    if (jj_scan_token(9)) jj_scanpos = xsp; 
     1203    return false; 
     1204  } 
     1205 
     1206  private boolean jj_3R_53() { 
     1207    if (jj_3R_24()) return true; 
     1208    return false; 
     1209  } 
     1210 
     1211  private boolean jj_3R_33() { 
     1212    if (jj_scan_token(EQUAL)) return true; 
     1213    Token xsp; 
     1214    xsp = jj_scanpos; 
     1215    if (jj_3R_50()) { 
     1216    jj_scanpos = xsp; 
     1217    if (jj_3R_51()) return true; 
     1218    } 
     1219    return false; 
     1220  } 
     1221 
     1222  private boolean jj_3R_32() { 
     1223    if (jj_scan_token(EXCLAMATION)) return true; 
     1224    if (jj_scan_token(EQUAL)) return true; 
     1225    if (jj_3R_49()) return true; 
     1226    return false; 
     1227  } 
     1228 
     1229  private boolean jj_3R_70() { 
     1230    if (jj_scan_token(REGEX)) return true; 
     1231    return false; 
     1232  } 
     1233 
     1234  private boolean jj_3R_22() { 
     1235    Token xsp; 
     1236    xsp = jj_scanpos; 
     1237    if (jj_3R_32()) { 
     1238    jj_scanpos = xsp; 
     1239    if (jj_3R_33()) { 
     1240    jj_scanpos = xsp; 
     1241    if (jj_3R_34()) { 
     1242    jj_scanpos = xsp; 
     1243    if (jj_3R_35()) { 
     1244    jj_scanpos = xsp; 
     1245    if (jj_3R_36()) { 
     1246    jj_scanpos = xsp; 
     1247    if (jj_3R_37()) return true; 
     1248    } 
     1249    } 
     1250    } 
     1251    } 
     1252    } 
     1253    return false; 
     1254  } 
     1255 
     1256  private boolean jj_3R_48() { 
     1257    if (jj_scan_token(COLON)) return true; 
     1258    if (jj_scan_token(IDENT)) return true; 
     1259    return false; 
     1260  } 
     1261 
     1262  private boolean jj_3R_49() { 
     1263    Token xsp; 
     1264    xsp = jj_scanpos; 
     1265    if (jj_3R_68()) { 
     1266    jj_scanpos = xsp; 
     1267    if (jj_3R_69()) return true; 
     1268    } 
     1269    return false; 
     1270  } 
     1271 
     1272  private boolean jj_3R_68() { 
     1273    if (jj_scan_token(IDENT)) return true; 
     1274    return false; 
     1275  } 
     1276 
     1277  private boolean jj_3R_14() { 
     1278    if (jj_3R_20()) return true; 
     1279    Token xsp; 
     1280    xsp = jj_scanpos; 
     1281    if (jj_3R_22()) { 
     1282    jj_scanpos = xsp; 
     1283    if (jj_3R_23()) return true; 
     1284    } 
     1285    return false; 
     1286  } 
     1287 
     1288  private boolean jj_3R_80() { 
     1289    if (jj_scan_token(HEXCOLOR)) return true; 
     1290    return false; 
     1291  } 
     1292 
     1293  private boolean jj_3R_47() { 
     1294    if (jj_scan_token(STRING)) return true; 
     1295    return false; 
     1296  } 
     1297 
     1298  private boolean jj_3R_79() { 
     1299    if (jj_3R_24()) return true; 
     1300    return false; 
     1301  } 
     1302 
     1303  private boolean jj_3R_78() { 
     1304    if (jj_scan_token(PLUS)) return true; 
     1305    if (jj_3R_24()) return true; 
     1306    return false; 
     1307  } 
     1308 
     1309  private boolean jj_3R_71() { 
     1310    Token xsp; 
     1311    xsp = jj_scanpos; 
     1312    if (jj_3R_77()) { 
     1313    jj_scanpos = xsp; 
     1314    if (jj_3R_78()) { 
     1315    jj_scanpos = xsp; 
     1316    if (jj_3R_79()) { 
     1317    jj_scanpos = xsp; 
     1318    if (jj_3R_80()) return true; 
     1319    } 
     1320    } 
     1321    } 
     1322    return false; 
     1323  } 
     1324 
     1325  private boolean jj_3R_77() { 
     1326    if (jj_3R_49()) return true; 
     1327    return false; 
     1328  } 
     1329 
     1330  private boolean jj_3R_21() { 
     1331    if (jj_scan_token(QUESTION)) return true; 
     1332    return false; 
     1333  } 
     1334 
     1335  private boolean jj_3R_42() { 
     1336    Token xsp; 
     1337    xsp = jj_scanpos; 
     1338    if (jj_3R_52()) { 
     1339    jj_scanpos = xsp; 
     1340    if (jj_3R_53()) return true; 
     1341    } 
     1342    return false; 
     1343  } 
     1344 
     1345  private boolean jj_3R_52() { 
     1346    if (jj_scan_token(MINUS)) return true; 
     1347    if (jj_3R_24()) return true; 
     1348    return false; 
     1349  } 
     1350 
     1351  private boolean jj_3R_19() { 
     1352    if (jj_scan_token(EXCLAMATION)) return true; 
     1353    return false; 
     1354  } 
     1355 
     1356  private boolean jj_3R_13() { 
     1357    Token xsp; 
     1358    xsp = jj_scanpos; 
     1359    if (jj_3R_19()) jj_scanpos = xsp; 
     1360    if (jj_3R_20()) return true; 
     1361    xsp = jj_scanpos; 
     1362    if (jj_3R_21()) jj_scanpos = xsp; 
     1363    return false; 
     1364  } 
     1365 
     1366  private boolean jj_3R_81() { 
     1367    if (jj_scan_token(COMMA)) return true; 
     1368    if (jj_3R_16()) return true; 
     1369    if (jj_3R_17()) return true; 
     1370    return false; 
     1371  } 
     1372 
     1373  private boolean jj_3R_24() { 
     1374    Token xsp; 
     1375    xsp = jj_scanpos; 
     1376    if (jj_scan_token(3)) { 
     1377    jj_scanpos = xsp; 
     1378    if (jj_scan_token(2)) return true; 
     1379    } 
     1380    return false; 
     1381  } 
     1382 
     1383  private boolean jj_3R_31() { 
     1384    if (jj_scan_token(IDENT)) return true; 
     1385    Token xsp; 
     1386    while (true) { 
     1387      xsp = jj_scanpos; 
     1388      if (jj_3R_48()) { jj_scanpos = xsp; break; } 
     1389    } 
     1390    return false; 
     1391  } 
     1392 
     1393  private boolean jj_3R_30() { 
     1394    if (jj_3R_47()) return true; 
     1395    return false; 
     1396  } 
     1397 
     1398  private boolean jj_3R_20() { 
     1399    Token xsp; 
     1400    xsp = jj_scanpos; 
     1401    if (jj_3R_30()) { 
     1402    jj_scanpos = xsp; 
     1403    if (jj_3R_31()) return true; 
     1404    } 
     1405    return false; 
     1406  } 
     1407 
     1408  private boolean jj_3R_76() { 
     1409    if (jj_3R_17()) return true; 
     1410    Token xsp; 
     1411    while (true) { 
     1412      xsp = jj_scanpos; 
     1413      if (jj_3R_81()) { jj_scanpos = xsp; break; } 
     1414    } 
     1415    return false; 
     1416  } 
     1417 
     1418  private boolean jj_3_2() { 
     1419    if (jj_3R_14()) return true; 
     1420    if (jj_scan_token(RSQUARE)) return true; 
     1421    return false; 
     1422  } 
     1423 
     1424  private boolean jj_3_1() { 
     1425    if (jj_3R_13()) return true; 
     1426    if (jj_scan_token(RSQUARE)) return true; 
     1427    return false; 
     1428  } 
     1429 
     1430  private boolean jj_3R_18() { 
     1431    if (jj_scan_token(IDENT)) return true; 
     1432    if (jj_3R_16()) return true; 
     1433    if (jj_scan_token(LPAR)) return true; 
     1434    if (jj_3R_16()) return true; 
     1435    Token xsp; 
     1436    xsp = jj_scanpos; 
     1437    if (jj_3R_76()) jj_scanpos = xsp; 
     1438    if (jj_scan_token(RPAR)) return true; 
     1439    return false; 
     1440  } 
     1441 
     1442  private boolean jj_3R_55() { 
     1443    if (jj_scan_token(LPAR)) return true; 
     1444    if (jj_3R_16()) return true; 
     1445    if (jj_3R_17()) return true; 
     1446    if (jj_scan_token(RPAR)) return true; 
     1447    return false; 
     1448  } 
     1449 
     1450  private boolean jj_3R_54() { 
     1451    if (jj_3R_71()) return true; 
     1452    return false; 
     1453  } 
     1454 
     1455  private boolean jj_3_5() { 
     1456    if (jj_3R_18()) return true; 
     1457    return false; 
     1458  } 
     1459 
     1460  private boolean jj_3R_45() { 
     1461    Token xsp; 
     1462    xsp = jj_scanpos; 
     1463    if (jj_3_5()) { 
     1464    jj_scanpos = xsp; 
     1465    if (jj_3R_54()) { 
     1466    jj_scanpos = xsp; 
     1467    if (jj_3R_55()) return true; 
     1468    } 
     1469    } 
     1470    return false; 
     1471  } 
     1472 
     1473  private boolean jj_3R_67() { 
     1474    if (jj_scan_token(QUESTION)) return true; 
     1475    if (jj_3R_16()) return true; 
     1476    if (jj_3R_45()) return true; 
     1477    if (jj_3R_16()) return true; 
     1478    if (jj_scan_token(COLON)) return true; 
     1479    if (jj_3R_16()) return true; 
     1480    if (jj_3R_45()) return true; 
     1481    if (jj_3R_16()) return true; 
     1482    return false; 
     1483  } 
     1484 
     1485  private boolean jj_3R_66() { 
     1486    if (jj_scan_token(PIPE)) return true; 
     1487    if (jj_scan_token(PIPE)) return true; 
     1488    if (jj_3R_16()) return true; 
     1489    if (jj_3R_45()) return true; 
     1490    if (jj_3R_16()) return true; 
     1491    return false; 
     1492  } 
     1493 
     1494  private boolean jj_3R_65() { 
     1495    if (jj_scan_token(AMPERSAND)) return true; 
     1496    if (jj_scan_token(AMPERSAND)) return true; 
     1497    if (jj_3R_16()) return true; 
     1498    if (jj_3R_45()) return true; 
     1499    if (jj_3R_16()) return true; 
     1500    return false; 
     1501  } 
     1502 
     1503  private boolean jj_3R_64() { 
     1504    if (jj_scan_token(LESS)) return true; 
     1505    if (jj_3R_16()) return true; 
     1506    if (jj_3R_45()) return true; 
     1507    if (jj_3R_16()) return true; 
     1508    return false; 
     1509  } 
     1510 
     1511  private boolean jj_3R_63() { 
     1512    if (jj_scan_token(EQUAL)) return true; 
     1513    Token xsp; 
     1514    xsp = jj_scanpos; 
     1515    if (jj_scan_token(22)) jj_scanpos = xsp; 
     1516    if (jj_3R_16()) return true; 
     1517    if (jj_3R_45()) return true; 
     1518    if (jj_3R_16()) return true; 
     1519    return false; 
     1520  } 
     1521 
     1522  private boolean jj_3R_62() { 
     1523    if (jj_scan_token(GREATER)) return true; 
     1524    if (jj_3R_16()) return true; 
     1525    if (jj_3R_45()) return true; 
     1526    if (jj_3R_16()) return true; 
     1527    return false; 
     1528  } 
     1529 
     1530  private boolean jj_3R_61() { 
     1531    if (jj_scan_token(LESS_EQUAL)) return true; 
     1532    if (jj_3R_16()) return true; 
     1533    if (jj_3R_45()) return true; 
     1534    if (jj_3R_16()) return true; 
     1535    return false; 
     1536  } 
     1537 
     1538  private boolean jj_3R_60() { 
     1539    if (jj_scan_token(GREATER_EQUAL)) return true; 
     1540    if (jj_3R_16()) return true; 
     1541    if (jj_3R_45()) return true; 
     1542    if (jj_3R_16()) return true; 
     1543    return false; 
     1544  } 
     1545 
     1546  private boolean jj_3R_75() { 
     1547    if (jj_scan_token(SLASH)) return true; 
     1548    if (jj_3R_16()) return true; 
     1549    if (jj_3R_45()) return true; 
     1550    if (jj_3R_16()) return true; 
     1551    return false; 
     1552  } 
     1553 
     1554  private boolean jj_3R_59() { 
     1555    Token xsp; 
     1556    if (jj_3R_75()) return true; 
     1557    while (true) { 
     1558      xsp = jj_scanpos; 
     1559      if (jj_3R_75()) { jj_scanpos = xsp; break; } 
     1560    } 
     1561    return false; 
     1562  } 
     1563 
     1564  private boolean jj_3R_74() { 
     1565    if (jj_scan_token(MINUS)) return true; 
     1566    if (jj_3R_16()) return true; 
     1567    if (jj_3R_45()) return true; 
     1568    if (jj_3R_16()) return true; 
     1569    return false; 
     1570  } 
     1571 
     1572  private boolean jj_3R_58() { 
     1573    Token xsp; 
     1574    if (jj_3R_74()) return true; 
     1575    while (true) { 
     1576      xsp = jj_scanpos; 
     1577      if (jj_3R_74()) { jj_scanpos = xsp; break; } 
     1578    } 
     1579    return false; 
     1580  } 
     1581 
     1582  private boolean jj_3R_73() { 
     1583    if (jj_scan_token(STAR)) return true; 
     1584    if (jj_3R_16()) return true; 
     1585    if (jj_3R_45()) return true; 
     1586    if (jj_3R_16()) return true; 
     1587    return false; 
     1588  } 
     1589 
     1590  private boolean jj_3R_57() { 
     1591    Token xsp; 
     1592    if (jj_3R_73()) return true; 
     1593    while (true) { 
     1594      xsp = jj_scanpos; 
     1595      if (jj_3R_73()) { jj_scanpos = xsp; break; } 
     1596    } 
     1597    return false; 
     1598  } 
     1599 
     1600  private boolean jj_3R_72() { 
     1601    if (jj_scan_token(PLUS)) return true; 
     1602    if (jj_3R_16()) return true; 
     1603    if (jj_3R_45()) return true; 
     1604    if (jj_3R_16()) return true; 
     1605    return false; 
     1606  } 
     1607 
     1608  private boolean jj_3R_46() { 
     1609    Token xsp; 
     1610    xsp = jj_scanpos; 
     1611    if (jj_3R_56()) { 
     1612    jj_scanpos = xsp; 
     1613    if (jj_3R_57()) { 
     1614    jj_scanpos = xsp; 
     1615    if (jj_3R_58()) { 
     1616    jj_scanpos = xsp; 
     1617    if (jj_3R_59()) { 
     1618    jj_scanpos = xsp; 
     1619    if (jj_3R_60()) { 
     1620    jj_scanpos = xsp; 
     1621    if (jj_3R_61()) { 
     1622    jj_scanpos = xsp; 
     1623    if (jj_3R_62()) { 
     1624    jj_scanpos = xsp; 
     1625    if (jj_3R_63()) { 
     1626    jj_scanpos = xsp; 
     1627    if (jj_3R_64()) { 
     1628    jj_scanpos = xsp; 
     1629    if (jj_3R_65()) { 
     1630    jj_scanpos = xsp; 
     1631    if (jj_3R_66()) { 
     1632    jj_scanpos = xsp; 
     1633    if (jj_3R_67()) return true; 
     1634    } 
     1635    } 
     1636    } 
     1637    } 
     1638    } 
     1639    } 
     1640    } 
     1641    } 
     1642    } 
     1643    } 
     1644    } 
     1645    return false; 
     1646  } 
     1647 
     1648  private boolean jj_3R_56() { 
     1649    Token xsp; 
     1650    if (jj_3R_72()) return true; 
     1651    while (true) { 
     1652      xsp = jj_scanpos; 
     1653      if (jj_3R_72()) { jj_scanpos = xsp; break; } 
     1654    } 
     1655    return false; 
     1656  } 
     1657 
     1658  private boolean jj_3R_29() { 
     1659    if (jj_3R_45()) return true; 
     1660    if (jj_3R_16()) return true; 
     1661    Token xsp; 
     1662    xsp = jj_scanpos; 
     1663    if (jj_3R_46()) jj_scanpos = xsp; 
     1664    return false; 
     1665  } 
     1666 
     1667  private boolean jj_3R_28() { 
     1668    if (jj_scan_token(MINUS)) return true; 
     1669    if (jj_3R_16()) return true; 
     1670    if (jj_3R_45()) return true; 
     1671    if (jj_3R_16()) return true; 
     1672    return false; 
     1673  } 
     1674 
     1675  private boolean jj_3R_27() { 
     1676    if (jj_scan_token(EXCLAMATION)) return true; 
     1677    if (jj_3R_16()) return true; 
     1678    if (jj_3R_45()) return true; 
     1679    if (jj_3R_16()) return true; 
     1680    return false; 
     1681  } 
     1682 
     1683  private boolean jj_3_4() { 
     1684    if (jj_3R_17()) return true; 
     1685    Token xsp; 
     1686    xsp = jj_scanpos; 
     1687    if (jj_scan_token(27)) { 
     1688    jj_scanpos = xsp; 
     1689    if (jj_scan_token(13)) return true; 
     1690    } 
     1691    return false; 
     1692  } 
     1693 
     1694  private boolean jj_3R_17() { 
     1695    Token xsp; 
     1696    xsp = jj_scanpos; 
     1697    if (jj_3R_27()) { 
     1698    jj_scanpos = xsp; 
     1699    if (jj_3R_28()) { 
     1700    jj_scanpos = xsp; 
     1701    if (jj_3R_29()) return true; 
     1702    } 
     1703    } 
     1704    return false; 
     1705  } 
     1706 
     1707  private boolean jj_3_3() { 
     1708    if (jj_3R_15()) return true; 
     1709    if (jj_3R_16()) return true; 
     1710    Token xsp; 
     1711    xsp = jj_scanpos; 
     1712    if (jj_scan_token(27)) { 
     1713    jj_scanpos = xsp; 
     1714    if (jj_scan_token(13)) return true; 
     1715    } 
     1716    return false; 
     1717  } 
     1718 
     1719  private boolean jj_3R_25() { 
     1720    if (jj_scan_token(COMMA)) return true; 
    10601721    if (jj_3R_43()) return true; 
    1061     } 
     1722    if (jj_3R_24()) return true; 
    10621723    return false; 
    10631724  } 
    10641725 
    10651726  private boolean jj_3R_15() { 
    1066     Token xsp; 
     1727    if (jj_3R_24()) return true; 
     1728    Token xsp; 
     1729    if (jj_3R_25()) return true; 
    10671730    while (true) { 
    10681731      xsp = jj_scanpos; 
     
    10721735  } 
    10731736 
    1074   private boolean jj_3R_52() { 
    1075     if (jj_scan_token(LPAR)) return true; 
    1076     if (jj_3R_15()) return true; 
    1077     if (jj_3R_16()) return true; 
    1078     if (jj_scan_token(RPAR)) return true; 
    1079     return false; 
    1080   } 
    1081  
    1082   private boolean jj_3R_51() { 
    1083     if (jj_3R_66()) return true; 
     1737  private boolean jj_3R_41() { 
     1738    if (jj_scan_token(LESS)) return true; 
    10841739    return false; 
    10851740  } 
    10861741 
    10871742  private boolean jj_3R_44() { 
    1088     Token xsp; 
    1089     xsp = jj_scanpos; 
    1090     if (jj_3_5()) { 
    1091     jj_scanpos = xsp; 
    1092     if (jj_3R_51()) { 
    1093     jj_scanpos = xsp; 
    1094     if (jj_3R_52()) return true; 
    1095     } 
    1096     } 
    1097     return false; 
    1098   } 
    1099  
    1100   private boolean jj_3R_42() { 
    1101     Token xsp; 
    1102     xsp = jj_scanpos; 
    1103     if (jj_scan_token(9)) jj_scanpos = xsp; 
    1104     return false; 
    1105   } 
    1106  
    1107   private boolean jj_3_5() { 
    1108     if (jj_3R_17()) return true; 
    1109     return false; 
    1110   } 
    1111  
    1112   private boolean jj_3R_50() { 
    1113     if (jj_3R_23()) return true; 
    1114     return false; 
    1115   } 
    1116  
    1117   private boolean jj_3R_64() { 
    1118     if (jj_scan_token(QUESTION)) return true; 
    1119     if (jj_3R_15()) return true; 
    1120     if (jj_3R_44()) return true; 
    1121     if (jj_3R_15()) return true; 
    1122     if (jj_scan_token(COLON)) return true; 
    1123     if (jj_3R_15()) return true; 
    1124     if (jj_3R_44()) return true; 
    1125     if (jj_3R_15()) return true; 
    1126     return false; 
    1127   } 
    1128  
    1129   private boolean jj_3R_63() { 
    1130     if (jj_scan_token(PIPE)) return true; 
    1131     if (jj_scan_token(PIPE)) return true; 
    1132     if (jj_3R_15()) return true; 
    1133     if (jj_3R_44()) return true; 
    1134     if (jj_3R_15()) return true; 
    1135     return false; 
    1136   } 
    1137  
    1138   private boolean jj_3R_40() { 
    1139     if (jj_scan_token(LESS)) return true; 
    1140     return false; 
    1141   } 
    1142  
    1143   private boolean jj_3R_62() { 
    1144     if (jj_scan_token(AMPERSAND)) return true; 
    1145     if (jj_scan_token(AMPERSAND)) return true; 
    1146     if (jj_3R_15()) return true; 
    1147     if (jj_3R_44()) return true; 
    1148     if (jj_3R_15()) return true; 
    1149     return false; 
    1150   } 
    1151  
    1152   private boolean jj_3R_39() { 
    1153     if (jj_scan_token(LESS_EQUAL)) return true; 
    1154     return false; 
    1155   } 
    1156  
    1157   private boolean jj_3R_61() { 
    1158     if (jj_scan_token(LESS)) return true; 
    1159     if (jj_3R_15()) return true; 
    1160     if (jj_3R_44()) return true; 
    1161     if (jj_3R_15()) return true; 
    1162     return false; 
    1163   } 
    1164  
    1165   private boolean jj_3R_38() { 
    1166     if (jj_scan_token(GREATER)) return true; 
    1167     return false; 
    1168   } 
    1169  
    1170   private boolean jj_3R_60() { 
    1171     if (jj_scan_token(EQUAL)) return true; 
    1172     Token xsp; 
    1173     xsp = jj_scanpos; 
    1174     if (jj_scan_token(22)) jj_scanpos = xsp; 
    1175     if (jj_3R_15()) return true; 
    1176     if (jj_3R_44()) return true; 
    1177     if (jj_3R_15()) return true; 
    1178     return false; 
    1179   } 
    1180  
    1181   private boolean jj_3R_37() { 
    1182     if (jj_scan_token(GREATER_EQUAL)) return true; 
    1183     return false; 
    1184   } 
    1185  
    1186   private boolean jj_3R_65() { 
    1187     if (jj_scan_token(REGEX)) return true; 
    1188     return false; 
    1189   } 
    1190  
    1191   private boolean jj_3R_59() { 
    1192     if (jj_scan_token(GREATER)) return true; 
    1193     if (jj_3R_15()) return true; 
    1194     if (jj_3R_44()) return true; 
    1195     if (jj_3R_15()) return true; 
    1196     return false; 
    1197   } 
    1198  
    1199   private boolean jj_3R_58() { 
    1200     if (jj_scan_token(LESS_EQUAL)) return true; 
    1201     if (jj_3R_15()) return true; 
    1202     if (jj_3R_44()) return true; 
    1203     if (jj_3R_15()) return true; 
    1204     return false; 
    1205   } 
    1206  
    1207   private boolean jj_3R_36() { 
    1208     if (jj_scan_token(STAR)) return true; 
    1209     if (jj_scan_token(EQUAL)) return true; 
    1210     if (jj_3R_19()) return true; 
    1211     return false; 
    1212   } 
    1213  
    1214   private boolean jj_3R_70() { 
    1215     if (jj_scan_token(SLASH)) return true; 
    1216     if (jj_3R_15()) return true; 
    1217     if (jj_3R_44()) return true; 
    1218     if (jj_3R_15()) return true; 
    1219     return false; 
    1220   } 
    1221  
    1222   private boolean jj_3R_57() { 
    1223     if (jj_scan_token(GREATER_EQUAL)) return true; 
    1224     if (jj_3R_15()) return true; 
    1225     if (jj_3R_44()) return true; 
    1226     if (jj_3R_15()) return true; 
    1227     return false; 
    1228   } 
    1229  
    1230   private boolean jj_3R_48() { 
    1231     if (jj_3R_19()) return true; 
    1232     return false; 
    1233   } 
    1234  
    1235   private boolean jj_3R_35() { 
    1236     if (jj_scan_token(DOLLAR)) return true; 
    1237     if (jj_scan_token(EQUAL)) return true; 
    1238     if (jj_3R_19()) return true; 
    1239     return false; 
    1240   } 
    1241  
    1242   private boolean jj_3R_69() { 
    1243     if (jj_scan_token(MINUS)) return true; 
    1244     if (jj_3R_15()) return true; 
    1245     if (jj_3R_44()) return true; 
    1246     if (jj_3R_15()) return true; 
    1247     return false; 
    1248   } 
    1249  
    1250   private boolean jj_3R_56() { 
    1251     Token xsp; 
    1252     if (jj_3R_70()) return true; 
    1253     while (true) { 
    1254       xsp = jj_scanpos; 
    1255       if (jj_3R_70()) { jj_scanpos = xsp; break; } 
    1256     } 
    1257     return false; 
    1258   } 
    1259  
    1260   private boolean jj_3R_47() { 
    1261     if (jj_scan_token(TILDE)) return true; 
    1262     if (jj_3R_65()) return true; 
    1263     return false; 
    1264   } 
    1265  
    1266   private boolean jj_3R_19() { 
    1267     Token xsp; 
    1268     xsp = jj_scanpos; 
    1269     if (jj_3R_29()) { 
    1270     jj_scanpos = xsp; 
    1271     if (jj_3R_30()) return true; 
    1272     } 
    1273     return false; 
    1274   } 
    1275  
    1276   private boolean jj_3R_29() { 
    1277     if (jj_scan_token(IDENT)) return true; 
    1278     return false; 
    1279   } 
    1280  
    1281   private boolean jj_3R_22() { 
    1282     Token xsp; 
    1283     xsp = jj_scanpos; 
    1284     if (jj_3R_37()) { 
    1285     jj_scanpos = xsp; 
    1286     if (jj_3R_38()) { 
    1287     jj_scanpos = xsp; 
    1288     if (jj_3R_39()) { 
    1289     jj_scanpos = xsp; 
    1290     if (jj_3R_40()) return true; 
    1291     } 
    1292     } 
    1293     } 
    1294     if (jj_3R_41()) return true; 
    1295     return false; 
    1296   } 
    1297  
    1298   private boolean jj_3R_34() { 
    1299     if (jj_scan_token(CARET)) return true; 
    1300     if (jj_scan_token(EQUAL)) return true; 
    1301     if (jj_3R_19()) return true; 
    1302     return false; 
    1303   } 
    1304  
    1305   private boolean jj_3R_68() { 
    1306     if (jj_scan_token(STAR)) return true; 
    1307     if (jj_3R_15()) return true; 
    1308     if (jj_3R_44()) return true; 
    1309     if (jj_3R_15()) return true; 
    1310     return false; 
    1311   } 
    1312  
    1313   private boolean jj_3R_55() { 
    1314     Token xsp; 
    1315     if (jj_3R_69()) return true; 
    1316     while (true) { 
    1317       xsp = jj_scanpos; 
    1318       if (jj_3R_69()) { jj_scanpos = xsp; break; } 
    1319     } 
    1320     return false; 
    1321   } 
    1322  
    1323   private boolean jj_3R_33() { 
    1324     if (jj_scan_token(TILDE)) return true; 
    1325     if (jj_scan_token(EQUAL)) return true; 
    1326     if (jj_3R_19()) return true; 
    1327     return false; 
    1328   } 
    1329  
    1330   private boolean jj_3R_67() { 
    1331     if (jj_scan_token(PLUS)) return true; 
    1332     if (jj_3R_15()) return true; 
    1333     if (jj_3R_44()) return true; 
    1334     if (jj_3R_15()) return true; 
    1335     return false; 
    1336   } 
    1337  
    1338   private boolean jj_3R_54() { 
    1339     Token xsp; 
    1340     if (jj_3R_68()) return true; 
    1341     while (true) { 
    1342       xsp = jj_scanpos; 
    1343       if (jj_3R_68()) { jj_scanpos = xsp; break; } 
    1344     } 
    1345     return false; 
    1346   } 
    1347  
    1348   private boolean jj_3R_53() { 
    1349     Token xsp; 
    1350     if (jj_3R_67()) return true; 
    1351     while (true) { 
    1352       xsp = jj_scanpos; 
    1353       if (jj_3R_67()) { jj_scanpos = xsp; break; } 
    1354     } 
    1355     return false; 
    1356   } 
    1357  
    1358   private boolean jj_3R_45() { 
    1359     Token xsp; 
    1360     xsp = jj_scanpos; 
    1361     if (jj_3R_53()) { 
    1362     jj_scanpos = xsp; 
    1363     if (jj_3R_54()) { 
    1364     jj_scanpos = xsp; 
    1365     if (jj_3R_55()) { 
    1366     jj_scanpos = xsp; 
    1367     if (jj_3R_56()) { 
    1368     jj_scanpos = xsp; 
    1369     if (jj_3R_57()) { 
    1370     jj_scanpos = xsp; 
    1371     if (jj_3R_58()) { 
    1372     jj_scanpos = xsp; 
    1373     if (jj_3R_59()) { 
    1374     jj_scanpos = xsp; 
    1375     if (jj_3R_60()) { 
    1376     jj_scanpos = xsp; 
    1377     if (jj_3R_61()) { 
    1378     jj_scanpos = xsp; 
    1379     if (jj_3R_62()) { 
    1380     jj_scanpos = xsp; 
    1381     if (jj_3R_63()) { 
    1382     jj_scanpos = xsp; 
    1383     if (jj_3R_64()) return true; 
    1384     } 
    1385     } 
    1386     } 
    1387     } 
    1388     } 
    1389     } 
    1390     } 
    1391     } 
    1392     } 
    1393     } 
    1394     } 
    1395     return false; 
    1396   } 
    1397  
    1398   private boolean jj_3R_46() { 
    1399     if (jj_scan_token(STRING)) return true; 
    1400     return false; 
    1401   } 
    1402  
    1403   private boolean jj_3R_32() { 
    1404     if (jj_scan_token(EQUAL)) return true; 
    1405     Token xsp; 
    1406     xsp = jj_scanpos; 
    1407     if (jj_3R_47()) { 
    1408     jj_scanpos = xsp; 
    1409     if (jj_3R_48()) return true; 
    1410     } 
    1411     return false; 
    1412   } 
    1413  
    1414   private boolean jj_3R_31() { 
    1415     if (jj_scan_token(EXCLAMATION)) return true; 
    1416     if (jj_scan_token(EQUAL)) return true; 
    1417     if (jj_3R_19()) return true; 
    1418     return false; 
    1419   } 
    1420  
    1421   private boolean jj_3R_49() { 
    1422     if (jj_scan_token(MINUS)) return true; 
    1423     if (jj_3R_23()) return true; 
    1424     return false; 
    1425   } 
    1426  
    1427   private boolean jj_3R_41() { 
    1428     Token xsp; 
    1429     xsp = jj_scanpos; 
    1430     if (jj_3R_49()) { 
    1431     jj_scanpos = xsp; 
    1432     if (jj_3R_50()) return true; 
    1433     } 
    1434     return false; 
    1435   } 
    1436  
    1437   private boolean jj_3R_28() { 
    1438     if (jj_3R_44()) return true; 
    1439     if (jj_3R_15()) return true; 
    1440     Token xsp; 
    1441     xsp = jj_scanpos; 
    1442     if (jj_3R_45()) jj_scanpos = xsp; 
    1443     return false; 
    1444   } 
    1445  
    1446   private boolean jj_3R_21() { 
    1447     Token xsp; 
    1448     xsp = jj_scanpos; 
    1449     if (jj_3R_31()) { 
    1450     jj_scanpos = xsp; 
    1451     if (jj_3R_32()) { 
    1452     jj_scanpos = xsp; 
    1453     if (jj_3R_33()) { 
    1454     jj_scanpos = xsp; 
    1455     if (jj_3R_34()) { 
    1456     jj_scanpos = xsp; 
    1457     if (jj_3R_35()) { 
    1458     jj_scanpos = xsp; 
    1459     if (jj_3R_36()) return true; 
    1460     } 
    1461     } 
    1462     } 
    1463     } 
    1464     } 
    1465     return false; 
    1466   } 
    1467  
    1468   private boolean jj_3R_27() { 
    1469     if (jj_scan_token(MINUS)) return true; 
    1470     if (jj_3R_15()) return true; 
    1471     if (jj_3R_44()) return true; 
    1472     if (jj_3R_15()) return true; 
    1473     return false; 
    1474   } 
    1475  
    1476   private boolean jj_3R_26() { 
    1477     if (jj_scan_token(EXCLAMATION)) return true; 
    1478     if (jj_3R_15()) return true; 
    1479     if (jj_3R_44()) return true; 
    1480     if (jj_3R_15()) return true; 
    1481     return false; 
    1482   } 
    1483  
    1484   private boolean jj_3R_23() { 
    1485     Token xsp; 
    1486     xsp = jj_scanpos; 
    1487     if (jj_scan_token(3)) { 
    1488     jj_scanpos = xsp; 
    1489     if (jj_scan_token(2)) return true; 
    1490     } 
    1491     return false; 
    1492   } 
    1493  
    1494   private boolean jj_3R_16() { 
    1495     Token xsp; 
    1496     xsp = jj_scanpos; 
    1497     if (jj_3R_26()) { 
    1498     jj_scanpos = xsp; 
    1499     if (jj_3R_27()) { 
    1500     jj_scanpos = xsp; 
    1501     if (jj_3R_28()) return true; 
    1502     } 
    1503     } 
    1504     return false; 
    1505   } 
    1506  
    1507   private boolean jj_3_4() { 
    1508     if (jj_3R_16()) return true; 
    1509     Token xsp; 
    1510     xsp = jj_scanpos; 
    1511     if (jj_scan_token(27)) { 
    1512     jj_scanpos = xsp; 
    1513     if (jj_scan_token(13)) return true; 
    1514     } 
    1515     return false; 
    1516   } 
    1517  
    1518   private boolean jj_3R_13() { 
    1519     if (jj_3R_19()) return true; 
    1520     Token xsp; 
    1521     xsp = jj_scanpos; 
    1522     if (jj_3R_21()) { 
    1523     jj_scanpos = xsp; 
    1524     if (jj_3R_22()) return true; 
    1525     } 
    1526     return false; 
    1527   } 
    1528  
    1529   private boolean jj_3R_75() { 
    1530     if (jj_scan_token(HEXCOLOR)) return true; 
    1531     return false; 
    1532   } 
    1533  
    1534   private boolean jj_3R_74() { 
    1535     if (jj_3R_23()) return true; 
    1536     return false; 
    1537   } 
    1538  
    1539   private boolean jj_3_3() { 
    1540     if (jj_3R_14()) return true; 
    1541     if (jj_3R_15()) return true; 
    1542     Token xsp; 
    1543     xsp = jj_scanpos; 
    1544     if (jj_scan_token(27)) { 
    1545     jj_scanpos = xsp; 
    1546     if (jj_scan_token(13)) return true; 
    1547     } 
    1548     return false; 
    1549   } 
    1550  
    1551   private boolean jj_3R_73() { 
    1552     if (jj_scan_token(PLUS)) return true; 
    1553     if (jj_3R_23()) return true; 
    1554     return false; 
    1555   } 
    1556  
    1557   private boolean jj_3R_72() { 
    1558     if (jj_3R_19()) return true; 
    1559     return false; 
    1560   } 
    1561  
    1562   private boolean jj_3R_66() { 
    1563     Token xsp; 
    1564     xsp = jj_scanpos; 
    1565     if (jj_3R_72()) { 
    1566     jj_scanpos = xsp; 
    1567     if (jj_3R_73()) { 
    1568     jj_scanpos = xsp; 
    1569     if (jj_3R_74()) { 
    1570     jj_scanpos = xsp; 
    1571     if (jj_3R_75()) return true; 
    1572     } 
    1573     } 
    1574     } 
    1575     return false; 
    1576   } 
    1577  
    1578   private boolean jj_3R_20() { 
    1579     if (jj_scan_token(QUESTION)) return true; 
    1580     return false; 
    1581   } 
    1582  
    1583   private boolean jj_3R_18() { 
    1584     if (jj_scan_token(EXCLAMATION)) return true; 
    1585     return false; 
    1586   } 
    1587  
    1588   private boolean jj_3R_12() { 
    1589     Token xsp; 
    1590     xsp = jj_scanpos; 
    1591     if (jj_3R_18()) jj_scanpos = xsp; 
    1592     if (jj_3R_19()) return true; 
    1593     xsp = jj_scanpos; 
    1594     if (jj_3R_20()) jj_scanpos = xsp; 
    1595     return false; 
    1596   } 
    1597  
    1598   private boolean jj_3R_24() { 
    1599     if (jj_scan_token(COMMA)) return true; 
    1600     if (jj_3R_42()) return true; 
    1601     if (jj_3R_23()) return true; 
    1602     return false; 
    1603   } 
    1604  
    1605   private boolean jj_3R_76() { 
    1606     if (jj_scan_token(COMMA)) return true; 
    1607     if (jj_3R_15()) return true; 
    1608     if (jj_3R_16()) return true; 
    1609     return false; 
    1610   } 
    1611  
    1612   private boolean jj_3R_71() { 
    1613     if (jj_3R_16()) return true; 
    1614     Token xsp; 
    1615     while (true) { 
    1616       xsp = jj_scanpos; 
    1617       if (jj_3R_76()) { jj_scanpos = xsp; break; } 
    1618     } 
    1619     return false; 
    1620   } 
    1621  
    1622   private boolean jj_3R_14() { 
    1623     if (jj_3R_23()) return true; 
    1624     Token xsp; 
    1625     if (jj_3R_24()) return true; 
    1626     while (true) { 
    1627       xsp = jj_scanpos; 
    1628       if (jj_3R_24()) { jj_scanpos = xsp; break; } 
    1629     } 
    1630     return false; 
    1631   } 
    1632  
    1633   private boolean jj_3_2() { 
    1634     if (jj_3R_13()) return true; 
    1635     if (jj_scan_token(RSQUARE)) return true; 
    1636     return false; 
    1637   } 
    1638  
    1639   private boolean jj_3R_43() { 
    16401743    if (jj_scan_token(COMMENT_START)) return true; 
    16411744    if (jj_scan_token(COMMENT_END)) return true; 
     
    16431746  } 
    16441747 
    1645   private boolean jj_3_1() { 
    1646     if (jj_3R_12()) return true; 
    1647     if (jj_scan_token(RSQUARE)) return true; 
    1648     return false; 
    1649   } 
    1650  
    1651   private boolean jj_3R_17() { 
    1652     if (jj_scan_token(IDENT)) return true; 
    1653     if (jj_3R_15()) return true; 
    1654     if (jj_scan_token(LPAR)) return true; 
    1655     if (jj_3R_15()) return true; 
    1656     Token xsp; 
    1657     xsp = jj_scanpos; 
    1658     if (jj_3R_71()) jj_scanpos = xsp; 
    1659     if (jj_scan_token(RPAR)) return true; 
     1748  private boolean jj_3R_40() { 
     1749    if (jj_scan_token(LESS_EQUAL)) return true; 
     1750    return false; 
     1751  } 
     1752 
     1753  private boolean jj_3R_39() { 
     1754    if (jj_scan_token(GREATER)) return true; 
     1755    return false; 
     1756  } 
     1757 
     1758  private boolean jj_3R_38() { 
     1759    if (jj_scan_token(GREATER_EQUAL)) return true; 
    16601760    return false; 
    16611761  } 
     
    16721772  private int jj_la; 
    16731773  private int jj_gen; 
    1674   final private int[] jj_la1 = new int[41]; 
     1774  final private int[] jj_la1 = new int[45]; 
    16751775  static private int[] jj_la1_0; 
    16761776  static private int[] jj_la1_1; 
     
    16801780   } 
    16811781   private static void jj_la1_init_0() { 
    1682       jj_la1_0 = new int[] {0xc,0xc,0x12,0x200,0x200,0x200,0x10000000,0x402,0x10000000,0x402,0x40000000,0x2804000,0x2804000,0x4000000,0x4,0x0,0x4,0x8081011e,0x800000,0x0,0x1000012,0x1c00400,0x3c0000,0x1fc0400,0x800000,0x402,0x2,0x8002000,0x8002000,0x80000000,0x400,0x0,0x800,0x400000,0xa07c0c00,0xa07c0c00,0x8081011e,0x8001011e,0x10000000,0x8081011e,0x8000011e,}; 
     1782      jj_la1_0 = new int[] {0xc,0xc,0x12,0x200,0x200,0x200,0x10000000,0x402,0x10000000,0x300000,0x300000,0x402,0x40000000,0x2804000,0x2804000,0x4000000,0x4,0x0,0x4,0x8081011e,0x2000000,0x12,0x800000,0x0,0x1000012,0x1c00400,0x3c0000,0x1fc0400,0x800000,0x402,0x2,0x8002000,0x8002000,0x80000000,0x400,0x0,0x800,0x400000,0xa07c0c00,0xa07c0c00,0x8081011e,0x8001011e,0x10000000,0x8081011e,0x8000011e,}; 
    16831783   } 
    16841784   private static void jj_la1_init_1() { 
    1685       jj_la1_1 = new int[] {0x0,0x1,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x4,0x0,0x18,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7,0x7,0x1,0x0,0x0,0x1,0x0,}; 
     1785      jj_la1_1 = new int[] {0x0,0x1,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0x0,0x18,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7,0x7,0x1,0x0,0x0,0x1,0x0,}; 
    16861786   } 
    16871787  final private JJCalls[] jj_2_rtns = new JJCalls[5]; 
     
    17001800    jj_ntk = -1; 
    17011801    jj_gen = 0; 
    1702     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1802    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17031803    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17041804  } 
     
    17151815    jj_ntk = -1; 
    17161816    jj_gen = 0; 
    1717     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1817    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17181818    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17191819  } 
     
    17261826    jj_ntk = -1; 
    17271827    jj_gen = 0; 
    1728     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1828    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17291829    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17301830  } 
     
    17371837    jj_ntk = -1; 
    17381838    jj_gen = 0; 
    1739     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1839    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17401840    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17411841  } 
     
    17471847    jj_ntk = -1; 
    17481848    jj_gen = 0; 
    1749     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1849    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17501850    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17511851  } 
     
    17571857    jj_ntk = -1; 
    17581858    jj_gen = 0; 
    1759     for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
     1859    for (int i = 0; i < 45; i++) jj_la1[i] = -1; 
    17601860    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17611861  } 
     
    18741974      jj_kind = -1; 
    18751975    } 
    1876     for (int i = 0; i < 41; i++) { 
     1976    for (int i = 0; i < 45; i++) { 
    18771977      if (jj_la1[i] == jj_gen) { 
    18781978        for (int j = 0; j < 32; j++) { 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.jj

    r3893 r3902  
    1919import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.FunctionExpression; 
    2020import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.LiteralExpression; 
     21import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.DescendentSelector; 
     22import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector; 
    2123import org.openstreetmap.josm.tools.Pair; 
    2224 
     
    229231} 
    230232{ 
    231     sel=selector() { selectors.add(sel); } w() 
     233    sel=child_selector() { selectors.add(sel); } 
    232234    ( 
    233235        <COMMA> w() 
    234         sel=selector() { selectors.add(sel); } w() 
     236        sel=child_selector() { selectors.add(sel); } 
    235237    )* 
    236238    decl=declaration() 
    237239    { return new MapCSSRule(selectors, decl); } 
     240} 
     241 
     242Selector child_selector() : 
     243{ 
     244    boolean child = false; 
     245    Selector sel1, sel2 = null; 
     246} 
     247{ 
     248    sel1=selector() w() 
     249    ( 
     250        ( <GREATER> { child = true; } | <LESS> { child = false; } ) w() 
     251        sel2=selector() w() 
     252    )? 
     253    { return sel2 != null ? new DescendentSelector(sel1, sel2, child) : sel1; } 
    238254} 
    239255 
     
    251267    ( ( c=condition() | c=pseudoclass() ) { conditions.add(c); } )* 
    252268    ( sub=subpart() )? 
    253     { return new Selector(base.image, r, conditions, sub); } 
     269    { return new GeneralSelector(base.image, r, conditions, sub); } 
    254270} 
    255271 
     
    277293    <LSQUARE> 
    278294    ( 
    279         LOOKAHEAD(3) 
     295        LOOKAHEAD( simple_key_condition() <RSQUARE> ) 
    280296            c=simple_key_condition() <RSQUARE> { return c; } 
    281297        | 
    282         LOOKAHEAD(5) 
     298        LOOKAHEAD( simple_key_value_condition() <RSQUARE> ) 
    283299            c=simple_key_value_condition() <RSQUARE> { return c; } 
    284300        | 
     
    287303} 
    288304 
     305String tag_key() : 
     306{ 
     307    String s; 
     308    Token t; 
     309} 
     310{ 
     311        s=string() { return s; } 
     312    | 
     313        t=<IDENT> { s = t.image; } ( <COLON> t=<IDENT> { s += ':' + t.image; } )* { return s; } 
     314} 
     315 
    289316Condition simple_key_condition() : 
    290317{ 
     
    295322{ 
    296323    ( <EXCLAMATION> { not = true; } )? 
    297     key=string_or_ident() 
     324    key=tag_key() 
    298325    ( <QUESTION> { yes = true; } )? 
    299326    { return new Condition.KeyCondition(key, not, yes); } 
     
    308335} 
    309336{ 
    310     key=string_or_ident() 
     337    key=tag_key() 
    311338    ( 
    312339            ( 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParserTokenManager.java

    r3876 r3902  
    1212import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.FunctionExpression; 
    1313import org.openstreetmap.josm.gui.mappaint.mapcss.Expression.LiteralExpression; 
     14import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.DescendentSelector; 
     15import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector; 
    1416import org.openstreetmap.josm.tools.Pair; 
    1517 
  • trunk/styles/standard/potlatch2.mapcss

    r3900 r3902  
    282282/* Addressing */ 
    283283 
    284 node["addr:housenumber"], 
    285 node["addr:housename"] { symbol-shape: circle; symbol-size: 8; symbol-fill-color: #B0E0E6; } 
    286 node["addr:housenumber"]::hn_casing, 
    287 node["addr:housename"]::hn_casing { z-index: -100; symbol-shape: circle; symbol-size: 10; symbol-fill-color: blue; } 
    288 way["addr:interpolation"] { color: #B0E0E6; width: 3; dashes: 3,3;} 
     284node[addr:housenumber], 
     285node[addr:housename] { symbol-shape: circle; symbol-size: 8; symbol-fill-color: #B0E0E6; } 
     286node[addr:housenumber]::hn_casing, 
     287node[addr:housename]::hn_casing { z-index: -100; symbol-shape: circle; symbol-size: 10; symbol-fill-color: blue; } 
     288way[addr:interpolation] { color: #B0E0E6; width: 3; dashes: 3,3;} 
    289289 
    290290/**************** 
     
    335335way[landuse=cemetery]                                           { color: #664466; width: 2; fill-color: #664466; opacity: 0.2; prop_area_small_name : 1;} 
    336336/* Addressing. Nodes with addresses *and* match POIs should have a poi icon, so we put addressing first */ 
     337/* Route relations */ 
     338 
     339relation[type=route] > way::relation_underlay { z-index: -1; width: 13; color: blue; opacity: 0.3; linecap: none; } 
     340relation[type=route][route=bicycle][network=ncn] > way::relation_underlay { z-index: -1; width: 12; color: red; opacity: 0.3; linecap: none; } 
     341relation[type=route][route=bicycle][network=rcn] > way::relation_underlay { z-index: -1; width: 12; color: cyan; opacity: 0.3; linecap: none; } 
     342relation[type=route][route=bicycle][network=lcn] > way::relation_underlay { z-index: -1; width: 12; color: blue; opacity: 0.3; linecap: none; } 
     343relation[type=route][route=foot] > way::relation_underlay { z-index: -1; width: 10; color: #80ff80; opacity: 0.6; linecap: none; } 
     344 
    337345 
    338346/*@import("stylesheets/core_ways.css");*/ 
  • trunk/styles_nodist/potlatch2/build.xml

    r3900 r3902  
    1 <project name="potlatch2styles_mod" basedir="."> 
    2 <!-- 
    3  
    4     The potlatch 2 styles need to be patched in order to work with the JOSM MapCSS implementation. 
    5     When updating from the potlatch2 repository, the workflow can be like this: 
    6      * copy files from 'patched' to 'source' 
    7      * cd source && svn up 
    8      * solve possible conflicts 
    9      * modify the new sections, such that they work with josm 
    10      * create potlatch2.mapcss (ant assemble) 
    11      * copy files from 'source' to 'patched' 
    12      * update externals definition to the current revision (ant update-externals) 
    13      * commit everything (style, patches and externals definition) 
    14       
    15 --> 
     1<project name="potlatch2_patch_utils" basedir="." default="assemble"> 
    162 
    173    <!--    concatinate the files to one mapcss style file     --> 
     
    195        <concat destfile="../../styles/standard/potlatch2.mapcss"> 
    206            <filelist dir="." files="prelude.css"/>         
    21             <filelist dir="patched" files="core_ways.css,core_pois.css,core_landuse.css,potlatch.css"/>         
     7            <filelist dir="patched" files="core_ways.css,core_pois.css,core_landuse.css,core_relations.css,potlatch.css"/>         
    228        </concat> 
    239    </target> 
    2410     
    25      
    26     <target name="copy-patched-to-source"> 
    27         <copy todir="source" overwrite="true">  
    28             <fileset dir="patched"/> 
    29         </copy> 
    30     </target> 
    31      
    32     <target name="copy-source-to-patched"> 
    33         <copy todir="patched" overwrite="true">  
    34             <filelist dir="source" files="core_ways.css,core_pois.css,core_landuse.css,potlatch.css"/>         
    35         </copy> 
    36     </target> 
    3711 
    38     <!--    Update the explicit revision number in the externals definition to the current revision. --> 
     12    <!--    update the explicit revision number in the externals definition to the currently checked out revison --> 
    3913    <target name="update-externals" depends="source-revision"> 
    4014        <exec executable="svn"> 
  • trunk/styles_nodist/potlatch2/patched/core_pois.css

    r3900 r3902  
    8989/* Addressing */ 
    9090 
    91 node["addr:housenumber"], 
    92 node["addr:housename"] { symbol-shape: circle; symbol-size: 8; symbol-fill-color: #B0E0E6; } 
    93 node["addr:housenumber"]::hn_casing, 
    94 node["addr:housename"]::hn_casing { z-index: -100; symbol-shape: circle; symbol-size: 10; symbol-fill-color: blue; } 
    95 way["addr:interpolation"] { color: #B0E0E6; width: 3; dashes: 3,3;} 
     91node[addr:housenumber], 
     92node[addr:housename] { symbol-shape: circle; symbol-size: 8; symbol-fill-color: #B0E0E6; } 
     93node[addr:housenumber]::hn_casing, 
     94node[addr:housename]::hn_casing { z-index: -100; symbol-shape: circle; symbol-size: 10; symbol-fill-color: blue; } 
     95way[addr:interpolation] { color: #B0E0E6; width: 3; dashes: 3,3;} 
Note: See TracChangeset for help on using the changeset viewer.