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