From 4590bfd4db6b8e835a3d011789b8f00487d50bc6 Mon Sep 17 00:00:00 2001 From: nebulon42 Date: Sat, 24 Dec 2016 12:58:29 +0100 Subject: [PATCH] let filters accept expressions, ref #121 --- lib/carto/parser.js | 3 ++- lib/carto/tree/operation.js | 4 ++++ test/rendering-mss/issue_121.mss | 3 +++ test/rendering-mss/issue_121.xml | 6 +++++ test/rendering/issue_121.mml | 36 +++++++++++++++++++++++++++++ test/rendering/issue_121.mss | 11 +++++++++ test/rendering/issue_121.result | 39 ++++++++++++++++++++++++++++++++ 7 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 test/rendering-mss/issue_121.mss create mode 100644 test/rendering-mss/issue_121.xml create mode 100644 test/rendering/issue_121.mml create mode 100644 test/rendering/issue_121.mss create mode 100644 test/rendering/issue_121.result diff --git a/lib/carto/parser.js b/lib/carto/parser.js index 5708ec82b..2943b1727 100644 --- a/lib/carto/parser.js +++ b/lib/carto/parser.js @@ -588,7 +588,8 @@ carto.Parser = function Parser(env) { key = new tree.Field(key.toString()); } if ((op = $(this.entities.comparison)) && - (val = $(this.entities.quoted) || + (val = $(this.expression) || + $(this.entities.quoted) || $(this.entities.variable) || $(this.entities.dimension) || $(this.entities.keyword) || diff --git a/lib/carto/tree/operation.js b/lib/carto/tree/operation.js index cfacfb3ca..f42ecdfd4 100644 --- a/lib/carto/tree/operation.js +++ b/lib/carto/tree/operation.js @@ -84,6 +84,10 @@ tree.Operation.prototype.ev = function(env) { return a.operate(env, this.op, b); }; +tree.Operation.prototype.toString = function () { + return this.operands[0].toString() + this.op + this.operands[1].toString(); +}; + tree.operate = function(op, a, b) { switch (op) { case '+': return a + b; diff --git a/test/rendering-mss/issue_121.mss b/test/rendering-mss/issue_121.mss new file mode 100644 index 000000000..6e4bce1b5 --- /dev/null +++ b/test/rendering-mss/issue_121.mss @@ -0,0 +1,3 @@ +#data { + [[dem] > [rep]] { marker-fill: #00f;} +} diff --git a/test/rendering-mss/issue_121.xml b/test/rendering-mss/issue_121.xml new file mode 100644 index 000000000..1d8e9bb29 --- /dev/null +++ b/test/rendering-mss/issue_121.xml @@ -0,0 +1,6 @@ + diff --git a/test/rendering/issue_121.mml b/test/rendering/issue_121.mml new file mode 100644 index 000000000..3ccdec649 --- /dev/null +++ b/test/rendering/issue_121.mml @@ -0,0 +1,36 @@ +{ + "bounds": [ + -180, + -85.05112877980659, + 180, + 85.05112877980659 + ], + "center": [ + 0, + 0, + 2 + ], + "format": "png", + "interactivity": false, + "minzoom": 0, + "maxzoom": 22, + "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", + "Stylesheet": [ + "issue_121.mss" + ], + "Layer": [ + { + "id": "filtertest", + "srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over", + "geometry": "polygon", + "Datasource": { + "file": "http://mapbox-geodata.s3.amazonaws.com/natural-earth-1.4.0/cultural/10m-admin-0-countries.zip", + "type": "shape" + } + } + ], + "scale": 1, + "metatile": 2, + "name": "", + "description": "" +} diff --git a/test/rendering/issue_121.mss b/test/rendering/issue_121.mss new file mode 100644 index 000000000..cdc63a013 --- /dev/null +++ b/test/rendering/issue_121.mss @@ -0,0 +1,11 @@ +#filtertest[[a] > [b]] { + marker-fill: #ff0000; +} + +#filtertest[[a] > [b] * 2] { + marker-fill: #00ff00; +} + +#filtertest[[a] > 10 * 2] { + marker-fill: #0000ff; +} diff --git a/test/rendering/issue_121.result b/test/rendering/issue_121.result new file mode 100644 index 000000000..e610d9fbc --- /dev/null +++ b/test/rendering/issue_121.result @@ -0,0 +1,39 @@ + + + + + + -180,-85.05112877980659,180,85.05112877980659 + 0,0,2 + png + 0 + 22 + 1 + 2 + + + + + + filtertest + + [absolute path] + + + + +