Code

Update to 2geom rev. 1538
[inkscape.git] / src / 2geom / svg-path-parser.cpp
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     }
99     
100     void _hlineTo(Point p) {
101         _quad_tangent = _cubic_tangent = _current = p;
102         _sink.hlineTo(p[Geom::X]);
103     }
104     
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
159         
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)
1152     char const *p = str;
1153     char const *start = NULL;
1154     int cs;
1156     _reset();
1158     
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     }
1375 void parse_svg_path(char const *str, SVGPathSink &sink)
1376 throw(SVGPathParseError)
1378     Parser parser(sink);
1379     parser.parse(str);
1380     sink.finish();
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 :