Beispiel #1
0
 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;
         }
     }
 }
Beispiel #2
0
 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) + "'");
             }
         }
     }
 }