SVG CSS: add basic parsing of <style> [C]DATA
This commit is contained in:
parent
4d54e81889
commit
b6e567d87c
1 changed files with 33 additions and 3 deletions
|
@ -58,6 +58,25 @@
|
||||||
|
|
||||||
namespace mapnik { namespace svg {
|
namespace mapnik { namespace svg {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
void print_css(mapnik::css_data & data)
|
||||||
|
{
|
||||||
|
for (auto const& kv : data)
|
||||||
|
{
|
||||||
|
std::cerr << std::get<0>(kv) << " {" << std::endl;
|
||||||
|
for (auto const& def : std::get<1>(kv))
|
||||||
|
{
|
||||||
|
std::cerr << " " << std::get<0>(def) << ":";
|
||||||
|
mapnik::util::apply_visitor([](auto const& val){
|
||||||
|
std::cerr << val << std::endl;
|
||||||
|
}, std::get<1>(def));
|
||||||
|
}
|
||||||
|
std::cerr << "}" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
using util::name_to_int;
|
using util::name_to_int;
|
||||||
using util::operator"" _case;
|
using util::operator"" _case;
|
||||||
|
|
||||||
|
@ -445,14 +464,25 @@ void traverse_tree(svg_parser & parser, rapidxml::xml_node<char> const* node)
|
||||||
if ("style"_case == name)
|
if ("style"_case == name)
|
||||||
{
|
{
|
||||||
// <style> element shouldn't have nested elements
|
// <style> element shouldn't have nested elements
|
||||||
// only CDATA
|
// we only interested in DATA or CDATA
|
||||||
for (auto const* child = node->first_node();
|
for (auto const* child = node->first_node();
|
||||||
child; child = child->next_sibling())
|
child; child = child->next_sibling())
|
||||||
{
|
{
|
||||||
if (child->type() == rapidxml::node_cdata)
|
if (child->type() == rapidxml::node_data ||
|
||||||
|
child->type() == rapidxml::node_cdata)
|
||||||
{
|
{
|
||||||
std::cerr << "======================== STYLE " << std::endl;
|
std::cerr << "======================== STYLE " << std::endl;
|
||||||
std::cerr << "CDATA:" << child->value() << std::endl;
|
mapnik::css_data css;
|
||||||
|
auto const grammar = mapnik::grammar();
|
||||||
|
auto const skipper = mapnik::skipper();
|
||||||
|
char const* first = child->value();
|
||||||
|
char const* last = first + child->value_size();
|
||||||
|
std::vector<std::string> classes;
|
||||||
|
bool result = boost::spirit::x3::phrase_parse(first, last, grammar, skipper, css);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
print_css(css);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue