diff --git a/include/mapnik/symbolizer_utils.hpp b/include/mapnik/symbolizer_utils.hpp index f0668371e..d567ac1f3 100644 --- a/include/mapnik/symbolizer_utils.hpp +++ b/include/mapnik/symbolizer_utils.hpp @@ -343,10 +343,9 @@ namespace detail { template struct set_symbolizer_property_impl { - static void apply(Symbolizer & sym, keys key, xml_node const& node) + static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const& node) { using value_type = T; - std::string const& name = std::get<0>(get_meta(key)); try { boost::optional val = node.get_opt_attr(name); @@ -382,9 +381,8 @@ struct set_symbolizer_property_impl template struct set_symbolizer_property_impl { - static void apply(Symbolizer & sym, keys key, xml_node const & node) + static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node) { - std::string const& name = std::get<0>(get_meta(key)); boost::optional transform = node.get_opt_attr(name); if (transform) put(sym, key, mapnik::parse_transform(*transform)); } @@ -393,9 +391,8 @@ struct set_symbolizer_property_impl template struct set_symbolizer_property_impl { - static void apply(Symbolizer & sym, keys key, xml_node const & node) + static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node) { - std::string const& name = std::get<0>(get_meta(key)); boost::optional str = node.get_opt_attr(name); if (str) { @@ -436,10 +433,9 @@ struct set_symbolizer_property_impl template struct set_symbolizer_property_impl { - static void apply(Symbolizer & sym, keys key, xml_node const & node) + static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node) { using value_type = T; - std::string const& name = std::get<0>(get_meta(key)); try { boost::optional enum_str = node.get_opt_attr(name); @@ -494,9 +490,12 @@ struct set_symbolizer_property_impl } // namespace detail template -void set_symbolizer_property(Symbolizer & sym, keys key, xml_node const& node) +bool set_symbolizer_property(Symbolizer & sym, keys key, xml_node const& node) { - detail::set_symbolizer_property_impl::value>::apply(sym,key,node); + std::string const& name = std::get<0>(get_meta(key)); + if (node.has_attribute(name)) { + detail::set_symbolizer_property_impl::value>::apply(sym,key,name,node); + } }