static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const& node) { using value_type = T; try { boost::optional<value_type> val = node.get_opt_attr<value_type>(name); if (val) put(sym, key, *val); } catch (config_error const& ex) { // try parsing as an expression boost::optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name); if (val) { // first try pre-evaluate expressions which don't have dynamic properties auto result = pre_evaluate_expression<mapnik::value>(*val); if (std::get<1>(result)) { set_property_from_value(sym, key,std::get<0>(result)); } else { // expression_ptr put(sym, key, *val); } } else { throw; } } }
static void apply(Symbolizer & sym, keys key, std::string const& name, xml_node const & node) { boost::optional<std::string> str = node.get_opt_attr<std::string>(name); if (str) { std::vector<double> buf; dash_array dash; if (util::parse_dasharray(*str,buf) && util::add_dashes(buf,dash)) { put(sym,key,dash); } else { boost::optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name); if (val) { // first try pre-evaluate expressions which don't have dynamic properties auto result = pre_evaluate_expression<mapnik::value>(*val); if (std::get<1>(result)) { set_property_from_value(sym, key,std::get<0>(result)); } else { // expression_ptr put(sym, key, *val); } } else { throw config_error(std::string("Failed to parse dasharray ") + "'. Expected a " + "list of floats or 'none' but got '" + (*str) + "'"); } } } }