diff --git a/src/map/mapsforge/style.cpp b/src/map/mapsforge/style.cpp index f3803b73..156c153e 100644 --- a/src/map/mapsforge/style.cpp +++ b/src/map/mapsforge/style.cpp @@ -116,13 +116,15 @@ QSet Style::Menu::cats() const } Style::Rule::Filter::Filter(const MapData &data, const QList &keys, - const QList &vals) : _neg(false) + const QList &vals) : _neg(false), _excl(false) { _keys = keyList(data, keys); QList vc(vals); if (vc.removeAll("~")) _neg = true; + if (vc.removeAll("-")) + _excl = true; _vals = valList(vc); } diff --git a/src/map/mapsforge/style.h b/src/map/mapsforge/style.h index a9367dcd..44ff15e0 100644 --- a/src/map/mapsforge/style.h +++ b/src/map/mapsforge/style.h @@ -38,7 +38,7 @@ public: class Filter { public: - Filter() : _neg(false) {} + Filter() : _neg(false), _excl(false) {} Filter(const MapData &data, const QList &keys, const QList &vals); @@ -47,14 +47,15 @@ public: if (_neg) { if (!keyMatches(tags)) return true; - return valueMatches(tags); + return valueMatches(tags) ^ _excl; } else - return (keyMatches(tags) && valueMatches(tags)); + return (keyMatches(tags) && (valueMatches(tags) ^ _excl)); } bool isTautology() const { - return (!_neg && _keys.contains(0u) && _vals.contains(QByteArray())); + return (!_neg && !_excl && _keys.contains(0u) + && _vals.contains(QByteArray())); } private: @@ -86,7 +87,7 @@ public: QList _keys; QList _vals; - bool _neg; + bool _neg, _excl; }; void setType(Type type)