use svg2_color parser
This commit is contained in:
parent
e4a60d7c90
commit
bcfa73c85d
2 changed files with 39 additions and 30 deletions
|
@ -24,21 +24,19 @@
|
||||||
#include <mapnik/color.hpp>
|
#include <mapnik/color.hpp>
|
||||||
#include <mapnik/color_factory.hpp>
|
#include <mapnik/color_factory.hpp>
|
||||||
#include <mapnik/config_error.hpp>
|
#include <mapnik/config_error.hpp>
|
||||||
#include <mapnik/css_color_grammar.hpp>
|
#include <mapnik/svg2_color_grammar_def.hpp>
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
color parse_color(std::string const& str)
|
color parse_color(std::string const& str)
|
||||||
{
|
{
|
||||||
// TODO - early return for @color?
|
// TODO - early return for @color?
|
||||||
static const css_color_grammar<std::string::const_iterator> g;
|
auto const& grammar = mapnik::svg2_color_grammar::expression;
|
||||||
color c;
|
color c;
|
||||||
std::string::const_iterator first = str.begin();
|
std::string::const_iterator first = str.begin();
|
||||||
std::string::const_iterator last = str.end();
|
std::string::const_iterator last = str.end();
|
||||||
boost::spirit::ascii::space_type space;
|
using namespace boost::spirit::x3::ascii;
|
||||||
bool result = boost::spirit::qi::phrase_parse(first, last, g,
|
|
||||||
space,
|
bool result = boost::spirit::x3::phrase_parse(first, last, grammar, space, c);
|
||||||
c);
|
|
||||||
if (result && (first == last))
|
if (result && (first == last))
|
||||||
{
|
{
|
||||||
return c;
|
return c;
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
#include <mapnik/css_color_grammar.hpp>
|
|
||||||
#include <mapnik/css_color_grammar_impl.hpp>
|
|
||||||
#include <mapnik/safe_cast.hpp>
|
|
||||||
|
|
||||||
TEST_CASE("css color") {
|
#include <mapnik/safe_cast.hpp>
|
||||||
|
#include <mapnik/color.hpp>
|
||||||
|
#include <mapnik/svg2_color_grammar_def.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("SVG2 color") {
|
||||||
|
|
||||||
SECTION("conversions")
|
SECTION("conversions")
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
mapnik::percent_conv_impl conv;
|
mapnik::percent_conv_impl conv;
|
||||||
CHECK( conv(1.0) == 3 );
|
CHECK( conv(1.0) == 3 );
|
||||||
CHECK( conv(60.0) == 153 );
|
CHECK( conv(60.0) == 153 );
|
||||||
|
@ -35,27 +38,27 @@ TEST_CASE("css color") {
|
||||||
CHECK( c.red() == 0 );
|
CHECK( c.red() == 0 );
|
||||||
CHECK( c.green() == 0 );
|
CHECK( c.green() == 0 );
|
||||||
CHECK( c.blue() == 0 );
|
CHECK( c.blue() == 0 );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("hex colors")
|
SECTION("hex colors")
|
||||||
{
|
{
|
||||||
mapnik::css_color_grammar<std::string::const_iterator> color_grammar;
|
auto const& color_grammar = mapnik::svg2_color_grammar::expression;
|
||||||
boost::spirit::qi::ascii::space_type space;
|
boost::spirit::x3::ascii::space_type space;
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#abcdef");
|
std::string s("#abcdef");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xff );
|
CHECK( c.alpha() == 0xff );
|
||||||
CHECK( c.red() == 0xab );
|
CHECK( c.red() == 0xab );
|
||||||
CHECK( c.green() == 0xcd );
|
CHECK( c.green() == 0xcd );
|
||||||
CHECK( c.blue() == 0xef );
|
CHECK( c.blue() == 0xef );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#abcdef12");
|
std::string s("#abcdef12");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0x12 );
|
CHECK( c.alpha() == 0x12 );
|
||||||
CHECK( c.red() == 0xab );
|
CHECK( c.red() == 0xab );
|
||||||
CHECK( c.green() == 0xcd );
|
CHECK( c.green() == 0xcd );
|
||||||
|
@ -65,7 +68,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s(" #abcdef");
|
std::string s(" #abcdef");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xff );
|
CHECK( c.alpha() == 0xff );
|
||||||
CHECK( c.red() == 0xab );
|
CHECK( c.red() == 0xab );
|
||||||
CHECK( c.green() == 0xcd );
|
CHECK( c.green() == 0xcd );
|
||||||
|
@ -75,7 +78,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s(" #abcdef12");
|
std::string s(" #abcdef12");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0x12 );
|
CHECK( c.alpha() == 0x12 );
|
||||||
CHECK( c.red() == 0xab );
|
CHECK( c.red() == 0xab );
|
||||||
CHECK( c.green() == 0xcd );
|
CHECK( c.green() == 0xcd );
|
||||||
|
@ -84,22 +87,26 @@ TEST_CASE("css color") {
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("# abcdef");
|
std::string s("# abcdef");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("# abcdef12");
|
std::string s("# abcdef12");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#ab cdef");
|
std::string s("#ab cdef");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#ab cdef12");
|
std::string s("#ab cdef12");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// hex_color_small
|
// hex_color_small
|
||||||
|
@ -107,7 +114,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s("#abc");
|
std::string s("#abc");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xff );
|
CHECK( c.alpha() == 0xff );
|
||||||
CHECK( c.red() == 0xaa );
|
CHECK( c.red() == 0xaa );
|
||||||
CHECK( c.green() == 0xbb );
|
CHECK( c.green() == 0xbb );
|
||||||
|
@ -117,7 +124,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s("#abcd");
|
std::string s("#abcd");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xdd );
|
CHECK( c.alpha() == 0xdd );
|
||||||
CHECK( c.red() == 0xaa );
|
CHECK( c.red() == 0xaa );
|
||||||
CHECK( c.green() == 0xbb );
|
CHECK( c.green() == 0xbb );
|
||||||
|
@ -127,7 +134,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s(" #abc");
|
std::string s(" #abc");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xff );
|
CHECK( c.alpha() == 0xff );
|
||||||
CHECK( c.red() == 0xaa );
|
CHECK( c.red() == 0xaa );
|
||||||
CHECK( c.green() == 0xbb );
|
CHECK( c.green() == 0xbb );
|
||||||
|
@ -137,7 +144,7 @@ TEST_CASE("css color") {
|
||||||
{
|
{
|
||||||
std::string s(" #abcd");
|
std::string s(" #abcd");
|
||||||
mapnik::color c;
|
mapnik::color c;
|
||||||
CHECK( boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
CHECK( boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
CHECK( c.alpha() == 0xdd );
|
CHECK( c.alpha() == 0xdd );
|
||||||
CHECK( c.red() == 0xaa );
|
CHECK( c.red() == 0xaa );
|
||||||
CHECK( c.green() == 0xbb );
|
CHECK( c.green() == 0xbb );
|
||||||
|
@ -146,22 +153,26 @@ TEST_CASE("css color") {
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("# abc");
|
std::string s("# abc");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("# abcd");
|
std::string s("# abcd");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#a bc");
|
std::string s("#a bc");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string s("#a bcd");
|
std::string s("#a bcd");
|
||||||
CHECK( !boost::spirit::qi::phrase_parse(s.cbegin(), s.cend(), color_grammar, space) );
|
mapnik::color c;
|
||||||
|
CHECK( !boost::spirit::x3::phrase_parse(s.cbegin(), s.cend(), color_grammar, space, c) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue