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