Changeset 3893 in josm


Ignore:
Timestamp:
Feb 12, 2011 8:30:01 PM (2 years ago)
Author:
bastiK
Message:

mapcss: some rework of Error Handling, (Multi)Cascade and icon loading

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java

    r3862 r3893  
    1010import java.util.Collection; 
    1111import java.util.List; 
     12import java.util.Map.Entry; 
    1213 
    1314import javax.swing.event.ChangeEvent; 
     
    3132import org.openstreetmap.josm.gui.DefaultNameFormatter; 
    3233import org.openstreetmap.josm.gui.NavigatableComponent; 
     34import org.openstreetmap.josm.gui.mappaint.Cascade; 
    3335import org.openstreetmap.josm.gui.mappaint.ElemStyle; 
    3436import org.openstreetmap.josm.gui.mappaint.ElemStyles; 
     
    288290                    s.apply(mc, osm, scale, null, false); 
    289291                    txtMappaint.append("\nRange:"+mc.range); 
    290                     for (String key : mc.keySet()) { 
    291                         txtMappaint.append("\n "+key+": \n"+mc.get(key)); 
     292                    for (Entry<String, Cascade> e : mc.getLayers()) { 
     293                        txtMappaint.append("\n "+e.getKey()+": \n"+e.getValue()); 
    292294                    } 
    293295                } else { 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java

    r3882 r3893  
    1616public class Cascade implements Cloneable { 
    1717     
    18     public static final Cascade EMPTY_CASCADE = new Cascade(false); 
     18    public static final Cascade EMPTY_CASCADE = new Cascade(); 
    1919 
    2020    protected Map<String, Object> prop = new HashMap<String, Object>(); 
    21  
    22     /** 
    23      * constructor 
    24      * @param isModifier Everything that is not on the default layer is assumed to 
    25      *                   be a modifier. Can be overridden in style definition. 
    26      */ 
    27     public Cascade(boolean isModifier) { 
    28         if (isModifier) { 
    29             put("modifier", true); 
    30         } 
    31     } 
    32  
    33     private Cascade() { 
    34     } 
    3521 
    3622    public <T> T get(String key, T def, Class<T> klass) { 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r3865 r3893  
    219219        } 
    220220 
    221         for (Entry<String, Cascade> e : mc.entrySet()) { 
     221        for (Entry<String, Cascade> e : mc.getLayers()) { 
    222222            if ("*".equals(e.getKey())) 
    223223                continue; 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Environment.java

    r3860 r3893  
    33 
    44import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    5 import org.openstreetmap.josm.gui.mappaint.Cascade; 
    6 import org.openstreetmap.josm.gui.mappaint.MultiCascade; 
    7 import org.openstreetmap.josm.gui.mappaint.StyleSource; 
    85 
    96public class Environment { 
     
    2118    } 
    2219 
    23     public Cascade getCascade() { 
    24         return mc.getCascade(layer); 
    25     } 
    2620} 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java

    r3889 r3893  
    1919 
    2020    public static LineElemStyle createSimpleLineStyle(Color color) { 
    21         Cascade c = new Cascade(false); 
     21        MultiCascade mc = new MultiCascade(); 
     22        Cascade c = mc.getOrCreateCascade("default"); 
    2223        c.put("width", -1f); 
    2324        c.put("color", color != null ? color : PaintColors.UNTAGGED.get()); 
    24         MultiCascade mc = new MultiCascade(); 
    25         mc.put("default", c); 
    2625        return createLine(new Environment(null, mc, "default", null)); 
    2726    } 
     
    6059 
    6160    private static LineElemStyle createImpl(Environment env, boolean casing) { 
    62         Cascade c = env.getCascade(); 
     61        Cascade c = env.mc.getCascade(env.layer); 
    6362        Cascade c_def = env.mc.getCascade("default"); 
    6463 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java

    r3886 r3893  
    3737 
    3838    private static ElemStyles styles = new ElemStyles(); 
    39     private static Collection<String> iconDirs; 
    4039 
    4140    public static ElemStyles getStyles() 
     
    6261    public static ImageIcon getIcon(IconReference ref, boolean sanitize) 
    6362    { 
    64         String styleName = ref.source.getPrefName(); 
     63        String namespace = ref.source.getPrefName(); 
     64        ImageIcon i = ImageProvider.getIfAvailable(getIconSourceDirs(ref.source), "mappaint."+namespace, null, ref.iconName, ref.source.zipIcons, sanitize); 
     65        if(i == null) 
     66        { 
     67            System.out.println("Mappaint style \""+namespace+"\" icon \"" + ref.iconName + "\" not found."); 
     68            return null; 
     69        } 
     70        return i; 
     71    } 
     72 
     73    /** 
     74     * No icon with the given name was found, show a dummy icon instead 
     75     * @return the icon misc/no_icon.png, in descending priority: 
     76     *   - relative to source file 
     77     *   - from user icon paths 
     78     *   - josm's default icon 
     79     *  can be null if the defaults are turned off by user 
     80     */ 
     81    public static ImageIcon getNoIcon_Icon(StyleSource source, boolean sanitize) { 
     82        return ImageProvider.getIfAvailable(getIconSourceDirs(source), "mappaint."+source.getPrefName(), null, "misc/no_icon.png", source.zipIcons, sanitize); 
     83    } 
     84 
     85    private static List<String> getIconSourceDirs(StyleSource source) { 
    6586        List<String> dirs = new LinkedList<String>(); 
    66         for(String fileset : iconDirs) 
     87 
     88        String sourceDir = source.getLocalSourceDir(); 
     89        if (sourceDir != null) { 
     90            dirs.add(sourceDir); 
     91        } 
     92 
     93        Collection<String> prefIconDirs = Main.pref.getCollection("mappaint.icon.sources"); 
     94        for(String fileset : prefIconDirs) 
    6795        { 
    6896            String[] a; 
     
    74102 
    75103            /* non-prefixed path is generic path, always take it */ 
    76             if(a[0].length() == 0 || styleName.equals(a[0])) { 
     104            if(a[0].length() == 0 || source.getPrefName().equals(a[0])) { 
    77105                dirs.add(a[1]); 
    78106            } 
    79107        } 
    80         String sourceDir = ref.source.getLocalSourceDir(); 
    81         if (sourceDir != null) { 
    82             dirs.add(sourceDir); 
    83         } 
    84         ImageIcon i = ImageProvider.getIfAvailable(dirs, "mappaint."+styleName, null, ref.iconName, ref.source.zipIcons, sanitize); 
    85         if(i == null) 
    86         { 
    87             System.out.println("Mappaint style \""+styleName+"\" icon \"" + ref.iconName + "\" not found."); 
    88             i = ImageProvider.getIfAvailable(dirs, "mappaint."+styleName, null, "misc/no_icon.png"); 
    89         } 
    90         return i; 
     108 
     109        if (Main.pref.getBoolean("mappaint.icon.enable-defaults", true)) { 
     110            /* don't prefix icon path, as it should be generic */ 
     111            dirs.add("resource://images/styles/standard/"); 
     112            dirs.add("resource://images/styles/"); 
     113        } 
     114         
     115        return dirs; 
    91116    } 
    92117 
    93118    public static void readFromPreferences() { 
    94119        styles.clear(); 
    95         iconDirs = Main.pref.getCollection("mappaint.icon.sources", Collections.<String>emptySet()); 
    96         if(Main.pref.getBoolean("mappaint.icon.enable-defaults", true)) 
    97         { 
    98             LinkedList<String> f = new LinkedList<String>(iconDirs); 
    99             /* don't prefix icon path, as it should be generic */ 
    100             f.add("resource://images/styles/standard/"); 
    101             f.add("resource://images/styles/"); 
    102             iconDirs = f; 
    103         } 
    104120 
    105121        Collection<? extends SourceEntry> sourceEntries = MapPaintPrefMigration.INSTANCE.get(); 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java

    r3882 r3893  
    22package org.openstreetmap.josm.gui.mappaint; 
    33 
     4import java.util.Collection; 
    45import java.util.HashMap; 
     6import java.util.Map; 
     7import java.util.Map.Entry; 
    58 
    69/** 
    7  * Several cascades, e.g. one for the main Line and one for each overlay. 
    8  * The range is (0,Inf) at first and it shrinks in the process when 
     10 * Several layers / cascades, e.g. one for the main Line and one for each overlay. 
     11 * The range is (0,Infinity) at first and it shrinks in the process when 
    912 * StyleSources apply zoom level dependent properties. 
    1013 */ 
    11 public class MultiCascade extends HashMap<String, Cascade> { 
     14public class MultiCascade { 
     15     
     16    private Map<String, Cascade> layers; 
    1217    public Range range; 
    1318 
    1419    public MultiCascade() { 
    15         super(); 
     20        layers = new HashMap<String, Cascade>(); 
    1621        range = new Range(); 
    1722    } 
    1823 
    1924    /** 
    20      * Return the cascade for the given layer key. If it does not exist, 
    21      * return a new cascade, but do not keep it. 
     25     * Return the cascade with the given name. If it doesn't exist, create 
     26     * a new layer with that name and return it. The new layer will be 
     27     * a clone of the "*" layer, if it exists. 
    2228     */ 
    23     public Cascade getCascade(String layer) { 
     29    public Cascade getOrCreateCascade(String layer) { 
    2430        if (layer == null) 
    2531            throw new IllegalArgumentException(); 
    26         Cascade c = get(layer); 
     32        Cascade c = layers.get(layer); 
    2733        if (c == null) { 
    28             c = new Cascade(!layer.equals("default")); 
     34            if (layers.containsKey("*")) { 
     35                c = layers.get("*").clone(); 
     36            } else { 
     37                c = new Cascade(); 
     38                // Everything that is not on the default layer is assumed to 
     39                // be a modifier. Can be overridden in style definition. 
     40                if (!layer.equals("default")) { 
     41                    c.put("modifier", true); 
     42                } 
     43            } 
     44            layers.put(layer, c); 
    2945        } 
    3046        return c; 
    3147    } 
    3248 
     49    /** 
     50     * Read-only version of getOrCreateCascade. For convenience, it returns an 
     51     * empty cascade for non-existing layers. However this empty (read-only) cascade 
     52     * is not added to this MultiCascade object. 
     53     */ 
     54    public Cascade getCascade(String layer) { 
     55        if (layer == null) { 
     56            layer = "default"; 
     57        } 
     58        Cascade c = layers.get(layer); 
     59        if (c == null) { 
     60            c = new Cascade(); 
     61            if (!layer.equals("default")) { 
     62                c.put("modifier", true); 
     63            } 
     64        } 
     65        return c; 
     66    } 
     67 
     68    public Collection<Entry<String, Cascade>> getLayers() { 
     69        return layers.entrySet(); 
     70    } 
     71 
     72    public boolean hasLayer(String layer) { 
     73        return layers.containsKey(layer); 
     74    } 
    3375} 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java

    r3888 r3893  
    124124    public static final NodeElemStyle SIMPLE_NODE_ELEMSTYLE; 
    125125    static { 
    126         Cascade c = new Cascade(false); 
     126        Cascade c = new Cascade(); 
    127127        c.put("text", "auto"); 
    128128        SIMPLE_NODE_ELEMSTYLE = create(c, true); 
     
    149149        if (iconRef != null) { 
    150150            icon = MapPaintStyles.getIcon(iconRef, false); 
     151            if (icon == null) { 
     152                icon = MapPaintStyles.getNoIcon_Icon(iconRef.source, false); 
     153            } 
    151154            iconAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.icon-image-alpha", 255)))); 
    152155            Integer pAlpha = Utils.color_float2int(c.get("icon-opacity", null, float.class)); 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java

    r3888 r3893  
    99 
    1010import org.openstreetmap.josm.data.osm.Node; 
     11import org.openstreetmap.josm.data.osm.OsmUtils; 
    1112import org.openstreetmap.josm.data.osm.Relation; 
    1213import org.openstreetmap.josm.data.osm.Way; 
     
    9899        private String k; 
    99100        private boolean not; 
     101        private boolean yes; 
    100102 
    101         public KeyCondition(String k, boolean not) { 
     103        public KeyCondition(String k, boolean not, boolean yes) { 
    102104            this.k = k; 
    103105            this.not = not; 
     106            this.yes = yes; 
    104107        } 
    105108 
    106109        @Override 
    107110        public boolean applies(Environment e) { 
    108             return e.osm.hasKey(k) ^ not; 
     111            if (yes) 
     112                return OsmUtils.isTrue(e.osm.get(k)) ^ not; 
     113            else 
     114                return e.osm.hasKey(k) ^ not; 
    109115        } 
    110116 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Expression.java

    r3880 r3893  
    122122                Cascade c; 
    123123                if (layer == null) { 
    124                     c = env.getCascade(); 
     124                    c = env.mc.getCascade(env.layer); 
    125125                } else { 
    126126                    c = env.mc.getCascade(layer); 
     
    136136                Cascade c; 
    137137                if (layer == null) { 
    138                     c = env.getCascade(); 
     138                    // env.layer is null if expression is evaluated 
     139                    // in ExpressionCondition, but MultiCascade.getCascade 
     140                    // handles this 
     141                    c = env.mc.getCascade(env.layer); 
    139142                } else { 
    140143                    c = env.mc.getCascade(layer); 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java

    r3876 r3893  
    4545                } 
    4646            } 
    47             env.getCascade().putOrClear(key, value); 
     47            env.mc.getOrCreateCascade(env.layer).putOrClear(key, value); 
    4848        } 
    4949 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java

    r3882 r3893  
    5858            System.err.println(tr("Warning: failed to parse Mappaint styles from ''{0}''. Error was: {1}", url, e.getMessage())); 
    5959            e.printStackTrace(); 
    60             logError(e); 
     60            logError(new ParseException(e.getMessage())); // allow e to be garbage collected, it links to the entire token stream 
    6161        } 
    6262    } 
     
    124124                    } 
    125125 
    126                     Cascade c = mc.get(sub); 
    127                     if (c == null) { 
    128                         if (mc.containsKey("*")) { 
    129                             c = mc.get("*").clone(); 
    130                         } else { 
    131                             c = new Cascade(!sub.equals("default")); 
    132                         } 
    133                         mc.put(sub, c); 
    134                     } 
    135  
    136126                    if (sub.equals("*")) { 
    137                         for (Entry<String, Cascade> entry : mc.entrySet()) { 
     127                        for (Entry<String, Cascade> entry : mc.getLayers()) { 
    138128                            env.layer = entry.getKey(); 
     129                            if (Utils.equal(env.layer, "*")) { 
     130                                continue; 
     131                            } 
    139132                            for (Instruction i : r.declaration) { 
    140133                                i.execute(env); 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.java

    r3888 r3893  
    393393  final public Condition simple_key_condition() throws ParseException { 
    394394    boolean not = false; 
     395    boolean yes = false; 
    395396    String key; 
    396397    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     
    404405    } 
    405406    key = string_or_ident(); 
    406       {if (true) return new Condition.KeyCondition(key, not);} 
     407    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 
     408    case QUESTION: 
     409      jj_consume_token(QUESTION); 
     410                   yes = true; 
     411      break; 
     412    default: 
     413      jj_la1[19] = jj_gen; 
     414      ; 
     415    } 
     416      {if (true) return new Condition.KeyCondition(key, not, yes);} 
    407417    throw new Error("Missing return statement in function"); 
    408418  } 
     
    442452          break; 
    443453        default: 
    444           jj_la1[19] = jj_gen; 
     454          jj_la1[20] = jj_gen; 
    445455          jj_consume_token(-1); 
    446456          throw new ParseException(); 
     
    472482        break; 
    473483      default: 
    474         jj_la1[20] = jj_gen; 
     484        jj_la1[21] = jj_gen; 
    475485        jj_consume_token(-1); 
    476486        throw new ParseException(); 
     
    500510        break; 
    501511      default: 
    502         jj_la1[21] = jj_gen; 
     512        jj_la1[22] = jj_gen; 
    503513        jj_consume_token(-1); 
    504514        throw new ParseException(); 
     
    508518      break; 
    509519    default: 
    510       jj_la1[22] = jj_gen; 
     520      jj_la1[23] = jj_gen; 
    511521      jj_consume_token(-1); 
    512522      throw new ParseException(); 
     
    524534      break; 
    525535    default: 
    526       jj_la1[23] = jj_gen; 
     536      jj_la1[24] = jj_gen; 
    527537      ; 
    528538    } 
     
    544554      break; 
    545555    default: 
    546       jj_la1[24] = jj_gen; 
     556      jj_la1[25] = jj_gen; 
    547557      jj_consume_token(-1); 
    548558      throw new ParseException(); 
     
    566576        break; 
    567577      default: 
    568         jj_la1[25] = jj_gen; 
     578        jj_la1[26] = jj_gen; 
    569579        break label_6; 
    570580      } 
     
    587597          break; 
    588598        default: 
    589           jj_la1[26] = jj_gen; 
     599          jj_la1[27] = jj_gen; 
    590600          jj_consume_token(-1); 
    591601          throw new ParseException(); 
     
    604614          break; 
    605615        default: 
    606           jj_la1[27] = jj_gen; 
     616          jj_la1[28] = jj_gen; 
    607617          jj_consume_token(-1); 
    608618          throw new ParseException(); 
     
    678688              break; 
    679689            default: 
    680               jj_la1[28] = jj_gen; 
     690              jj_la1[29] = jj_gen; 
    681691              break label_7; 
    682692            } 
     
    697707              break; 
    698708            default: 
    699               jj_la1[29] = jj_gen; 
     709              jj_la1[30] = jj_gen; 
    700710              break label_8; 
    701711            } 
     
    716726              break; 
    717727            default: 
    718               jj_la1[30] = jj_gen; 
     728              jj_la1[31] = jj_gen; 
    719729              break label_9; 
    720730            } 
     
    735745              break; 
    736746            default: 
    737               jj_la1[31] = jj_gen; 
     747              jj_la1[32] = jj_gen; 
    738748              break label_10; 
    739749            } 
     
    771781            break; 
    772782          default: 
    773             jj_la1[32] = jj_gen; 
     783            jj_la1[33] = jj_gen; 
    774784            ; 
    775785          } 
     
    820830          break; 
    821831        default: 
    822           jj_la1[33] = jj_gen; 
     832          jj_la1[34] = jj_gen; 
    823833          jj_consume_token(-1); 
    824834          throw new ParseException(); 
     
    826836        break; 
    827837      default: 
    828         jj_la1[34] = jj_gen; 
     838        jj_la1[35] = jj_gen; 
    829839        ; 
    830840      } 
    831841      break; 
    832842    default: 
    833       jj_la1[35] = jj_gen; 
     843      jj_la1[36] = jj_gen; 
    834844      jj_consume_token(-1); 
    835845      throw new ParseException(); 
     
    868878        break; 
    869879      default: 
    870         jj_la1[36] = jj_gen; 
     880        jj_la1[37] = jj_gen; 
    871881        jj_consume_token(-1); 
    872882        throw new ParseException(); 
     
    905915          break; 
    906916        default: 
    907           jj_la1[37] = jj_gen; 
     917          jj_la1[38] = jj_gen; 
    908918          break label_11; 
    909919        } 
     
    915925      break; 
    916926    default: 
    917       jj_la1[38] = jj_gen; 
     927      jj_la1[39] = jj_gen; 
    918928      ; 
    919929    } 
     
    954964      break; 
    955965    default: 
    956       jj_la1[39] = jj_gen; 
     966      jj_la1[40] = jj_gen; 
    957967      jj_consume_token(-1); 
    958968      throw new ParseException(); 
     
    962972 
    963973  void error_skipto(int kind) throws ParseException { 
     974    if (token.kind == EOF) 
     975        throw new ParseException("Reached end of file while parsing"); 
    964976    ParseException e = generateParseException(); 
    965977    System.err.println("Skipping to the next rule, because of an error:"); 
    966978    System.err.println(e); 
    967979    if (sheet != null) { 
    968         sheet.logError(e); 
     980        sheet.logError(new ParseException(e.getMessage())); 
    969981    } 
    970982    Token t; 
     
    984996    while (true) { 
    985997        t = getNextToken(); 
     998        if ((t.kind == S || t.kind == STRING || t.kind == UNEXPECTED_CHAR) && 
     999                t.image.contains("\n")) { 
     1000            ParseException e = new ParseException(String.format("Warning: end of line while reading an unquoted string at line %s column %s.", t.beginLine, t.beginColumn)); 
     1001            System.err.println(e); 
     1002            if (sheet != null) { 
     1003                sheet.logError(e); 
     1004            } 
     1005        } 
    9861006        if (t.kind == SEMICOLON || t.kind == EOF) 
    9871007            break; 
     
    10281048  } 
    10291049 
    1030   private boolean jj_3R_17() { 
    1031     if (jj_scan_token(IDENT)) return true; 
    1032     if (jj_3R_15()) return true; 
    1033     if (jj_scan_token(LPAR)) return true; 
    1034     if (jj_3R_15()) return true; 
    1035     Token xsp; 
    1036     xsp = jj_scanpos; 
    1037     if (jj_3R_70()) jj_scanpos = xsp; 
    1038     if (jj_scan_token(RPAR)) return true; 
    1039     return false; 
    1040   } 
    1041  
    1042   private boolean jj_3R_29() { 
    1043     if (jj_3R_45()) return true; 
    1044     return false; 
    1045   } 
    1046  
    1047   private boolean jj_3R_24() { 
     1050  private boolean jj_3R_30() { 
     1051    if (jj_3R_46()) return true; 
     1052    return false; 
     1053  } 
     1054 
     1055  private boolean jj_3R_25() { 
    10481056    Token xsp; 
    10491057    xsp = jj_scanpos; 
    10501058    if (jj_scan_token(9)) { 
    10511059    jj_scanpos = xsp; 
    1052     if (jj_3R_42()) return true; 
     1060    if (jj_3R_43()) return true; 
    10531061    } 
    10541062    return false; 
     
    10591067    while (true) { 
    10601068      xsp = jj_scanpos; 
    1061       if (jj_3R_24()) { jj_scanpos = xsp; break; } 
    1062     } 
    1063     return false; 
    1064   } 
    1065  
    1066   private boolean jj_3R_51() { 
     1069      if (jj_3R_25()) { jj_scanpos = xsp; break; } 
     1070    } 
     1071    return false; 
     1072  } 
     1073 
     1074  private boolean jj_3R_52() { 
    10671075    if (jj_scan_token(LPAR)) return true; 
    10681076    if (jj_3R_15()) return true; 
     
    10721080  } 
    10731081 
    1074   private boolean jj_3R_50() { 
    1075     if (jj_3R_65()) return true; 
    1076     return false; 
    1077   } 
    1078  
    1079   private boolean jj_3R_41() { 
     1082  private boolean jj_3R_51() { 
     1083    if (jj_3R_66()) return true; 
     1084    return false; 
     1085  } 
     1086 
     1087  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() { 
    10801101    Token xsp; 
    10811102    xsp = jj_scanpos; 
     
    10841105  } 
    10851106 
    1086   private boolean jj_3R_49() { 
    1087     if (jj_3R_22()) return true; 
    1088     return false; 
    1089   } 
    1090  
    1091   private boolean jj_3R_43() { 
    1092     Token xsp; 
    1093     xsp = jj_scanpos; 
    1094     if (jj_3_5()) { 
    1095     jj_scanpos = xsp; 
    1096     if (jj_3R_50()) { 
    1097     jj_scanpos = xsp; 
    1098     if (jj_3R_51()) return true; 
    1099     } 
    1100     } 
    1101     return false; 
    1102   } 
    1103  
    11041107  private boolean jj_3_5() { 
    11051108    if (jj_3R_17()) return true; 
     
    11071110  } 
    11081111 
     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 
    11091129  private boolean jj_3R_63() { 
    1110     if (jj_scan_token(QUESTION)) return true; 
    1111     if (jj_3R_15()) return true; 
    1112     if (jj_3R_43()) return true; 
    1113     if (jj_3R_15()) return true; 
    1114     if (jj_scan_token(COLON)) return true; 
    1115     if (jj_3R_15()) return true; 
    1116     if (jj_3R_43()) return true; 
    1117     if (jj_3R_15()) return true; 
    1118     return false; 
    1119   } 
    1120  
    1121   private boolean jj_3R_62() { 
    11221130    if (jj_scan_token(PIPE)) return true; 
    11231131    if (jj_scan_token(PIPE)) return true; 
    11241132    if (jj_3R_15()) return true; 
    1125     if (jj_3R_43()) return true; 
    1126     if (jj_3R_15()) return true; 
    1127     return false; 
    1128   } 
    1129  
    1130   private boolean jj_3R_39() { 
     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() { 
    11311139    if (jj_scan_token(LESS)) return true; 
    11321140    return false; 
    11331141  } 
    11341142 
    1135   private boolean jj_3R_61() { 
     1143  private boolean jj_3R_62() { 
    11361144    if (jj_scan_token(AMPERSAND)) return true; 
    11371145    if (jj_scan_token(AMPERSAND)) return true; 
    11381146    if (jj_3R_15()) return true; 
    1139     if (jj_3R_43()) 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; 
    11401161    if (jj_3R_15()) return true; 
    11411162    return false; 
     
    11431164 
    11441165  private boolean jj_3R_38() { 
    1145     if (jj_scan_token(LESS_EQUAL)) return true; 
     1166    if (jj_scan_token(GREATER)) return true; 
    11461167    return false; 
    11471168  } 
    11481169 
    11491170  private boolean jj_3R_60() { 
    1150     if (jj_scan_token(LESS)) return true; 
    1151     if (jj_3R_15()) return true; 
    1152     if (jj_3R_43()) return true; 
    1153     if (jj_3R_15()) return true; 
    1154     return false; 
    1155   } 
    1156  
    1157   private boolean jj_3R_37() { 
    1158     if (jj_scan_token(GREATER)) return true; 
    1159     return false; 
    1160   } 
    1161  
    1162   private boolean jj_3R_64() { 
    1163     if (jj_scan_token(REGEX)) return true; 
    1164     return false; 
    1165   } 
    1166  
    1167   private boolean jj_3R_59() { 
    11681171    if (jj_scan_token(EQUAL)) return true; 
    11691172    Token xsp; 
     
    11711174    if (jj_scan_token(22)) jj_scanpos = xsp; 
    11721175    if (jj_3R_15()) return true; 
    1173     if (jj_3R_43()) 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; 
    11741203    if (jj_3R_15()) return true; 
    11751204    return false; 
     
    11771206 
    11781207  private boolean jj_3R_36() { 
    1179     if (jj_scan_token(GREATER_EQUAL)) return true; 
    1180     return false; 
    1181   } 
    1182  
    1183   private boolean jj_3R_58() { 
    1184     if (jj_scan_token(GREATER)) return true; 
    1185     if (jj_3R_15()) return true; 
    1186     if (jj_3R_43()) return true; 
    1187     if (jj_3R_15()) return true; 
    1188     return false; 
    1189   } 
    1190  
    1191   private boolean jj_3R_57() { 
    1192     if (jj_scan_token(LESS_EQUAL)) return true; 
    1193     if (jj_3R_15()) return true; 
    1194     if (jj_3R_43()) return true; 
    1195     if (jj_3R_15()) return true; 
    1196     return false; 
    1197   } 
    1198  
    1199   private boolean jj_3R_35() { 
    12001208    if (jj_scan_token(STAR)) return true; 
    12011209    if (jj_scan_token(EQUAL)) return true; 
     
    12041212  } 
    12051213 
    1206   private boolean jj_3R_69() { 
     1214  private boolean jj_3R_70() { 
    12071215    if (jj_scan_token(SLASH)) return true; 
    12081216    if (jj_3R_15()) return true; 
    1209     if (jj_3R_43()) return true; 
    1210     if (jj_3R_15()) return true; 
    1211     return false; 
    1212   } 
    1213  
    1214   private boolean jj_3R_56() { 
     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() { 
    12151223    if (jj_scan_token(GREATER_EQUAL)) return true; 
    12161224    if (jj_3R_15()) return true; 
    1217     if (jj_3R_43()) return true; 
    1218     if (jj_3R_15()) return true; 
    1219     return false; 
    1220   } 
    1221  
    1222   private boolean jj_3R_47() { 
     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() { 
    12231231    if (jj_3R_19()) return true; 
    12241232    return false; 
    12251233  } 
    12261234 
    1227   private boolean jj_3R_19() { 
    1228     Token xsp; 
    1229     xsp = jj_scanpos; 
    1230     if (jj_3R_28()) { 
    1231     jj_scanpos = xsp; 
    1232     if (jj_3R_29()) return true; 
    1233     } 
    1234     return false; 
    1235   } 
    1236  
    1237   private boolean jj_3R_28() { 
    1238     if (jj_scan_token(IDENT)) return true; 
    1239     return false; 
    1240   } 
    1241  
    1242   private boolean jj_3R_34() { 
     1235  private boolean jj_3R_35() { 
    12431236    if (jj_scan_token(DOLLAR)) return true; 
    12441237    if (jj_scan_token(EQUAL)) return true; 
     
    12471240  } 
    12481241 
     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 
    12491305  private boolean jj_3R_68() { 
    1250     if (jj_scan_token(MINUS)) return true; 
    1251     if (jj_3R_15()) return true; 
    1252     if (jj_3R_43()) return true; 
     1306    if (jj_scan_token(STAR)) return true; 
     1307    if (jj_3R_15()) return true; 
     1308    if (jj_3R_44()) return true; 
    12531309    if (jj_3R_15()) return true; 
    12541310    return false; 
     
    12651321  } 
    12661322 
    1267   private boolean jj_3R_46() { 
     1323  private boolean jj_3R_33() { 
    12681324    if (jj_scan_token(TILDE)) return true; 
    1269     if (jj_3R_64()) return true; 
    1270     return false; 
    1271   } 
    1272  
    1273   private boolean jj_3R_21() { 
    1274     Token xsp; 
    1275     xsp = jj_scanpos; 
    1276     if (jj_3R_36()) { 
    1277     jj_scanpos = xsp; 
    1278     if (jj_3R_37()) { 
    1279     jj_scanpos = xsp; 
    1280     if (jj_3R_38()) { 
    1281     jj_scanpos = xsp; 
    1282     if (jj_3R_39()) return true; 
    1283     } 
    1284     } 
    1285     } 
    1286     if (jj_3R_40()) return true; 
    1287     return false; 
    1288   } 
    1289  
    1290   private boolean jj_3R_33() { 
    1291     if (jj_scan_token(CARET)) return true; 
    12921325    if (jj_scan_token(EQUAL)) return true; 
    12931326    if (jj_3R_19()) return true; 
     
    12961329 
    12971330  private boolean jj_3R_67() { 
    1298     if (jj_scan_token(STAR)) return true; 
    1299     if (jj_3R_15()) return true; 
    1300     if (jj_3R_43()) return true; 
     1331    if (jj_scan_token(PLUS)) return true; 
     1332    if (jj_3R_15()) return true; 
     1333    if (jj_3R_44()) return true; 
    13011334    if (jj_3R_15()) return true; 
    13021335    return false; 
     
    13131346  } 
    13141347 
    1315   private boolean jj_3R_32() { 
    1316     if (jj_scan_token(TILDE)) return true; 
    1317     if (jj_scan_token(EQUAL)) return true; 
    1318     if (jj_3R_19()) return true; 
    1319     return false; 
    1320   } 
    1321  
    1322   private boolean jj_3R_66() { 
    1323     if (jj_scan_token(PLUS)) return true; 
    1324     if (jj_3R_15()) return true; 
    1325     if (jj_3R_43()) return true; 
    1326     if (jj_3R_15()) return true; 
    1327     return false; 
    1328   } 
    1329  
    13301348  private boolean jj_3R_53() { 
    13311349    Token xsp; 
     
    13381356  } 
    13391357 
    1340   private boolean jj_3R_52() { 
    1341     Token xsp; 
    1342     if (jj_3R_66()) return true; 
    1343     while (true) { 
    1344       xsp = jj_scanpos; 
    1345       if (jj_3R_66()) { jj_scanpos = xsp; break; } 
    1346     } 
    1347     return false; 
    1348   } 
    1349  
    1350   private boolean jj_3R_44() { 
     1358  private boolean jj_3R_45() { 
    13511359    Token xsp; 
    13521360    xsp = jj_scanpos; 
    1353     if (jj_3R_52()) { 
    1354     jj_scanpos = xsp; 
    13551361    if (jj_3R_53()) { 
    13561362    jj_scanpos = xsp; 
     
    13731379    if (jj_3R_62()) { 
    13741380    jj_scanpos = xsp; 
    1375     if (jj_3R_63()) return true; 
    1376     } 
    1377     } 
    1378     } 
    1379     } 
    1380     } 
    1381     } 
    1382     } 
    1383     } 
    1384     } 
    1385     } 
    1386     } 
    1387     return false; 
    1388   } 
    1389  
    1390   private boolean jj_3R_45() { 
     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() { 
    13911399    if (jj_scan_token(STRING)) return true; 
    13921400    return false; 
    13931401  } 
    13941402 
     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 
    13951414  private boolean jj_3R_31() { 
    1396     if (jj_scan_token(EQUAL)) return true; 
    1397     Token xsp; 
    1398     xsp = jj_scanpos; 
    1399     if (jj_3R_46()) { 
    1400     jj_scanpos = xsp; 
    1401     if (jj_3R_47()) return true; 
    1402     } 
    1403     return false; 
    1404   } 
    1405  
    1406   private boolean jj_3R_30() { 
    14071415    if (jj_scan_token(EXCLAMATION)) return true; 
    14081416    if (jj_scan_token(EQUAL)) return true; 
     
    14111419  } 
    14121420 
    1413   private boolean jj_3R_48() { 
     1421  private boolean jj_3R_49() { 
    14141422    if (jj_scan_token(MINUS)) return true; 
    1415     if (jj_3R_22()) return true; 
    1416     return false; 
    1417   } 
    1418  
    1419   private boolean jj_3R_40() { 
     1423    if (jj_3R_23()) return true; 
     1424    return false; 
     1425  } 
     1426 
     1427  private boolean jj_3R_41() { 
    14201428    Token xsp; 
    14211429    xsp = jj_scanpos; 
    1422     if (jj_3R_48()) { 
    1423     jj_scanpos = xsp; 
    1424     if (jj_3R_49()) return true; 
     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    } 
    14251464    } 
    14261465    return false; 
     
    14281467 
    14291468  private boolean jj_3R_27() { 
    1430     if (jj_3R_43()) return true; 
    1431     if (jj_3R_15()) return true; 
    1432     Token xsp; 
    1433     xsp = jj_scanpos; 
    1434     if (jj_3R_44()) jj_scanpos = xsp; 
    1435     return false; 
    1436   } 
    1437  
    1438   private boolean jj_3R_20() { 
    1439     Token xsp; 
    1440     xsp = jj_scanpos; 
    1441     if (jj_3R_30()) { 
    1442     jj_scanpos = xsp; 
    1443     if (jj_3R_31()) { 
    1444     jj_scanpos = xsp; 
    1445     if (jj_3R_32()) { 
    1446     jj_scanpos = xsp; 
    1447     if (jj_3R_33()) { 
    1448     jj_scanpos = xsp; 
    1449     if (jj_3R_34()) { 
    1450     jj_scanpos = xsp; 
    1451     if (jj_3R_35()) return true; 
    1452     } 
    1453     } 
    1454     } 
    1455     } 
    1456     } 
     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; 
    14571473    return false; 
    14581474  } 
    14591475 
    14601476  private boolean jj_3R_26() { 
    1461     if (jj_scan_token(MINUS)) return true; 
    1462     if (jj_3R_15()) return true; 
    1463     if (jj_3R_43()) return true; 
    1464     if (jj_3R_15()) return true; 
    1465     return false; 
    1466   } 
    1467  
    1468   private boolean jj_3R_22() { 
     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() { 
    14691485    Token xsp; 
    14701486    xsp = jj_scanpos; 
     
    14761492  } 
    14771493 
    1478   private boolean jj_3R_25() { 
    1479     if (jj_scan_token(EXCLAMATION)) return true; 
    1480     if (jj_3R_15()) return true; 
    1481     if (jj_3R_43()) return true; 
    1482     if (jj_3R_15()) return true; 
    1483     return false; 
    1484   } 
    1485  
    14861494  private boolean jj_3R_16() { 
    14871495    Token xsp; 
    14881496    xsp = jj_scanpos; 
    1489     if (jj_3R_25()) { 
    1490     jj_scanpos = xsp; 
    14911497    if (jj_3R_26()) { 
    14921498    jj_scanpos = xsp; 
    1493     if (jj_3R_27()) return true; 
     1499    if (jj_3R_27()) { 
     1500    jj_scanpos = xsp; 
     1501    if (jj_3R_28()) return true; 
    14941502    } 
    14951503    } 
     
    15121520    Token xsp; 
    15131521    xsp = jj_scanpos; 
    1514     if (jj_3R_20()) { 
    1515     jj_scanpos = xsp; 
    1516     if (jj_3R_21()) return true; 
    1517     } 
     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; 
    15181531    return false; 
    15191532  } 
    15201533 
    15211534  private boolean jj_3R_74() { 
    1522     if (jj_scan_token(HEXCOLOR)) return true; 
    1523     return false; 
    1524   } 
    1525  
    1526   private boolean jj_3R_73() { 
    1527     if (jj_3R_22()) return true; 
     1535    if (jj_3R_23()) return true; 
    15281536    return false; 
    15291537  } 
     
    15411549  } 
    15421550 
     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 
    15431557  private boolean jj_3R_72() { 
    1544     if (jj_scan_token(PLUS)) return true; 
    1545     if (jj_3R_22()) return true; 
    1546     return false; 
    1547   } 
    1548  
    1549   private boolean jj_3R_71() { 
    15501558    if (jj_3R_19()) return true; 
    15511559    return false; 
    15521560  } 
    15531561 
    1554   private boolean jj_3R_65() { 
     1562  private boolean jj_3R_66() { 
    15551563    Token xsp; 
    15561564    xsp = jj_scanpos; 
    1557     if (jj_3R_71()) { 
    1558     jj_scanpos = xsp; 
    15591565    if (jj_3R_72()) { 
    15601566    jj_scanpos = xsp; 
    15611567    if (jj_3R_73()) { 
    15621568    jj_scanpos = xsp; 
    1563     if (jj_3R_74()) return true; 
    1564     } 
    1565     } 
    1566     } 
     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; 
    15671580    return false; 
    15681581  } 
     
    15781591    if (jj_3R_18()) jj_scanpos = xsp; 
    15791592    if (jj_3R_19()) return true; 
    1580     return false; 
    1581   } 
    1582  
    1583   private boolean jj_3R_23() { 
     1593    xsp = jj_scanpos; 
     1594    if (jj_3R_20()) jj_scanpos = xsp; 
     1595    return false; 
     1596  } 
     1597 
     1598  private boolean jj_3R_24() { 
    15841599    if (jj_scan_token(COMMA)) return true; 
    1585     if (jj_3R_41()) return true; 
    1586     if (jj_3R_22()) return true; 
    1587     return false; 
    1588   } 
    1589  
    1590   private boolean jj_3R_75() { 
     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() { 
    15911606    if (jj_scan_token(COMMA)) return true; 
    15921607    if (jj_3R_15()) return true; 
     
    15951610  } 
    15961611 
    1597   private boolean jj_3R_14() { 
    1598     if (jj_3R_22()) return true; 
    1599     Token xsp; 
    1600     if (jj_3R_23()) return true; 
     1612  private boolean jj_3R_71() { 
     1613    if (jj_3R_16()) return true; 
     1614    Token xsp; 
    16011615    while (true) { 
    16021616      xsp = jj_scanpos; 
    1603       if (jj_3R_23()) { jj_scanpos = xsp; break; } 
    1604     } 
    1605     return false; 
    1606   } 
    1607  
    1608   private boolean jj_3R_70() { 
    1609     if (jj_3R_16()) return true; 
    1610     Token xsp; 
     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; 
    16111626    while (true) { 
    16121627      xsp = jj_scanpos; 
    1613       if (jj_3R_75()) { jj_scanpos = xsp; break; } 
     1628      if (jj_3R_24()) { jj_scanpos = xsp; break; } 
    16141629    } 
    16151630    return false; 
     
    16221637  } 
    16231638 
    1624   private boolean jj_3R_42() { 
     1639  private boolean jj_3R_43() { 
    16251640    if (jj_scan_token(COMMENT_START)) return true; 
    16261641    if (jj_scan_token(COMMENT_END)) return true; 
     
    16311646    if (jj_3R_12()) return true; 
    16321647    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; 
    16331660    return false; 
    16341661  } 
     
    16451672  private int jj_la; 
    16461673  private int jj_gen; 
    1647   final private int[] jj_la1 = new int[40]; 
     1674  final private int[] jj_la1 = new int[41]; 
    16481675  static private int[] jj_la1_0; 
    16491676  static private int[] jj_la1_1; 
     
    16531680   } 
    16541681   private static void jj_la1_init_0() { 
    1655       jj_la1_0 = new int[] {0xc,0xc,0x12,0x200,0x200,0x200,0x10000000,0x402,0x10000000,0x402,0x40000000,0x2804000,0x2804000,0x4000000,0x4,0x0,0x4,0x8081011e,0x800000,0x1000012,0x1c00400,0x3c0000,0x1fc0400,0x800000,0x402,0x2,0x8002000,0x8002000,0x80000000,0x400,0x0,0x800,0x400000,0xa07c0c00,0xa07c0c00,0x8081011e,0x8001011e,0x10000000,0x8081011e,0x8000011e,}; 
     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,}; 
    16561683   } 
    16571684   private static void jj_la1_init_1() { 
    1658       jj_la1_1 = new int[] {0x0,0x1,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x18,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x7,0x7,0x1,0x0,0x0,0x1,0x0,}; 
     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,}; 
    16591686   } 
    16601687  final private JJCalls[] jj_2_rtns = new JJCalls[5]; 
     
    16731700    jj_ntk = -1; 
    16741701    jj_gen = 0; 
    1675     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1702    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    16761703    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    16771704  } 
     
    16881715    jj_ntk = -1; 
    16891716    jj_gen = 0; 
    1690     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1717    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    16911718    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    16921719  } 
     
    16991726    jj_ntk = -1; 
    17001727    jj_gen = 0; 
    1701     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1728    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    17021729    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17031730  } 
     
    17101737    jj_ntk = -1; 
    17111738    jj_gen = 0; 
    1712     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1739    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    17131740    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17141741  } 
     
    17201747    jj_ntk = -1; 
    17211748    jj_gen = 0; 
    1722     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1749    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    17231750    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17241751  } 
     
    17301757    jj_ntk = -1; 
    17311758    jj_gen = 0; 
    1732     for (int i = 0; i < 40; i++) jj_la1[i] = -1; 
     1759    for (int i = 0; i < 41; i++) jj_la1[i] = -1; 
    17331760    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 
    17341761  } 
     
    18471874      jj_kind = -1; 
    18481875    } 
    1849     for (int i = 0; i < 40; i++) { 
     1876    for (int i = 0; i < 41; i++) { 
    18501877      if (jj_la1[i] == jj_gen) { 
    18511878        for (int j = 0; j < 32; j++) { 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/parser/MapCSSParser.jj

    r3888 r3893  
    290290{ 
    291291    boolean not = false; 
     292    boolean yes = false; 
    292293    String key; 
    293294} 
     
    295296    ( <EXCLAMATION> { not = true; } )? 
    296297    key=string_or_ident() 
    297     { return new Condition.KeyCondition(key, not); } 
     298    ( <QUESTION> { yes = true; } )? 
     299    { return new Condition.KeyCondition(key, not, yes); } 
    298300} 
    299301 
     
    504506JAVACODE 
    505507void error_skipto(int kind) { 
     508    if (token.kind == EOF) 
     509        throw new ParseException("Reached end of file while parsing"); 
    506510    ParseException e = generateParseException(); 
    507511    System.err.println("Skipping to the next rule, because of an error:"); 
    508512    System.err.println(e); 
    509513    if (sheet != null) { 
    510         sheet.logError(e); 
     514        sheet.logError(new ParseException(e.getMessage())); 
    511515    } 
    512516    Token t; 
     
    527531    while (true) { 
    528532        t = getNextToken(); 
     533        if ((t.kind == S || t.kind == STRING || t.kind == UNEXPECTED_CHAR) && 
     534                t.image.contains("\n")) { 
     535            ParseException e = new ParseException(String.format("Warning: end of line while reading an unquoted string at line %s column %s.", t.beginLine, t.beginColumn)); 
     536            System.err.println(e); 
     537            if (sheet != null) { 
     538                sheet.logError(e); 
     539            } 
     540        } 
    529541        if (t.kind == SEMICOLON || t.kind == EOF) 
    530542            break; 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java

    r3882 r3893  
    278278    @Override 
    279279    public void apply(MultiCascade mc, OsmPrimitive osm, double scale, OsmPrimitive multipolyOuterWay, boolean pretendWayIsClosed) { 
    280         Cascade def = mc.get("default"); 
    281         if (def == null) { 
    282             def = new Cascade(false); 
    283             mc.put("default", def); 
    284         } 
     280        Cascade def = mc.getOrCreateCascade("default"); 
    285281        boolean useMinMaxScale = Main.pref.getBoolean("mappaint.zoomLevelDisplay", false); 
    286282 
     
    319315                int numOver = 0, numUnder = 0; 
    320316 
    321                 while (mc.containsKey(String.format("over_%d", ++numOver))) {} 
    322                 while (mc.containsKey(String.format("under_%d", ++numUnder))) {} 
     317                while (mc.hasLayer(String.format("over_%d", ++numOver))) {} 
     318                while (mc.hasLayer(String.format("under_%d", ++numUnder))) {} 
    323319 
    324320                for (LinemodPrototype mod : p.linemods) { 
     
    326322                    if (mod.over) { 
    327323                        String layer = String.format("over_%d", numOver); 
    328                         c = mc.get(layer); 
    329                         if (c == null) { 
    330                             c = new Cascade(true); 
    331                             mc.put(layer, c); 
    332                         } 
     324                        c = mc.getOrCreateCascade(layer); 
    333325                        c.put("object-z-index", new Float(numOver)); 
    334326                        ++numOver; 
    335327                    } else { 
    336328                        String layer = String.format("under_%d", numUnder); 
    337                         c = mc.get(layer); 
    338                         if (c == null) { 
    339                             c = new Cascade(true); 
    340                             mc.put(layer, c); 
    341                         } 
     329                        c = mc.getOrCreateCascade(layer); 
    342330                        c.put("object-z-index", new Float(-numUnder)); 
    343331                        ++numUnder; 
Note: See TracChangeset for help on using the changeset viewer.