-
Notifications
You must be signed in to change notification settings - Fork 101
/
sample01a.cpp
89 lines (74 loc) · 1.78 KB
/
sample01a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <rapidxml_ns/rapidxml_ns.hpp>
#include <svgpp/policy/xml/rapidxml_ns.hpp>
#include <svgpp/svgpp.hpp>
using namespace svgpp;
typedef rapidxml_ns::xml_node<> const * xml_element_t;
class Context
{
public:
void on_enter_element(tag::element::any)
{}
void on_exit_element()
{}
void path_move_to(double x, double y, tag::coordinate::absolute)
{}
void path_line_to(double x, double y, tag::coordinate::absolute)
{}
void path_cubic_bezier_to(
double x1, double y1,
double x2, double y2,
double x, double y,
tag::coordinate::absolute)
{}
void path_quadratic_bezier_to(
double x1, double y1,
double x, double y,
tag::coordinate::absolute)
{}
void path_elliptical_arc_to(
double rx, double ry, double x_axis_rotation,
bool large_arc_flag, bool sweep_flag,
double x, double y,
tag::coordinate::absolute)
{}
void path_close_subpath()
{}
void path_exit()
{}
};
typedef
boost::mpl::fold<
traits::shape_elements,
boost::mpl::set<
tag::element::svg,
tag::element::g
>::type,
boost::mpl::insert<boost::mpl::_1, boost::mpl::_2>
>::type processed_elements_t;
void loadSvg(xml_element_t xml_root_element)
{
Context context;
document_traversal<
processed_elements<processed_elements_t>,
processed_attributes<traits::shapes_attributes_by_element>
>::load_document(xml_root_element, context);
}
int main()
{
char text[] = "<svg/>";
rapidxml_ns::xml_document<> doc; // character type defaults to char
try
{
doc.parse<0>(text);
if (rapidxml_ns::xml_node<> * svg_element = doc.first_node("svg"))
{
loadSvg(svg_element);
}
}
catch (std::exception const & e)
{
std::cerr << "Error loading SVG: " << e.what() << std::endl;
return 1;
}
return 0;
}