Changeset 3893 in josm


Ignore:
Timestamp:
2011-02-12T20:30:01+01:00 (10 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.