1
#line 1 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
4
* \brief parse SVG path specifications
6
* Copyright 2007 MenTaLguY <mental@rydia.net>
7
* Copyright 2007 Aaron Spike <aaron@ekips.org>
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.
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
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/
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.
39
#include <2geom/point.h>
40
#include <2geom/svg-path-parser.h>
41
#include <2geom/angle.h>
49
Parser(SVGPathSink &sink) : _sink(sink) {}
51
void parse(char const *str) throw(SVGPathParseError);
59
std::vector<double> _params;
64
_current = _initial = Point(0, 0);
65
_quad_tangent = _cubic_tangent = Point(0, 0);
69
void _push(double value) {
70
_params.push_back(value);
74
double value = _params.back();
83
double _pop_coord(Geom::Dim2 axis) {
87
return _pop() + _current[axis];
92
double y = _pop_coord(Geom::Y);
93
double x = _pop_coord(Geom::X);
97
void _moveTo(Point p) {
98
_quad_tangent = _cubic_tangent = _current = _initial = p;
102
void _hlineTo(Point p) {
103
_quad_tangent = _cubic_tangent = _current = p;
104
_sink.hlineTo(p[Geom::X]);
107
void _vlineTo(Point p) {
108
_quad_tangent = _cubic_tangent = _current = p;
109
_sink.vlineTo(p[Geom::Y]);
112
void _lineTo(Point p) {
113
_quad_tangent = _cubic_tangent = _current = p;
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);
123
void _quadTo(Point c, Point p) {
124
_cubic_tangent = _current = p;
125
_quad_tangent = p + ( p - c );
129
void _arcTo(double rx, double ry, double angle,
130
bool large_arc, bool sweep, Point p)
132
_quad_tangent = _cubic_tangent = _current = p;
133
_sink.arcTo(rx, ry, angle, large_arc, sweep, p);
137
_quad_tangent = _cubic_tangent = _current = _initial;
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
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
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,
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,
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,
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
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,
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,
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,
1143
static const int svg_path_start = 1;
1144
static const int svg_path_first_final = 270;
1146
static const int svg_path_en_main = 1;
1148
#line 144 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1151
void Parser::parse(char const *str)
1152
throw(SVGPathParseError)
1154
char const *p = str;
1155
char const *start = NULL;
1161
#line 1162 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1163
cs = svg_path_start;
1166
#line 1167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1169
unsigned int _trans;
1171
unsigned int _nacts;
1177
_keys = _svg_path_trans_keys + _svg_path_key_offsets[cs];
1178
_trans = _svg_path_index_offsets[cs];
1180
_klen = _svg_path_single_lengths[cs];
1182
const char *_lower = _keys;
1184
const char *_upper = _keys + _klen - 1;
1186
if ( _upper < _lower )
1189
_mid = _lower + ((_upper-_lower) >> 1);
1192
else if ( (*p) > *_mid )
1195
_trans += (_mid - _keys);
1203
_klen = _svg_path_range_lengths[cs];
1205
const char *_lower = _keys;
1207
const char *_upper = _keys + (_klen<<1) - 2;
1209
if ( _upper < _lower )
1212
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
1213
if ( (*p) < _mid[0] )
1215
else if ( (*p) > _mid[1] )
1218
_trans += ((_mid - _keys)>>1);
1226
_trans = _svg_path_indicies[_trans];
1227
cs = _svg_path_trans_targs_wi[_trans];
1229
if ( _svg_path_trans_actions_wi[_trans] == 0 )
1232
_acts = _svg_path_actions + _svg_path_trans_actions_wi[_trans];
1233
_nacts = (unsigned int) *_acts++;
1234
while ( _nacts-- > 0 )
1239
#line 156 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1245
#line 160 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1248
std::string buf(start, end);
1249
_push(g_ascii_strtod(buf.c_str(), NULL));
1254
#line 167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1260
#line 171 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1266
#line 175 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1272
#line 179 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1278
#line 183 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1280
_moveTo(_pop_point());
1284
#line 187 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1286
_lineTo(_pop_point());
1290
#line 191 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1292
_hlineTo(Point(_pop_coord(X), _current[Y]));
1296
#line 195 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1298
_vlineTo(Point(_current[X], _pop_coord(Y)));
1302
#line 199 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1304
Point p = _pop_point();
1305
Point c1 = _pop_point();
1306
Point c0 = _pop_point();
1307
_curveTo(c0, c1, p);
1311
#line 206 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1313
Point p = _pop_point();
1314
Point c1 = _pop_point();
1315
_curveTo(_cubic_tangent, c1, p);
1319
#line 212 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1321
Point p = _pop_point();
1322
Point c = _pop_point();
1327
#line 218 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1329
Point p = _pop_point();
1330
_quadTo(_quad_tangent, p);
1334
#line 223 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1336
Point point = _pop_point();
1337
bool sweep = _pop_flag();
1338
bool large_arc = _pop_flag();
1339
double angle = deg_to_rad(_pop());
1343
_arcTo(rx, ry, angle, large_arc, sweep, point);
1347
#line 234 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1353
#line 370 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1356
#line 1357 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
1367
#line 380 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
1370
if ( cs < svg_path_first_final ) {
1371
throw SVGPathParseError();
1377
void parse_svg_path(char const *str, SVGPathSink &sink)
1378
throw(SVGPathParseError)
1380
Parser parser(sink);
1390
c-file-style:"stroustrup"
1391
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
1392
indent-tabs-mode:nil
1396
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :