1 #line 1 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
2 /**
3 * \file
4 * \brief parse SVG path specifications
5 *
6 * Copyright 2007 MenTaLguY <mental@rydia.net>
7 * Copyright 2007 Aaron Spike <aaron@ekips.org>
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it either under the terms of the GNU Lesser General Public
11 * License version 2.1 as published by the Free Software Foundation
12 * (the "LGPL") or, at your option, under the terms of the Mozilla
13 * Public License Version 1.1 (the "MPL"). If you do not alter this
14 * notice, a recipient may use your version of this file under either
15 * the MPL or the LGPL.
16 *
17 * You should have received a copy of the LGPL along with this library
18 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * You should have received a copy of the MPL along with this library
21 * in the file COPYING-MPL-1.1
22 *
23 * The contents of this file are subject to the Mozilla Public License
24 * Version 1.1 (the "License"); you may not use this file except in
25 * compliance with the License. You may obtain a copy of the License at
26 * http://www.mozilla.org/MPL/
27 *
28 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
29 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
30 * the specific language governing rights and limitations.
31 *
32 */
35 #include <cmath>
36 #include <vector>
37 #include <glib.h>
39 #include <2geom/point.h>
40 #include <2geom/svg-path-parser.h>
41 #include <2geom/angle.h>
43 namespace Geom {
45 namespace {
47 class Parser {
48 public:
49 Parser(SVGPathSink &sink) : _sink(sink) {}
51 void parse(char const *str) throw(SVGPathParseError);
53 private:
54 bool _absolute;
55 Point _current;
56 Point _initial;
57 Point _cubic_tangent;
58 Point _quad_tangent;
59 std::vector<double> _params;
60 SVGPathSink &_sink;
62 void _reset() {
63 _absolute = false;
64 _current = _initial = Point(0, 0);
65 _quad_tangent = _cubic_tangent = Point(0, 0);
66 _params.clear();
67 }
69 void _push(double value) {
70 _params.push_back(value);
71 }
73 double _pop() {
74 double value = _params.back();
75 _params.pop_back();
76 return value;
77 }
79 bool _pop_flag() {
80 return _pop() != 0.0;
81 }
83 double _pop_coord(Geom::Dim2 axis) {
84 if (_absolute) {
85 return _pop();
86 } else {
87 return _pop() + _current[axis];
88 }
89 }
91 Point _pop_point() {
92 double y = _pop_coord(Geom::Y);
93 double x = _pop_coord(Geom::X);
94 return Point(x, y);
95 }
97 void _moveTo(Point p) {
98 _quad_tangent = _cubic_tangent = _current = _initial = p;
99 _sink.moveTo(p);
100 }
102 void _hlineTo(Point p) {
103 _quad_tangent = _cubic_tangent = _current = p;
104 _sink.hlineTo(p[Geom::X]);
105 }
107 void _vlineTo(Point p) {
108 _quad_tangent = _cubic_tangent = _current = p;
109 _sink.vlineTo(p[Geom::Y]);
110 }
112 void _lineTo(Point p) {
113 _quad_tangent = _cubic_tangent = _current = p;
114 _sink.lineTo(p);
115 }
117 void _curveTo(Point c0, Point c1, Point p) {
118 _quad_tangent = _current = p;
119 _cubic_tangent = p + ( p - c1 );
120 _sink.curveTo(c0, c1, p);
121 }
123 void _quadTo(Point c, Point p) {
124 _cubic_tangent = _current = p;
125 _quad_tangent = p + ( p - c );
126 _sink.quadTo(c, p);
127 }
129 void _arcTo(double rx, double ry, double angle,
130 bool large_arc, bool sweep, Point p)
131 {
132 _quad_tangent = _cubic_tangent = _current = p;
133 _sink.arcTo(rx, ry, angle, large_arc, sweep, p);
134 }
136 void _closePath() {
137 _quad_tangent = _cubic_tangent = _current = _initial;
138 _sink.closePath();
139 }
140 };
143 #line 144 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
144 static const char _svg_path_actions[] = {
145 0, 1, 0, 1, 1, 1, 2, 1,
146 3, 1, 4, 1, 5, 1, 15, 1,
147 16, 2, 1, 0, 2, 1, 6, 2,
148 1, 7, 2, 1, 8, 2, 1, 9,
149 2, 1, 10, 2, 1, 11, 2, 1,
150 12, 2, 1, 13, 2, 1, 14, 2,
151 4, 0, 2, 5, 0, 2, 15, 16,
152 3, 1, 6, 0, 3, 1, 6, 16,
153 3, 1, 7, 0, 3, 1, 7, 16,
154 3, 1, 8, 0, 3, 1, 8, 16,
155 3, 1, 9, 0, 3, 1, 9, 16,
156 3, 1, 10, 0, 3, 1, 10, 16,
157 3, 1, 11, 0, 3, 1, 11, 16,
158 3, 1, 12, 0, 3, 1, 12, 16,
159 3, 1, 13, 0, 3, 1, 13, 16,
160 3, 1, 14, 0, 3, 1, 14, 16
162 };
164 static const short _svg_path_key_offsets[] = {
165 0, 0, 7, 16, 25, 28, 30, 42,
166 52, 55, 57, 90, 121, 124, 126, 138,
167 148, 151, 153, 186, 195, 207, 216, 249,
168 256, 263, 265, 275, 283, 290, 292, 304,
169 314, 317, 319, 328, 335, 341, 346, 353,
170 359, 364, 374, 377, 379, 391, 401, 404,
171 406, 437, 466, 476, 480, 482, 490, 499,
172 508, 511, 513, 525, 535, 538, 540, 552,
173 562, 565, 567, 579, 589, 592, 594, 606,
174 616, 619, 621, 633, 643, 646, 648, 681,
175 712, 724, 733, 745, 754, 766, 775, 787,
176 796, 808, 817, 850, 854, 856, 887, 896,
177 905, 908, 910, 943, 974, 1007, 1011, 1013,
178 1044, 1053, 1062, 1071, 1074, 1076, 1088, 1098,
179 1101, 1103, 1115, 1125, 1128, 1130, 1142, 1152,
180 1155, 1157, 1190, 1221, 1233, 1242, 1254, 1263,
181 1275, 1284, 1317, 1321, 1323, 1354, 1363, 1372,
182 1375, 1377, 1389, 1399, 1402, 1404, 1416, 1426,
183 1429, 1431, 1443, 1453, 1456, 1458, 1491, 1522,
184 1534, 1543, 1555, 1564, 1576, 1585, 1618, 1622,
185 1624, 1655, 1664, 1673, 1676, 1678, 1690, 1700,
186 1703, 1705, 1738, 1769, 1781, 1790, 1823, 1827,
187 1829, 1860, 1869, 1878, 1881, 1883, 1916, 1947,
188 1980, 1984, 1986, 2017, 2042, 2067, 2074, 2083,
189 2092, 2101, 2110, 2122, 2131, 2164, 2168, 2170,
190 2201, 2210, 2219, 2228, 2237, 2241, 2243, 2253,
191 2257, 2259, 2269, 2273, 2275, 2285, 2289, 2291,
192 2301, 2305, 2307, 2317, 2321, 2323, 2333, 2337,
193 2339, 2349, 2353, 2355, 2365, 2369, 2371, 2381,
194 2385, 2387, 2397, 2401, 2403, 2413, 2417, 2419,
195 2429, 2433, 2435, 2445, 2449, 2451, 2480, 2511,
196 2520, 2524, 2526, 2536, 2548, 2557, 2562, 2567,
197 2571, 2573, 2580, 2590, 2599, 2603, 2605, 2615,
198 2627, 2631, 2633, 2664, 2668, 2670, 2680
199 };
201 static const char _svg_path_trans_keys[] = {
202 0, 13, 32, 77, 109, 9, 10, 13,
203 32, 43, 45, 46, 9, 10, 48, 57,
204 13, 32, 43, 45, 46, 9, 10, 48,
205 57, 46, 48, 57, 48, 57, 13, 32,
206 44, 46, 69, 101, 9, 10, 43, 45,
207 48, 57, 13, 32, 44, 46, 9, 10,
208 43, 45, 48, 57, 46, 48, 57, 48,
209 57, 0, 13, 32, 44, 46, 65, 67,
210 69, 72, 76, 77, 81, 83, 84, 86,
211 90, 97, 99, 101, 104, 108, 109, 113,
212 115, 116, 118, 122, 9, 10, 43, 45,
213 48, 57, 0, 13, 32, 44, 46, 65,
214 67, 72, 76, 77, 81, 83, 84, 86,
215 90, 97, 99, 104, 108, 109, 113, 115,
216 116, 118, 122, 9, 10, 43, 45, 48,
217 57, 46, 48, 57, 48, 57, 13, 32,
218 44, 46, 69, 101, 9, 10, 43, 45,
219 48, 57, 13, 32, 44, 46, 9, 10,
220 43, 45, 48, 57, 46, 48, 57, 48,
221 57, 0, 13, 32, 44, 46, 65, 67,
222 69, 72, 76, 77, 81, 83, 84, 86,
223 90, 97, 99, 101, 104, 108, 109, 113,
224 115, 116, 118, 122, 9, 10, 43, 45,
225 48, 57, 13, 32, 43, 45, 46, 9,
226 10, 48, 57, 13, 32, 44, 46, 69,
227 101, 9, 10, 43, 45, 48, 57, 13,
228 32, 43, 45, 46, 9, 10, 48, 57,
229 0, 13, 32, 44, 46, 65, 67, 69,
230 72, 76, 77, 81, 83, 84, 86, 90,
231 97, 99, 101, 104, 108, 109, 113, 115,
232 116, 118, 122, 9, 10, 43, 45, 48,
233 57, 13, 32, 46, 9, 10, 48, 57,
234 13, 32, 46, 9, 10, 48, 57, 48,
235 57, 13, 32, 44, 46, 69, 101, 9,
236 10, 48, 57, 13, 32, 44, 46, 9,
237 10, 48, 57, 13, 32, 46, 9, 10,
238 48, 57, 48, 57, 13, 32, 44, 46,
239 69, 101, 9, 10, 43, 45, 48, 57,
240 13, 32, 44, 46, 9, 10, 43, 45,
241 48, 57, 46, 48, 57, 48, 57, 13,
242 32, 44, 69, 101, 9, 10, 48, 57,
243 13, 32, 44, 48, 49, 9, 10, 13,
244 32, 48, 49, 9, 10, 13, 32, 44,
245 9, 10, 13, 32, 44, 48, 49, 9,
246 10, 13, 32, 48, 49, 9, 10, 13,
247 32, 44, 9, 10, 13, 32, 44, 46,
248 9, 10, 43, 45, 48, 57, 46, 48,
249 57, 48, 57, 13, 32, 44, 46, 69,
250 101, 9, 10, 43, 45, 48, 57, 13,
251 32, 44, 46, 9, 10, 43, 45, 48,
252 57, 46, 48, 57, 48, 57, 0, 13,
253 32, 44, 46, 65, 67, 69, 72, 76,
254 77, 81, 83, 84, 86, 90, 97, 99,
255 101, 104, 108, 109, 113, 115, 116, 118,
256 122, 9, 10, 48, 57, 0, 13, 32,
257 44, 46, 65, 67, 72, 76, 77, 81,
258 83, 84, 86, 90, 97, 99, 104, 108,
259 109, 113, 115, 116, 118, 122, 9, 10,
260 48, 57, 13, 32, 44, 46, 69, 101,
261 9, 10, 48, 57, 43, 45, 48, 57,
262 48, 57, 13, 32, 44, 46, 9, 10,
263 48, 57, 13, 32, 43, 45, 46, 9,
264 10, 48, 57, 13, 32, 43, 45, 46,
265 9, 10, 48, 57, 46, 48, 57, 48,
266 57, 13, 32, 44, 46, 69, 101, 9,
267 10, 43, 45, 48, 57, 13, 32, 44,
268 46, 9, 10, 43, 45, 48, 57, 46,
269 48, 57, 48, 57, 13, 32, 44, 46,
270 69, 101, 9, 10, 43, 45, 48, 57,
271 13, 32, 44, 46, 9, 10, 43, 45,
272 48, 57, 46, 48, 57, 48, 57, 13,
273 32, 44, 46, 69, 101, 9, 10, 43,
274 45, 48, 57, 13, 32, 44, 46, 9,
275 10, 43, 45, 48, 57, 46, 48, 57,
276 48, 57, 13, 32, 44, 46, 69, 101,
277 9, 10, 43, 45, 48, 57, 13, 32,
278 44, 46, 9, 10, 43, 45, 48, 57,
279 46, 48, 57, 48, 57, 13, 32, 44,
280 46, 69, 101, 9, 10, 43, 45, 48,
281 57, 13, 32, 44, 46, 9, 10, 43,
282 45, 48, 57, 46, 48, 57, 48, 57,
283 0, 13, 32, 44, 46, 65, 67, 69,
284 72, 76, 77, 81, 83, 84, 86, 90,
285 97, 99, 101, 104, 108, 109, 113, 115,
286 116, 118, 122, 9, 10, 43, 45, 48,
287 57, 0, 13, 32, 44, 46, 65, 67,
288 72, 76, 77, 81, 83, 84, 86, 90,
289 97, 99, 104, 108, 109, 113, 115, 116,
290 118, 122, 9, 10, 43, 45, 48, 57,
291 13, 32, 44, 46, 69, 101, 9, 10,
292 43, 45, 48, 57, 13, 32, 43, 45,
293 46, 9, 10, 48, 57, 13, 32, 44,
294 46, 69, 101, 9, 10, 43, 45, 48,
295 57, 13, 32, 43, 45, 46, 9, 10,
296 48, 57, 13, 32, 44, 46, 69, 101,
297 9, 10, 43, 45, 48, 57, 13, 32,
298 43, 45, 46, 9, 10, 48, 57, 13,
299 32, 44, 46, 69, 101, 9, 10, 43,
300 45, 48, 57, 13, 32, 43, 45, 46,
301 9, 10, 48, 57, 13, 32, 44, 46,
302 69, 101, 9, 10, 43, 45, 48, 57,
303 13, 32, 43, 45, 46, 9, 10, 48,
304 57, 0, 13, 32, 44, 46, 65, 67,
305 69, 72, 76, 77, 81, 83, 84, 86,
306 90, 97, 99, 101, 104, 108, 109, 113,
307 115, 116, 118, 122, 9, 10, 43, 45,
308 48, 57, 43, 45, 48, 57, 48, 57,
309 0, 13, 32, 44, 46, 65, 67, 72,
310 76, 77, 81, 83, 84, 86, 90, 97,
311 99, 104, 108, 109, 113, 115, 116, 118,
312 122, 9, 10, 43, 45, 48, 57, 13,
313 32, 43, 45, 46, 9, 10, 48, 57,
314 13, 32, 43, 45, 46, 9, 10, 48,
315 57, 46, 48, 57, 48, 57, 0, 13,
316 32, 44, 46, 65, 67, 69, 72, 76,
317 77, 81, 83, 84, 86, 90, 97, 99,
318 101, 104, 108, 109, 113, 115, 116, 118,
319 122, 9, 10, 43, 45, 48, 57, 0,
320 13, 32, 44, 46, 65, 67, 72, 76,
321 77, 81, 83, 84, 86, 90, 97, 99,
322 104, 108, 109, 113, 115, 116, 118, 122,
323 9, 10, 43, 45, 48, 57, 0, 13,
324 32, 44, 46, 65, 67, 69, 72, 76,
325 77, 81, 83, 84, 86, 90, 97, 99,
326 101, 104, 108, 109, 113, 115, 116, 118,
327 122, 9, 10, 43, 45, 48, 57, 43,
328 45, 48, 57, 48, 57, 0, 13, 32,
329 44, 46, 65, 67, 72, 76, 77, 81,
330 83, 84, 86, 90, 97, 99, 104, 108,
331 109, 113, 115, 116, 118, 122, 9, 10,
332 43, 45, 48, 57, 13, 32, 43, 45,
333 46, 9, 10, 48, 57, 13, 32, 43,
334 45, 46, 9, 10, 48, 57, 13, 32,
335 43, 45, 46, 9, 10, 48, 57, 46,
336 48, 57, 48, 57, 13, 32, 44, 46,
337 69, 101, 9, 10, 43, 45, 48, 57,
338 13, 32, 44, 46, 9, 10, 43, 45,
339 48, 57, 46, 48, 57, 48, 57, 13,
340 32, 44, 46, 69, 101, 9, 10, 43,
341 45, 48, 57, 13, 32, 44, 46, 9,
342 10, 43, 45, 48, 57, 46, 48, 57,
343 48, 57, 13, 32, 44, 46, 69, 101,
344 9, 10, 43, 45, 48, 57, 13, 32,
345 44, 46, 9, 10, 43, 45, 48, 57,
346 46, 48, 57, 48, 57, 0, 13, 32,
347 44, 46, 65, 67, 69, 72, 76, 77,
348 81, 83, 84, 86, 90, 97, 99, 101,
349 104, 108, 109, 113, 115, 116, 118, 122,
350 9, 10, 43, 45, 48, 57, 0, 13,
351 32, 44, 46, 65, 67, 72, 76, 77,
352 81, 83, 84, 86, 90, 97, 99, 104,
353 108, 109, 113, 115, 116, 118, 122, 9,
354 10, 43, 45, 48, 57, 13, 32, 44,
355 46, 69, 101, 9, 10, 43, 45, 48,
356 57, 13, 32, 43, 45, 46, 9, 10,
357 48, 57, 13, 32, 44, 46, 69, 101,
358 9, 10, 43, 45, 48, 57, 13, 32,
359 43, 45, 46, 9, 10, 48, 57, 13,
360 32, 44, 46, 69, 101, 9, 10, 43,
361 45, 48, 57, 13, 32, 43, 45, 46,
362 9, 10, 48, 57, 0, 13, 32, 44,
363 46, 65, 67, 69, 72, 76, 77, 81,
364 83, 84, 86, 90, 97, 99, 101, 104,
365 108, 109, 113, 115, 116, 118, 122, 9,
366 10, 43, 45, 48, 57, 43, 45, 48,
367 57, 48, 57, 0, 13, 32, 44, 46,
368 65, 67, 72, 76, 77, 81, 83, 84,
369 86, 90, 97, 99, 104, 108, 109, 113,
370 115, 116, 118, 122, 9, 10, 43, 45,
371 48, 57, 13, 32, 43, 45, 46, 9,
372 10, 48, 57, 13, 32, 43, 45, 46,
373 9, 10, 48, 57, 46, 48, 57, 48,
374 57, 13, 32, 44, 46, 69, 101, 9,
375 10, 43, 45, 48, 57, 13, 32, 44,
376 46, 9, 10, 43, 45, 48, 57, 46,
377 48, 57, 48, 57, 13, 32, 44, 46,
378 69, 101, 9, 10, 43, 45, 48, 57,
379 13, 32, 44, 46, 9, 10, 43, 45,
380 48, 57, 46, 48, 57, 48, 57, 13,
381 32, 44, 46, 69, 101, 9, 10, 43,
382 45, 48, 57, 13, 32, 44, 46, 9,
383 10, 43, 45, 48, 57, 46, 48, 57,
384 48, 57, 0, 13, 32, 44, 46, 65,
385 67, 69, 72, 76, 77, 81, 83, 84,
386 86, 90, 97, 99, 101, 104, 108, 109,
387 113, 115, 116, 118, 122, 9, 10, 43,
388 45, 48, 57, 0, 13, 32, 44, 46,
389 65, 67, 72, 76, 77, 81, 83, 84,
390 86, 90, 97, 99, 104, 108, 109, 113,
391 115, 116, 118, 122, 9, 10, 43, 45,
392 48, 57, 13, 32, 44, 46, 69, 101,
393 9, 10, 43, 45, 48, 57, 13, 32,
394 43, 45, 46, 9, 10, 48, 57, 13,
395 32, 44, 46, 69, 101, 9, 10, 43,
396 45, 48, 57, 13, 32, 43, 45, 46,
397 9, 10, 48, 57, 13, 32, 44, 46,
398 69, 101, 9, 10, 43, 45, 48, 57,
399 13, 32, 43, 45, 46, 9, 10, 48,
400 57, 0, 13, 32, 44, 46, 65, 67,
401 69, 72, 76, 77, 81, 83, 84, 86,
402 90, 97, 99, 101, 104, 108, 109, 113,
403 115, 116, 118, 122, 9, 10, 43, 45,
404 48, 57, 43, 45, 48, 57, 48, 57,
405 0, 13, 32, 44, 46, 65, 67, 72,
406 76, 77, 81, 83, 84, 86, 90, 97,
407 99, 104, 108, 109, 113, 115, 116, 118,
408 122, 9, 10, 43, 45, 48, 57, 13,
409 32, 43, 45, 46, 9, 10, 48, 57,
410 13, 32, 43, 45, 46, 9, 10, 48,
411 57, 46, 48, 57, 48, 57, 13, 32,
412 44, 46, 69, 101, 9, 10, 43, 45,
413 48, 57, 13, 32, 44, 46, 9, 10,
414 43, 45, 48, 57, 46, 48, 57, 48,
415 57, 0, 13, 32, 44, 46, 65, 67,
416 69, 72, 76, 77, 81, 83, 84, 86,
417 90, 97, 99, 101, 104, 108, 109, 113,
418 115, 116, 118, 122, 9, 10, 43, 45,
419 48, 57, 0, 13, 32, 44, 46, 65,
420 67, 72, 76, 77, 81, 83, 84, 86,
421 90, 97, 99, 104, 108, 109, 113, 115,
422 116, 118, 122, 9, 10, 43, 45, 48,
423 57, 13, 32, 44, 46, 69, 101, 9,
424 10, 43, 45, 48, 57, 13, 32, 43,
425 45, 46, 9, 10, 48, 57, 0, 13,
426 32, 44, 46, 65, 67, 69, 72, 76,
427 77, 81, 83, 84, 86, 90, 97, 99,
428 101, 104, 108, 109, 113, 115, 116, 118,
429 122, 9, 10, 43, 45, 48, 57, 43,
430 45, 48, 57, 48, 57, 0, 13, 32,
431 44, 46, 65, 67, 72, 76, 77, 81,
432 83, 84, 86, 90, 97, 99, 104, 108,
433 109, 113, 115, 116, 118, 122, 9, 10,
434 43, 45, 48, 57, 13, 32, 43, 45,
435 46, 9, 10, 48, 57, 13, 32, 43,
436 45, 46, 9, 10, 48, 57, 46, 48,
437 57, 48, 57, 0, 13, 32, 44, 46,
438 65, 67, 69, 72, 76, 77, 81, 83,
439 84, 86, 90, 97, 99, 101, 104, 108,
440 109, 113, 115, 116, 118, 122, 9, 10,
441 43, 45, 48, 57, 0, 13, 32, 44,
442 46, 65, 67, 72, 76, 77, 81, 83,
443 84, 86, 90, 97, 99, 104, 108, 109,
444 113, 115, 116, 118, 122, 9, 10, 43,
445 45, 48, 57, 0, 13, 32, 44, 46,
446 65, 67, 69, 72, 76, 77, 81, 83,
447 84, 86, 90, 97, 99, 101, 104, 108,
448 109, 113, 115, 116, 118, 122, 9, 10,
449 43, 45, 48, 57, 43, 45, 48, 57,
450 48, 57, 0, 13, 32, 44, 46, 65,
451 67, 72, 76, 77, 81, 83, 84, 86,
452 90, 97, 99, 104, 108, 109, 113, 115,
453 116, 118, 122, 9, 10, 43, 45, 48,
454 57, 0, 13, 32, 65, 67, 72, 76,
455 77, 81, 83, 84, 86, 90, 97, 99,
456 104, 108, 109, 113, 115, 116, 118, 122,
457 9, 10, 0, 13, 32, 65, 67, 72,
458 76, 77, 81, 83, 84, 86, 90, 97,
459 99, 104, 108, 109, 113, 115, 116, 118,
460 122, 9, 10, 13, 32, 46, 9, 10,
461 48, 57, 13, 32, 43, 45, 46, 9,
462 10, 48, 57, 13, 32, 43, 45, 46,
463 9, 10, 48, 57, 13, 32, 43, 45,
464 46, 9, 10, 48, 57, 13, 32, 43,
465 45, 46, 9, 10, 48, 57, 13, 32,
466 44, 46, 69, 101, 9, 10, 43, 45,
467 48, 57, 13, 32, 43, 45, 46, 9,
468 10, 48, 57, 0, 13, 32, 44, 46,
469 65, 67, 69, 72, 76, 77, 81, 83,
470 84, 86, 90, 97, 99, 101, 104, 108,
471 109, 113, 115, 116, 118, 122, 9, 10,
472 43, 45, 48, 57, 43, 45, 48, 57,
473 48, 57, 0, 13, 32, 44, 46, 65,
474 67, 72, 76, 77, 81, 83, 84, 86,
475 90, 97, 99, 104, 108, 109, 113, 115,
476 116, 118, 122, 9, 10, 43, 45, 48,
477 57, 13, 32, 43, 45, 46, 9, 10,
478 48, 57, 13, 32, 43, 45, 46, 9,
479 10, 48, 57, 13, 32, 43, 45, 46,
480 9, 10, 48, 57, 13, 32, 43, 45,
481 46, 9, 10, 48, 57, 43, 45, 48,
482 57, 48, 57, 13, 32, 44, 46, 9,
483 10, 43, 45, 48, 57, 43, 45, 48,
484 57, 48, 57, 13, 32, 44, 46, 9,
485 10, 43, 45, 48, 57, 43, 45, 48,
486 57, 48, 57, 13, 32, 44, 46, 9,
487 10, 43, 45, 48, 57, 43, 45, 48,
488 57, 48, 57, 13, 32, 44, 46, 9,
489 10, 43, 45, 48, 57, 43, 45, 48,
490 57, 48, 57, 13, 32, 44, 46, 9,
491 10, 43, 45, 48, 57, 43, 45, 48,
492 57, 48, 57, 13, 32, 44, 46, 9,
493 10, 43, 45, 48, 57, 43, 45, 48,
494 57, 48, 57, 13, 32, 44, 46, 9,
495 10, 43, 45, 48, 57, 43, 45, 48,
496 57, 48, 57, 13, 32, 44, 46, 9,
497 10, 43, 45, 48, 57, 43, 45, 48,
498 57, 48, 57, 13, 32, 44, 46, 9,
499 10, 43, 45, 48, 57, 43, 45, 48,
500 57, 48, 57, 13, 32, 44, 46, 9,
501 10, 43, 45, 48, 57, 43, 45, 48,
502 57, 48, 57, 13, 32, 44, 46, 9,
503 10, 43, 45, 48, 57, 43, 45, 48,
504 57, 48, 57, 13, 32, 44, 46, 9,
505 10, 43, 45, 48, 57, 43, 45, 48,
506 57, 48, 57, 13, 32, 44, 46, 9,
507 10, 43, 45, 48, 57, 43, 45, 48,
508 57, 48, 57, 0, 13, 32, 44, 46,
509 65, 67, 72, 76, 77, 81, 83, 84,
510 86, 90, 97, 99, 104, 108, 109, 113,
511 115, 116, 118, 122, 9, 10, 48, 57,
512 0, 13, 32, 44, 46, 65, 67, 69,
513 72, 76, 77, 81, 83, 84, 86, 90,
514 97, 99, 101, 104, 108, 109, 113, 115,
515 116, 118, 122, 9, 10, 48, 57, 13,
516 32, 43, 45, 46, 9, 10, 48, 57,
517 43, 45, 48, 57, 48, 57, 13, 32,
518 44, 46, 9, 10, 43, 45, 48, 57,
519 13, 32, 44, 46, 69, 101, 9, 10,
520 43, 45, 48, 57, 13, 32, 43, 45,
521 46, 9, 10, 48, 57, 13, 32, 44,
522 9, 10, 13, 32, 44, 9, 10, 43,
523 45, 48, 57, 48, 57, 13, 32, 44,
524 9, 10, 48, 57, 13, 32, 44, 46,
525 69, 101, 9, 10, 48, 57, 13, 32,
526 43, 45, 46, 9, 10, 48, 57, 43,
527 45, 48, 57, 48, 57, 13, 32, 44,
528 46, 9, 10, 43, 45, 48, 57, 13,
529 32, 44, 46, 69, 101, 9, 10, 43,
530 45, 48, 57, 43, 45, 48, 57, 48,
531 57, 0, 13, 32, 44, 46, 65, 67,
532 72, 76, 77, 81, 83, 84, 86, 90,
533 97, 99, 104, 108, 109, 113, 115, 116,
534 118, 122, 9, 10, 43, 45, 48, 57,
535 43, 45, 48, 57, 48, 57, 13, 32,
536 44, 46, 9, 10, 43, 45, 48, 57,
537 0
538 };
540 static const char _svg_path_single_lengths[] = {
541 0, 5, 5, 5, 1, 0, 6, 4,
542 1, 0, 27, 25, 1, 0, 6, 4,
543 1, 0, 27, 5, 6, 5, 27, 3,
544 3, 0, 6, 4, 3, 0, 6, 4,
545 1, 0, 5, 5, 4, 3, 5, 4,
546 3, 4, 1, 0, 6, 4, 1, 0,
547 27, 25, 6, 2, 0, 4, 5, 5,
548 1, 0, 6, 4, 1, 0, 6, 4,
549 1, 0, 6, 4, 1, 0, 6, 4,
550 1, 0, 6, 4, 1, 0, 27, 25,
551 6, 5, 6, 5, 6, 5, 6, 5,
552 6, 5, 27, 2, 0, 25, 5, 5,
553 1, 0, 27, 25, 27, 2, 0, 25,
554 5, 5, 5, 1, 0, 6, 4, 1,
555 0, 6, 4, 1, 0, 6, 4, 1,
556 0, 27, 25, 6, 5, 6, 5, 6,
557 5, 27, 2, 0, 25, 5, 5, 1,
558 0, 6, 4, 1, 0, 6, 4, 1,
559 0, 6, 4, 1, 0, 27, 25, 6,
560 5, 6, 5, 6, 5, 27, 2, 0,
561 25, 5, 5, 1, 0, 6, 4, 1,
562 0, 27, 25, 6, 5, 27, 2, 0,
563 25, 5, 5, 1, 0, 27, 25, 27,
564 2, 0, 25, 23, 23, 3, 5, 5,
565 5, 5, 6, 5, 27, 2, 0, 25,
566 5, 5, 5, 5, 2, 0, 4, 2,
567 0, 4, 2, 0, 4, 2, 0, 4,
568 2, 0, 4, 2, 0, 4, 2, 0,
569 4, 2, 0, 4, 2, 0, 4, 2,
570 0, 4, 2, 0, 4, 2, 0, 4,
571 2, 0, 4, 2, 0, 25, 27, 5,
572 2, 0, 4, 6, 5, 3, 3, 2,
573 0, 3, 6, 5, 2, 0, 4, 6,
574 2, 0, 25, 2, 0, 4, 0
575 };
577 static const char _svg_path_range_lengths[] = {
578 0, 1, 2, 2, 1, 1, 3, 3,
579 1, 1, 3, 3, 1, 1, 3, 3,
580 1, 1, 3, 2, 3, 2, 3, 2,
581 2, 1, 2, 2, 2, 1, 3, 3,
582 1, 1, 2, 1, 1, 1, 1, 1,
583 1, 3, 1, 1, 3, 3, 1, 1,
584 2, 2, 2, 1, 1, 2, 2, 2,
585 1, 1, 3, 3, 1, 1, 3, 3,
586 1, 1, 3, 3, 1, 1, 3, 3,
587 1, 1, 3, 3, 1, 1, 3, 3,
588 3, 2, 3, 2, 3, 2, 3, 2,
589 3, 2, 3, 1, 1, 3, 2, 2,
590 1, 1, 3, 3, 3, 1, 1, 3,
591 2, 2, 2, 1, 1, 3, 3, 1,
592 1, 3, 3, 1, 1, 3, 3, 1,
593 1, 3, 3, 3, 2, 3, 2, 3,
594 2, 3, 1, 1, 3, 2, 2, 1,
595 1, 3, 3, 1, 1, 3, 3, 1,
596 1, 3, 3, 1, 1, 3, 3, 3,
597 2, 3, 2, 3, 2, 3, 1, 1,
598 3, 2, 2, 1, 1, 3, 3, 1,
599 1, 3, 3, 3, 2, 3, 1, 1,
600 3, 2, 2, 1, 1, 3, 3, 3,
601 1, 1, 3, 1, 1, 2, 2, 2,
602 2, 2, 3, 2, 3, 1, 1, 3,
603 2, 2, 2, 2, 1, 1, 3, 1,
604 1, 3, 1, 1, 3, 1, 1, 3,
605 1, 1, 3, 1, 1, 3, 1, 1,
606 3, 1, 1, 3, 1, 1, 3, 1,
607 1, 3, 1, 1, 3, 1, 1, 3,
608 1, 1, 3, 1, 1, 2, 2, 2,
609 1, 1, 3, 3, 2, 1, 1, 1,
610 1, 2, 2, 2, 1, 1, 3, 3,
611 1, 1, 3, 1, 1, 3, 0
612 };
614 static const short _svg_path_index_offsets[] = {
615 0, 0, 7, 15, 23, 26, 28, 38,
616 46, 49, 51, 82, 111, 114, 116, 126,
617 134, 137, 139, 170, 178, 188, 196, 227,
618 233, 239, 241, 250, 257, 263, 265, 275,
619 283, 286, 288, 296, 303, 309, 314, 321,
620 327, 332, 340, 343, 345, 355, 363, 366,
621 368, 398, 426, 435, 439, 441, 448, 456,
622 464, 467, 469, 479, 487, 490, 492, 502,
623 510, 513, 515, 525, 533, 536, 538, 548,
624 556, 559, 561, 571, 579, 582, 584, 615,
625 644, 654, 662, 672, 680, 690, 698, 708,
626 716, 726, 734, 765, 769, 771, 800, 808,
627 816, 819, 821, 852, 881, 912, 916, 918,
628 947, 955, 963, 971, 974, 976, 986, 994,
629 997, 999, 1009, 1017, 1020, 1022, 1032, 1040,
630 1043, 1045, 1076, 1105, 1115, 1123, 1133, 1141,
631 1151, 1159, 1190, 1194, 1196, 1225, 1233, 1241,
632 1244, 1246, 1256, 1264, 1267, 1269, 1279, 1287,
633 1290, 1292, 1302, 1310, 1313, 1315, 1346, 1375,
634 1385, 1393, 1403, 1411, 1421, 1429, 1460, 1464,
635 1466, 1495, 1503, 1511, 1514, 1516, 1526, 1534,
636 1537, 1539, 1570, 1599, 1609, 1617, 1648, 1652,
637 1654, 1683, 1691, 1699, 1702, 1704, 1735, 1764,
638 1795, 1799, 1801, 1830, 1855, 1880, 1886, 1894,
639 1902, 1910, 1918, 1928, 1936, 1967, 1971, 1973,
640 2002, 2010, 2018, 2026, 2034, 2038, 2040, 2048,
641 2052, 2054, 2062, 2066, 2068, 2076, 2080, 2082,
642 2090, 2094, 2096, 2104, 2108, 2110, 2118, 2122,
643 2124, 2132, 2136, 2138, 2146, 2150, 2152, 2160,
644 2164, 2166, 2174, 2178, 2180, 2188, 2192, 2194,
645 2202, 2206, 2208, 2216, 2220, 2222, 2250, 2280,
646 2288, 2292, 2294, 2302, 2312, 2320, 2325, 2330,
647 2334, 2336, 2342, 2351, 2359, 2363, 2365, 2373,
648 2383, 2387, 2389, 2418, 2422, 2424, 2432
649 };
651 static const short _svg_path_indicies[] = {
652 0, 2, 2, 3, 4, 2, 1, 5,
653 5, 6, 6, 7, 5, 8, 1, 9,
654 9, 10, 10, 11, 9, 12, 1, 13,
655 14, 1, 15, 1, 16, 16, 18, 19,
656 20, 20, 16, 17, 15, 1, 21, 21,
657 23, 24, 21, 22, 25, 1, 26, 27,
658 1, 28, 1, 29, 30, 30, 32, 33,
659 34, 35, 36, 37, 38, 39, 40, 41,
660 42, 43, 44, 45, 46, 36, 47, 48,
661 49, 50, 51, 52, 53, 44, 30, 31,
662 28, 1, 0, 54, 54, 56, 57, 59,
663 60, 61, 62, 3, 63, 64, 65, 66,
664 67, 68, 69, 70, 71, 4, 72, 73,
665 74, 75, 67, 54, 55, 58, 1, 76,
666 77, 1, 78, 1, 79, 79, 81, 82,
667 83, 83, 79, 80, 78, 1, 84, 84,
668 86, 87, 84, 85, 88, 1, 89, 90,
669 1, 91, 1, 92, 93, 93, 95, 96,
670 97, 98, 99, 100, 101, 102, 103, 104,
671 105, 106, 107, 108, 109, 99, 110, 111,
672 112, 113, 114, 115, 116, 107, 93, 94,
673 91, 1, 56, 56, 55, 55, 57, 56,
674 58, 1, 79, 79, 81, 78, 83, 83,
675 79, 80, 77, 1, 86, 86, 85, 85,
676 87, 86, 88, 1, 92, 93, 93, 95,
677 91, 97, 98, 99, 100, 101, 102, 103,
678 104, 105, 106, 107, 108, 109, 99, 110,
679 111, 112, 113, 114, 115, 116, 107, 93,
680 94, 90, 1, 117, 117, 118, 117, 119,
681 1, 120, 120, 121, 120, 122, 1, 123,
682 1, 124, 124, 125, 126, 127, 127, 124,
683 123, 1, 128, 128, 129, 130, 128, 131,
684 1, 129, 129, 130, 129, 131, 1, 132,
685 1, 133, 133, 135, 136, 137, 137, 133,
686 134, 132, 1, 138, 138, 140, 141, 138,
687 139, 142, 1, 143, 144, 1, 145, 1,
688 146, 146, 147, 148, 148, 146, 145, 1,
689 149, 149, 150, 151, 152, 149, 1, 150,
690 150, 151, 152, 150, 1, 153, 153, 154,
691 153, 1, 155, 155, 156, 157, 158, 155,
692 1, 156, 156, 157, 158, 156, 1, 159,
693 159, 160, 159, 1, 161, 161, 163, 164,
694 161, 162, 165, 1, 166, 167, 1, 168,
695 1, 169, 169, 171, 172, 173, 173, 169,
696 170, 168, 1, 174, 174, 176, 177, 174,
697 175, 178, 1, 179, 180, 1, 181, 1,
698 182, 183, 183, 184, 185, 186, 187, 188,
699 189, 190, 191, 192, 193, 194, 195, 196,
700 197, 198, 188, 199, 200, 201, 202, 203,
701 204, 205, 196, 183, 181, 1, 0, 206,
702 206, 120, 121, 59, 60, 61, 62, 3,
703 63, 64, 65, 66, 67, 68, 69, 70,
704 71, 4, 72, 73, 74, 75, 67, 206,
705 122, 1, 124, 124, 125, 123, 127, 127,
706 124, 207, 1, 208, 208, 209, 1, 209,
707 1, 124, 124, 125, 126, 124, 209, 1,
708 210, 210, 211, 211, 212, 210, 213, 1,
709 214, 214, 215, 215, 216, 214, 217, 1,
710 218, 219, 1, 220, 1, 221, 221, 223,
711 224, 225, 225, 221, 222, 220, 1, 226,
712 226, 228, 229, 226, 227, 230, 1, 231,
713 232, 1, 233, 1, 234, 234, 236, 237,
714 238, 238, 234, 235, 233, 1, 239, 239,
715 241, 242, 239, 240, 243, 1, 244, 245,
716 1, 246, 1, 247, 247, 249, 250, 251,
717 251, 247, 248, 246, 1, 252, 252, 254,
718 255, 252, 253, 256, 1, 257, 258, 1,
719 259, 1, 260, 260, 262, 263, 264, 264,
720 260, 261, 259, 1, 265, 265, 267, 268,
721 265, 266, 269, 1, 270, 271, 1, 272,
722 1, 273, 273, 275, 276, 277, 277, 273,
723 274, 272, 1, 278, 278, 280, 281, 278,
724 279, 282, 1, 283, 284, 1, 285, 1,
725 286, 287, 287, 289, 290, 291, 292, 293,
726 294, 295, 296, 297, 298, 299, 300, 301,
727 302, 303, 293, 304, 305, 306, 307, 308,
728 309, 310, 301, 287, 288, 285, 1, 0,
729 311, 311, 214, 216, 59, 60, 61, 62,
730 3, 63, 64, 65, 66, 67, 68, 69,
731 70, 71, 4, 72, 73, 74, 75, 67,
732 311, 215, 217, 1, 221, 221, 223, 220,
733 225, 225, 221, 222, 219, 1, 228, 228,
734 227, 227, 229, 228, 230, 1, 234, 234,
735 236, 233, 238, 238, 234, 235, 232, 1,
736 241, 241, 240, 240, 242, 241, 243, 1,
737 247, 247, 249, 246, 251, 251, 247, 248,
738 245, 1, 254, 254, 253, 253, 255, 254,
739 256, 1, 260, 260, 262, 259, 264, 264,
740 260, 261, 258, 1, 267, 267, 266, 266,
741 268, 267, 269, 1, 273, 273, 275, 272,
742 277, 277, 273, 274, 271, 1, 280, 280,
743 279, 279, 281, 280, 282, 1, 286, 287,
744 287, 289, 285, 291, 292, 293, 294, 295,
745 296, 297, 298, 299, 300, 301, 302, 303,
746 293, 304, 305, 306, 307, 308, 309, 310,
747 301, 287, 288, 284, 1, 312, 312, 313,
748 1, 313, 1, 286, 287, 287, 289, 290,
749 291, 292, 294, 295, 296, 297, 298, 299,
750 300, 301, 302, 303, 304, 305, 306, 307,
751 308, 309, 310, 301, 287, 288, 313, 1,
752 314, 314, 315, 315, 316, 314, 317, 1,
753 318, 318, 319, 319, 320, 318, 321, 1,
754 322, 323, 1, 324, 1, 325, 326, 326,
755 328, 329, 330, 331, 332, 333, 334, 335,
756 336, 337, 338, 339, 340, 341, 342, 332,
757 343, 344, 345, 346, 347, 348, 349, 340,
758 326, 327, 324, 1, 0, 350, 350, 318,
759 320, 59, 60, 61, 62, 3, 63, 64,
760 65, 66, 67, 68, 69, 70, 71, 4,
761 72, 73, 74, 75, 67, 350, 319, 321,
762 1, 325, 326, 326, 328, 324, 330, 331,
763 332, 333, 334, 335, 336, 337, 338, 339,
764 340, 341, 342, 332, 343, 344, 345, 346,
765 347, 348, 349, 340, 326, 327, 323, 1,
766 351, 351, 352, 1, 352, 1, 325, 326,
767 326, 328, 329, 330, 331, 333, 334, 335,
768 336, 337, 338, 339, 340, 341, 342, 343,
769 344, 345, 346, 347, 348, 349, 340, 326,
770 327, 352, 1, 353, 353, 354, 354, 355,
771 353, 356, 1, 357, 357, 358, 358, 359,
772 357, 360, 1, 361, 361, 362, 362, 363,
773 361, 364, 1, 365, 366, 1, 367, 1,
774 368, 368, 370, 371, 372, 372, 368, 369,
775 367, 1, 373, 373, 375, 376, 373, 374,
776 377, 1, 378, 379, 1, 380, 1, 381,
777 381, 383, 384, 385, 385, 381, 382, 380,
778 1, 386, 386, 388, 389, 386, 387, 390,
779 1, 391, 392, 1, 393, 1, 394, 394,
780 396, 397, 398, 398, 394, 395, 393, 1,
781 399, 399, 401, 402, 399, 400, 403, 1,
782 404, 405, 1, 406, 1, 407, 408, 408,
783 410, 411, 412, 413, 414, 415, 416, 417,
784 418, 419, 420, 421, 422, 423, 424, 414,
785 425, 426, 427, 428, 429, 430, 431, 422,
786 408, 409, 406, 1, 0, 432, 432, 361,
787 363, 59, 60, 61, 62, 3, 63, 64,
788 65, 66, 67, 68, 69, 70, 71, 4,
789 72, 73, 74, 75, 67, 432, 362, 364,
790 1, 368, 368, 370, 367, 372, 372, 368,
791 369, 366, 1, 375, 375, 374, 374, 376,
792 375, 377, 1, 381, 381, 383, 380, 385,
793 385, 381, 382, 379, 1, 388, 388, 387,
794 387, 389, 388, 390, 1, 394, 394, 396,
795 393, 398, 398, 394, 395, 392, 1, 401,
796 401, 400, 400, 402, 401, 403, 1, 407,
797 408, 408, 410, 406, 412, 413, 414, 415,
798 416, 417, 418, 419, 420, 421, 422, 423,
799 424, 414, 425, 426, 427, 428, 429, 430,
800 431, 422, 408, 409, 405, 1, 433, 433,
801 434, 1, 434, 1, 407, 408, 408, 410,
802 411, 412, 413, 415, 416, 417, 418, 419,
803 420, 421, 422, 423, 424, 425, 426, 427,
804 428, 429, 430, 431, 422, 408, 409, 434,
805 1, 435, 435, 436, 436, 437, 435, 438,
806 1, 439, 439, 440, 440, 441, 439, 442,
807 1, 443, 444, 1, 445, 1, 446, 446,
808 448, 449, 450, 450, 446, 447, 445, 1,
809 451, 451, 453, 454, 451, 452, 455, 1,
810 456, 457, 1, 458, 1, 459, 459, 461,
811 462, 463, 463, 459, 460, 458, 1, 464,
812 464, 466, 467, 464, 465, 468, 1, 469,
813 470, 1, 471, 1, 472, 472, 474, 475,
814 476, 476, 472, 473, 471, 1, 477, 477,
815 479, 480, 477, 478, 481, 1, 482, 483,
816 1, 484, 1, 485, 486, 486, 488, 489,
817 490, 491, 492, 493, 494, 495, 496, 497,
818 498, 499, 500, 501, 502, 492, 503, 504,
819 505, 506, 507, 508, 509, 500, 486, 487,
820 484, 1, 0, 510, 510, 439, 441, 59,
821 60, 61, 62, 3, 63, 64, 65, 66,
822 67, 68, 69, 70, 71, 4, 72, 73,
823 74, 75, 67, 510, 440, 442, 1, 446,
824 446, 448, 445, 450, 450, 446, 447, 444,
825 1, 453, 453, 452, 452, 454, 453, 455,
826 1, 459, 459, 461, 458, 463, 463, 459,
827 460, 457, 1, 466, 466, 465, 465, 467,
828 466, 468, 1, 472, 472, 474, 471, 476,
829 476, 472, 473, 470, 1, 479, 479, 478,
830 478, 480, 479, 481, 1, 485, 486, 486,
831 488, 484, 490, 491, 492, 493, 494, 495,
832 496, 497, 498, 499, 500, 501, 502, 492,
833 503, 504, 505, 506, 507, 508, 509, 500,
834 486, 487, 483, 1, 511, 511, 512, 1,
835 512, 1, 485, 486, 486, 488, 489, 490,
836 491, 493, 494, 495, 496, 497, 498, 499,
837 500, 501, 502, 503, 504, 505, 506, 507,
838 508, 509, 500, 486, 487, 512, 1, 513,
839 513, 514, 514, 515, 513, 516, 1, 517,
840 517, 518, 518, 519, 517, 520, 1, 521,
841 522, 1, 523, 1, 524, 524, 526, 527,
842 528, 528, 524, 525, 523, 1, 529, 529,
843 531, 532, 529, 530, 533, 1, 534, 535,
844 1, 536, 1, 537, 538, 538, 540, 541,
845 542, 543, 544, 545, 546, 547, 548, 549,
846 550, 551, 552, 553, 554, 544, 555, 556,
847 557, 558, 559, 560, 561, 552, 538, 539,
848 536, 1, 0, 562, 562, 517, 519, 59,
849 60, 61, 62, 3, 63, 64, 65, 66,
850 67, 68, 69, 70, 71, 4, 72, 73,
851 74, 75, 67, 562, 518, 520, 1, 524,
852 524, 526, 523, 528, 528, 524, 525, 522,
853 1, 531, 531, 530, 530, 532, 531, 533,
854 1, 537, 538, 538, 540, 536, 542, 543,
855 544, 545, 546, 547, 548, 549, 550, 551,
856 552, 553, 554, 544, 555, 556, 557, 558,
857 559, 560, 561, 552, 538, 539, 535, 1,
858 563, 563, 564, 1, 564, 1, 537, 538,
859 538, 540, 541, 542, 543, 545, 546, 547,
860 548, 549, 550, 551, 552, 553, 554, 555,
861 556, 557, 558, 559, 560, 561, 552, 538,
862 539, 564, 1, 565, 565, 566, 566, 567,
863 565, 568, 1, 569, 569, 570, 570, 571,
864 569, 572, 1, 573, 574, 1, 575, 1,
865 576, 577, 577, 579, 580, 581, 582, 583,
866 584, 585, 586, 587, 588, 589, 590, 591,
867 592, 593, 583, 594, 595, 596, 597, 598,
868 599, 600, 591, 577, 578, 575, 1, 0,
869 601, 601, 569, 571, 59, 60, 61, 62,
870 3, 63, 64, 65, 66, 67, 68, 69,
871 70, 71, 4, 72, 73, 74, 75, 67,
872 601, 570, 572, 1, 576, 577, 577, 579,
873 575, 581, 582, 583, 584, 585, 586, 587,
874 588, 589, 590, 591, 592, 593, 583, 594,
875 595, 596, 597, 598, 599, 600, 591, 577,
876 578, 574, 1, 602, 602, 603, 1, 603,
877 1, 576, 577, 577, 579, 580, 581, 582,
878 584, 585, 586, 587, 588, 589, 590, 591,
879 592, 593, 594, 595, 596, 597, 598, 599,
880 600, 591, 577, 578, 603, 1, 604, 605,
881 605, 606, 607, 608, 609, 610, 611, 612,
882 613, 614, 615, 616, 617, 618, 619, 620,
883 621, 622, 623, 624, 615, 605, 1, 0,
884 625, 625, 59, 60, 61, 62, 3, 63,
885 64, 65, 66, 67, 68, 69, 70, 71,
886 4, 72, 73, 74, 75, 67, 625, 1,
887 626, 626, 627, 626, 628, 1, 629, 629,
888 630, 630, 631, 629, 632, 1, 633, 633,
889 634, 634, 635, 633, 636, 1, 637, 637,
890 638, 638, 639, 637, 640, 1, 641, 641,
891 642, 642, 643, 641, 644, 1, 16, 16,
892 18, 15, 20, 20, 16, 17, 14, 1,
893 23, 23, 22, 22, 24, 23, 25, 1,
894 29, 30, 30, 32, 28, 34, 35, 36,
895 37, 38, 39, 40, 41, 42, 43, 44,
896 45, 46, 36, 47, 48, 49, 50, 51,
897 52, 53, 44, 30, 31, 27, 1, 645,
898 645, 646, 1, 646, 1, 29, 30, 30,
899 32, 33, 34, 35, 37, 38, 39, 40,
900 41, 42, 43, 44, 45, 46, 47, 48,
901 49, 50, 51, 52, 53, 44, 30, 31,
902 646, 1, 647, 647, 648, 648, 649, 647,
903 650, 1, 651, 651, 652, 652, 653, 651,
904 654, 1, 655, 655, 656, 656, 657, 655,
905 658, 1, 659, 659, 660, 660, 661, 659,
906 662, 1, 663, 663, 664, 1, 664, 1,
907 16, 16, 18, 19, 16, 17, 664, 1,
908 665, 665, 666, 1, 666, 1, 524, 524,
909 526, 527, 524, 525, 666, 1, 667, 667,
910 668, 1, 668, 1, 472, 472, 474, 475,
911 472, 473, 668, 1, 669, 669, 670, 1,
912 670, 1, 459, 459, 461, 462, 459, 460,
913 670, 1, 671, 671, 672, 1, 672, 1,
914 446, 446, 448, 449, 446, 447, 672, 1,
915 673, 673, 674, 1, 674, 1, 394, 394,
916 396, 397, 394, 395, 674, 1, 675, 675,
917 676, 1, 676, 1, 381, 381, 383, 384,
918 381, 382, 676, 1, 677, 677, 678, 1,
919 678, 1, 368, 368, 370, 371, 368, 369,
920 678, 1, 679, 679, 680, 1, 680, 1,
921 273, 273, 275, 276, 273, 274, 680, 1,
922 681, 681, 682, 1, 682, 1, 260, 260,
923 262, 263, 260, 261, 682, 1, 683, 683,
924 684, 1, 684, 1, 247, 247, 249, 250,
925 247, 248, 684, 1, 685, 685, 686, 1,
926 686, 1, 234, 234, 236, 237, 234, 235,
927 686, 1, 687, 687, 688, 1, 688, 1,
928 221, 221, 223, 224, 221, 222, 688, 1,
929 689, 689, 690, 1, 690, 1, 182, 183,
930 183, 184, 185, 186, 187, 189, 190, 191,
931 192, 193, 194, 195, 196, 197, 198, 199,
932 200, 201, 202, 203, 204, 205, 196, 183,
933 690, 1, 182, 183, 183, 184, 181, 186,
934 187, 188, 189, 190, 191, 192, 193, 194,
935 195, 196, 197, 198, 188, 199, 200, 201,
936 202, 203, 204, 205, 196, 183, 180, 1,
937 176, 176, 175, 175, 177, 176, 178, 1,
938 691, 691, 692, 1, 692, 1, 169, 169,
939 171, 172, 169, 170, 692, 1, 169, 169,
940 171, 168, 173, 173, 169, 170, 167, 1,
941 163, 163, 162, 162, 164, 163, 165, 1,
942 693, 693, 694, 693, 1, 695, 695, 696,
943 695, 1, 697, 697, 698, 1, 698, 1,
944 146, 146, 147, 146, 698, 1, 146, 146,
945 147, 145, 148, 148, 146, 144, 1, 140,
946 140, 139, 139, 141, 140, 142, 1, 699,
947 699, 700, 1, 700, 1, 133, 133, 135,
948 136, 133, 134, 700, 1, 133, 133, 135,
949 132, 137, 137, 133, 134, 701, 1, 702,
950 702, 703, 1, 703, 1, 92, 93, 93,
951 95, 96, 97, 98, 100, 101, 102, 103,
952 104, 105, 106, 107, 108, 109, 110, 111,
953 112, 113, 114, 115, 116, 107, 93, 94,
954 703, 1, 704, 704, 705, 1, 705, 1,
955 79, 79, 81, 82, 79, 80, 705, 1,
956 1, 0
957 };
959 static const short _svg_path_trans_targs_wi[] = {
960 270, 0, 1, 2, 193, 3, 4, 5,
961 194, 3, 4, 5, 194, 5, 194, 6,
962 7, 8, 195, 9, 204, 7, 8, 195,
963 9, 196, 9, 196, 10, 270, 11, 12,
964 19, 13, 23, 54, 197, 94, 104, 2,
965 105, 133, 161, 177, 187, 189, 190, 191,
966 192, 193, 200, 201, 202, 203, 11, 12,
967 19, 13, 20, 23, 54, 94, 104, 105,
968 133, 161, 177, 187, 189, 190, 191, 192,
969 200, 201, 202, 203, 13, 20, 14, 15,
970 16, 21, 17, 267, 15, 16, 21, 17,
971 22, 17, 22, 18, 270, 11, 12, 19,
972 13, 23, 54, 264, 94, 104, 2, 105,
973 133, 161, 177, 187, 189, 190, 191, 192,
974 193, 200, 201, 202, 203, 24, 25, 50,
975 24, 25, 50, 26, 27, 28, 29, 51,
976 27, 28, 29, 263, 30, 31, 32, 259,
977 33, 260, 31, 32, 259, 33, 258, 33,
978 258, 34, 35, 36, 255, 35, 36, 37,
979 254, 38, 39, 38, 39, 40, 253, 41,
980 252, 41, 42, 252, 43, 251, 43, 251,
981 44, 45, 46, 247, 47, 248, 45, 46,
982 247, 47, 246, 47, 246, 48, 270, 49,
983 24, 25, 23, 54, 243, 94, 104, 2,
984 105, 133, 161, 177, 187, 189, 190, 191,
985 192, 193, 200, 201, 202, 203, 49, 50,
986 52, 53, 55, 56, 57, 80, 55, 56,
987 57, 80, 57, 80, 58, 59, 60, 81,
988 61, 240, 59, 60, 81, 61, 82, 61,
989 82, 62, 63, 64, 83, 65, 237, 63,
990 64, 83, 65, 84, 65, 84, 66, 67,
991 68, 85, 69, 234, 67, 68, 85, 69,
992 86, 69, 86, 70, 71, 72, 87, 73,
993 231, 71, 72, 87, 73, 88, 73, 88,
994 74, 75, 76, 89, 77, 228, 75, 76,
995 89, 77, 90, 77, 90, 78, 270, 79,
996 56, 55, 57, 23, 54, 91, 94, 104,
997 2, 105, 133, 161, 177, 187, 189, 190,
998 191, 192, 193, 200, 201, 202, 203, 79,
999 92, 93, 95, 96, 97, 100, 95, 96,
1000 97, 100, 97, 100, 98, 270, 99, 96,
1001 95, 97, 23, 54, 101, 94, 104, 2,
1002 105, 133, 161, 177, 187, 189, 190, 191,
1003 192, 193, 200, 201, 202, 203, 99, 102,
1004 103, 19, 12, 13, 20, 106, 107, 108,
1005 123, 106, 107, 108, 123, 108, 123, 109,
1006 110, 111, 124, 112, 225, 110, 111, 124,
1007 112, 125, 112, 125, 113, 114, 115, 126,
1008 116, 222, 114, 115, 126, 116, 127, 116,
1009 127, 117, 118, 119, 128, 120, 219, 118,
1010 119, 128, 120, 129, 120, 129, 121, 270,
1011 122, 107, 106, 108, 23, 54, 130, 94,
1012 104, 2, 105, 133, 161, 177, 187, 189,
1013 190, 191, 192, 193, 200, 201, 202, 203,
1014 122, 131, 132, 134, 135, 136, 151, 134,
1015 135, 136, 151, 136, 151, 137, 138, 139,
1016 152, 140, 216, 138, 139, 152, 140, 153,
1017 140, 153, 141, 142, 143, 154, 144, 213,
1018 142, 143, 154, 144, 155, 144, 155, 145,
1019 146, 147, 156, 148, 210, 146, 147, 156,
1020 148, 157, 148, 157, 149, 270, 150, 135,
1021 134, 136, 23, 54, 158, 94, 104, 2,
1022 105, 133, 161, 177, 187, 189, 190, 191,
1023 192, 193, 200, 201, 202, 203, 150, 159,
1024 160, 162, 163, 164, 171, 162, 163, 164,
1025 171, 164, 171, 165, 166, 167, 172, 168,
1026 207, 166, 167, 172, 168, 173, 168, 173,
1027 169, 270, 170, 163, 162, 164, 23, 54,
1028 174, 94, 104, 2, 105, 133, 161, 177,
1029 187, 189, 190, 191, 192, 193, 200, 201,
1030 202, 203, 170, 175, 176, 178, 179, 180,
1031 183, 178, 179, 180, 183, 180, 183, 181,
1032 270, 182, 179, 178, 180, 23, 54, 184,
1033 94, 104, 2, 105, 133, 161, 177, 187,
1034 189, 190, 191, 192, 193, 200, 201, 202,
1035 203, 182, 185, 186, 270, 188, 23, 54,
1036 94, 104, 2, 105, 133, 161, 177, 187,
1037 189, 190, 191, 192, 193, 200, 201, 202,
1038 203, 188, 24, 25, 50, 55, 56, 57,
1039 80, 95, 96, 97, 100, 19, 12, 13,
1040 20, 3, 4, 5, 194, 198, 199, 106,
1041 107, 108, 123, 134, 135, 136, 151, 162,
1042 163, 164, 171, 178, 179, 180, 183, 205,
1043 206, 208, 209, 211, 212, 214, 215, 217,
1044 218, 220, 221, 223, 224, 226, 227, 229,
1045 230, 232, 233, 235, 236, 238, 239, 241,
1046 242, 244, 245, 249, 250, 41, 252, 38,
1047 39, 256, 257, 261, 262, 263, 265, 266,
1048 268, 269
1049 };
1051 static const char _svg_path_trans_actions_wi[] = {
1052 15, 0, 0, 0, 0, 9, 47, 47,
1053 47, 0, 1, 1, 1, 0, 0, 0,
1054 3, 17, 3, 17, 0, 0, 1, 0,
1055 1, 1, 0, 0, 0, 60, 20, 56,
1056 20, 56, 20, 20, 0, 20, 20, 20,
1057 20, 20, 20, 20, 20, 20, 20, 20,
1058 20, 20, 20, 20, 20, 20, 0, 1,
1059 0, 1, 1, 0, 0, 0, 0, 0,
1060 0, 0, 0, 0, 0, 0, 0, 0,
1061 0, 0, 0, 0, 0, 0, 0, 3,
1062 17, 3, 17, 0, 0, 1, 0, 1,
1063 1, 0, 0, 0, 68, 23, 64, 23,
1064 64, 23, 23, 0, 23, 23, 23, 23,
1065 23, 23, 23, 23, 23, 23, 23, 23,
1066 23, 23, 23, 23, 23, 9, 47, 47,
1067 0, 1, 1, 0, 3, 3, 17, 0,
1068 0, 0, 1, 1, 0, 3, 17, 3,
1069 17, 0, 0, 1, 0, 1, 1, 0,
1070 0, 0, 3, 3, 0, 0, 0, 0,
1071 0, 7, 7, 0, 0, 0, 0, 7,
1072 7, 0, 1, 0, 1, 1, 0, 0,
1073 0, 3, 17, 3, 17, 0, 0, 1,
1074 0, 1, 1, 0, 0, 0, 124, 44,
1075 44, 120, 44, 44, 0, 44, 44, 44,
1076 44, 44, 44, 44, 44, 44, 44, 44,
1077 44, 44, 44, 44, 44, 44, 0, 0,
1078 0, 0, 9, 47, 47, 47, 0, 1,
1079 1, 1, 0, 0, 0, 3, 17, 3,
1080 17, 0, 0, 1, 0, 1, 1, 0,
1081 0, 0, 3, 17, 3, 17, 0, 0,
1082 1, 0, 1, 1, 0, 0, 0, 3,
1083 17, 3, 17, 0, 0, 1, 0, 1,
1084 1, 0, 0, 0, 3, 17, 3, 17,
1085 0, 0, 1, 0, 1, 1, 0, 0,
1086 0, 3, 17, 3, 17, 0, 0, 1,
1087 0, 1, 1, 0, 0, 0, 92, 32,
1088 88, 32, 88, 32, 32, 0, 32, 32,
1089 32, 32, 32, 32, 32, 32, 32, 32,
1090 32, 32, 32, 32, 32, 32, 32, 0,
1091 0, 0, 9, 47, 47, 47, 0, 1,
1092 1, 1, 0, 0, 0, 76, 26, 72,
1093 26, 72, 26, 26, 0, 26, 26, 26,
1094 26, 26, 26, 26, 26, 26, 26, 26,
1095 26, 26, 26, 26, 26, 26, 0, 0,
1096 0, 9, 47, 47, 47, 9, 47, 47,
1097 47, 0, 1, 1, 1, 0, 0, 0,
1098 3, 17, 3, 17, 0, 0, 1, 0,
1099 1, 1, 0, 0, 0, 3, 17, 3,
1100 17, 0, 0, 1, 0, 1, 1, 0,
1101 0, 0, 3, 17, 3, 17, 0, 0,
1102 1, 0, 1, 1, 0, 0, 0, 108,
1103 38, 104, 38, 104, 38, 38, 0, 38,
1104 38, 38, 38, 38, 38, 38, 38, 38,
1105 38, 38, 38, 38, 38, 38, 38, 38,
1106 0, 0, 0, 9, 47, 47, 47, 0,
1107 1, 1, 1, 0, 0, 0, 3, 17,
1108 3, 17, 0, 0, 1, 0, 1, 1,
1109 0, 0, 0, 3, 17, 3, 17, 0,
1110 0, 1, 0, 1, 1, 0, 0, 0,
1111 3, 17, 3, 17, 0, 0, 1, 0,
1112 1, 1, 0, 0, 0, 100, 35, 96,
1113 35, 96, 35, 35, 0, 35, 35, 35,
1114 35, 35, 35, 35, 35, 35, 35, 35,
1115 35, 35, 35, 35, 35, 35, 0, 0,
1116 0, 9, 47, 47, 47, 0, 1, 1,
1117 1, 0, 0, 0, 3, 17, 3, 17,
1118 0, 0, 1, 0, 1, 1, 0, 0,
1119 0, 116, 41, 112, 41, 112, 41, 41,
1120 0, 41, 41, 41, 41, 41, 41, 41,
1121 41, 41, 41, 41, 41, 41, 41, 41,
1122 41, 41, 0, 0, 0, 9, 47, 47,
1123 47, 0, 1, 1, 1, 0, 0, 0,
1124 84, 29, 80, 29, 80, 29, 29, 0,
1125 29, 29, 29, 29, 29, 29, 29, 29,
1126 29, 29, 29, 29, 29, 29, 29, 29,
1127 29, 0, 0, 0, 53, 13, 13, 13,
1128 13, 13, 13, 13, 13, 13, 13, 13,
1129 13, 13, 13, 13, 13, 13, 13, 13,
1130 13, 0, 11, 50, 50, 11, 50, 50,
1131 50, 11, 50, 50, 50, 11, 50, 50,
1132 50, 11, 50, 50, 50, 0, 0, 11,
1133 50, 50, 50, 11, 50, 50, 50, 11,
1134 50, 50, 50, 11, 50, 50, 50, 0,
1135 0, 0, 0, 0, 0, 0, 0, 0,
1136 0, 0, 0, 0, 0, 0, 0, 0,
1137 0, 0, 0, 0, 0, 0, 0, 0,
1138 0, 0, 0, 0, 0, 5, 5, 5,
1139 5, 0, 0, 0, 0, 0, 0, 0,
1140 0, 0
1141 };
1143 static const int svg_path_start = 1;
1144 static const int svg_path_first_final = 270;
1146 static const int svg_path_en_main = 1;
1148 #line 144 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1151 void Parser::parse(char const *str)
1152 throw(SVGPathParseError)
1153 {
1154 char const *p = str;
1155 char const *start = NULL;
1156 int cs;
1158 _reset();
1161 #line 1162 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1162 {
1163 cs = svg_path_start;
1164 }
1166 #line 1167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1167 {
1168 int _klen;
1169 unsigned int _trans;
1170 const char *_acts;
1171 unsigned int _nacts;
1172 const char *_keys;
1174 if ( cs == 0 )
1175 goto _out;
1176 _resume:
1177 _keys = _svg_path_trans_keys + _svg_path_key_offsets[cs];
1178 _trans = _svg_path_index_offsets[cs];
1180 _klen = _svg_path_single_lengths[cs];
1181 if ( _klen > 0 ) {
1182 const char *_lower = _keys;
1183 const char *_mid;
1184 const char *_upper = _keys + _klen - 1;
1185 while (1) {
1186 if ( _upper < _lower )
1187 break;
1189 _mid = _lower + ((_upper-_lower) >> 1);
1190 if ( (*p) < *_mid )
1191 _upper = _mid - 1;
1192 else if ( (*p) > *_mid )
1193 _lower = _mid + 1;
1194 else {
1195 _trans += (_mid - _keys);
1196 goto _match;
1197 }
1198 }
1199 _keys += _klen;
1200 _trans += _klen;
1201 }
1203 _klen = _svg_path_range_lengths[cs];
1204 if ( _klen > 0 ) {
1205 const char *_lower = _keys;
1206 const char *_mid;
1207 const char *_upper = _keys + (_klen<<1) - 2;
1208 while (1) {
1209 if ( _upper < _lower )
1210 break;
1212 _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1213 if ( (*p) < _mid[0] )
1214 _upper = _mid - 2;
1215 else if ( (*p) > _mid[1] )
1216 _lower = _mid + 2;
1217 else {
1218 _trans += ((_mid - _keys)>>1);
1219 goto _match;
1220 }
1221 }
1222 _trans += _klen;
1223 }
1225 _match:
1226 _trans = _svg_path_indicies[_trans];
1227 cs = _svg_path_trans_targs_wi[_trans];
1229 if ( _svg_path_trans_actions_wi[_trans] == 0 )
1230 goto _again;
1232 _acts = _svg_path_actions + _svg_path_trans_actions_wi[_trans];
1233 _nacts = (unsigned int) *_acts++;
1234 while ( _nacts-- > 0 )
1235 {
1236 switch ( *_acts++ )
1237 {
1238 case 0:
1239 #line 156 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1240 {
1241 start = p;
1242 }
1243 break;
1244 case 1:
1245 #line 160 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1246 {
1247 char const *end=p;
1248 std::string buf(start, end);
1249 _push(g_ascii_strtod(buf.c_str(), NULL));
1250 start = NULL;
1251 }
1252 break;
1253 case 2:
1254 #line 167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1255 {
1256 _push(1.0);
1257 }
1258 break;
1259 case 3:
1260 #line 171 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1261 {
1262 _push(0.0);
1263 }
1264 break;
1265 case 4:
1266 #line 175 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1267 {
1268 _absolute = true;
1269 }
1270 break;
1271 case 5:
1272 #line 179 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1273 {
1274 _absolute = false;
1275 }
1276 break;
1277 case 6:
1278 #line 183 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1279 {
1280 _moveTo(_pop_point());
1281 }
1282 break;
1283 case 7:
1284 #line 187 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1285 {
1286 _lineTo(_pop_point());
1287 }
1288 break;
1289 case 8:
1290 #line 191 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1291 {
1292 _hlineTo(Point(_pop_coord(X), _current[Y]));
1293 }
1294 break;
1295 case 9:
1296 #line 195 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1297 {
1298 _vlineTo(Point(_current[X], _pop_coord(Y)));
1299 }
1300 break;
1301 case 10:
1302 #line 199 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1303 {
1304 Point p = _pop_point();
1305 Point c1 = _pop_point();
1306 Point c0 = _pop_point();
1307 _curveTo(c0, c1, p);
1308 }
1309 break;
1310 case 11:
1311 #line 206 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1312 {
1313 Point p = _pop_point();
1314 Point c1 = _pop_point();
1315 _curveTo(_cubic_tangent, c1, p);
1316 }
1317 break;
1318 case 12:
1319 #line 212 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1320 {
1321 Point p = _pop_point();
1322 Point c = _pop_point();
1323 _quadTo(c, p);
1324 }
1325 break;
1326 case 13:
1327 #line 218 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1328 {
1329 Point p = _pop_point();
1330 _quadTo(_quad_tangent, p);
1331 }
1332 break;
1333 case 14:
1334 #line 223 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1335 {
1336 Point point = _pop_point();
1337 bool sweep = _pop_flag();
1338 bool large_arc = _pop_flag();
1339 double angle = deg_to_rad(_pop());
1340 double ry = _pop();
1341 double rx = _pop();
1343 _arcTo(rx, ry, angle, large_arc, sweep, point);
1344 }
1345 break;
1346 case 15:
1347 #line 234 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1348 {
1349 _closePath();
1350 }
1351 break;
1352 case 16:
1353 #line 370 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1354 {goto _out;}
1355 break;
1356 #line 1357 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1357 }
1358 }
1360 _again:
1361 if ( cs == 0 )
1362 goto _out;
1363 p += 1;
1364 goto _resume;
1365 _out: {}
1366 }
1367 #line 380 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1370 if ( cs < svg_path_first_final ) {
1371 throw SVGPathParseError();
1372 }
1373 }
1375 }
1377 void parse_svg_path(char const *str, SVGPathSink &sink)
1378 throw(SVGPathParseError)
1379 {
1380 Parser parser(sink);
1381 parser.parse(str);
1382 sink.finish();
1383 }
1385 }
1387 /*
1388 Local Variables:
1389 mode:c++
1390 c-file-style:"stroustrup"
1391 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
1392 indent-tabs-mode:nil
1393 fill-column:99
1394 End:
1395 */
1396 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :