Ignore:
Timestamp:
2013-12-28T01:31:47+01:00 (12 years ago)
Author:
simon04
Message:

see #9414 fix #9409 - extend MapCSS condition syntax to allow the comparison of two key values

The syntax is [key1 = *key2] where * is inspired by the C de-reference operator, and = stands for any of =/!=/~=/^=/$=/*=/=~/!~.

File:
1 edited

Legend:

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

    r6547 r6554  
    2222    abstract public boolean applies(Environment e);
    2323
    24     public static Condition create(String k, String v, Op op, Context context) {
     24    public static Condition create(String k, String v, Op op, Context context, boolean considerValAsKey) {
    2525        switch (context) {
    2626        case PRIMITIVE:
    27             return new KeyValueCondition(k, v, op);
     27            return new KeyValueCondition(k, v, op, considerValAsKey);
    2828        case LINK:
     29            if (considerValAsKey)
     30                throw new MapCSSException("''considerValAsKey'' not supported in LINK context");
    2931            if ("role".equalsIgnoreCase(k))
    3032                return new RoleCondition(v, op);
     
    144146        public final String v;
    145147        public final Op op;
     148        public boolean considerValAsKey;
    146149
    147150        /**
     
    151154         * @param v the value
    152155         * @param op the operation
     156         * @param considerValAsKey whether to consider {@code v} as another key and compare the values of key {@code k} and key {@code v}.
    153157         */
    154         public KeyValueCondition(String k, String v, Op op) {
     158        public KeyValueCondition(String k, String v, Op op, boolean considerValAsKey) {
    155159            this.k = k;
    156160            this.v = v;
    157161            this.op = op;
     162            this.considerValAsKey = considerValAsKey;
    158163        }
    159164
    160165        @Override
    161166        public boolean applies(Environment env) {
    162             return op.eval(env.osm.get(k), v);
     167            return op.eval(env.osm.get(k), considerValAsKey ? env.osm.get(v) : v);
    163168        }
    164169
Note: See TracChangeset for help on using the changeset viewer.