~ubuntu-branches/debian/experimental/inkscape/experimental

« back to all changes in this revision

Viewing changes to src/2geom/svg-path-parser.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Thomas Viehmann
  • Date: 2008-09-09 23:29:02 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20080909232902-c50iujhk1w79u8e7
Tags: 0.46-2.1
* Non-maintainer upload.
* Add upstream patch fixing a crash in the open dialog
  in the zh_CN.utf8 locale. Closes: #487623.
  Thanks to Luca Bruno for the patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#line 1 "/home/mental/trees/lib2geom/src/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
 */
 
32
 
 
33
 
 
34
#include <cmath>
 
35
#include <vector>
 
36
#include <glib.h>
 
37
 
 
38
#include "point.h"
 
39
 
 
40
#include "svg-path-parser.h"
 
41
 
 
42
namespace Geom {
 
43
 
 
44
namespace {
 
45
 
 
46
class Parser {
 
47
public:
 
48
    Parser(SVGPathSink &sink) : _sink(sink) {}
 
49
 
 
50
    void parse(char const *str) throw(SVGPathParseError);
 
51
 
 
52
private:
 
53
    bool _absolute;
 
54
    Point _current;
 
55
    Point _initial;
 
56
    Point _cubic_tangent;
 
57
    Point _quad_tangent;
 
58
    std::vector<double> _params;
 
59
    SVGPathSink &_sink;
 
60
 
 
61
    void _reset() {
 
62
        _absolute = false;
 
63
        _current = _initial = Point(0, 0);
 
64
        _quad_tangent = _cubic_tangent = Point(0, 0);
 
65
        _params.clear();
 
66
    }
 
67
 
 
68
    void _push(double value) {
 
69
        _params.push_back(value);
 
70
    }
 
71
 
 
72
    double _pop() {
 
73
        double value = _params.back();
 
74
        _params.pop_back();
 
75
        return value;
 
76
    }
 
77
 
 
78
    bool _pop_flag() {
 
79
        return _pop() != 0.0;
 
80
    }
 
81
 
 
82
    double _pop_coord(Geom::Dim2 axis) {
 
83
        if (_absolute) {
 
84
            return _pop();
 
85
        } else {
 
86
            return _pop() + _current[axis];
 
87
        }
 
88
    }
 
89
 
 
90
    Point _pop_point() {
 
91
        double y = _pop_coord(Geom::Y);
 
92
        double x = _pop_coord(Geom::X);
 
93
        return Point(x, y);
 
94
    }
 
95
 
 
96
    void _moveTo(Point p) {
 
97
        _quad_tangent = _cubic_tangent = _current = _initial = p;
 
98
        _sink.moveTo(p);
 
99
    }
 
100
 
 
101
    void _lineTo(Point p) {
 
102
        _quad_tangent = _cubic_tangent = _current = p;
 
103
        _sink.lineTo(p);
 
104
    }
 
105
 
 
106
    void _curveTo(Point c0, Point c1, Point p) {
 
107
        _quad_tangent = _current = p;
 
108
        _cubic_tangent = p + ( p - c1 );
 
109
        _sink.curveTo(c0, c1, p);
 
110
    }
 
111
 
 
112
    void _quadTo(Point c, Point p) {
 
113
        _cubic_tangent = _current = p;
 
114
        _quad_tangent = p + ( p - c );
 
115
        _sink.quadTo(c, p);
 
116
    }
 
117
 
 
118
    void _arcTo(double rx, double ry, double angle,
 
119
                bool large_arc, bool sweep, Point p)
 
120
    {
 
121
        _quad_tangent = _cubic_tangent = _current = p;
 
122
        _sink.arcTo(rx, ry, angle, large_arc, sweep, p);
 
123
    }
 
124
 
 
125
    void _closePath() {
 
126
        _quad_tangent = _cubic_tangent = _current = _initial;
 
127
        _sink.closePath();
 
128
    }
 
129
};
 
130
 
 
131
 
 
132
#line 133 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
 
133
static const char _svg_path_actions[] = {
 
134
        0, 1, 0, 1, 1, 1, 2, 1, 
 
135
        3, 1, 4, 1, 5, 1, 15, 1, 
 
136
        16, 2, 1, 0, 2, 1, 2, 2, 
 
137
        1, 3, 2, 1, 6, 2, 1, 7, 
 
138
        2, 1, 8, 2, 1, 9, 2, 1, 
 
139
        10, 2, 1, 11, 2, 1, 12, 2, 
 
140
        1, 13, 2, 1, 14, 2, 2, 1, 
 
141
        2, 3, 1, 2, 4, 0, 2, 5, 
 
142
        0, 2, 15, 16, 3, 1, 6, 0, 
 
143
        3, 1, 6, 16, 3, 1, 7, 0, 
 
144
        3, 1, 7, 16, 3, 1, 8, 0, 
 
145
        3, 1, 8, 16, 3, 1, 9, 0, 
 
146
        3, 1, 9, 16, 3, 1, 10, 0, 
 
147
        3, 1, 10, 16, 3, 1, 11, 0, 
 
148
        3, 1, 11, 16, 3, 1, 12, 0, 
 
149
        3, 1, 12, 16, 3, 1, 13, 0, 
 
150
        3, 1, 13, 16, 3, 1, 14, 0, 
 
151
        3, 1, 14, 16
 
152
};
 
153
 
 
154
static const short _svg_path_key_offsets[] = {
 
155
        0, 7, 7, 16, 25, 28, 30, 42, 
 
156
        52, 55, 57, 90, 121, 124, 126, 138, 
 
157
        148, 151, 153, 186, 195, 207, 216, 249, 
 
158
        256, 263, 265, 275, 283, 290, 292, 304, 
 
159
        314, 317, 319, 328, 335, 341, 346, 353, 
 
160
        359, 364, 374, 377, 379, 391, 401, 404, 
 
161
        406, 437, 466, 476, 488, 498, 507, 509, 
 
162
        521, 533, 544, 554, 561, 567, 572, 584, 
 
163
        595, 607, 617, 620, 622, 655, 664, 695, 
 
164
        704, 713, 716, 718, 730, 740, 743, 745, 
 
165
        757, 767, 770, 772, 784, 794, 797, 799, 
 
166
        811, 821, 824, 826, 838, 848, 851, 853, 
 
167
        886, 917, 929, 938, 950, 959, 971, 980, 
 
168
        992, 1001, 1013, 1022, 1055, 1059, 1061, 1092, 
 
169
        1101, 1110, 1113, 1115, 1148, 1179, 1182, 1184, 
 
170
        1217, 1226, 1259, 1263, 1265, 1296, 1305, 1314, 
 
171
        1323, 1326, 1328, 1340, 1350, 1353, 1355, 1367, 
 
172
        1377, 1380, 1382, 1394, 1404, 1407, 1409, 1442, 
 
173
        1473, 1485, 1494, 1506, 1515, 1527, 1536, 1569, 
 
174
        1573, 1575, 1606, 1615, 1624, 1627, 1629, 1641, 
 
175
        1651, 1654, 1656, 1668, 1678, 1681, 1683, 1695, 
 
176
        1705, 1708, 1710, 1743, 1774, 1786, 1795, 1807, 
 
177
        1816, 1828, 1837, 1870, 1874, 1876, 1907, 1916, 
 
178
        1925, 1928, 1930, 1942, 1952, 1955, 1957, 1990, 
 
179
        2021, 2033, 2042, 2075, 2079, 2081, 2112, 2121, 
 
180
        2130, 2133, 2135, 2168, 2199, 2202, 2204, 2237, 
 
181
        2246, 2279, 2283, 2285, 2316, 2341, 2366, 2373, 
 
182
        2382, 2391, 2424, 2428, 2430, 2461, 2494, 2503, 
 
183
        2512, 2524, 2533, 2566, 2570, 2572, 2603, 2612, 
 
184
        2621, 2630, 2639, 2672, 2676, 2678, 2709, 2742, 
 
185
        2746, 2748, 2758, 2791, 2795, 2797, 2807, 2811, 
 
186
        2813, 2823, 2827, 2829, 2839, 2843, 2845, 2855, 
 
187
        2859, 2861, 2871, 2875, 2877, 2887, 2891, 2893, 
 
188
        2903, 2936, 2940, 2942, 2952, 2956, 2958, 2968, 
 
189
        2972, 2974, 2984, 2988, 2990, 3000, 3004, 3006, 
 
190
        3016, 3020, 3022, 3051, 3055, 3057, 3088, 3121, 
 
191
        3130, 3142, 3146, 3148, 3158, 3170, 3175, 3185, 
 
192
        3189, 3191, 3198, 3208, 3212, 3214, 3224, 3236, 
 
193
        3248, 3260, 3264, 3266, 3276, 3288, 3292, 3294, 
 
194
        3304, 3313, 3317, 3319, 3327, 3336, 3341, 3346, 
 
195
        3358, 3362, 3364, 3395, 3399, 3401, 3411
 
196
};
 
197
 
 
198
static const char _svg_path_trans_keys[] = {
 
199
        0, 13, 32, 77, 109, 9, 10, 13, 
 
200
        32, 43, 45, 46, 9, 10, 48, 57, 
 
201
        13, 32, 43, 45, 46, 9, 10, 48, 
 
202
        57, 46, 48, 57, 48, 57, 13, 32, 
 
203
        44, 46, 69, 101, 9, 10, 43, 45, 
 
204
        48, 57, 13, 32, 44, 46, 9, 10, 
 
205
        43, 45, 48, 57, 46, 48, 57, 48, 
 
206
        57, 0, 13, 32, 44, 46, 65, 67, 
 
207
        69, 72, 76, 77, 81, 83, 84, 86, 
 
208
        90, 97, 99, 101, 104, 108, 109, 113, 
 
209
        115, 116, 118, 122, 9, 10, 43, 45, 
 
210
        48, 57, 0, 13, 32, 44, 46, 65, 
 
211
        67, 72, 76, 77, 81, 83, 84, 86, 
 
212
        90, 97, 99, 104, 108, 109, 113, 115, 
 
213
        116, 118, 122, 9, 10, 43, 45, 48, 
 
214
        57, 46, 48, 57, 48, 57, 13, 32, 
 
215
        44, 46, 69, 101, 9, 10, 43, 45, 
 
216
        48, 57, 13, 32, 44, 46, 9, 10, 
 
217
        43, 45, 48, 57, 46, 48, 57, 48, 
 
218
        57, 0, 13, 32, 44, 46, 65, 67, 
 
219
        69, 72, 76, 77, 81, 83, 84, 86, 
 
220
        90, 97, 99, 101, 104, 108, 109, 113, 
 
221
        115, 116, 118, 122, 9, 10, 43, 45, 
 
222
        48, 57, 13, 32, 43, 45, 46, 9, 
 
223
        10, 48, 57, 13, 32, 44, 46, 69, 
 
224
        101, 9, 10, 43, 45, 48, 57, 13, 
 
225
        32, 43, 45, 46, 9, 10, 48, 57, 
 
226
        0, 13, 32, 44, 46, 65, 67, 69, 
 
227
        72, 76, 77, 81, 83, 84, 86, 90, 
 
228
        97, 99, 101, 104, 108, 109, 113, 115, 
 
229
        116, 118, 122, 9, 10, 43, 45, 48, 
 
230
        57, 13, 32, 46, 9, 10, 48, 57, 
 
231
        13, 32, 46, 9, 10, 48, 57, 48, 
 
232
        57, 13, 32, 44, 46, 69, 101, 9, 
 
233
        10, 48, 57, 13, 32, 44, 46, 9, 
 
234
        10, 48, 57, 13, 32, 46, 9, 10, 
 
235
        48, 57, 48, 57, 13, 32, 44, 46, 
 
236
        69, 101, 9, 10, 43, 45, 48, 57, 
 
237
        13, 32, 44, 46, 9, 10, 43, 45, 
 
238
        48, 57, 46, 48, 57, 48, 57, 13, 
 
239
        32, 44, 69, 101, 9, 10, 48, 57, 
 
240
        13, 32, 44, 48, 49, 9, 10, 13, 
 
241
        32, 48, 49, 9, 10, 13, 32, 44, 
 
242
        9, 10, 13, 32, 44, 48, 49, 9, 
 
243
        10, 13, 32, 48, 49, 9, 10, 13, 
 
244
        32, 44, 9, 10, 13, 32, 44, 46, 
 
245
        9, 10, 43, 45, 48, 57, 46, 48, 
 
246
        57, 48, 57, 13, 32, 44, 46, 69, 
 
247
        101, 9, 10, 43, 45, 48, 57, 13, 
 
248
        32, 44, 46, 9, 10, 43, 45, 48, 
 
249
        57, 46, 48, 57, 48, 57, 0, 13, 
 
250
        32, 44, 46, 65, 67, 69, 72, 76, 
 
251
        77, 81, 83, 84, 86, 90, 97, 99, 
 
252
        101, 104, 108, 109, 113, 115, 116, 118, 
 
253
        122, 9, 10, 48, 57, 0, 13, 32, 
 
254
        44, 46, 65, 67, 72, 76, 77, 81, 
 
255
        83, 84, 86, 90, 97, 99, 104, 108, 
 
256
        109, 113, 115, 116, 118, 122, 9, 10, 
 
257
        48, 57, 13, 32, 44, 46, 69, 101, 
 
258
        9, 10, 48, 57, 13, 32, 44, 46, 
 
259
        69, 101, 9, 10, 43, 45, 48, 57, 
 
260
        13, 32, 44, 46, 9, 10, 43, 45, 
 
261
        48, 57, 13, 32, 43, 45, 46, 9, 
 
262
        10, 48, 57, 48, 57, 13, 32, 44, 
 
263
        46, 69, 101, 9, 10, 43, 45, 48, 
 
264
        57, 13, 32, 44, 46, 48, 49, 9, 
 
265
        10, 43, 45, 50, 57, 13, 32, 43, 
 
266
        45, 46, 48, 49, 9, 10, 50, 57, 
 
267
        13, 32, 44, 46, 69, 101, 9, 10, 
 
268
        48, 57, 13, 32, 44, 48, 49, 9, 
 
269
        10, 13, 32, 48, 49, 9, 10, 13, 
 
270
        32, 44, 9, 10, 13, 32, 44, 46, 
 
271
        48, 49, 9, 10, 43, 45, 50, 57, 
 
272
        13, 32, 43, 45, 46, 48, 49, 9, 
 
273
        10, 50, 57, 13, 32, 44, 46, 69, 
 
274
        101, 9, 10, 43, 45, 48, 57, 13, 
 
275
        32, 44, 46, 9, 10, 43, 45, 48, 
 
276
        57, 46, 48, 57, 48, 57, 0, 13, 
 
277
        32, 44, 46, 65, 67, 69, 72, 76, 
 
278
        77, 81, 83, 84, 86, 90, 97, 99, 
 
279
        101, 104, 108, 109, 113, 115, 116, 118, 
 
280
        122, 9, 10, 43, 45, 48, 57, 13, 
 
281
        32, 43, 45, 46, 9, 10, 48, 57, 
 
282
        0, 13, 32, 44, 46, 65, 67, 69, 
 
283
        72, 76, 77, 81, 83, 84, 86, 90, 
 
284
        97, 99, 101, 104, 108, 109, 113, 115, 
 
285
        116, 118, 122, 9, 10, 48, 57, 13, 
 
286
        32, 43, 45, 46, 9, 10, 48, 57, 
 
287
        13, 32, 43, 45, 46, 9, 10, 48, 
 
288
        57, 46, 48, 57, 48, 57, 13, 32, 
 
289
        44, 46, 69, 101, 9, 10, 43, 45, 
 
290
        48, 57, 13, 32, 44, 46, 9, 10, 
 
291
        43, 45, 48, 57, 46, 48, 57, 48, 
 
292
        57, 13, 32, 44, 46, 69, 101, 9, 
 
293
        10, 43, 45, 48, 57, 13, 32, 44, 
 
294
        46, 9, 10, 43, 45, 48, 57, 46, 
 
295
        48, 57, 48, 57, 13, 32, 44, 46, 
 
296
        69, 101, 9, 10, 43, 45, 48, 57, 
 
297
        13, 32, 44, 46, 9, 10, 43, 45, 
 
298
        48, 57, 46, 48, 57, 48, 57, 13, 
 
299
        32, 44, 46, 69, 101, 9, 10, 43, 
 
300
        45, 48, 57, 13, 32, 44, 46, 9, 
 
301
        10, 43, 45, 48, 57, 46, 48, 57, 
 
302
        48, 57, 13, 32, 44, 46, 69, 101, 
 
303
        9, 10, 43, 45, 48, 57, 13, 32, 
 
304
        44, 46, 9, 10, 43, 45, 48, 57, 
 
305
        46, 48, 57, 48, 57, 0, 13, 32, 
 
306
        44, 46, 65, 67, 69, 72, 76, 77, 
 
307
        81, 83, 84, 86, 90, 97, 99, 101, 
 
308
        104, 108, 109, 113, 115, 116, 118, 122, 
 
309
        9, 10, 43, 45, 48, 57, 0, 13, 
 
310
        32, 44, 46, 65, 67, 72, 76, 77, 
 
311
        81, 83, 84, 86, 90, 97, 99, 104, 
 
312
        108, 109, 113, 115, 116, 118, 122, 9, 
 
313
        10, 43, 45, 48, 57, 13, 32, 44, 
 
314
        46, 69, 101, 9, 10, 43, 45, 48, 
 
315
        57, 13, 32, 43, 45, 46, 9, 10, 
 
316
        48, 57, 13, 32, 44, 46, 69, 101, 
 
317
        9, 10, 43, 45, 48, 57, 13, 32, 
 
318
        43, 45, 46, 9, 10, 48, 57, 13, 
 
319
        32, 44, 46, 69, 101, 9, 10, 43, 
 
320
        45, 48, 57, 13, 32, 43, 45, 46, 
 
321
        9, 10, 48, 57, 13, 32, 44, 46, 
 
322
        69, 101, 9, 10, 43, 45, 48, 57, 
 
323
        13, 32, 43, 45, 46, 9, 10, 48, 
 
324
        57, 13, 32, 44, 46, 69, 101, 9, 
 
325
        10, 43, 45, 48, 57, 13, 32, 43, 
 
326
        45, 46, 9, 10, 48, 57, 0, 13, 
 
327
        32, 44, 46, 65, 67, 69, 72, 76, 
 
328
        77, 81, 83, 84, 86, 90, 97, 99, 
 
329
        101, 104, 108, 109, 113, 115, 116, 118, 
 
330
        122, 9, 10, 43, 45, 48, 57, 43, 
 
331
        45, 48, 57, 48, 57, 0, 13, 32, 
 
332
        44, 46, 65, 67, 72, 76, 77, 81, 
 
333
        83, 84, 86, 90, 97, 99, 104, 108, 
 
334
        109, 113, 115, 116, 118, 122, 9, 10, 
 
335
        43, 45, 48, 57, 13, 32, 43, 45, 
 
336
        46, 9, 10, 48, 57, 13, 32, 43, 
 
337
        45, 46, 9, 10, 48, 57, 46, 48, 
 
338
        57, 48, 57, 0, 13, 32, 44, 46, 
 
339
        65, 67, 69, 72, 76, 77, 81, 83, 
 
340
        84, 86, 90, 97, 99, 101, 104, 108, 
 
341
        109, 113, 115, 116, 118, 122, 9, 10, 
 
342
        43, 45, 48, 57, 0, 13, 32, 44, 
 
343
        46, 65, 67, 72, 76, 77, 81, 83, 
 
344
        84, 86, 90, 97, 99, 104, 108, 109, 
 
345
        113, 115, 116, 118, 122, 9, 10, 43, 
 
346
        45, 48, 57, 46, 48, 57, 48, 57, 
 
347
        0, 13, 32, 44, 46, 65, 67, 69, 
 
348
        72, 76, 77, 81, 83, 84, 86, 90, 
 
349
        97, 99, 101, 104, 108, 109, 113, 115, 
 
350
        116, 118, 122, 9, 10, 43, 45, 48, 
 
351
        57, 13, 32, 43, 45, 46, 9, 10, 
 
352
        48, 57, 0, 13, 32, 44, 46, 65, 
 
353
        67, 69, 72, 76, 77, 81, 83, 84, 
 
354
        86, 90, 97, 99, 101, 104, 108, 109, 
 
355
        113, 115, 116, 118, 122, 9, 10, 43, 
 
356
        45, 48, 57, 43, 45, 48, 57, 48, 
 
357
        57, 0, 13, 32, 44, 46, 65, 67, 
 
358
        72, 76, 77, 81, 83, 84, 86, 90, 
 
359
        97, 99, 104, 108, 109, 113, 115, 116, 
 
360
        118, 122, 9, 10, 43, 45, 48, 57, 
 
361
        13, 32, 43, 45, 46, 9, 10, 48, 
 
362
        57, 13, 32, 43, 45, 46, 9, 10, 
 
363
        48, 57, 13, 32, 43, 45, 46, 9, 
 
364
        10, 48, 57, 46, 48, 57, 48, 57, 
 
365
        13, 32, 44, 46, 69, 101, 9, 10, 
 
366
        43, 45, 48, 57, 13, 32, 44, 46, 
 
367
        9, 10, 43, 45, 48, 57, 46, 48, 
 
368
        57, 48, 57, 13, 32, 44, 46, 69, 
 
369
        101, 9, 10, 43, 45, 48, 57, 13, 
 
370
        32, 44, 46, 9, 10, 43, 45, 48, 
 
371
        57, 46, 48, 57, 48, 57, 13, 32, 
 
372
        44, 46, 69, 101, 9, 10, 43, 45, 
 
373
        48, 57, 13, 32, 44, 46, 9, 10, 
 
374
        43, 45, 48, 57, 46, 48, 57, 48, 
 
375
        57, 0, 13, 32, 44, 46, 65, 67, 
 
376
        69, 72, 76, 77, 81, 83, 84, 86, 
 
377
        90, 97, 99, 101, 104, 108, 109, 113, 
 
378
        115, 116, 118, 122, 9, 10, 43, 45, 
 
379
        48, 57, 0, 13, 32, 44, 46, 65, 
 
380
        67, 72, 76, 77, 81, 83, 84, 86, 
 
381
        90, 97, 99, 104, 108, 109, 113, 115, 
 
382
        116, 118, 122, 9, 10, 43, 45, 48, 
 
383
        57, 13, 32, 44, 46, 69, 101, 9, 
 
384
        10, 43, 45, 48, 57, 13, 32, 43, 
 
385
        45, 46, 9, 10, 48, 57, 13, 32, 
 
386
        44, 46, 69, 101, 9, 10, 43, 45, 
 
387
        48, 57, 13, 32, 43, 45, 46, 9, 
 
388
        10, 48, 57, 13, 32, 44, 46, 69, 
 
389
        101, 9, 10, 43, 45, 48, 57, 13, 
 
390
        32, 43, 45, 46, 9, 10, 48, 57, 
 
391
        0, 13, 32, 44, 46, 65, 67, 69, 
 
392
        72, 76, 77, 81, 83, 84, 86, 90, 
 
393
        97, 99, 101, 104, 108, 109, 113, 115, 
 
394
        116, 118, 122, 9, 10, 43, 45, 48, 
 
395
        57, 43, 45, 48, 57, 48, 57, 0, 
 
396
        13, 32, 44, 46, 65, 67, 72, 76, 
 
397
        77, 81, 83, 84, 86, 90, 97, 99, 
 
398
        104, 108, 109, 113, 115, 116, 118, 122, 
 
399
        9, 10, 43, 45, 48, 57, 13, 32, 
 
400
        43, 45, 46, 9, 10, 48, 57, 13, 
 
401
        32, 43, 45, 46, 9, 10, 48, 57, 
 
402
        46, 48, 57, 48, 57, 13, 32, 44, 
 
403
        46, 69, 101, 9, 10, 43, 45, 48, 
 
404
        57, 13, 32, 44, 46, 9, 10, 43, 
 
405
        45, 48, 57, 46, 48, 57, 48, 57, 
 
406
        13, 32, 44, 46, 69, 101, 9, 10, 
 
407
        43, 45, 48, 57, 13, 32, 44, 46, 
 
408
        9, 10, 43, 45, 48, 57, 46, 48, 
 
409
        57, 48, 57, 13, 32, 44, 46, 69, 
 
410
        101, 9, 10, 43, 45, 48, 57, 13, 
 
411
        32, 44, 46, 9, 10, 43, 45, 48, 
 
412
        57, 46, 48, 57, 48, 57, 0, 13, 
 
413
        32, 44, 46, 65, 67, 69, 72, 76, 
 
414
        77, 81, 83, 84, 86, 90, 97, 99, 
 
415
        101, 104, 108, 109, 113, 115, 116, 118, 
 
416
        122, 9, 10, 43, 45, 48, 57, 0, 
 
417
        13, 32, 44, 46, 65, 67, 72, 76, 
 
418
        77, 81, 83, 84, 86, 90, 97, 99, 
 
419
        104, 108, 109, 113, 115, 116, 118, 122, 
 
420
        9, 10, 43, 45, 48, 57, 13, 32, 
 
421
        44, 46, 69, 101, 9, 10, 43, 45, 
 
422
        48, 57, 13, 32, 43, 45, 46, 9, 
 
423
        10, 48, 57, 13, 32, 44, 46, 69, 
 
424
        101, 9, 10, 43, 45, 48, 57, 13, 
 
425
        32, 43, 45, 46, 9, 10, 48, 57, 
 
426
        13, 32, 44, 46, 69, 101, 9, 10, 
 
427
        43, 45, 48, 57, 13, 32, 43, 45, 
 
428
        46, 9, 10, 48, 57, 0, 13, 32, 
 
429
        44, 46, 65, 67, 69, 72, 76, 77, 
 
430
        81, 83, 84, 86, 90, 97, 99, 101, 
 
431
        104, 108, 109, 113, 115, 116, 118, 122, 
 
432
        9, 10, 43, 45, 48, 57, 43, 45, 
 
433
        48, 57, 48, 57, 0, 13, 32, 44, 
 
434
        46, 65, 67, 72, 76, 77, 81, 83, 
 
435
        84, 86, 90, 97, 99, 104, 108, 109, 
 
436
        113, 115, 116, 118, 122, 9, 10, 43, 
 
437
        45, 48, 57, 13, 32, 43, 45, 46, 
 
438
        9, 10, 48, 57, 13, 32, 43, 45, 
 
439
        46, 9, 10, 48, 57, 46, 48, 57, 
 
440
        48, 57, 13, 32, 44, 46, 69, 101, 
 
441
        9, 10, 43, 45, 48, 57, 13, 32, 
 
442
        44, 46, 9, 10, 43, 45, 48, 57, 
 
443
        46, 48, 57, 48, 57, 0, 13, 32, 
 
444
        44, 46, 65, 67, 69, 72, 76, 77, 
 
445
        81, 83, 84, 86, 90, 97, 99, 101, 
 
446
        104, 108, 109, 113, 115, 116, 118, 122, 
 
447
        9, 10, 43, 45, 48, 57, 0, 13, 
 
448
        32, 44, 46, 65, 67, 72, 76, 77, 
 
449
        81, 83, 84, 86, 90, 97, 99, 104, 
 
450
        108, 109, 113, 115, 116, 118, 122, 9, 
 
451
        10, 43, 45, 48, 57, 13, 32, 44, 
 
452
        46, 69, 101, 9, 10, 43, 45, 48, 
 
453
        57, 13, 32, 43, 45, 46, 9, 10, 
 
454
        48, 57, 0, 13, 32, 44, 46, 65, 
 
455
        67, 69, 72, 76, 77, 81, 83, 84, 
 
456
        86, 90, 97, 99, 101, 104, 108, 109, 
 
457
        113, 115, 116, 118, 122, 9, 10, 43, 
 
458
        45, 48, 57, 43, 45, 48, 57, 48, 
 
459
        57, 0, 13, 32, 44, 46, 65, 67, 
 
460
        72, 76, 77, 81, 83, 84, 86, 90, 
 
461
        97, 99, 104, 108, 109, 113, 115, 116, 
 
462
        118, 122, 9, 10, 43, 45, 48, 57, 
 
463
        13, 32, 43, 45, 46, 9, 10, 48, 
 
464
        57, 13, 32, 43, 45, 46, 9, 10, 
 
465
        48, 57, 46, 48, 57, 48, 57, 0, 
 
466
        13, 32, 44, 46, 65, 67, 69, 72, 
 
467
        76, 77, 81, 83, 84, 86, 90, 97, 
 
468
        99, 101, 104, 108, 109, 113, 115, 116, 
 
469
        118, 122, 9, 10, 43, 45, 48, 57, 
 
470
        0, 13, 32, 44, 46, 65, 67, 72, 
 
471
        76, 77, 81, 83, 84, 86, 90, 97, 
 
472
        99, 104, 108, 109, 113, 115, 116, 118, 
 
473
        122, 9, 10, 43, 45, 48, 57, 46, 
 
474
        48, 57, 48, 57, 0, 13, 32, 44, 
 
475
        46, 65, 67, 69, 72, 76, 77, 81, 
 
476
        83, 84, 86, 90, 97, 99, 101, 104, 
 
477
        108, 109, 113, 115, 116, 118, 122, 9, 
 
478
        10, 43, 45, 48, 57, 13, 32, 43, 
 
479
        45, 46, 9, 10, 48, 57, 0, 13, 
 
480
        32, 44, 46, 65, 67, 69, 72, 76, 
 
481
        77, 81, 83, 84, 86, 90, 97, 99, 
 
482
        101, 104, 108, 109, 113, 115, 116, 118, 
 
483
        122, 9, 10, 43, 45, 48, 57, 43, 
 
484
        45, 48, 57, 48, 57, 0, 13, 32, 
 
485
        44, 46, 65, 67, 72, 76, 77, 81, 
 
486
        83, 84, 86, 90, 97, 99, 104, 108, 
 
487
        109, 113, 115, 116, 118, 122, 9, 10, 
 
488
        43, 45, 48, 57, 0, 13, 32, 65, 
 
489
        67, 72, 76, 77, 81, 83, 84, 86, 
 
490
        90, 97, 99, 104, 108, 109, 113, 115, 
 
491
        116, 118, 122, 9, 10, 0, 13, 32, 
 
492
        65, 67, 72, 76, 77, 81, 83, 84, 
 
493
        86, 90, 97, 99, 104, 108, 109, 113, 
 
494
        115, 116, 118, 122, 9, 10, 13, 32, 
 
495
        46, 9, 10, 48, 57, 13, 32, 43, 
 
496
        45, 46, 9, 10, 48, 57, 13, 32, 
 
497
        43, 45, 46, 9, 10, 48, 57, 0, 
 
498
        13, 32, 44, 46, 65, 67, 69, 72, 
 
499
        76, 77, 81, 83, 84, 86, 90, 97, 
 
500
        99, 101, 104, 108, 109, 113, 115, 116, 
 
501
        118, 122, 9, 10, 43, 45, 48, 57, 
 
502
        43, 45, 48, 57, 48, 57, 0, 13, 
 
503
        32, 44, 46, 65, 67, 72, 76, 77, 
 
504
        81, 83, 84, 86, 90, 97, 99, 104, 
 
505
        108, 109, 113, 115, 116, 118, 122, 9, 
 
506
        10, 43, 45, 48, 57, 0, 13, 32, 
 
507
        44, 46, 65, 67, 69, 72, 76, 77, 
 
508
        81, 83, 84, 86, 90, 97, 99, 101, 
 
509
        104, 108, 109, 113, 115, 116, 118, 122, 
 
510
        9, 10, 43, 45, 48, 57, 13, 32, 
 
511
        43, 45, 46, 9, 10, 48, 57, 13, 
 
512
        32, 43, 45, 46, 9, 10, 48, 57, 
 
513
        13, 32, 44, 46, 69, 101, 9, 10, 
 
514
        43, 45, 48, 57, 13, 32, 43, 45, 
 
515
        46, 9, 10, 48, 57, 0, 13, 32, 
 
516
        44, 46, 65, 67, 69, 72, 76, 77, 
 
517
        81, 83, 84, 86, 90, 97, 99, 101, 
 
518
        104, 108, 109, 113, 115, 116, 118, 122, 
 
519
        9, 10, 43, 45, 48, 57, 43, 45, 
 
520
        48, 57, 48, 57, 0, 13, 32, 44, 
 
521
        46, 65, 67, 72, 76, 77, 81, 83, 
 
522
        84, 86, 90, 97, 99, 104, 108, 109, 
 
523
        113, 115, 116, 118, 122, 9, 10, 43, 
 
524
        45, 48, 57, 13, 32, 43, 45, 46, 
 
525
        9, 10, 48, 57, 13, 32, 43, 45, 
 
526
        46, 9, 10, 48, 57, 13, 32, 43, 
 
527
        45, 46, 9, 10, 48, 57, 13, 32, 
 
528
        43, 45, 46, 9, 10, 48, 57, 0, 
 
529
        13, 32, 44, 46, 65, 67, 69, 72, 
 
530
        76, 77, 81, 83, 84, 86, 90, 97, 
 
531
        99, 101, 104, 108, 109, 113, 115, 116, 
 
532
        118, 122, 9, 10, 43, 45, 48, 57, 
 
533
        43, 45, 48, 57, 48, 57, 0, 13, 
 
534
        32, 44, 46, 65, 67, 72, 76, 77, 
 
535
        81, 83, 84, 86, 90, 97, 99, 104, 
 
536
        108, 109, 113, 115, 116, 118, 122, 9, 
 
537
        10, 43, 45, 48, 57, 0, 13, 32, 
 
538
        44, 46, 65, 67, 69, 72, 76, 77, 
 
539
        81, 83, 84, 86, 90, 97, 99, 101, 
 
540
        104, 108, 109, 113, 115, 116, 118, 122, 
 
541
        9, 10, 43, 45, 48, 57, 43, 45, 
 
542
        48, 57, 48, 57, 13, 32, 44, 46, 
 
543
        9, 10, 43, 45, 48, 57, 0, 13, 
 
544
        32, 44, 46, 65, 67, 69, 72, 76, 
 
545
        77, 81, 83, 84, 86, 90, 97, 99, 
 
546
        101, 104, 108, 109, 113, 115, 116, 118, 
 
547
        122, 9, 10, 43, 45, 48, 57, 43, 
 
548
        45, 48, 57, 48, 57, 13, 32, 44, 
 
549
        46, 9, 10, 43, 45, 48, 57, 43, 
 
550
        45, 48, 57, 48, 57, 13, 32, 44, 
 
551
        46, 9, 10, 43, 45, 48, 57, 43, 
 
552
        45, 48, 57, 48, 57, 13, 32, 44, 
 
553
        46, 9, 10, 43, 45, 48, 57, 43, 
 
554
        45, 48, 57, 48, 57, 13, 32, 44, 
 
555
        46, 9, 10, 43, 45, 48, 57, 43, 
 
556
        45, 48, 57, 48, 57, 13, 32, 44, 
 
557
        46, 9, 10, 43, 45, 48, 57, 43, 
 
558
        45, 48, 57, 48, 57, 13, 32, 44, 
 
559
        46, 9, 10, 43, 45, 48, 57, 43, 
 
560
        45, 48, 57, 48, 57, 13, 32, 44, 
 
561
        46, 9, 10, 43, 45, 48, 57, 0, 
 
562
        13, 32, 44, 46, 65, 67, 69, 72, 
 
563
        76, 77, 81, 83, 84, 86, 90, 97, 
 
564
        99, 101, 104, 108, 109, 113, 115, 116, 
 
565
        118, 122, 9, 10, 43, 45, 48, 57, 
 
566
        43, 45, 48, 57, 48, 57, 13, 32, 
 
567
        44, 46, 9, 10, 43, 45, 48, 57, 
 
568
        43, 45, 48, 57, 48, 57, 13, 32, 
 
569
        44, 46, 9, 10, 43, 45, 48, 57, 
 
570
        43, 45, 48, 57, 48, 57, 13, 32, 
 
571
        44, 46, 9, 10, 43, 45, 48, 57, 
 
572
        43, 45, 48, 57, 48, 57, 13, 32, 
 
573
        44, 46, 9, 10, 43, 45, 48, 57, 
 
574
        43, 45, 48, 57, 48, 57, 13, 32, 
 
575
        44, 46, 9, 10, 43, 45, 48, 57, 
 
576
        43, 45, 48, 57, 48, 57, 0, 13, 
 
577
        32, 44, 46, 65, 67, 72, 76, 77, 
 
578
        81, 83, 84, 86, 90, 97, 99, 104, 
 
579
        108, 109, 113, 115, 116, 118, 122, 9, 
 
580
        10, 48, 57, 43, 45, 48, 57, 48, 
 
581
        57, 0, 13, 32, 44, 46, 65, 67, 
 
582
        72, 76, 77, 81, 83, 84, 86, 90, 
 
583
        97, 99, 104, 108, 109, 113, 115, 116, 
 
584
        118, 122, 9, 10, 43, 45, 48, 57, 
 
585
        0, 13, 32, 44, 46, 65, 67, 69, 
 
586
        72, 76, 77, 81, 83, 84, 86, 90, 
 
587
        97, 99, 101, 104, 108, 109, 113, 115, 
 
588
        116, 118, 122, 9, 10, 43, 45, 48, 
 
589
        57, 13, 32, 43, 45, 46, 9, 10, 
 
590
        48, 57, 13, 32, 44, 46, 69, 101, 
 
591
        9, 10, 43, 45, 48, 57, 43, 45, 
 
592
        48, 57, 48, 57, 13, 32, 44, 46, 
 
593
        9, 10, 43, 45, 48, 57, 13, 32, 
 
594
        44, 46, 69, 101, 9, 10, 43, 45, 
 
595
        48, 57, 13, 32, 44, 9, 10, 13, 
 
596
        32, 44, 46, 69, 101, 9, 10, 48, 
 
597
        57, 43, 45, 48, 57, 48, 57, 13, 
 
598
        32, 44, 9, 10, 48, 57, 13, 32, 
 
599
        44, 46, 69, 101, 9, 10, 48, 57, 
 
600
        43, 45, 48, 57, 48, 57, 13, 32, 
 
601
        44, 46, 9, 10, 43, 45, 48, 57, 
 
602
        13, 32, 44, 46, 69, 101, 9, 10, 
 
603
        43, 45, 48, 57, 13, 32, 44, 46, 
 
604
        69, 101, 9, 10, 43, 45, 48, 57, 
 
605
        13, 32, 44, 46, 69, 101, 9, 10, 
 
606
        43, 45, 48, 57, 43, 45, 48, 57, 
 
607
        48, 57, 13, 32, 44, 46, 9, 10, 
 
608
        43, 45, 48, 57, 13, 32, 44, 46, 
 
609
        69, 101, 9, 10, 43, 45, 48, 57, 
 
610
        43, 45, 48, 57, 48, 57, 13, 32, 
 
611
        44, 46, 9, 10, 43, 45, 48, 57, 
 
612
        13, 32, 43, 45, 46, 9, 10, 48, 
 
613
        57, 43, 45, 48, 57, 48, 57, 13, 
 
614
        32, 44, 46, 9, 10, 48, 57, 13, 
 
615
        32, 43, 45, 46, 9, 10, 48, 57, 
 
616
        13, 32, 44, 9, 10, 13, 32, 44, 
 
617
        9, 10, 13, 32, 44, 46, 69, 101, 
 
618
        9, 10, 43, 45, 48, 57, 43, 45, 
 
619
        48, 57, 48, 57, 0, 13, 32, 44, 
 
620
        46, 65, 67, 72, 76, 77, 81, 83, 
 
621
        84, 86, 90, 97, 99, 104, 108, 109, 
 
622
        113, 115, 116, 118, 122, 9, 10, 43, 
 
623
        45, 48, 57, 43, 45, 48, 57, 48, 
 
624
        57, 13, 32, 44, 46, 9, 10, 43, 
 
625
        45, 48, 57, 0
 
626
};
 
627
 
 
628
static const char _svg_path_single_lengths[] = {
 
629
        5, 0, 5, 5, 1, 0, 6, 4, 
 
630
        1, 0, 27, 25, 1, 0, 6, 4, 
 
631
        1, 0, 27, 5, 6, 5, 27, 3, 
 
632
        3, 0, 6, 4, 3, 0, 6, 4, 
 
633
        1, 0, 5, 5, 4, 3, 5, 4, 
 
634
        3, 4, 1, 0, 6, 4, 1, 0, 
 
635
        27, 25, 6, 6, 4, 5, 0, 6, 
 
636
        6, 7, 6, 5, 4, 3, 6, 7, 
 
637
        6, 4, 1, 0, 27, 5, 27, 5, 
 
638
        5, 1, 0, 6, 4, 1, 0, 6, 
 
639
        4, 1, 0, 6, 4, 1, 0, 6, 
 
640
        4, 1, 0, 6, 4, 1, 0, 27, 
 
641
        25, 6, 5, 6, 5, 6, 5, 6, 
 
642
        5, 6, 5, 27, 2, 0, 25, 5, 
 
643
        5, 1, 0, 27, 25, 1, 0, 27, 
 
644
        5, 27, 2, 0, 25, 5, 5, 5, 
 
645
        1, 0, 6, 4, 1, 0, 6, 4, 
 
646
        1, 0, 6, 4, 1, 0, 27, 25, 
 
647
        6, 5, 6, 5, 6, 5, 27, 2, 
 
648
        0, 25, 5, 5, 1, 0, 6, 4, 
 
649
        1, 0, 6, 4, 1, 0, 6, 4, 
 
650
        1, 0, 27, 25, 6, 5, 6, 5, 
 
651
        6, 5, 27, 2, 0, 25, 5, 5, 
 
652
        1, 0, 6, 4, 1, 0, 27, 25, 
 
653
        6, 5, 27, 2, 0, 25, 5, 5, 
 
654
        1, 0, 27, 25, 1, 0, 27, 5, 
 
655
        27, 2, 0, 25, 23, 23, 3, 5, 
 
656
        5, 27, 2, 0, 25, 27, 5, 5, 
 
657
        6, 5, 27, 2, 0, 25, 5, 5, 
 
658
        5, 5, 27, 2, 0, 25, 27, 2, 
 
659
        0, 4, 27, 2, 0, 4, 2, 0, 
 
660
        4, 2, 0, 4, 2, 0, 4, 2, 
 
661
        0, 4, 2, 0, 4, 2, 0, 4, 
 
662
        27, 2, 0, 4, 2, 0, 4, 2, 
 
663
        0, 4, 2, 0, 4, 2, 0, 4, 
 
664
        2, 0, 25, 2, 0, 25, 27, 5, 
 
665
        6, 2, 0, 4, 6, 3, 6, 2, 
 
666
        0, 3, 6, 2, 0, 4, 6, 6, 
 
667
        6, 2, 0, 4, 6, 2, 0, 4, 
 
668
        5, 2, 0, 4, 5, 3, 3, 6, 
 
669
        2, 0, 25, 2, 0, 4, 0
 
670
};
 
671
 
 
672
static const char _svg_path_range_lengths[] = {
 
673
        1, 0, 2, 2, 1, 1, 3, 3, 
 
674
        1, 1, 3, 3, 1, 1, 3, 3, 
 
675
        1, 1, 3, 2, 3, 2, 3, 2, 
 
676
        2, 1, 2, 2, 2, 1, 3, 3, 
 
677
        1, 1, 2, 1, 1, 1, 1, 1, 
 
678
        1, 3, 1, 1, 3, 3, 1, 1, 
 
679
        2, 2, 2, 3, 3, 2, 1, 3, 
 
680
        3, 2, 2, 1, 1, 1, 3, 2, 
 
681
        3, 3, 1, 1, 3, 2, 2, 2, 
 
682
        2, 1, 1, 3, 3, 1, 1, 3, 
 
683
        3, 1, 1, 3, 3, 1, 1, 3, 
 
684
        3, 1, 1, 3, 3, 1, 1, 3, 
 
685
        3, 3, 2, 3, 2, 3, 2, 3, 
 
686
        2, 3, 2, 3, 1, 1, 3, 2, 
 
687
        2, 1, 1, 3, 3, 1, 1, 3, 
 
688
        2, 3, 1, 1, 3, 2, 2, 2, 
 
689
        1, 1, 3, 3, 1, 1, 3, 3, 
 
690
        1, 1, 3, 3, 1, 1, 3, 3, 
 
691
        3, 2, 3, 2, 3, 2, 3, 1, 
 
692
        1, 3, 2, 2, 1, 1, 3, 3, 
 
693
        1, 1, 3, 3, 1, 1, 3, 3, 
 
694
        1, 1, 3, 3, 3, 2, 3, 2, 
 
695
        3, 2, 3, 1, 1, 3, 2, 2, 
 
696
        1, 1, 3, 3, 1, 1, 3, 3, 
 
697
        3, 2, 3, 1, 1, 3, 2, 2, 
 
698
        1, 1, 3, 3, 1, 1, 3, 2, 
 
699
        3, 1, 1, 3, 1, 1, 2, 2, 
 
700
        2, 3, 1, 1, 3, 3, 2, 2, 
 
701
        3, 2, 3, 1, 1, 3, 2, 2, 
 
702
        2, 2, 3, 1, 1, 3, 3, 1, 
 
703
        1, 3, 3, 1, 1, 3, 1, 1, 
 
704
        3, 1, 1, 3, 1, 1, 3, 1, 
 
705
        1, 3, 1, 1, 3, 1, 1, 3, 
 
706
        3, 1, 1, 3, 1, 1, 3, 1, 
 
707
        1, 3, 1, 1, 3, 1, 1, 3, 
 
708
        1, 1, 2, 1, 1, 3, 3, 2, 
 
709
        3, 1, 1, 3, 3, 1, 2, 1, 
 
710
        1, 2, 2, 1, 1, 3, 3, 3, 
 
711
        3, 1, 1, 3, 3, 1, 1, 3, 
 
712
        2, 1, 1, 2, 2, 1, 1, 3, 
 
713
        1, 1, 3, 1, 1, 3, 0
 
714
};
 
715
 
 
716
static const short _svg_path_index_offsets[] = {
 
717
        0, 7, 7, 15, 23, 26, 28, 38, 
 
718
        46, 49, 51, 82, 111, 114, 116, 126, 
 
719
        134, 137, 139, 170, 178, 188, 196, 227, 
 
720
        233, 239, 241, 250, 257, 263, 265, 275, 
 
721
        283, 286, 288, 296, 303, 309, 314, 321, 
 
722
        327, 332, 340, 343, 345, 355, 363, 366, 
 
723
        368, 398, 426, 435, 445, 453, 461, 463, 
 
724
        473, 483, 493, 502, 509, 515, 520, 530, 
 
725
        540, 550, 558, 561, 563, 594, 602, 632, 
 
726
        640, 648, 651, 653, 663, 671, 674, 676, 
 
727
        686, 694, 697, 699, 709, 717, 720, 722, 
 
728
        732, 740, 743, 745, 755, 763, 766, 768, 
 
729
        799, 828, 838, 846, 856, 864, 874, 882, 
 
730
        892, 900, 910, 918, 949, 953, 955, 984, 
 
731
        992, 1000, 1003, 1005, 1036, 1065, 1068, 1070, 
 
732
        1101, 1109, 1140, 1144, 1146, 1175, 1183, 1191, 
 
733
        1199, 1202, 1204, 1214, 1222, 1225, 1227, 1237, 
 
734
        1245, 1248, 1250, 1260, 1268, 1271, 1273, 1304, 
 
735
        1333, 1343, 1351, 1361, 1369, 1379, 1387, 1418, 
 
736
        1422, 1424, 1453, 1461, 1469, 1472, 1474, 1484, 
 
737
        1492, 1495, 1497, 1507, 1515, 1518, 1520, 1530, 
 
738
        1538, 1541, 1543, 1574, 1603, 1613, 1621, 1631, 
 
739
        1639, 1649, 1657, 1688, 1692, 1694, 1723, 1731, 
 
740
        1739, 1742, 1744, 1754, 1762, 1765, 1767, 1798, 
 
741
        1827, 1837, 1845, 1876, 1880, 1882, 1911, 1919, 
 
742
        1927, 1930, 1932, 1963, 1992, 1995, 1997, 2028, 
 
743
        2036, 2067, 2071, 2073, 2102, 2127, 2152, 2158, 
 
744
        2166, 2174, 2205, 2209, 2211, 2240, 2271, 2279, 
 
745
        2287, 2297, 2305, 2336, 2340, 2342, 2371, 2379, 
 
746
        2387, 2395, 2403, 2434, 2438, 2440, 2469, 2500, 
 
747
        2504, 2506, 2514, 2545, 2549, 2551, 2559, 2563, 
 
748
        2565, 2573, 2577, 2579, 2587, 2591, 2593, 2601, 
 
749
        2605, 2607, 2615, 2619, 2621, 2629, 2633, 2635, 
 
750
        2643, 2674, 2678, 2680, 2688, 2692, 2694, 2702, 
 
751
        2706, 2708, 2716, 2720, 2722, 2730, 2734, 2736, 
 
752
        2744, 2748, 2750, 2778, 2782, 2784, 2813, 2844, 
 
753
        2852, 2862, 2866, 2868, 2876, 2886, 2891, 2900, 
 
754
        2904, 2906, 2912, 2921, 2925, 2927, 2935, 2945, 
 
755
        2955, 2965, 2969, 2971, 2979, 2989, 2993, 2995, 
 
756
        3003, 3011, 3015, 3017, 3024, 3032, 3037, 3042, 
 
757
        3052, 3056, 3058, 3087, 3091, 3093, 3101
 
758
};
 
759
 
 
760
static const short _svg_path_indicies[] = {
 
761
        73, 74, 74, 75, 76, 74, 0, 571, 
 
762
        571, 572, 572, 573, 571, 574, 0, 631, 
 
763
        631, 632, 632, 633, 631, 634, 0, 670, 
 
764
        513, 0, 512, 0, 509, 509, 511, 548, 
 
765
        514, 514, 509, 510, 512, 0, 490, 490, 
 
766
        434, 436, 490, 435, 437, 0, 393, 127, 
 
767
        0, 126, 0, 122, 123, 123, 125, 148, 
 
768
        128, 129, 130, 131, 132, 133, 134, 135, 
 
769
        136, 137, 138, 139, 140, 130, 141, 142, 
 
770
        143, 144, 145, 146, 147, 138, 123, 124, 
 
771
        126, 0, 73, 611, 611, 613, 614, 78, 
 
772
        79, 80, 81, 75, 82, 83, 84, 85, 
 
773
        86, 87, 88, 89, 90, 76, 91, 92, 
 
774
        93, 94, 86, 611, 612, 615, 0, 671, 
 
775
        519, 0, 518, 0, 515, 515, 517, 550, 
 
776
        520, 520, 515, 516, 518, 0, 491, 491, 
 
777
        438, 440, 491, 439, 441, 0, 394, 155, 
 
778
        0, 154, 0, 150, 151, 151, 153, 176, 
 
779
        156, 157, 158, 159, 160, 161, 162, 163, 
 
780
        164, 165, 166, 167, 168, 158, 169, 170, 
 
781
        171, 172, 173, 174, 175, 166, 151, 152, 
 
782
        154, 0, 613, 613, 612, 612, 614, 613, 
 
783
        615, 0, 515, 515, 517, 518, 520, 520, 
 
784
        515, 516, 519, 0, 438, 438, 439, 439, 
 
785
        440, 438, 441, 0, 150, 151, 151, 153, 
 
786
        154, 156, 157, 158, 159, 160, 161, 162, 
 
787
        163, 164, 165, 166, 167, 168, 158, 169, 
 
788
        170, 171, 172, 173, 174, 175, 166, 151, 
 
789
        152, 155, 0, 47, 47, 48, 47, 49, 
 
790
        0, 8, 8, 9, 8, 10, 0, 385, 
 
791
        0, 25, 25, 26, 27, 31, 31, 25, 
 
792
        498, 0, 12, 12, 13, 14, 12, 15, 
 
793
        0, 13, 13, 14, 13, 15, 0, 35, 
 
794
        0, 32, 32, 34, 38, 37, 37, 32, 
 
795
        33, 35, 0, 20, 20, 16, 18, 20, 
 
796
        17, 19, 0, 2, 3, 0, 23, 0, 
 
797
        21, 21, 22, 24, 24, 21, 23, 0, 
 
798
        11, 11, 5, 6, 7, 11, 0, 5, 
 
799
        5, 6, 7, 5, 0, 45, 45, 46, 
 
800
        45, 0, 722, 722, 716, 717, 718, 722, 
 
801
        0, 716, 716, 717, 718, 716, 0, 567, 
 
802
        567, 568, 567, 0, 651, 651, 647, 430, 
 
803
        651, 429, 433, 0, 676, 69, 0, 68, 
 
804
        0, 351, 351, 352, 375, 70, 70, 351, 
 
805
        66, 68, 0, 497, 497, 478, 480, 497, 
 
806
        479, 481, 0, 406, 380, 0, 379, 0, 
 
807
        350, 377, 377, 378, 382, 355, 356, 381, 
 
808
        358, 359, 360, 361, 362, 363, 364, 365, 
 
809
        366, 367, 381, 368, 369, 370, 371, 372, 
 
810
        373, 374, 365, 377, 379, 0, 73, 95, 
 
811
        95, 8, 9, 78, 79, 80, 81, 75, 
 
812
        82, 83, 84, 85, 86, 87, 88, 89, 
 
813
        90, 76, 91, 92, 93, 94, 86, 95, 
 
814
        10, 0, 25, 25, 26, 29, 31, 31, 
 
815
        25, 30, 0, 40, 40, 41, 562, 561, 
 
816
        561, 40, 33, 30, 0, 483, 483, 425, 
 
817
        426, 483, 17, 427, 0, 425, 425, 17, 
 
818
        17, 426, 425, 427, 0, 501, 0, 499, 
 
819
        499, 500, 38, 503, 503, 499, 33, 501, 
 
820
        0, 482, 482, 422, 18, 423, 424, 482, 
 
821
        17, 19, 0, 422, 422, 17, 17, 18, 
 
822
        423, 424, 422, 19, 0, 63, 63, 64, 
 
823
        23, 24, 24, 63, 3, 0, 723, 723, 
 
824
        719, 720, 721, 723, 0, 719, 719, 720, 
 
825
        721, 719, 0, 569, 569, 570, 569, 0, 
 
826
        489, 489, 428, 430, 431, 432, 489, 429, 
 
827
        433, 0, 428, 428, 429, 429, 430, 431, 
 
828
        432, 428, 433, 0, 71, 71, 72, 68, 
 
829
        70, 70, 71, 66, 69, 0, 496, 496, 
 
830
        474, 476, 496, 475, 477, 0, 405, 354, 
 
831
        0, 353, 0, 350, 351, 351, 352, 375, 
 
832
        355, 356, 357, 358, 359, 360, 361, 362, 
 
833
        363, 364, 365, 366, 367, 357, 368, 369, 
 
834
        370, 371, 372, 373, 374, 365, 351, 66, 
 
835
        353, 0, 478, 478, 479, 479, 480, 478, 
 
836
        481, 0, 350, 377, 377, 378, 379, 355, 
 
837
        356, 381, 358, 359, 360, 361, 362, 363, 
 
838
        364, 365, 366, 367, 381, 368, 369, 370, 
 
839
        371, 372, 373, 374, 365, 377, 380, 0, 
 
840
        50, 50, 51, 51, 52, 50, 53, 0, 
 
841
        98, 98, 97, 97, 99, 98, 100, 0, 
 
842
        391, 392, 0, 507, 0, 504, 504, 506, 
 
843
        546, 508, 508, 504, 505, 507, 0, 484, 
 
844
        484, 486, 487, 484, 485, 488, 0, 790, 
 
845
        788, 0, 755, 0, 751, 751, 753, 754, 
 
846
        756, 756, 751, 752, 755, 0, 787, 787, 
 
847
        773, 775, 787, 774, 776, 0, 748, 739, 
 
848
        0, 710, 0, 689, 689, 691, 692, 711, 
 
849
        711, 689, 690, 710, 0, 736, 736, 724, 
 
850
        726, 736, 725, 727, 0, 677, 656, 0, 
 
851
        655, 0, 652, 652, 654, 704, 657, 657, 
 
852
        652, 653, 655, 0, 648, 648, 635, 637, 
 
853
        648, 636, 638, 0, 672, 525, 0, 524, 
 
854
        0, 521, 521, 523, 552, 526, 526, 521, 
 
855
        522, 524, 0, 492, 492, 458, 460, 492, 
 
856
        459, 461, 0, 401, 243, 0, 242, 0, 
 
857
        238, 239, 239, 241, 264, 244, 245, 246, 
 
858
        247, 248, 249, 250, 251, 252, 253, 254, 
 
859
        255, 256, 246, 257, 258, 259, 260, 261, 
 
860
        262, 263, 254, 239, 240, 242, 0, 73, 
 
861
        96, 96, 98, 99, 78, 79, 80, 81, 
 
862
        75, 82, 83, 84, 85, 86, 87, 88, 
 
863
        89, 90, 76, 91, 92, 93, 94, 86, 
 
864
        96, 97, 100, 0, 504, 504, 506, 507, 
 
865
        508, 508, 504, 505, 392, 0, 486, 486, 
 
866
        485, 485, 487, 486, 488, 0, 751, 751, 
 
867
        753, 755, 756, 756, 751, 752, 788, 0, 
 
868
        773, 773, 774, 774, 775, 773, 776, 0, 
 
869
        689, 689, 691, 710, 711, 711, 689, 690, 
 
870
        739, 0, 724, 724, 725, 725, 726, 724, 
 
871
        727, 0, 652, 652, 654, 655, 657, 657, 
 
872
        652, 653, 656, 0, 635, 635, 636, 636, 
 
873
        637, 635, 638, 0, 521, 521, 523, 524, 
 
874
        526, 526, 521, 522, 525, 0, 458, 458, 
 
875
        459, 459, 460, 458, 461, 0, 238, 239, 
 
876
        239, 241, 242, 244, 245, 246, 247, 248, 
 
877
        249, 250, 251, 252, 253, 254, 255, 256, 
 
878
        246, 257, 258, 259, 260, 261, 262, 263, 
 
879
        254, 239, 240, 243, 0, 416, 416, 265, 
 
880
        0, 265, 0, 238, 239, 239, 241, 264, 
 
881
        244, 245, 247, 248, 249, 250, 251, 252, 
 
882
        253, 254, 255, 256, 257, 258, 259, 260, 
 
883
        261, 262, 263, 254, 239, 240, 265, 0, 
 
884
        583, 583, 584, 584, 585, 583, 586, 0, 
 
885
        446, 446, 447, 447, 448, 446, 449, 0, 
 
886
        396, 397, 0, 388, 0, 178, 179, 179, 
 
887
        181, 204, 184, 185, 624, 187, 188, 189, 
 
888
        190, 191, 192, 193, 194, 195, 196, 624, 
 
889
        197, 198, 199, 200, 201, 202, 203, 194, 
 
890
        179, 180, 623, 0, 73, 621, 621, 442, 
 
891
        444, 78, 79, 80, 81, 75, 82, 83, 
 
892
        84, 85, 86, 87, 88, 89, 90, 76, 
 
893
        91, 92, 93, 94, 86, 621, 443, 445, 
 
894
        0, 395, 183, 0, 182, 0, 178, 179, 
 
895
        179, 181, 204, 184, 185, 186, 187, 188, 
 
896
        189, 190, 191, 192, 193, 194, 195, 196, 
 
897
        186, 197, 198, 199, 200, 201, 202, 203, 
 
898
        194, 179, 180, 182, 0, 442, 442, 443, 
 
899
        443, 444, 442, 445, 0, 178, 179, 179, 
 
900
        181, 182, 184, 185, 186, 187, 188, 189, 
 
901
        190, 191, 192, 193, 194, 195, 196, 186, 
 
902
        197, 198, 199, 200, 201, 202, 203, 194, 
 
903
        179, 180, 183, 0, 412, 412, 205, 0, 
 
904
        205, 0, 178, 179, 179, 181, 204, 184, 
 
905
        185, 187, 188, 189, 190, 191, 192, 193, 
 
906
        194, 195, 196, 197, 198, 199, 200, 201, 
 
907
        202, 203, 194, 179, 180, 205, 0, 575, 
 
908
        575, 576, 576, 577, 575, 578, 0, 761, 
 
909
        761, 762, 762, 763, 761, 764, 0, 781, 
 
910
        781, 782, 782, 783, 781, 784, 0, 750, 
 
911
        741, 0, 714, 0, 699, 699, 701, 702, 
 
912
        715, 715, 699, 700, 714, 0, 738, 738, 
 
913
        732, 734, 738, 733, 735, 0, 679, 668, 
 
914
        0, 667, 0, 664, 664, 666, 708, 669, 
 
915
        669, 664, 665, 667, 0, 650, 650, 643, 
 
916
        645, 650, 644, 646, 0, 674, 537, 0, 
 
917
        536, 0, 533, 533, 535, 556, 538, 538, 
 
918
        533, 534, 536, 0, 494, 494, 466, 468, 
 
919
        494, 467, 469, 0, 403, 299, 0, 298, 
 
920
        0, 294, 295, 295, 297, 320, 300, 301, 
 
921
        302, 303, 304, 305, 306, 307, 308, 309, 
 
922
        310, 311, 312, 302, 313, 314, 315, 316, 
 
923
        317, 318, 319, 310, 295, 296, 298, 0, 
 
924
        73, 786, 786, 781, 783, 78, 79, 80, 
 
925
        81, 75, 82, 83, 84, 85, 86, 87, 
 
926
        88, 89, 90, 76, 91, 92, 93, 94, 
 
927
        86, 786, 782, 784, 0, 699, 699, 701, 
 
928
        714, 715, 715, 699, 700, 741, 0, 732, 
 
929
        732, 733, 733, 734, 732, 735, 0, 664, 
 
930
        664, 666, 667, 669, 669, 664, 665, 668, 
 
931
        0, 643, 643, 644, 644, 645, 643, 646, 
 
932
        0, 533, 533, 535, 536, 538, 538, 533, 
 
933
        534, 537, 0, 466, 466, 467, 467, 468, 
 
934
        466, 469, 0, 294, 295, 295, 297, 298, 
 
935
        300, 301, 302, 303, 304, 305, 306, 307, 
 
936
        308, 309, 310, 311, 312, 302, 313, 314, 
 
937
        315, 316, 317, 318, 319, 310, 295, 296, 
 
938
        299, 0, 418, 418, 321, 0, 321, 0, 
 
939
        294, 295, 295, 297, 320, 300, 301, 303, 
 
940
        304, 305, 306, 307, 308, 309, 310, 311, 
 
941
        312, 313, 314, 315, 316, 317, 318, 319, 
 
942
        310, 295, 296, 321, 0, 757, 757, 758, 
 
943
        758, 759, 757, 760, 0, 777, 777, 778, 
 
944
        778, 779, 777, 780, 0, 749, 740, 0, 
 
945
        712, 0, 694, 694, 696, 697, 713, 713, 
 
946
        694, 695, 712, 0, 737, 737, 728, 730, 
 
947
        737, 729, 731, 0, 678, 662, 0, 661, 
 
948
        0, 658, 658, 660, 706, 663, 663, 658, 
 
949
        659, 661, 0, 649, 649, 639, 641, 649, 
 
950
        640, 642, 0, 673, 531, 0, 530, 0, 
 
951
        527, 527, 529, 554, 532, 532, 527, 528, 
 
952
        530, 0, 493, 493, 462, 464, 493, 463, 
 
953
        465, 0, 402, 271, 0, 270, 0, 266, 
 
954
        267, 267, 269, 292, 272, 273, 274, 275, 
 
955
        276, 277, 278, 279, 280, 281, 282, 283, 
 
956
        284, 274, 285, 286, 287, 288, 289, 290, 
 
957
        291, 282, 267, 268, 270, 0, 73, 785, 
 
958
        785, 777, 779, 78, 79, 80, 81, 75, 
 
959
        82, 83, 84, 85, 86, 87, 88, 89, 
 
960
        90, 76, 91, 92, 93, 94, 86, 785, 
 
961
        778, 780, 0, 694, 694, 696, 712, 713, 
 
962
        713, 694, 695, 740, 0, 728, 728, 729, 
 
963
        729, 730, 728, 731, 0, 658, 658, 660, 
 
964
        661, 663, 663, 658, 659, 662, 0, 639, 
 
965
        639, 640, 640, 641, 639, 642, 0, 527, 
 
966
        527, 529, 530, 532, 532, 527, 528, 531, 
 
967
        0, 462, 462, 463, 463, 464, 462, 465, 
 
968
        0, 266, 267, 267, 269, 270, 272, 273, 
 
969
        274, 275, 276, 277, 278, 279, 280, 281, 
 
970
        282, 283, 284, 274, 285, 286, 287, 288, 
 
971
        289, 290, 291, 282, 267, 268, 271, 0, 
 
972
        417, 417, 293, 0, 293, 0, 266, 267, 
 
973
        267, 269, 292, 272, 273, 275, 276, 277, 
 
974
        278, 279, 280, 281, 282, 283, 284, 285, 
 
975
        286, 287, 288, 289, 290, 291, 282, 267, 
 
976
        268, 293, 0, 579, 579, 580, 580, 581, 
 
977
        579, 582, 0, 618, 618, 617, 617, 619, 
 
978
        618, 620, 0, 675, 543, 0, 542, 0, 
 
979
        539, 539, 541, 558, 544, 544, 539, 540, 
 
980
        542, 0, 495, 495, 470, 472, 495, 471, 
 
981
        473, 0, 404, 327, 0, 326, 0, 322, 
 
982
        323, 323, 325, 348, 328, 329, 330, 331, 
 
983
        332, 333, 334, 335, 336, 337, 338, 339, 
 
984
        340, 330, 341, 342, 343, 344, 345, 346, 
 
985
        347, 338, 323, 324, 326, 0, 73, 616, 
 
986
        616, 618, 619, 78, 79, 80, 81, 75, 
 
987
        82, 83, 84, 85, 86, 87, 88, 89, 
 
988
        90, 76, 91, 92, 93, 94, 86, 616, 
 
989
        617, 620, 0, 539, 539, 541, 542, 544, 
 
990
        544, 539, 540, 543, 0, 470, 470, 471, 
 
991
        471, 472, 470, 473, 0, 322, 323, 323, 
 
992
        325, 326, 328, 329, 330, 331, 332, 333, 
 
993
        334, 335, 336, 337, 338, 339, 340, 330, 
 
994
        341, 342, 343, 344, 345, 346, 347, 338, 
 
995
        323, 324, 327, 0, 419, 419, 349, 0, 
 
996
        349, 0, 322, 323, 323, 325, 348, 328, 
 
997
        329, 331, 332, 333, 334, 335, 336, 337, 
 
998
        338, 339, 340, 341, 342, 343, 344, 345, 
 
999
        346, 347, 338, 323, 324, 349, 0, 587, 
 
1000
        587, 588, 588, 589, 587, 590, 0, 454, 
 
1001
        454, 455, 455, 456, 454, 457, 0, 399, 
 
1002
        400, 0, 390, 0, 208, 209, 209, 211, 
 
1003
        234, 214, 215, 628, 217, 218, 219, 220, 
 
1004
        221, 222, 223, 224, 225, 226, 628, 227, 
 
1005
        228, 229, 230, 231, 232, 233, 224, 209, 
 
1006
        210, 627, 0, 73, 622, 622, 450, 452, 
 
1007
        78, 79, 80, 81, 75, 82, 83, 84, 
 
1008
        85, 86, 87, 88, 89, 90, 76, 91, 
 
1009
        92, 93, 94, 86, 622, 451, 453, 0, 
 
1010
        398, 213, 0, 212, 0, 208, 209, 209, 
 
1011
        211, 234, 214, 215, 216, 217, 218, 219, 
 
1012
        220, 221, 222, 223, 224, 225, 226, 216, 
 
1013
        227, 228, 229, 230, 231, 232, 233, 224, 
 
1014
        209, 210, 212, 0, 450, 450, 451, 451, 
 
1015
        452, 450, 453, 0, 208, 209, 209, 211, 
 
1016
        212, 214, 215, 216, 217, 218, 219, 220, 
 
1017
        221, 222, 223, 224, 225, 226, 216, 227, 
 
1018
        228, 229, 230, 231, 232, 233, 224, 209, 
 
1019
        210, 213, 0, 414, 414, 235, 0, 235, 
 
1020
        0, 208, 209, 209, 211, 234, 214, 215, 
 
1021
        217, 218, 219, 220, 221, 222, 223, 224, 
 
1022
        225, 226, 227, 228, 229, 230, 231, 232, 
 
1023
        233, 224, 209, 210, 235, 0, 101, 102, 
 
1024
        102, 103, 104, 105, 106, 107, 108, 109, 
 
1025
        110, 111, 112, 113, 114, 115, 116, 117, 
 
1026
        118, 119, 120, 121, 112, 102, 0, 73, 
 
1027
        77, 77, 78, 79, 80, 81, 75, 82, 
 
1028
        83, 84, 85, 86, 87, 88, 89, 90, 
 
1029
        76, 91, 92, 93, 94, 86, 77, 0, 
 
1030
        54, 54, 55, 54, 56, 0, 57, 57, 
 
1031
        58, 58, 59, 57, 60, 0, 603, 603, 
 
1032
        604, 604, 605, 603, 606, 0, 178, 179, 
 
1033
        179, 181, 625, 184, 185, 624, 187, 188, 
 
1034
        189, 190, 191, 192, 193, 194, 195, 196, 
 
1035
        624, 197, 198, 199, 200, 201, 202, 203, 
 
1036
        194, 179, 180, 626, 0, 413, 413, 387, 
 
1037
        0, 387, 0, 178, 179, 179, 181, 204, 
 
1038
        184, 185, 187, 188, 189, 190, 191, 192, 
 
1039
        193, 194, 195, 196, 197, 198, 199, 200, 
 
1040
        201, 202, 203, 194, 179, 180, 206, 0, 
 
1041
        178, 179, 179, 181, 207, 184, 185, 186, 
 
1042
        187, 188, 189, 190, 191, 192, 193, 194, 
 
1043
        195, 196, 186, 197, 198, 199, 200, 201, 
 
1044
        202, 203, 194, 179, 180, 206, 0, 595, 
 
1045
        595, 596, 596, 597, 595, 598, 0, 591, 
 
1046
        591, 592, 592, 593, 591, 594, 0, 509, 
 
1047
        509, 511, 512, 514, 514, 509, 510, 513, 
 
1048
        0, 434, 434, 435, 435, 436, 434, 437, 
 
1049
        0, 122, 123, 123, 125, 126, 128, 129, 
 
1050
        130, 131, 132, 133, 134, 135, 136, 137, 
 
1051
        138, 139, 140, 130, 141, 142, 143, 144, 
 
1052
        145, 146, 147, 138, 123, 124, 127, 0, 
 
1053
        410, 410, 149, 0, 149, 0, 122, 123, 
 
1054
        123, 125, 148, 128, 129, 131, 132, 133, 
 
1055
        134, 135, 136, 137, 138, 139, 140, 141, 
 
1056
        142, 143, 144, 145, 146, 147, 138, 123, 
 
1057
        124, 149, 0, 769, 769, 770, 770, 771, 
 
1058
        769, 772, 0, 765, 765, 766, 766, 767, 
 
1059
        765, 768, 0, 599, 599, 600, 600, 601, 
 
1060
        599, 602, 0, 607, 607, 608, 608, 609, 
 
1061
        607, 610, 0, 208, 209, 209, 211, 629, 
 
1062
        214, 215, 628, 217, 218, 219, 220, 221, 
 
1063
        222, 223, 224, 225, 226, 628, 227, 228, 
 
1064
        229, 230, 231, 232, 233, 224, 209, 210, 
 
1065
        630, 0, 415, 415, 389, 0, 389, 0, 
 
1066
        208, 209, 209, 211, 234, 214, 215, 217, 
 
1067
        218, 219, 220, 221, 222, 223, 224, 225, 
 
1068
        226, 227, 228, 229, 230, 231, 232, 233, 
 
1069
        224, 209, 210, 236, 0, 208, 209, 209, 
 
1070
        211, 237, 214, 215, 216, 217, 218, 219, 
 
1071
        220, 221, 222, 223, 224, 225, 226, 216, 
 
1072
        227, 228, 229, 230, 231, 232, 233, 224, 
 
1073
        209, 210, 236, 0, 682, 682, 549, 0, 
 
1074
        549, 0, 509, 509, 511, 548, 509, 510, 
 
1075
        549, 0, 208, 209, 209, 211, 237, 214, 
 
1076
        215, 628, 217, 218, 219, 220, 221, 222, 
 
1077
        223, 224, 225, 226, 628, 227, 228, 229, 
 
1078
        230, 231, 232, 233, 224, 209, 210, 627, 
 
1079
        0, 687, 687, 559, 0, 559, 0, 539, 
 
1080
        539, 541, 558, 539, 540, 559, 0, 685, 
 
1081
        685, 555, 0, 555, 0, 527, 527, 529, 
 
1082
        554, 527, 528, 555, 0, 746, 746, 707, 
 
1083
        0, 707, 0, 658, 658, 660, 706, 658, 
 
1084
        659, 707, 0, 743, 743, 698, 0, 698, 
 
1085
        0, 694, 694, 696, 697, 694, 695, 698, 
 
1086
        0, 686, 686, 557, 0, 557, 0, 533, 
 
1087
        533, 535, 556, 533, 534, 557, 0, 747, 
 
1088
        747, 709, 0, 709, 0, 664, 664, 666, 
 
1089
        708, 664, 665, 709, 0, 744, 744, 703, 
 
1090
        0, 703, 0, 699, 699, 701, 702, 699, 
 
1091
        700, 703, 0, 178, 179, 179, 181, 207, 
 
1092
        184, 185, 624, 187, 188, 189, 190, 191, 
 
1093
        192, 193, 194, 195, 196, 624, 197, 198, 
 
1094
        199, 200, 201, 202, 203, 194, 179, 180, 
 
1095
        623, 0, 684, 684, 553, 0, 553, 0, 
 
1096
        521, 521, 523, 552, 521, 522, 553, 0, 
 
1097
        745, 745, 705, 0, 705, 0, 652, 652, 
 
1098
        654, 704, 652, 653, 705, 0, 742, 742, 
 
1099
        693, 0, 693, 0, 689, 689, 691, 692, 
 
1100
        689, 690, 693, 0, 791, 791, 789, 0, 
 
1101
        789, 0, 751, 751, 753, 754, 751, 752, 
 
1102
        789, 0, 681, 681, 547, 0, 547, 0, 
 
1103
        504, 504, 506, 546, 504, 505, 547, 0, 
 
1104
        421, 421, 383, 0, 383, 0, 350, 377, 
 
1105
        377, 378, 382, 355, 356, 358, 359, 360, 
 
1106
        361, 362, 363, 364, 365, 366, 367, 368, 
 
1107
        369, 370, 371, 372, 373, 374, 365, 377, 
 
1108
        383, 0, 420, 420, 376, 0, 376, 0, 
 
1109
        350, 351, 351, 352, 375, 355, 356, 358, 
 
1110
        359, 360, 361, 362, 363, 364, 365, 366, 
 
1111
        367, 368, 369, 370, 371, 372, 373, 374, 
 
1112
        365, 351, 66, 376, 0, 350, 351, 351, 
 
1113
        352, 353, 355, 356, 357, 358, 359, 360, 
 
1114
        361, 362, 363, 364, 365, 366, 367, 357, 
 
1115
        368, 369, 370, 371, 372, 373, 374, 365, 
 
1116
        351, 66, 354, 0, 474, 474, 475, 475, 
 
1117
        476, 474, 477, 0, 351, 351, 352, 68, 
 
1118
        70, 70, 351, 66, 69, 0, 688, 688, 
 
1119
        560, 0, 560, 0, 351, 351, 352, 375, 
 
1120
        351, 66, 560, 0, 65, 65, 67, 68, 
 
1121
        70, 70, 65, 66, 69, 0, 565, 565, 
 
1122
        566, 565, 0, 21, 21, 22, 23, 24, 
 
1123
        24, 21, 3, 0, 4, 4, 1, 0, 
 
1124
        1, 0, 21, 21, 22, 21, 1, 0, 
 
1125
        61, 61, 62, 23, 24, 24, 61, 3, 
 
1126
        0, 680, 680, 545, 0, 545, 0, 499, 
 
1127
        499, 500, 38, 499, 33, 545, 0, 499, 
 
1128
        499, 500, 501, 503, 503, 499, 33, 502, 
 
1129
        0, 40, 40, 41, 27, 561, 561, 40, 
 
1130
        33, 498, 0, 40, 40, 41, 42, 561, 
 
1131
        561, 40, 33, 498, 0, 409, 409, 386, 
 
1132
        0, 386, 0, 40, 40, 41, 27, 40, 
 
1133
        33, 28, 0, 40, 40, 41, 42, 37, 
 
1134
        37, 40, 33, 28, 0, 408, 408, 39, 
 
1135
        0, 39, 0, 32, 32, 34, 38, 32, 
 
1136
        33, 39, 0, 16, 16, 17, 17, 18, 
 
1137
        16, 19, 0, 407, 407, 384, 0, 384, 
 
1138
        0, 25, 25, 26, 27, 25, 28, 0, 
 
1139
        647, 647, 429, 429, 430, 647, 433, 0, 
 
1140
        563, 563, 564, 563, 0, 43, 43, 44, 
 
1141
        43, 0, 32, 32, 34, 35, 37, 37, 
 
1142
        32, 33, 36, 0, 411, 411, 177, 0, 
 
1143
        177, 0, 150, 151, 151, 153, 176, 156, 
 
1144
        157, 159, 160, 161, 162, 163, 164, 165, 
 
1145
        166, 167, 168, 169, 170, 171, 172, 173, 
 
1146
        174, 175, 166, 151, 152, 177, 0, 683, 
 
1147
        683, 551, 0, 551, 0, 515, 515, 517, 
 
1148
        550, 515, 516, 551, 0, 0, 0
 
1149
};
 
1150
 
 
1151
static const short _svg_path_trans_targs_wi[] = {
 
1152
        1, 297, 33, 294, 296, 36, 37, 318, 
 
1153
        24, 25, 50, 35, 27, 28, 29, 319, 
 
1154
        312, 32, 33, 294, 31, 35, 36, 34, 
 
1155
        295, 27, 28, 29, 308, 26, 51, 313, 
 
1156
        31, 32, 312, 30, 319, 309, 33, 311, 
 
1157
        52, 53, 30, 38, 39, 38, 39, 24, 
 
1158
        25, 50, 72, 73, 74, 97, 24, 25, 
 
1159
        50, 72, 73, 74, 97, 59, 60, 59, 
 
1160
        60, 65, 46, 287, 44, 288, 289, 65, 
 
1161
        287, 326, 0, 2, 223, 213, 23, 71, 
 
1162
        111, 125, 126, 154, 182, 198, 212, 214, 
 
1163
        215, 216, 222, 230, 231, 232, 233, 49, 
 
1164
        96, 73, 72, 74, 97, 326, 213, 23, 
 
1165
        71, 111, 125, 2, 126, 154, 182, 198, 
 
1166
        212, 214, 215, 216, 222, 223, 230, 231, 
 
1167
        232, 233, 326, 11, 12, 19, 10, 226, 
 
1168
        23, 71, 227, 111, 125, 2, 126, 154, 
 
1169
        182, 198, 212, 214, 215, 216, 222, 223, 
 
1170
        230, 231, 232, 233, 13, 229, 326, 11, 
 
1171
        12, 19, 18, 22, 23, 71, 320, 111, 
 
1172
        125, 2, 126, 154, 182, 198, 212, 214, 
 
1173
        215, 216, 222, 223, 230, 231, 232, 233, 
 
1174
        13, 322, 326, 116, 117, 120, 119, 121, 
 
1175
        23, 71, 122, 111, 125, 2, 126, 154, 
 
1176
        182, 198, 212, 214, 215, 216, 222, 223, 
 
1177
        230, 231, 232, 233, 118, 124, 221, 119, 
 
1178
        326, 203, 204, 207, 206, 208, 23, 71, 
 
1179
        209, 111, 125, 2, 126, 154, 182, 198, 
 
1180
        212, 214, 215, 216, 222, 223, 230, 231, 
 
1181
        232, 233, 205, 211, 238, 206, 326, 96, 
 
1182
        73, 72, 95, 107, 23, 71, 108, 111, 
 
1183
        125, 2, 126, 154, 182, 198, 212, 214, 
 
1184
        215, 216, 222, 223, 230, 231, 232, 233, 
 
1185
        74, 110, 326, 171, 156, 155, 170, 178, 
 
1186
        23, 71, 179, 111, 125, 2, 126, 154, 
 
1187
        182, 198, 212, 214, 215, 216, 222, 223, 
 
1188
        230, 231, 232, 233, 157, 181, 326, 143, 
 
1189
        128, 127, 142, 150, 23, 71, 151, 111, 
 
1190
        125, 2, 126, 154, 182, 198, 212, 214, 
 
1191
        215, 216, 222, 223, 230, 231, 232, 233, 
 
1192
        129, 153, 326, 191, 184, 183, 190, 194, 
 
1193
        23, 71, 195, 111, 125, 2, 126, 154, 
 
1194
        182, 198, 212, 214, 215, 216, 222, 223, 
 
1195
        230, 231, 232, 233, 185, 197, 326, 45, 
 
1196
        69, 68, 286, 23, 71, 283, 111, 125, 
 
1197
        2, 126, 154, 182, 198, 212, 214, 215, 
 
1198
        216, 222, 223, 230, 231, 232, 233, 47, 
 
1199
        285, 49, 24, 48, 70, 280, 25, 282, 
 
1200
        315, 26, 307, 220, 115, 237, 202, 74, 
 
1201
        97, 9, 17, 118, 114, 217, 205, 201, 
 
1202
        234, 94, 169, 141, 189, 67, 47, 314, 
 
1203
        310, 306, 228, 321, 123, 219, 210, 236, 
 
1204
        109, 180, 152, 196, 284, 281, 57, 58, 
 
1205
        298, 53, 54, 302, 63, 42, 43, 64, 
 
1206
        292, 288, 225, 8, 9, 226, 21, 16, 
 
1207
        17, 22, 120, 117, 118, 121, 112, 113, 
 
1208
        114, 217, 207, 204, 205, 208, 199, 200, 
 
1209
        201, 234, 106, 93, 94, 107, 177, 168, 
 
1210
        169, 178, 149, 140, 141, 150, 193, 188, 
 
1211
        189, 194, 287, 66, 67, 286, 69, 46, 
 
1212
        47, 70, 56, 52, 76, 77, 98, 78, 
 
1213
        99, 62, 7, 15, 92, 167, 139, 187, 
 
1214
        65, 45, 304, 56, 57, 55, 302, 299, 
 
1215
        76, 77, 98, 75, 277, 7, 8, 225, 
 
1216
        6, 224, 239, 15, 16, 21, 14, 20, 
 
1217
        323, 92, 93, 106, 91, 105, 265, 167, 
 
1218
        168, 177, 166, 176, 246, 139, 140, 149, 
 
1219
        138, 148, 255, 187, 188, 193, 186, 192, 
 
1220
        243, 301, 78, 279, 9, 241, 17, 325, 
 
1221
        94, 267, 169, 248, 141, 257, 189, 245, 
 
1222
        291, 305, 303, 41, 316, 62, 63, 41, 
 
1223
        316, 62, 63, 3, 4, 5, 224, 19, 
 
1224
        12, 13, 20, 183, 184, 185, 192, 112, 
 
1225
        113, 114, 217, 199, 200, 201, 234, 3, 
 
1226
        4, 5, 224, 19, 12, 13, 20, 183, 
 
1227
        184, 185, 192, 112, 113, 114, 217, 199, 
 
1228
        200, 201, 234, 11, 12, 19, 13, 20, 
 
1229
        191, 184, 183, 185, 192, 116, 203, 264, 
 
1230
        218, 115, 217, 242, 235, 202, 234, 3, 
 
1231
        4, 5, 224, 104, 89, 90, 105, 175, 
 
1232
        164, 165, 176, 147, 136, 137, 148, 316, 
 
1233
        88, 163, 135, 41, 88, 89, 104, 87, 
 
1234
        103, 268, 163, 164, 175, 162, 174, 249, 
 
1235
        135, 136, 147, 134, 146, 258, 5, 13, 
 
1236
        90, 165, 137, 185, 43, 86, 161, 133, 
 
1237
        300, 278, 240, 324, 266, 247, 256, 244, 
 
1238
        290, 84, 85, 102, 86, 273, 159, 160, 
 
1239
        173, 161, 254, 131, 132, 145, 133, 263, 
 
1240
        90, 270, 165, 251, 137, 260, 83, 271, 
 
1241
        158, 252, 130, 261, 39, 40, 317, 60, 
 
1242
        61, 293, 38, 59, 102, 85, 86, 103, 
 
1243
        173, 160, 161, 174, 145, 132, 133, 146, 
 
1244
        84, 159, 131, 101, 172, 144, 272, 253, 
 
1245
        262, 269, 250, 259, 82, 157, 129, 80, 
 
1246
        81, 100, 82, 79, 274, 155, 156, 157, 
 
1247
        172, 127, 128, 129, 144, 155, 156, 157, 
 
1248
        172, 127, 128, 129, 144, 100, 81, 82, 
 
1249
        101, 155, 156, 157, 172, 127, 128, 129, 
 
1250
        144, 171, 143, 80, 99, 276, 78, 275
 
1251
};
 
1252
 
 
1253
static const unsigned char _svg_path_trans_actions_wi[] = {
 
1254
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1255
        0, 1, 1, 0, 0, 0, 1, 1, 
 
1256
        0, 1, 1, 1, 0, 3, 3, 0, 
 
1257
        0, 3, 3, 17, 17, 17, 17, 0, 
 
1258
        3, 17, 3, 0, 0, 0, 17, 0, 
 
1259
        3, 3, 17, 5, 5, 7, 7, 9, 
 
1260
        59, 59, 9, 59, 59, 59, 11, 62, 
 
1261
        62, 11, 62, 62, 62, 20, 20, 23, 
 
1262
        23, 53, 17, 53, 0, 0, 0, 56, 
 
1263
        56, 15, 0, 0, 0, 0, 0, 0, 
 
1264
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1265
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1266
        0, 1, 0, 1, 1, 65, 13, 13, 
 
1267
        13, 13, 13, 13, 13, 13, 13, 13, 
 
1268
        13, 13, 13, 13, 13, 13, 13, 13, 
 
1269
        13, 13, 72, 26, 68, 26, 0, 0, 
 
1270
        26, 26, 0, 26, 26, 26, 26, 26, 
 
1271
        26, 26, 26, 26, 26, 26, 26, 26, 
 
1272
        26, 26, 26, 26, 68, 0, 80, 29, 
 
1273
        76, 29, 0, 0, 29, 29, 0, 29, 
 
1274
        29, 29, 29, 29, 29, 29, 29, 29, 
 
1275
        29, 29, 29, 29, 29, 29, 29, 29, 
 
1276
        76, 0, 88, 32, 84, 32, 0, 0, 
 
1277
        32, 32, 0, 32, 32, 32, 32, 32, 
 
1278
        32, 32, 32, 32, 32, 32, 32, 32, 
 
1279
        32, 32, 32, 32, 84, 0, 84, 84, 
 
1280
        96, 35, 92, 35, 0, 0, 35, 35, 
 
1281
        0, 35, 35, 35, 35, 35, 35, 35, 
 
1282
        35, 35, 35, 35, 35, 35, 35, 35, 
 
1283
        35, 35, 92, 0, 92, 92, 104, 38, 
 
1284
        100, 38, 0, 0, 38, 38, 0, 38, 
 
1285
        38, 38, 38, 38, 38, 38, 38, 38, 
 
1286
        38, 38, 38, 38, 38, 38, 38, 38, 
 
1287
        100, 0, 112, 41, 108, 41, 0, 0, 
 
1288
        41, 41, 0, 41, 41, 41, 41, 41, 
 
1289
        41, 41, 41, 41, 41, 41, 41, 41, 
 
1290
        41, 41, 41, 41, 108, 0, 120, 44, 
 
1291
        116, 44, 0, 0, 44, 44, 0, 44, 
 
1292
        44, 44, 44, 44, 44, 44, 44, 44, 
 
1293
        44, 44, 44, 44, 44, 44, 44, 44, 
 
1294
        116, 0, 128, 47, 124, 47, 0, 0, 
 
1295
        47, 47, 0, 47, 47, 47, 47, 47, 
 
1296
        47, 47, 47, 47, 47, 47, 47, 47, 
 
1297
        47, 47, 47, 47, 124, 0, 136, 3, 
 
1298
        3, 0, 0, 50, 50, 0, 50, 50, 
 
1299
        50, 50, 50, 50, 50, 50, 50, 50, 
 
1300
        50, 50, 50, 50, 50, 50, 50, 17, 
 
1301
        0, 50, 50, 0, 0, 0, 132, 0, 
 
1302
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1303
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1304
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1305
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1306
        0, 0, 0, 0, 0, 0, 0, 1, 
 
1307
        1, 0, 1, 1, 0, 1, 1, 1, 
 
1308
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1309
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1310
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1311
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1312
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1313
        1, 1, 0, 1, 1, 1, 0, 1, 
 
1314
        1, 1, 0, 0, 0, 1, 0, 1, 
 
1315
        1, 0, 0, 0, 0, 0, 0, 0, 
 
1316
        0, 0, 17, 3, 3, 0, 0, 0, 
 
1317
        3, 17, 3, 0, 0, 3, 17, 3, 
 
1318
        0, 0, 0, 3, 17, 3, 0, 0, 
 
1319
        0, 3, 17, 3, 0, 0, 0, 3, 
 
1320
        17, 3, 0, 0, 0, 3, 17, 3, 
 
1321
        0, 0, 0, 3, 17, 3, 0, 0, 
 
1322
        0, 0, 17, 0, 17, 0, 17, 0, 
 
1323
        17, 0, 17, 0, 17, 0, 17, 0, 
 
1324
        0, 0, 17, 5, 5, 5, 5, 7, 
 
1325
        7, 7, 7, 9, 59, 59, 59, 9, 
 
1326
        59, 59, 59, 9, 59, 59, 59, 9, 
 
1327
        59, 59, 59, 9, 59, 59, 59, 11, 
 
1328
        62, 62, 62, 11, 62, 62, 62, 11, 
 
1329
        62, 62, 62, 11, 62, 62, 62, 11, 
 
1330
        62, 62, 62, 0, 1, 0, 1, 1, 
 
1331
        0, 1, 0, 1, 1, 0, 0, 84, 
 
1332
        0, 84, 84, 92, 0, 92, 92, 0, 
 
1333
        1, 1, 1, 0, 1, 1, 1, 0, 
 
1334
        1, 1, 1, 0, 1, 1, 1, 0, 
 
1335
        0, 0, 0, 0, 3, 17, 3, 0, 
 
1336
        0, 0, 3, 17, 3, 0, 0, 0, 
 
1337
        3, 17, 3, 0, 0, 0, 0, 0, 
 
1338
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1339
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1340
        0, 3, 17, 3, 17, 0, 3, 17, 
 
1341
        3, 17, 0, 3, 17, 3, 17, 0, 
 
1342
        17, 0, 17, 0, 17, 0, 0, 0, 
 
1343
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1344
        0, 0, 0, 0, 0, 1, 1, 1, 
 
1345
        0, 1, 1, 1, 0, 1, 1, 1, 
 
1346
        0, 0, 0, 0, 0, 0, 0, 0, 
 
1347
        0, 0, 0, 0, 0, 0, 0, 3, 
 
1348
        17, 3, 17, 0, 0, 9, 59, 59, 
 
1349
        59, 9, 59, 59, 59, 11, 62, 62, 
 
1350
        62, 11, 62, 62, 62, 0, 1, 1, 
 
1351
        1, 0, 1, 1, 1, 0, 1, 1, 
 
1352
        1, 0, 0, 0, 0, 0, 0, 0
 
1353
};
 
1354
 
 
1355
static const int svg_path_start = 0;
 
1356
 
 
1357
static const int svg_path_first_final = 326;
 
1358
 
 
1359
#line 133 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1360
 
 
1361
 
 
1362
void Parser::parse(char const *str)
 
1363
throw(SVGPathParseError)
 
1364
{
 
1365
    char const *p = str;
 
1366
    char const *start = NULL;
 
1367
    int cs;
 
1368
 
 
1369
    _reset();
 
1370
 
 
1371
    
 
1372
#line 1373 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
 
1373
        {
 
1374
        cs = svg_path_start;
 
1375
        }
 
1376
        {
 
1377
        int _klen;
 
1378
        unsigned int _trans;
 
1379
        const char *_acts;
 
1380
        unsigned int _nacts;
 
1381
        const char *_keys;
 
1382
 
 
1383
_resume:
 
1384
        if ( cs == 1 )
 
1385
                goto _out;
 
1386
        _keys = _svg_path_trans_keys + _svg_path_key_offsets[cs];
 
1387
        _trans = _svg_path_index_offsets[cs];
 
1388
 
 
1389
        _klen = _svg_path_single_lengths[cs];
 
1390
        if ( _klen > 0 ) {
 
1391
                const char *_lower = _keys;
 
1392
                const char *_mid;
 
1393
                const char *_upper = _keys + _klen - 1;
 
1394
                while (1) {
 
1395
                        if ( _upper < _lower )
 
1396
                                break;
 
1397
 
 
1398
                        _mid = _lower + ((_upper-_lower) >> 1);
 
1399
                        if ( (*p) < *_mid )
 
1400
                                _upper = _mid - 1;
 
1401
                        else if ( (*p) > *_mid )
 
1402
                                _lower = _mid + 1;
 
1403
                        else {
 
1404
                                _trans += (_mid - _keys);
 
1405
                                goto _match;
 
1406
                        }
 
1407
                }
 
1408
                _keys += _klen;
 
1409
                _trans += _klen;
 
1410
        }
 
1411
 
 
1412
        _klen = _svg_path_range_lengths[cs];
 
1413
        if ( _klen > 0 ) {
 
1414
                const char *_lower = _keys;
 
1415
                const char *_mid;
 
1416
                const char *_upper = _keys + (_klen<<1) - 2;
 
1417
                while (1) {
 
1418
                        if ( _upper < _lower )
 
1419
                                break;
 
1420
 
 
1421
                        _mid = _lower + (((_upper-_lower) >> 1) & ~1);
 
1422
                        if ( (*p) < _mid[0] )
 
1423
                                _upper = _mid - 2;
 
1424
                        else if ( (*p) > _mid[1] )
 
1425
                                _lower = _mid + 2;
 
1426
                        else {
 
1427
                                _trans += ((_mid - _keys)>>1);
 
1428
                                goto _match;
 
1429
                        }
 
1430
                }
 
1431
                _trans += _klen;
 
1432
        }
 
1433
 
 
1434
_match:
 
1435
        _trans = _svg_path_indicies[_trans];
 
1436
        cs = _svg_path_trans_targs_wi[_trans];
 
1437
 
 
1438
        if ( _svg_path_trans_actions_wi[_trans] == 0 )
 
1439
                goto _again;
 
1440
 
 
1441
        _acts = _svg_path_actions + _svg_path_trans_actions_wi[_trans];
 
1442
        _nacts = (unsigned int) *_acts++;
 
1443
        while ( _nacts-- > 0 )
 
1444
        {
 
1445
                switch ( *_acts++ )
 
1446
                {
 
1447
        case 0:
 
1448
#line 145 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1449
        {
 
1450
            start = p;
 
1451
        }
 
1452
        break;
 
1453
        case 1:
 
1454
#line 149 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1455
        {
 
1456
            char const *end=p;
 
1457
            std::string buf(start, end);
 
1458
            _push(g_ascii_strtod(buf.c_str(), NULL));
 
1459
            start = NULL;
 
1460
        }
 
1461
        break;
 
1462
        case 2:
 
1463
#line 156 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1464
        {
 
1465
            _push(1.0);
 
1466
        }
 
1467
        break;
 
1468
        case 3:
 
1469
#line 160 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1470
        {
 
1471
            _push(0.0);
 
1472
        }
 
1473
        break;
 
1474
        case 4:
 
1475
#line 164 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1476
        {
 
1477
            _absolute = true;
 
1478
        }
 
1479
        break;
 
1480
        case 5:
 
1481
#line 168 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1482
        {
 
1483
            _absolute = false;
 
1484
        }
 
1485
        break;
 
1486
        case 6:
 
1487
#line 172 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1488
        {
 
1489
            _moveTo(_pop_point());
 
1490
        }
 
1491
        break;
 
1492
        case 7:
 
1493
#line 176 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1494
        {
 
1495
            _lineTo(_pop_point());
 
1496
        }
 
1497
        break;
 
1498
        case 8:
 
1499
#line 180 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1500
        {
 
1501
            _lineTo(Point(_pop_coord(X), _current[Y]));
 
1502
        }
 
1503
        break;
 
1504
        case 9:
 
1505
#line 184 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1506
        {
 
1507
            _lineTo(Point(_current[X], _pop_coord(Y)));
 
1508
        }
 
1509
        break;
 
1510
        case 10:
 
1511
#line 188 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1512
        {
 
1513
            Point p = _pop_point();
 
1514
            Point c1 = _pop_point();
 
1515
            Point c0 = _pop_point();
 
1516
            _curveTo(c0, c1, p);
 
1517
        }
 
1518
        break;
 
1519
        case 11:
 
1520
#line 195 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1521
        {
 
1522
            Point p = _pop_point();
 
1523
            Point c1 = _pop_point();
 
1524
            _curveTo(_cubic_tangent, c1, p);
 
1525
        }
 
1526
        break;
 
1527
        case 12:
 
1528
#line 201 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1529
        {
 
1530
            Point p = _pop_point();
 
1531
            Point c = _pop_point();
 
1532
            _quadTo(c, p);
 
1533
        }
 
1534
        break;
 
1535
        case 13:
 
1536
#line 207 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1537
        {
 
1538
            Point p = _pop_point();
 
1539
            _quadTo(_quad_tangent, p);
 
1540
        }
 
1541
        break;
 
1542
        case 14:
 
1543
#line 212 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1544
        {
 
1545
            Point point = _pop_point();
 
1546
            bool sweep = _pop_flag();
 
1547
            bool large_arc = _pop_flag();
 
1548
            double angle = _pop();
 
1549
            double ry = _pop();
 
1550
            double rx = _pop();
 
1551
 
 
1552
            _arcTo(rx, ry, angle, large_arc, sweep, point);
 
1553
        }
 
1554
        break;
 
1555
        case 15:
 
1556
#line 223 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1557
        {
 
1558
            _closePath();
 
1559
        }
 
1560
        break;
 
1561
        case 16:
 
1562
#line 360 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1563
        {goto _out;}
 
1564
        break;
 
1565
#line 1566 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
 
1566
                }
 
1567
        }
 
1568
 
 
1569
_again:
 
1570
        p += 1;
 
1571
        goto _resume;
 
1572
        _out: {}
 
1573
        }
 
1574
#line 370 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
 
1575
 
 
1576
 
 
1577
    if ( cs < svg_path_first_final ) {
 
1578
        throw SVGPathParseError();
 
1579
    }
 
1580
}
 
1581
 
 
1582
}
 
1583
 
 
1584
void parse_svg_path(char const *str, SVGPathSink &sink)
 
1585
throw(SVGPathParseError)
 
1586
{
 
1587
    Parser parser(sink);
 
1588
    parser.parse(str);
 
1589
    sink.finish();
 
1590
}
 
1591
 
 
1592
}
 
1593
 
 
1594
/*
 
1595
  Local Variables:
 
1596
  mode:c++
 
1597
  c-file-style:"stroustrup"
 
1598
  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
 
1599
  indent-tabs-mode:nil
 
1600
  fill-column:99
 
1601
  End:
 
1602
*/
 
1603
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :