~ubuntu-branches/ubuntu/oneiric/inkscape/oneiric-updates

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Bryce Harrington
  • Date: 2009-07-02 17:09:45 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20090702170945-nn6d6zswovbwju1t
Tags: 0.47~pre1-0ubuntu1
* New upstream release.
  - Don't constrain maximization on small resolution devices (pre0)
    (LP: #348842)
  - Fixes segfault on startup (pre0)
    (LP: #391149)

Show diffs side-by-side

added added

removed removed

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