From 74fa914c8c96732648c9f7ab7f4f76c84a6f55ce Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 1 Feb 2013 15:57:29 -0500 Subject: [PATCH] updated raster colorizer support --- lib/carto/functions.js | 18 ++++++++++++++++++ lib/carto/tree/call.js | 2 +- lib/carto/tree/definition.js | 5 ++++- lib/carto/tree/reference.js | 6 ++++++ package.json | 2 +- test/rendering/rastercolorizer.mml | 14 ++++++++++++++ test/rendering/rastercolorizer.mss | 10 ++++++++++ 7 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 test/rendering/rastercolorizer.mml create mode 100644 test/rendering/rastercolorizer.mss diff --git a/lib/carto/functions.js b/lib/carto/functions.js index 021f90501..613f6c614 100644 --- a/lib/carto/functions.js +++ b/lib/carto/functions.js @@ -10,6 +10,24 @@ tree.functions = { if (rgb.some(isNaN) || isNaN(a)) return null; return new tree.Color(rgb, a); }, + // Only require val + stop: function (val) { + if (arguments.length > 1) var color = arguments[1]; + if (arguments.length > 2) var mode = arguments[2]; + + return { + is: 'tag', + val: val, + color: color, + mode: mode, + toString: function(env) { + return '\n\t'; + } + }; + }, hsl: function (h, s, l) { return this.hsla(h, s, l, 1.0); }, diff --git a/lib/carto/tree/call.js b/lib/carto/tree/call.js index 13c22b6fc..07423bc10 100644 --- a/lib/carto/tree/call.js +++ b/lib/carto/tree/call.js @@ -29,7 +29,7 @@ tree.Call.prototype = { } if (this.name in tree.functions) { - if (tree.functions[this.name].length === args.length) { + if (tree.functions[this.name].length <= args.length) { var val = tree.functions[this.name].apply(tree.functions, args); if (val === null) { env.error({ diff --git a/lib/carto/tree/definition.js b/lib/carto/tree/definition.js index f1a80acb0..c2e730563 100644 --- a/lib/carto/tree/definition.js +++ b/lib/carto/tree/definition.js @@ -130,6 +130,9 @@ tree.Definition.prototype.symbolizersToXML = function(env, symbolizers, zoom) { if (x && x.serialization && x.serialization === 'content') { selfclosing = false; tagcontent = attributes[j].ev(env).toXML(env, true); + } else if (x && x.serialization && x.serialization === 'tag') { + selfclosing = false; + tagcontent = attributes[j].ev(env).toXML(env, true); } else { xml += attributes[j].ev(env).toXML(env) + ' '; } @@ -137,7 +140,7 @@ tree.Definition.prototype.symbolizersToXML = function(env, symbolizers, zoom) { if (selfclosing) { xml += '/>\n'; } else { - if (tagcontent.indexOf('\n'; } else { xml += '>\n'; diff --git a/lib/carto/tree/reference.js b/lib/carto/tree/reference.js index 1dae32eed..a10fa8fbc 100644 --- a/lib/carto/tree/reference.js +++ b/lib/carto/tree/reference.js @@ -163,6 +163,12 @@ ref.validValue = function(env, selector, value) { } } return true; + } else if (ref.selector(selector).type == 'tags') { + if (!value.value) return false; + for (i = 0; i < value.value[0].value.length; i++) { + if (value.value[0].value[i].is !== 'tag') return false; + } + return true; } else if (ref.selector(selector).type == 'functions') { // For backwards compatibility, you can specify a string for `functions`-compatible // values, though they will not be validated. diff --git a/package.json b/package.json index 5b63d71a9..3ee3129f4 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "underscore": "~1.4.3", - "mapnik-reference": "~5.0.3", + "mapnik-reference": "https://github.com/mapnik/mapnik-reference/archive/raster-colorizer.tar.gz", "xml2js": "~0.1.13", "optimist": "~0.3.5" }, diff --git a/test/rendering/rastercolorizer.mml b/test/rendering/rastercolorizer.mml new file mode 100644 index 000000000..719e22a59 --- /dev/null +++ b/test/rendering/rastercolorizer.mml @@ -0,0 +1,14 @@ +{ + "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": [ + "rastercolorizer.mss" + ], + "Layer": [{ + "name": "world", + "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", + "Datasource": { + "file": "http://tilemill-data.s3.amazonaws.com/test_data/shape_demo.zip", + "type": "shape" + } + }] +} \ No newline at end of file diff --git a/test/rendering/rastercolorizer.mss b/test/rendering/rastercolorizer.mss new file mode 100644 index 000000000..c13c9403f --- /dev/null +++ b/test/rendering/rastercolorizer.mss @@ -0,0 +1,10 @@ +#world { + raster-opacity:0; + raster-colorizer-default-mode:discrete; + raster-colorizer-default-color:#f00; + raster-colorizer-epsilon:0.05; + raster-colorizer-stops: + stop(5, #f00) + stop(10, #f40, linear) + stop(10, #f80); +} \ No newline at end of file