From 2f3a2c88b3fe1e371329e57ba19c3b4ff656371c Mon Sep 17 00:00:00 2001 From: Artem Pavlenko Date: Mon, 21 Jun 2010 10:38:46 +0000 Subject: [PATCH] + css color grammar - case-insensitive named colors - corrected alpha values parsing --- include/mapnik/css_color_grammar.hpp | 32 ++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/include/mapnik/css_color_grammar.hpp b/include/mapnik/css_color_grammar.hpp index e00ee9796..cf71d799f 100644 --- a/include/mapnik/css_color_grammar.hpp +++ b/include/mapnik/css_color_grammar.hpp @@ -84,6 +84,7 @@ namespace mapnik { namespace qi = boost::spirit::qi; +namespace ascii = boost::spirit::ascii; namespace phoenix = boost::phoenix; typedef boost::spirit::ascii::space_type ascii_space_type; @@ -268,6 +269,21 @@ struct percent_conv_impl } }; +struct alpha_conv_impl +{ + template + struct result + { + typedef unsigned type; + }; + + unsigned operator() (double val) const + { + return clip_int<0,255>(int((255.0 * val) + 0.5)); + } +}; + + template struct css_color_grammar : qi::grammar { @@ -280,13 +296,14 @@ struct css_color_grammar : qi::grammar> hex2 @@ -302,11 +319,12 @@ struct css_color_grammar : qi::grammar> -hex1[ at_c<3>(_val) = _1 | _1 << 4 ] ; - rgba_color %= lit("rgb") >> -lit('a') + rgba_color = lit("rgb") >> -lit('a') >> lit('(') - >> dec3 >> ',' - >> dec3 >> ',' - >> dec3 >> -(','>> -dec3) + >> dec3 [at_c<0>(_val) = _1] >> ',' + >> dec3 [at_c<1>(_val) = _1] >> ',' + >> dec3 [at_c<2>(_val) = _1] + >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) >> lit(')') ; @@ -315,7 +333,7 @@ struct css_color_grammar : qi::grammar> double_ [at_c<0>(_val) = percent_converter(_1)] >> '%' >> ',' >> double_ [at_c<1>(_val) = percent_converter(_1)] >> '%' >> ',' >> double_ [at_c<2>(_val) = percent_converter(_1)] >> '%' - >> -(','>> -double_ [at_c<3>(_val) = percent_converter(_1)] >> '%') + >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) >> lit(')') ; } @@ -330,7 +348,7 @@ struct css_color_grammar : qi::grammar css_color; named_colors_ named; phoenix::function percent_converter; - + phoenix::function alpha_converter; }; }