From 41772edbd7be0d8b2aca774bb9f2f17b1e9d7cd1 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 1 Feb 2013 16:32:48 -0500 Subject: [PATCH] support reading raster-colorizer properties off of raster symbolizer as well as in standalone child element --- src/load_map.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/load_map.cpp b/src/load_map.cpp index 85b949c62..824afa90f 100644 --- a/src/load_map.cpp +++ b/src/load_map.cpp @@ -103,7 +103,7 @@ private: void parse_markers_symbolizer(rule & rule, xml_node const& sym); void parse_debug_symbolizer(rule & rule, xml_node const& sym); - void parse_raster_colorizer(raster_colorizer_ptr const& rc, xml_node const& node); + bool parse_raster_colorizer(raster_colorizer_ptr const& rc, xml_node const& node); bool parse_stroke(stroke & strk, xml_node const & sym); void ensure_font_face(std::string const& face_name); @@ -1500,15 +1500,26 @@ void map_parser::parse_raster_symbolizer(rule & rule, xml_node const & sym) xml_node::const_iterator cssIter = sym.begin(); xml_node::const_iterator endCss = sym.end(); + bool found_colorizer = false; for(; cssIter != endCss; ++cssIter) { if (cssIter->is("RasterColorizer")) { + found_colorizer = true; raster_colorizer_ptr colorizer = boost::make_shared(); raster_sym.set_colorizer(colorizer); - parse_raster_colorizer(colorizer, *cssIter); + if (parse_raster_colorizer(colorizer, *cssIter)) + raster_sym.set_colorizer(colorizer); + } } + // look for properties one level up + if (!found_colorizer) + { + raster_colorizer_ptr colorizer = boost::make_shared(); + if (parse_raster_colorizer(colorizer, sym)) + raster_sym.set_colorizer(colorizer); + } parse_symbolizer_base(raster_sym, sym); rule.append(raster_sym); } @@ -1527,9 +1538,10 @@ void map_parser::parse_debug_symbolizer(rule & rule, xml_node const & sym) rule.append(symbol); } -void map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc, +bool map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc, xml_node const& node) { + bool found_stops = false; try { // mode @@ -1568,6 +1580,7 @@ void map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc, { if (stopIter->is("stop")) { + found_stops = true; // colour is optional. optional stopcolor = stopIter->get_opt_attr("color"); if (!stopcolor) { @@ -1611,6 +1624,7 @@ void map_parser::parse_raster_colorizer(raster_colorizer_ptr const& rc, ex.append_context(node); throw; } + return found_stops; } void map_parser::ensure_font_face(std::string const& face_name)