Code

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