From 4e6aeaedfcc0c777ef1615e9c010e8552659adaa Mon Sep 17 00:00:00 2001 From: artemp Date: Fri, 13 May 2016 11:50:43 +0200 Subject: [PATCH] handle empty arrays and objects ref #3426 --- include/mapnik/json/feature_grammar_impl.hpp | 6 +++--- include/mapnik/json/geometry_grammar_impl.hpp | 6 ++++-- include/mapnik/json/topojson_grammar_impl.hpp | 10 ++++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/include/mapnik/json/feature_grammar_impl.hpp b/include/mapnik/json/feature_grammar_impl.hpp index e34b42100..0fc4205ad 100644 --- a/include/mapnik/json/feature_grammar_impl.hpp +++ b/include/mapnik/json/feature_grammar_impl.hpp @@ -50,19 +50,19 @@ feature_grammar::feature_grammar(mapnik::tran using phoenix::construct; // generic json types - json_.value = json_.object | json_.array | json_.string_ | json_.number + json_.value = json_.object | json_.array | json_.string_ | json_.number ; json_.key_value = json_.string_ > lit(':') > json_.value ; json_.object = lit('{') - > json_.key_value % lit(',') + > -(json_.key_value % lit(',')) > lit('}') ; json_.array = lit('[') - > json_.value > *(lit(',') > json_.value) + > -(json_.value % lit(',')) > lit(']') ; diff --git a/include/mapnik/json/geometry_grammar_impl.hpp b/include/mapnik/json/geometry_grammar_impl.hpp index 3c6086da9..c02173379 100644 --- a/include/mapnik/json/geometry_grammar_impl.hpp +++ b/include/mapnik/json/geometry_grammar_impl.hpp @@ -62,13 +62,15 @@ geometry_grammar::geometry_grammar() ; json_.object = lit('{') - > json_.key_value % lit(',') + > -(json_.key_value % lit(',')) > lit('}') ; + json_.array = lit('[') - > json_.value > *(lit(',') > json_.value) + > -(json_.value % lit(',')) > lit(']') ; + json_.number = json_.strict_double | json_.int__ | lit("true") diff --git a/include/mapnik/json/topojson_grammar_impl.hpp b/include/mapnik/json/topojson_grammar_impl.hpp index 5d0306e84..0bb59b041 100644 --- a/include/mapnik/json/topojson_grammar_impl.hpp +++ b/include/mapnik/json/topojson_grammar_impl.hpp @@ -133,15 +133,17 @@ topojson_grammar::topojson_grammar() json.value = json.object | json.array | json.string_ | json.number ; - json.key_value = json.string_ >> lit(':') >> json.value + json.key_value = json.string_ > lit(':') > json.value ; - json.object = lit('{') >> json.key_value % lit(',') >> lit('}') + json.object = lit('{') + > -(json.key_value % lit(',')) + > lit('}') ; json.array = lit('[') - >> json.value >> *(lit(',') >> json.value) - >> lit(']') + > -(json.value % lit(',')) + > lit(']') ; json.number = json.strict_double[_val = json.double_converter(_1)]