Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
svg-affine-parser.cpp
Go to the documentation of this file.
1
2#line 1 "svg-affine-parser.rl"
3// SPDX-License-Identifier: GPL-2.0-or-later
4/*
5 * SVG data parser
6 *
7 * Authors:
8 * Marc Jeanmougin <marc.jeanmougin@telecom-paris.fr>
9 *
10 * Copyright (C) 2019 Marc Jeanmougin (.rl parser, CSS-transform spec)
11 *
12 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
13 *
14 * THE CPP FILE IS GENERATED FROM THE RL FILE, DO NOT EDIT THE CPP
15 *
16 * To generate it, run
17 * ragel svg-affine-parser.rl -o svg-affine-parser.cpp
18 * sed -Ei 's/\‍(1\‍)/(true)/' svg-affine-parser.cpp
19 */
20
21#include <string>
22#include <glib.h>
23#include <2geom/transforms.h>
24#include "svg.h"
25#include "preferences.h"
26
27
28#line 29 "svg-affine-parser.cpp"
29static const char _svg_transform_actions[] = {
30 0, 1, 0, 1, 8, 1, 11, 1,
31 12, 1, 14, 1, 15, 1, 16, 2,
32 0, 8, 2, 1, 7, 2, 2, 7,
33 2, 3, 7, 2, 4, 7, 2, 5,
34 7, 2, 6, 7, 2, 9, 10, 2,
35 12, 0, 2, 12, 13, 3, 1, 7,
36 14, 3, 2, 7, 14, 3, 3, 7,
37 14, 3, 4, 7, 14, 3, 5, 7,
38 14, 3, 6, 7, 14, 3, 12, 1,
39 7, 3, 12, 2, 7, 3, 12, 3,
40 7, 3, 12, 4, 7, 3, 12, 5,
41 7, 3, 12, 6, 7
42};
43
44static const short _svg_transform_key_offsets[] = {
45 0, 0, 1, 2, 3, 4, 5, 10,
46 19, 22, 24, 36, 46, 49, 51, 63,
47 73, 76, 78, 90, 100, 103, 105, 117,
48 127, 130, 132, 144, 154, 157, 159, 168,
49 173, 181, 182, 183, 184, 185, 186, 191,
50 200, 203, 205, 217, 227, 230, 232, 244,
51 254, 257, 259, 271, 281, 284, 286, 298,
52 308, 311, 313, 325, 335, 338, 340, 349,
53 354, 358, 360, 367, 377, 386, 390, 392,
54 402, 414, 423, 427, 429, 439, 451, 460,
55 464, 466, 476, 488, 497, 501, 503, 513,
56 525, 534, 538, 540, 550, 562, 563, 564,
57 565, 566, 567, 572, 581, 584, 586, 599,
58 610, 612, 613, 614, 615, 620, 629, 632,
59 634, 647, 658, 659, 660, 661, 662, 663,
60 664, 665, 666, 671, 680, 683, 685, 698,
61 709, 712, 714, 723, 728, 732, 734, 741,
62 751, 760, 764, 766, 777, 790, 793, 795,
63 804, 809, 813, 815, 822, 832, 841, 845,
64 847, 858, 871, 872, 873, 875, 880, 889,
65 892, 894, 903, 908, 912, 914, 921, 931,
66 936, 945, 948, 950, 959, 964, 968, 970,
67 977, 987, 990, 992, 1004, 1014, 1017, 1019,
68 1028, 1033, 1037, 1039, 1046, 1056, 1065, 1069,
69 1071, 1081, 1093, 1102, 1106, 1108, 1119, 1132,
70 1136, 1138, 1145, 1155, 1164, 1168, 1170, 1180,
71 1192, 1201, 1205, 1207, 1217, 1229, 1238, 1242,
72 1244, 1254, 1266, 1275, 1279, 1281, 1291, 1303,
73 1312, 1316, 1318, 1328, 1340, 1341, 1342, 1343,
74 1344, 1345, 1350, 1359, 1362, 1364, 1377, 1388,
75 1391, 1393, 1405, 1415, 1418, 1420, 1429, 1434,
76 1438, 1440, 1447, 1457, 1466, 1470, 1472, 1482,
77 1494, 1503, 1507, 1509, 1520, 1533, 1535, 1536,
78 1537, 1538, 1543, 1552, 1555, 1557, 1570, 1581,
79 1584, 1586, 1595, 1600, 1604, 1606, 1613, 1623,
80 1632, 1636, 1638, 1649, 1662, 1663, 1664, 1666,
81 1671, 1680, 1683, 1685, 1694, 1699, 1703, 1705,
82 1712, 1722, 1727, 1736, 1739, 1741, 1750, 1755,
83 1759, 1761, 1768, 1778, 1779, 1780, 1781, 1782,
84 1783, 1784, 1785, 1786, 1791, 1800, 1803, 1805,
85 1818, 1829, 1832, 1834, 1843, 1848, 1852, 1854,
86 1861, 1871, 1880, 1884, 1886, 1897, 1910, 1918,
87 1926, 1935, 1944, 1953, 1962, 1971, 1980
88};
89
90static const char _svg_transform_trans_keys[] = {
91 97, 116, 114, 105, 120, 13, 32, 40,
92 9, 10, 13, 32, 43, 45, 46, 9,
93 10, 48, 57, 46, 48, 57, 48, 57,
94 13, 32, 44, 46, 69, 101, 9, 10,
95 43, 45, 48, 57, 13, 32, 44, 46,
96 9, 10, 43, 45, 48, 57, 46, 48,
97 57, 48, 57, 13, 32, 44, 46, 69,
98 101, 9, 10, 43, 45, 48, 57, 13,
99 32, 44, 46, 9, 10, 43, 45, 48,
100 57, 46, 48, 57, 48, 57, 13, 32,
101 44, 46, 69, 101, 9, 10, 43, 45,
102 48, 57, 13, 32, 44, 46, 9, 10,
103 43, 45, 48, 57, 46, 48, 57, 48,
104 57, 13, 32, 44, 46, 69, 101, 9,
105 10, 43, 45, 48, 57, 13, 32, 44,
106 46, 9, 10, 43, 45, 48, 57, 46,
107 48, 57, 48, 57, 13, 32, 44, 46,
108 69, 101, 9, 10, 43, 45, 48, 57,
109 13, 32, 44, 46, 9, 10, 43, 45,
110 48, 57, 46, 48, 57, 48, 57, 13,
111 32, 41, 69, 101, 9, 10, 48, 57,
112 13, 32, 41, 9, 10, 13, 32, 109,
113 114, 115, 116, 9, 10, 97, 116, 114,
114 105, 120, 13, 32, 40, 9, 10, 13,
115 32, 43, 45, 46, 9, 10, 48, 57,
116 46, 48, 57, 48, 57, 13, 32, 44,
117 46, 69, 101, 9, 10, 43, 45, 48,
118 57, 13, 32, 44, 46, 9, 10, 43,
119 45, 48, 57, 46, 48, 57, 48, 57,
120 13, 32, 44, 46, 69, 101, 9, 10,
121 43, 45, 48, 57, 13, 32, 44, 46,
122 9, 10, 43, 45, 48, 57, 46, 48,
123 57, 48, 57, 13, 32, 44, 46, 69,
124 101, 9, 10, 43, 45, 48, 57, 13,
125 32, 44, 46, 9, 10, 43, 45, 48,
126 57, 46, 48, 57, 48, 57, 13, 32,
127 44, 46, 69, 101, 9, 10, 43, 45,
128 48, 57, 13, 32, 44, 46, 9, 10,
129 43, 45, 48, 57, 46, 48, 57, 48,
130 57, 13, 32, 44, 46, 69, 101, 9,
131 10, 43, 45, 48, 57, 13, 32, 44,
132 46, 9, 10, 43, 45, 48, 57, 46,
133 48, 57, 48, 57, 13, 32, 41, 69,
134 101, 9, 10, 48, 57, 13, 32, 41,
135 9, 10, 43, 45, 48, 57, 48, 57,
136 13, 32, 41, 9, 10, 48, 57, 13,
137 32, 41, 46, 69, 101, 9, 10, 48,
138 57, 13, 32, 43, 45, 46, 9, 10,
139 48, 57, 43, 45, 48, 57, 48, 57,
140 13, 32, 44, 46, 9, 10, 43, 45,
141 48, 57, 13, 32, 44, 46, 69, 101,
142 9, 10, 43, 45, 48, 57, 13, 32,
143 43, 45, 46, 9, 10, 48, 57, 43,
144 45, 48, 57, 48, 57, 13, 32, 44,
145 46, 9, 10, 43, 45, 48, 57, 13,
146 32, 44, 46, 69, 101, 9, 10, 43,
147 45, 48, 57, 13, 32, 43, 45, 46,
148 9, 10, 48, 57, 43, 45, 48, 57,
149 48, 57, 13, 32, 44, 46, 9, 10,
150 43, 45, 48, 57, 13, 32, 44, 46,
151 69, 101, 9, 10, 43, 45, 48, 57,
152 13, 32, 43, 45, 46, 9, 10, 48,
153 57, 43, 45, 48, 57, 48, 57, 13,
154 32, 44, 46, 9, 10, 43, 45, 48,
155 57, 13, 32, 44, 46, 69, 101, 9,
156 10, 43, 45, 48, 57, 13, 32, 43,
157 45, 46, 9, 10, 48, 57, 43, 45,
158 48, 57, 48, 57, 13, 32, 44, 46,
159 9, 10, 43, 45, 48, 57, 13, 32,
160 44, 46, 69, 101, 9, 10, 43, 45,
161 48, 57, 111, 116, 97, 116, 101, 13,
162 32, 40, 9, 10, 13, 32, 43, 45,
163 46, 9, 10, 48, 57, 46, 48, 57,
164 48, 57, 13, 32, 41, 44, 46, 69,
165 101, 9, 10, 43, 45, 48, 57, 13,
166 32, 41, 44, 46, 9, 10, 43, 45,
167 48, 57, 99, 107, 97, 108, 101, 13,
168 32, 40, 9, 10, 13, 32, 43, 45,
169 46, 9, 10, 48, 57, 46, 48, 57,
170 48, 57, 13, 32, 41, 44, 46, 69,
171 101, 9, 10, 43, 45, 48, 57, 13,
172 32, 41, 44, 46, 9, 10, 43, 45,
173 48, 57, 114, 97, 110, 115, 108, 97,
174 116, 101, 13, 32, 40, 9, 10, 13,
175 32, 43, 45, 46, 9, 10, 48, 57,
176 46, 48, 57, 48, 57, 13, 32, 41,
177 44, 46, 69, 101, 9, 10, 43, 45,
178 48, 57, 13, 32, 41, 44, 46, 9,
179 10, 43, 45, 48, 57, 46, 48, 57,
180 48, 57, 13, 32, 41, 69, 101, 9,
181 10, 48, 57, 13, 32, 41, 9, 10,
182 43, 45, 48, 57, 48, 57, 13, 32,
183 41, 9, 10, 48, 57, 13, 32, 41,
184 46, 69, 101, 9, 10, 48, 57, 13,
185 32, 43, 45, 46, 9, 10, 48, 57,
186 43, 45, 48, 57, 48, 57, 13, 32,
187 41, 44, 46, 9, 10, 43, 45, 48,
188 57, 13, 32, 41, 44, 46, 69, 101,
189 9, 10, 43, 45, 48, 57, 46, 48,
190 57, 48, 57, 13, 32, 41, 69, 101,
191 9, 10, 48, 57, 13, 32, 41, 9,
192 10, 43, 45, 48, 57, 48, 57, 13,
193 32, 41, 9, 10, 48, 57, 13, 32,
194 41, 46, 69, 101, 9, 10, 48, 57,
195 13, 32, 43, 45, 46, 9, 10, 48,
196 57, 43, 45, 48, 57, 48, 57, 13,
197 32, 41, 44, 46, 9, 10, 43, 45,
198 48, 57, 13, 32, 41, 44, 46, 69,
199 101, 9, 10, 43, 45, 48, 57, 101,
200 119, 88, 89, 13, 32, 40, 9, 10,
201 13, 32, 43, 45, 46, 9, 10, 48,
202 57, 46, 48, 57, 48, 57, 13, 32,
203 41, 69, 101, 9, 10, 48, 57, 13,
204 32, 41, 9, 10, 43, 45, 48, 57,
205 48, 57, 13, 32, 41, 9, 10, 48,
206 57, 13, 32, 41, 46, 69, 101, 9,
207 10, 48, 57, 13, 32, 40, 9, 10,
208 13, 32, 43, 45, 46, 9, 10, 48,
209 57, 46, 48, 57, 48, 57, 13, 32,
210 41, 69, 101, 9, 10, 48, 57, 13,
211 32, 41, 9, 10, 43, 45, 48, 57,
212 48, 57, 13, 32, 41, 9, 10, 48,
213 57, 13, 32, 41, 46, 69, 101, 9,
214 10, 48, 57, 46, 48, 57, 48, 57,
215 13, 32, 44, 46, 69, 101, 9, 10,
216 43, 45, 48, 57, 13, 32, 44, 46,
217 9, 10, 43, 45, 48, 57, 46, 48,
218 57, 48, 57, 13, 32, 41, 69, 101,
219 9, 10, 48, 57, 13, 32, 41, 9,
220 10, 43, 45, 48, 57, 48, 57, 13,
221 32, 41, 9, 10, 48, 57, 13, 32,
222 41, 46, 69, 101, 9, 10, 48, 57,
223 13, 32, 43, 45, 46, 9, 10, 48,
224 57, 43, 45, 48, 57, 48, 57, 13,
225 32, 44, 46, 9, 10, 43, 45, 48,
226 57, 13, 32, 44, 46, 69, 101, 9,
227 10, 43, 45, 48, 57, 13, 32, 43,
228 45, 46, 9, 10, 48, 57, 43, 45,
229 48, 57, 48, 57, 13, 32, 41, 44,
230 46, 9, 10, 43, 45, 48, 57, 13,
231 32, 41, 44, 46, 69, 101, 9, 10,
232 43, 45, 48, 57, 43, 45, 48, 57,
233 48, 57, 13, 32, 41, 9, 10, 48,
234 57, 13, 32, 41, 46, 69, 101, 9,
235 10, 48, 57, 13, 32, 43, 45, 46,
236 9, 10, 48, 57, 43, 45, 48, 57,
237 48, 57, 13, 32, 44, 46, 9, 10,
238 43, 45, 48, 57, 13, 32, 44, 46,
239 69, 101, 9, 10, 43, 45, 48, 57,
240 13, 32, 43, 45, 46, 9, 10, 48,
241 57, 43, 45, 48, 57, 48, 57, 13,
242 32, 44, 46, 9, 10, 43, 45, 48,
243 57, 13, 32, 44, 46, 69, 101, 9,
244 10, 43, 45, 48, 57, 13, 32, 43,
245 45, 46, 9, 10, 48, 57, 43, 45,
246 48, 57, 48, 57, 13, 32, 44, 46,
247 9, 10, 43, 45, 48, 57, 13, 32,
248 44, 46, 69, 101, 9, 10, 43, 45,
249 48, 57, 13, 32, 43, 45, 46, 9,
250 10, 48, 57, 43, 45, 48, 57, 48,
251 57, 13, 32, 44, 46, 9, 10, 43,
252 45, 48, 57, 13, 32, 44, 46, 69,
253 101, 9, 10, 43, 45, 48, 57, 13,
254 32, 43, 45, 46, 9, 10, 48, 57,
255 43, 45, 48, 57, 48, 57, 13, 32,
256 44, 46, 9, 10, 43, 45, 48, 57,
257 13, 32, 44, 46, 69, 101, 9, 10,
258 43, 45, 48, 57, 111, 116, 97, 116,
259 101, 13, 32, 40, 9, 10, 13, 32,
260 43, 45, 46, 9, 10, 48, 57, 46,
261 48, 57, 48, 57, 13, 32, 41, 44,
262 46, 69, 101, 9, 10, 43, 45, 48,
263 57, 13, 32, 41, 44, 46, 9, 10,
264 43, 45, 48, 57, 46, 48, 57, 48,
265 57, 13, 32, 44, 46, 69, 101, 9,
266 10, 43, 45, 48, 57, 13, 32, 44,
267 46, 9, 10, 43, 45, 48, 57, 46,
268 48, 57, 48, 57, 13, 32, 41, 69,
269 101, 9, 10, 48, 57, 13, 32, 41,
270 9, 10, 43, 45, 48, 57, 48, 57,
271 13, 32, 41, 9, 10, 48, 57, 13,
272 32, 41, 46, 69, 101, 9, 10, 48,
273 57, 13, 32, 43, 45, 46, 9, 10,
274 48, 57, 43, 45, 48, 57, 48, 57,
275 13, 32, 44, 46, 9, 10, 43, 45,
276 48, 57, 13, 32, 44, 46, 69, 101,
277 9, 10, 43, 45, 48, 57, 13, 32,
278 43, 45, 46, 9, 10, 48, 57, 43,
279 45, 48, 57, 48, 57, 13, 32, 41,
280 44, 46, 9, 10, 43, 45, 48, 57,
281 13, 32, 41, 44, 46, 69, 101, 9,
282 10, 43, 45, 48, 57, 99, 107, 97,
283 108, 101, 13, 32, 40, 9, 10, 13,
284 32, 43, 45, 46, 9, 10, 48, 57,
285 46, 48, 57, 48, 57, 13, 32, 41,
286 44, 46, 69, 101, 9, 10, 43, 45,
287 48, 57, 13, 32, 41, 44, 46, 9,
288 10, 43, 45, 48, 57, 46, 48, 57,
289 48, 57, 13, 32, 41, 69, 101, 9,
290 10, 48, 57, 13, 32, 41, 9, 10,
291 43, 45, 48, 57, 48, 57, 13, 32,
292 41, 9, 10, 48, 57, 13, 32, 41,
293 46, 69, 101, 9, 10, 48, 57, 13,
294 32, 43, 45, 46, 9, 10, 48, 57,
295 43, 45, 48, 57, 48, 57, 13, 32,
296 41, 44, 46, 9, 10, 43, 45, 48,
297 57, 13, 32, 41, 44, 46, 69, 101,
298 9, 10, 43, 45, 48, 57, 101, 119,
299 88, 89, 13, 32, 40, 9, 10, 13,
300 32, 43, 45, 46, 9, 10, 48, 57,
301 46, 48, 57, 48, 57, 13, 32, 41,
302 69, 101, 9, 10, 48, 57, 13, 32,
303 41, 9, 10, 43, 45, 48, 57, 48,
304 57, 13, 32, 41, 9, 10, 48, 57,
305 13, 32, 41, 46, 69, 101, 9, 10,
306 48, 57, 13, 32, 40, 9, 10, 13,
307 32, 43, 45, 46, 9, 10, 48, 57,
308 46, 48, 57, 48, 57, 13, 32, 41,
309 69, 101, 9, 10, 48, 57, 13, 32,
310 41, 9, 10, 43, 45, 48, 57, 48,
311 57, 13, 32, 41, 9, 10, 48, 57,
312 13, 32, 41, 46, 69, 101, 9, 10,
313 48, 57, 114, 97, 110, 115, 108, 97,
314 116, 101, 13, 32, 40, 9, 10, 13,
315 32, 43, 45, 46, 9, 10, 48, 57,
316 46, 48, 57, 48, 57, 13, 32, 41,
317 44, 46, 69, 101, 9, 10, 43, 45,
318 48, 57, 13, 32, 41, 44, 46, 9,
319 10, 43, 45, 48, 57, 46, 48, 57,
320 48, 57, 13, 32, 41, 69, 101, 9,
321 10, 48, 57, 13, 32, 41, 9, 10,
322 43, 45, 48, 57, 48, 57, 13, 32,
323 41, 9, 10, 48, 57, 13, 32, 41,
324 46, 69, 101, 9, 10, 48, 57, 13,
325 32, 43, 45, 46, 9, 10, 48, 57,
326 43, 45, 48, 57, 48, 57, 13, 32,
327 41, 44, 46, 9, 10, 43, 45, 48,
328 57, 13, 32, 41, 44, 46, 69, 101,
329 9, 10, 43, 45, 48, 57, 13, 32,
330 109, 114, 115, 116, 9, 10, 13, 32,
331 109, 114, 115, 116, 9, 10, 13, 32,
332 44, 109, 114, 115, 116, 9, 10, 13,
333 32, 44, 109, 114, 115, 116, 9, 10,
334 13, 32, 44, 109, 114, 115, 116, 9,
335 10, 13, 32, 44, 109, 114, 115, 116,
336 9, 10, 13, 32, 44, 109, 114, 115,
337 116, 9, 10, 13, 32, 44, 109, 114,
338 115, 116, 9, 10, 13, 32, 44, 109,
339 114, 115, 116, 9, 10, 0
340};
341
342static const char _svg_transform_single_lengths[] = {
343 0, 1, 1, 1, 1, 1, 3, 5,
344 1, 0, 6, 4, 1, 0, 6, 4,
345 1, 0, 6, 4, 1, 0, 6, 4,
346 1, 0, 6, 4, 1, 0, 5, 3,
347 6, 1, 1, 1, 1, 1, 3, 5,
348 1, 0, 6, 4, 1, 0, 6, 4,
349 1, 0, 6, 4, 1, 0, 6, 4,
350 1, 0, 6, 4, 1, 0, 5, 3,
351 2, 0, 3, 6, 5, 2, 0, 4,
352 6, 5, 2, 0, 4, 6, 5, 2,
353 0, 4, 6, 5, 2, 0, 4, 6,
354 5, 2, 0, 4, 6, 1, 1, 1,
355 1, 1, 3, 5, 1, 0, 7, 5,
356 2, 1, 1, 1, 3, 5, 1, 0,
357 7, 5, 1, 1, 1, 1, 1, 1,
358 1, 1, 3, 5, 1, 0, 7, 5,
359 1, 0, 5, 3, 2, 0, 3, 6,
360 5, 2, 0, 5, 7, 1, 0, 5,
361 3, 2, 0, 3, 6, 5, 2, 0,
362 5, 7, 1, 1, 2, 3, 5, 1,
363 0, 5, 3, 2, 0, 3, 6, 3,
364 5, 1, 0, 5, 3, 2, 0, 3,
365 6, 1, 0, 6, 4, 1, 0, 5,
366 3, 2, 0, 3, 6, 5, 2, 0,
367 4, 6, 5, 2, 0, 5, 7, 2,
368 0, 3, 6, 5, 2, 0, 4, 6,
369 5, 2, 0, 4, 6, 5, 2, 0,
370 4, 6, 5, 2, 0, 4, 6, 5,
371 2, 0, 4, 6, 1, 1, 1, 1,
372 1, 3, 5, 1, 0, 7, 5, 1,
373 0, 6, 4, 1, 0, 5, 3, 2,
374 0, 3, 6, 5, 2, 0, 4, 6,
375 5, 2, 0, 5, 7, 2, 1, 1,
376 1, 3, 5, 1, 0, 7, 5, 1,
377 0, 5, 3, 2, 0, 3, 6, 5,
378 2, 0, 5, 7, 1, 1, 2, 3,
379 5, 1, 0, 5, 3, 2, 0, 3,
380 6, 3, 5, 1, 0, 5, 3, 2,
381 0, 3, 6, 1, 1, 1, 1, 1,
382 1, 1, 1, 3, 5, 1, 0, 7,
383 5, 1, 0, 5, 3, 2, 0, 3,
384 6, 5, 2, 0, 5, 7, 6, 6,
385 7, 7, 7, 7, 7, 7, 7
386};
387
388static const char _svg_transform_range_lengths[] = {
389 0, 0, 0, 0, 0, 0, 1, 2,
390 1, 1, 3, 3, 1, 1, 3, 3,
391 1, 1, 3, 3, 1, 1, 3, 3,
392 1, 1, 3, 3, 1, 1, 2, 1,
393 1, 0, 0, 0, 0, 0, 1, 2,
394 1, 1, 3, 3, 1, 1, 3, 3,
395 1, 1, 3, 3, 1, 1, 3, 3,
396 1, 1, 3, 3, 1, 1, 2, 1,
397 1, 1, 2, 2, 2, 1, 1, 3,
398 3, 2, 1, 1, 3, 3, 2, 1,
399 1, 3, 3, 2, 1, 1, 3, 3,
400 2, 1, 1, 3, 3, 0, 0, 0,
401 0, 0, 1, 2, 1, 1, 3, 3,
402 0, 0, 0, 0, 1, 2, 1, 1,
403 3, 3, 0, 0, 0, 0, 0, 0,
404 0, 0, 1, 2, 1, 1, 3, 3,
405 1, 1, 2, 1, 1, 1, 2, 2,
406 2, 1, 1, 3, 3, 1, 1, 2,
407 1, 1, 1, 2, 2, 2, 1, 1,
408 3, 3, 0, 0, 0, 1, 2, 1,
409 1, 2, 1, 1, 1, 2, 2, 1,
410 2, 1, 1, 2, 1, 1, 1, 2,
411 2, 1, 1, 3, 3, 1, 1, 2,
412 1, 1, 1, 2, 2, 2, 1, 1,
413 3, 3, 2, 1, 1, 3, 3, 1,
414 1, 2, 2, 2, 1, 1, 3, 3,
415 2, 1, 1, 3, 3, 2, 1, 1,
416 3, 3, 2, 1, 1, 3, 3, 2,
417 1, 1, 3, 3, 0, 0, 0, 0,
418 0, 1, 2, 1, 1, 3, 3, 1,
419 1, 3, 3, 1, 1, 2, 1, 1,
420 1, 2, 2, 2, 1, 1, 3, 3,
421 2, 1, 1, 3, 3, 0, 0, 0,
422 0, 1, 2, 1, 1, 3, 3, 1,
423 1, 2, 1, 1, 1, 2, 2, 2,
424 1, 1, 3, 3, 0, 0, 0, 1,
425 2, 1, 1, 2, 1, 1, 1, 2,
426 2, 1, 2, 1, 1, 2, 1, 1,
427 1, 2, 2, 0, 0, 0, 0, 0,
428 0, 0, 0, 1, 2, 1, 1, 3,
429 3, 1, 1, 2, 1, 1, 1, 2,
430 2, 2, 1, 1, 3, 3, 1, 1,
431 1, 1, 1, 1, 1, 1, 1
432};
433
434static const short _svg_transform_index_offsets[] = {
435 0, 0, 2, 4, 6, 8, 10, 15,
436 23, 26, 28, 38, 46, 49, 51, 61,
437 69, 72, 74, 84, 92, 95, 97, 107,
438 115, 118, 120, 130, 138, 141, 143, 151,
439 156, 164, 166, 168, 170, 172, 174, 179,
440 187, 190, 192, 202, 210, 213, 215, 225,
441 233, 236, 238, 248, 256, 259, 261, 271,
442 279, 282, 284, 294, 302, 305, 307, 315,
443 320, 324, 326, 332, 341, 349, 353, 355,
444 363, 373, 381, 385, 387, 395, 405, 413,
445 417, 419, 427, 437, 445, 449, 451, 459,
446 469, 477, 481, 483, 491, 501, 503, 505,
447 507, 509, 511, 516, 524, 527, 529, 540,
448 549, 552, 554, 556, 558, 563, 571, 574,
449 576, 587, 596, 598, 600, 602, 604, 606,
450 608, 610, 612, 617, 625, 628, 630, 641,
451 650, 653, 655, 663, 668, 672, 674, 680,
452 689, 697, 701, 703, 712, 723, 726, 728,
453 736, 741, 745, 747, 753, 762, 770, 774,
454 776, 785, 796, 798, 800, 803, 808, 816,
455 819, 821, 829, 834, 838, 840, 846, 855,
456 860, 868, 871, 873, 881, 886, 890, 892,
457 898, 907, 910, 912, 922, 930, 933, 935,
458 943, 948, 952, 954, 960, 969, 977, 981,
459 983, 991, 1001, 1009, 1013, 1015, 1024, 1035,
460 1039, 1041, 1047, 1056, 1064, 1068, 1070, 1078,
461 1088, 1096, 1100, 1102, 1110, 1120, 1128, 1132,
462 1134, 1142, 1152, 1160, 1164, 1166, 1174, 1184,
463 1192, 1196, 1198, 1206, 1216, 1218, 1220, 1222,
464 1224, 1226, 1231, 1239, 1242, 1244, 1255, 1264,
465 1267, 1269, 1279, 1287, 1290, 1292, 1300, 1305,
466 1309, 1311, 1317, 1326, 1334, 1338, 1340, 1348,
467 1358, 1366, 1370, 1372, 1381, 1392, 1395, 1397,
468 1399, 1401, 1406, 1414, 1417, 1419, 1430, 1439,
469 1442, 1444, 1452, 1457, 1461, 1463, 1469, 1478,
470 1486, 1490, 1492, 1501, 1512, 1514, 1516, 1519,
471 1524, 1532, 1535, 1537, 1545, 1550, 1554, 1556,
472 1562, 1571, 1576, 1584, 1587, 1589, 1597, 1602,
473 1606, 1608, 1614, 1623, 1625, 1627, 1629, 1631,
474 1633, 1635, 1637, 1639, 1644, 1652, 1655, 1657,
475 1668, 1677, 1680, 1682, 1690, 1695, 1699, 1701,
476 1707, 1716, 1724, 1728, 1730, 1739, 1750, 1758,
477 1766, 1775, 1784, 1793, 1802, 1811, 1820
478};
479
480static const short _svg_transform_indicies[] = {
481 1, 0, 2, 0, 3, 0, 4, 0,
482 5, 0, 5, 5, 6, 5, 0, 6,
483 6, 7, 7, 8, 6, 9, 0, 10,
484 11, 0, 12, 0, 13, 13, 15, 16,
485 17, 17, 13, 14, 12, 0, 18, 18,
486 20, 21, 18, 19, 22, 0, 23, 24,
487 0, 25, 0, 26, 26, 28, 29, 30,
488 30, 26, 27, 25, 0, 31, 31, 33,
489 34, 31, 32, 35, 0, 36, 37, 0,
490 38, 0, 39, 39, 41, 42, 43, 43,
491 39, 40, 38, 0, 44, 44, 46, 47,
492 44, 45, 48, 0, 49, 50, 0, 51,
493 0, 52, 52, 54, 55, 56, 56, 52,
494 53, 51, 0, 57, 57, 59, 60, 57,
495 58, 61, 0, 62, 63, 0, 64, 0,
496 65, 65, 67, 68, 69, 69, 65, 66,
497 64, 0, 70, 70, 72, 73, 70, 71,
498 74, 0, 75, 76, 0, 77, 0, 78,
499 78, 79, 80, 80, 78, 77, 0, 81,
500 81, 82, 81, 0, 84, 84, 85, 86,
501 87, 88, 84, 83, 89, 83, 90, 83,
502 91, 83, 92, 83, 93, 83, 93, 93,
503 94, 93, 83, 94, 94, 95, 95, 96,
504 94, 97, 83, 98, 99, 83, 100, 83,
505 101, 101, 103, 104, 105, 105, 101, 102,
506 100, 83, 106, 106, 108, 109, 106, 107,
507 110, 83, 111, 112, 83, 113, 83, 114,
508 114, 116, 117, 118, 118, 114, 115, 113,
509 83, 119, 119, 121, 122, 119, 120, 123,
510 83, 124, 125, 83, 126, 83, 127, 127,
511 129, 130, 131, 131, 127, 128, 126, 83,
512 132, 132, 134, 135, 132, 133, 136, 83,
513 137, 138, 83, 139, 83, 140, 140, 142,
514 143, 144, 144, 140, 141, 139, 83, 145,
515 145, 147, 148, 145, 146, 149, 83, 150,
516 151, 83, 152, 83, 153, 153, 155, 156,
517 157, 157, 153, 154, 152, 83, 158, 158,
518 160, 161, 158, 159, 162, 83, 163, 164,
519 83, 165, 83, 166, 166, 79, 167, 167,
520 166, 165, 83, 168, 168, 82, 168, 83,
521 169, 169, 170, 83, 170, 83, 166, 166,
522 79, 166, 170, 83, 166, 166, 79, 165,
523 167, 167, 166, 164, 83, 160, 160, 159,
524 159, 161, 160, 162, 83, 171, 171, 172,
525 83, 172, 83, 153, 153, 155, 156, 153,
526 154, 172, 83, 153, 153, 155, 152, 157,
527 157, 153, 154, 151, 83, 147, 147, 146,
528 146, 148, 147, 149, 83, 173, 173, 174,
529 83, 174, 83, 140, 140, 142, 143, 140,
530 141, 174, 83, 140, 140, 142, 139, 144,
531 144, 140, 141, 138, 83, 134, 134, 133,
532 133, 135, 134, 136, 83, 175, 175, 176,
533 83, 176, 83, 127, 127, 129, 130, 127,
534 128, 176, 83, 127, 127, 129, 126, 131,
535 131, 127, 128, 125, 83, 121, 121, 120,
536 120, 122, 121, 123, 83, 177, 177, 178,
537 83, 178, 83, 114, 114, 116, 117, 114,
538 115, 178, 83, 114, 114, 116, 113, 118,
539 118, 114, 115, 112, 83, 108, 108, 107,
540 107, 109, 108, 110, 83, 179, 179, 180,
541 83, 180, 83, 101, 101, 103, 104, 101,
542 102, 180, 83, 101, 101, 103, 100, 105,
543 105, 101, 102, 99, 83, 181, 83, 182,
544 83, 183, 83, 184, 83, 185, 83, 185,
545 185, 186, 185, 83, 186, 186, 187, 187,
546 188, 186, 189, 83, 190, 191, 83, 192,
547 83, 193, 193, 194, 196, 197, 198, 198,
548 193, 195, 192, 83, 199, 199, 200, 202,
549 203, 199, 201, 204, 83, 205, 206, 83,
550 207, 83, 208, 83, 209, 83, 209, 209,
551 210, 209, 83, 210, 210, 211, 211, 212,
552 210, 213, 83, 214, 215, 83, 216, 83,
553 217, 217, 218, 220, 221, 222, 222, 217,
554 219, 216, 83, 223, 223, 224, 226, 227,
555 223, 225, 228, 83, 229, 83, 230, 83,
556 231, 83, 232, 83, 233, 83, 234, 83,
557 235, 83, 236, 83, 236, 236, 237, 236,
558 83, 237, 237, 238, 238, 239, 237, 240,
559 83, 241, 242, 83, 243, 83, 244, 244,
560 245, 247, 248, 249, 249, 244, 246, 243,
561 83, 250, 250, 251, 253, 254, 250, 252,
562 255, 83, 256, 257, 83, 258, 83, 259,
563 259, 245, 260, 260, 259, 258, 83, 261,
564 261, 251, 261, 83, 262, 262, 263, 83,
565 263, 83, 259, 259, 245, 259, 263, 83,
566 259, 259, 245, 258, 260, 260, 259, 257,
567 83, 253, 253, 252, 252, 254, 253, 255,
568 83, 264, 264, 265, 83, 265, 83, 244,
569 244, 245, 247, 248, 244, 246, 265, 83,
570 244, 244, 245, 247, 243, 249, 249, 244,
571 246, 242, 83, 266, 267, 83, 268, 83,
572 269, 269, 218, 270, 270, 269, 268, 83,
573 271, 271, 224, 271, 83, 272, 272, 273,
574 83, 273, 83, 269, 269, 218, 269, 273,
575 83, 269, 269, 218, 268, 270, 270, 269,
576 267, 83, 226, 226, 225, 225, 227, 226,
577 228, 83, 274, 274, 275, 83, 275, 83,
578 217, 217, 218, 220, 221, 217, 219, 275,
579 83, 217, 217, 218, 220, 216, 222, 222,
580 217, 219, 215, 83, 276, 83, 277, 83,
581 278, 279, 83, 278, 278, 280, 278, 83,
582 280, 280, 281, 281, 282, 280, 283, 83,
583 284, 285, 83, 286, 83, 287, 287, 288,
584 289, 289, 287, 286, 83, 290, 290, 291,
585 290, 83, 292, 292, 293, 83, 293, 83,
586 287, 287, 288, 287, 293, 83, 287, 287,
587 288, 286, 289, 289, 287, 285, 83, 279,
588 279, 294, 279, 83, 294, 294, 295, 295,
589 296, 294, 297, 83, 298, 299, 83, 300,
590 83, 301, 301, 302, 303, 303, 301, 300,
591 83, 304, 304, 305, 304, 83, 306, 306,
592 307, 83, 307, 83, 301, 301, 302, 301,
593 307, 83, 301, 301, 302, 300, 303, 303,
594 301, 299, 83, 308, 309, 83, 310, 83,
595 311, 311, 313, 314, 315, 315, 311, 312,
596 310, 83, 316, 316, 318, 319, 316, 317,
597 320, 83, 321, 322, 83, 323, 83, 324,
598 324, 194, 325, 325, 324, 323, 83, 326,
599 326, 200, 326, 83, 327, 327, 328, 83,
600 328, 83, 324, 324, 194, 324, 328, 83,
601 324, 324, 194, 323, 325, 325, 324, 322,
602 83, 318, 318, 317, 317, 319, 318, 320,
603 83, 329, 329, 330, 83, 330, 83, 311,
604 311, 313, 314, 311, 312, 330, 83, 311,
605 311, 313, 310, 315, 315, 311, 312, 309,
606 83, 202, 202, 201, 201, 203, 202, 204,
607 83, 331, 331, 332, 83, 332, 83, 193,
608 193, 194, 196, 197, 193, 195, 332, 83,
609 193, 193, 194, 196, 192, 198, 198, 193,
610 195, 191, 83, 333, 333, 334, 0, 334,
611 0, 78, 78, 79, 78, 334, 0, 78,
612 78, 79, 77, 80, 80, 78, 76, 0,
613 72, 72, 71, 71, 73, 72, 74, 0,
614 335, 335, 336, 0, 336, 0, 65, 65,
615 67, 68, 65, 66, 336, 0, 65, 65,
616 67, 64, 69, 69, 65, 66, 63, 0,
617 59, 59, 58, 58, 60, 59, 61, 0,
618 337, 337, 338, 0, 338, 0, 52, 52,
619 54, 55, 52, 53, 338, 0, 52, 52,
620 54, 51, 56, 56, 52, 53, 50, 0,
621 46, 46, 45, 45, 47, 46, 48, 0,
622 339, 339, 340, 0, 340, 0, 39, 39,
623 41, 42, 39, 40, 340, 0, 39, 39,
624 41, 38, 43, 43, 39, 40, 37, 0,
625 33, 33, 32, 32, 34, 33, 35, 0,
626 341, 341, 342, 0, 342, 0, 26, 26,
627 28, 29, 26, 27, 342, 0, 26, 26,
628 28, 25, 30, 30, 26, 27, 24, 0,
629 20, 20, 19, 19, 21, 20, 22, 0,
630 343, 343, 344, 0, 344, 0, 13, 13,
631 15, 16, 13, 14, 344, 0, 13, 13,
632 15, 12, 17, 17, 13, 14, 11, 0,
633 345, 0, 346, 0, 347, 0, 348, 0,
634 349, 0, 349, 349, 350, 349, 0, 350,
635 350, 351, 351, 352, 350, 353, 0, 354,
636 355, 0, 356, 0, 357, 357, 194, 359,
637 360, 361, 361, 357, 358, 356, 0, 362,
638 362, 200, 364, 365, 362, 363, 366, 0,
639 367, 368, 0, 369, 0, 370, 370, 372,
640 373, 374, 374, 370, 371, 369, 0, 375,
641 375, 377, 378, 375, 376, 379, 0, 380,
642 381, 0, 382, 0, 383, 383, 194, 384,
643 384, 383, 382, 0, 385, 385, 200, 385,
644 0, 386, 386, 387, 0, 387, 0, 383,
645 383, 194, 383, 387, 0, 383, 383, 194,
646 382, 384, 384, 383, 381, 0, 377, 377,
647 376, 376, 378, 377, 379, 0, 388, 388,
648 389, 0, 389, 0, 370, 370, 372, 373,
649 370, 371, 389, 0, 370, 370, 372, 369,
650 374, 374, 370, 371, 368, 0, 364, 364,
651 363, 363, 365, 364, 366, 0, 390, 390,
652 391, 0, 391, 0, 357, 357, 194, 359,
653 360, 357, 358, 391, 0, 357, 357, 194,
654 359, 356, 361, 361, 357, 358, 355, 0,
655 392, 393, 0, 394, 0, 395, 0, 396,
656 0, 396, 396, 397, 396, 0, 397, 397,
657 398, 398, 399, 397, 400, 0, 401, 402,
658 0, 403, 0, 404, 404, 218, 406, 407,
659 408, 408, 404, 405, 403, 0, 409, 409,
660 224, 411, 412, 409, 410, 413, 0, 414,
661 415, 0, 416, 0, 417, 417, 218, 418,
662 418, 417, 416, 0, 419, 419, 224, 419,
663 0, 420, 420, 421, 0, 421, 0, 417,
664 417, 218, 417, 421, 0, 417, 417, 218,
665 416, 418, 418, 417, 415, 0, 411, 411,
666 410, 410, 412, 411, 413, 0, 422, 422,
667 423, 0, 423, 0, 404, 404, 218, 406,
668 407, 404, 405, 423, 0, 404, 404, 218,
669 406, 403, 408, 408, 404, 405, 402, 0,
670 424, 0, 425, 0, 426, 427, 0, 426,
671 426, 428, 426, 0, 428, 428, 429, 429,
672 430, 428, 431, 0, 432, 433, 0, 434,
673 0, 435, 435, 288, 436, 436, 435, 434,
674 0, 437, 437, 291, 437, 0, 438, 438,
675 439, 0, 439, 0, 435, 435, 288, 435,
676 439, 0, 435, 435, 288, 434, 436, 436,
677 435, 433, 0, 427, 427, 440, 427, 0,
678 440, 440, 441, 441, 442, 440, 443, 0,
679 444, 445, 0, 446, 0, 447, 447, 302,
680 448, 448, 447, 446, 0, 449, 449, 305,
681 449, 0, 450, 450, 451, 0, 451, 0,
682 447, 447, 302, 447, 451, 0, 447, 447,
683 302, 446, 448, 448, 447, 445, 0, 452,
684 0, 453, 0, 454, 0, 455, 0, 456,
685 0, 457, 0, 458, 0, 459, 0, 459,
686 459, 460, 459, 0, 460, 460, 461, 461,
687 462, 460, 463, 0, 464, 465, 0, 466,
688 0, 467, 467, 245, 469, 470, 471, 471,
689 467, 468, 466, 0, 472, 472, 251, 474,
690 475, 472, 473, 476, 0, 477, 478, 0,
691 479, 0, 480, 480, 245, 481, 481, 480,
692 479, 0, 482, 482, 251, 482, 0, 483,
693 483, 484, 0, 484, 0, 480, 480, 245,
694 480, 484, 0, 480, 480, 245, 479, 481,
695 481, 480, 478, 0, 474, 474, 473, 473,
696 475, 474, 476, 0, 485, 485, 486, 0,
697 486, 0, 467, 467, 245, 469, 470, 467,
698 468, 486, 0, 467, 467, 245, 469, 466,
699 471, 471, 467, 468, 465, 0, 487, 487,
700 489, 490, 491, 492, 487, 488, 487, 487,
701 489, 490, 491, 492, 487, 0, 494, 494,
702 495, 496, 497, 498, 499, 494, 493, 501,
703 501, 84, 85, 86, 87, 88, 501, 500,
704 503, 503, 504, 505, 506, 507, 508, 503,
705 502, 510, 510, 511, 512, 513, 514, 515,
706 510, 509, 517, 517, 518, 519, 520, 521,
707 522, 517, 516, 524, 524, 525, 526, 527,
708 528, 529, 524, 523, 531, 531, 532, 533,
709 534, 535, 536, 531, 530, 0
710};
711
712static const short _svg_transform_trans_targs[] = {
713 334, 2, 3, 4, 5, 6, 7, 8,
714 9, 227, 9, 227, 10, 11, 12, 223,
715 13, 224, 11, 12, 223, 13, 222, 13,
716 222, 14, 15, 16, 218, 17, 219, 15,
717 16, 218, 17, 217, 17, 217, 18, 19,
718 20, 213, 21, 214, 19, 20, 213, 21,
719 212, 21, 212, 22, 23, 24, 208, 25,
720 209, 23, 24, 208, 25, 207, 25, 207,
721 26, 27, 28, 203, 29, 204, 27, 28,
722 203, 29, 202, 29, 202, 30, 31, 336,
723 199, 31, 336, 334, 32, 33, 93, 104,
724 114, 34, 35, 36, 37, 38, 39, 40,
725 41, 92, 41, 92, 42, 43, 44, 88,
726 45, 89, 43, 44, 88, 45, 87, 45,
727 87, 46, 47, 48, 83, 49, 84, 47,
728 48, 83, 49, 82, 49, 82, 50, 51,
729 52, 78, 53, 79, 51, 52, 78, 53,
730 77, 53, 77, 54, 55, 56, 73, 57,
731 74, 55, 56, 73, 57, 72, 57, 72,
732 58, 59, 60, 68, 61, 69, 59, 60,
733 68, 61, 67, 61, 67, 62, 63, 64,
734 63, 65, 66, 70, 71, 75, 76, 80,
735 81, 85, 86, 90, 91, 94, 95, 96,
736 97, 98, 99, 100, 101, 198, 101, 198,
737 102, 103, 338, 177, 194, 178, 195, 103,
738 338, 177, 194, 178, 193, 105, 154, 106,
739 107, 108, 109, 110, 111, 153, 111, 153,
740 112, 113, 339, 141, 149, 142, 150, 113,
741 339, 141, 149, 142, 148, 115, 116, 117,
742 118, 119, 120, 121, 122, 123, 124, 125,
743 140, 125, 140, 126, 127, 340, 128, 136,
744 129, 137, 127, 340, 128, 136, 129, 135,
745 129, 135, 130, 131, 132, 131, 133, 134,
746 138, 139, 142, 148, 143, 144, 145, 144,
747 146, 147, 151, 152, 155, 156, 157, 167,
748 158, 159, 160, 166, 160, 166, 161, 162,
749 341, 163, 162, 341, 164, 165, 168, 169,
750 170, 176, 170, 176, 171, 172, 342, 173,
751 172, 342, 174, 175, 178, 193, 179, 180,
752 181, 189, 182, 190, 180, 181, 189, 182,
753 188, 182, 188, 183, 184, 185, 184, 186,
754 187, 191, 192, 196, 197, 200, 201, 205,
755 206, 210, 211, 215, 216, 220, 221, 225,
756 226, 229, 230, 231, 232, 233, 234, 235,
757 236, 260, 236, 260, 237, 238, 239, 256,
758 240, 257, 238, 239, 256, 240, 255, 240,
759 255, 241, 242, 243, 251, 244, 252, 242,
760 243, 251, 244, 250, 244, 250, 245, 246,
761 247, 246, 248, 249, 253, 254, 258, 259,
762 262, 284, 263, 264, 265, 266, 267, 268,
763 283, 268, 283, 269, 270, 271, 279, 272,
764 280, 270, 271, 279, 272, 278, 272, 278,
765 273, 274, 275, 274, 276, 277, 281, 282,
766 285, 286, 287, 297, 288, 289, 290, 296,
767 290, 296, 291, 292, 293, 292, 294, 295,
768 298, 299, 300, 306, 300, 306, 301, 302,
769 303, 302, 304, 305, 308, 309, 310, 311,
770 312, 313, 314, 315, 316, 317, 318, 333,
771 318, 333, 319, 320, 321, 329, 322, 330,
772 320, 321, 329, 322, 328, 322, 328, 323,
773 324, 325, 324, 326, 327, 331, 332, 335,
774 0, 1, 228, 261, 307, 334, 337, 32,
775 33, 93, 104, 114, 334, 337, 334, 337,
776 32, 33, 93, 104, 114, 334, 337, 32,
777 33, 93, 104, 114, 334, 337, 32, 33,
778 93, 104, 114, 334, 337, 32, 33, 93,
779 104, 114, 334, 337, 32, 33, 93, 104,
780 114
781};
782
783static const char _svg_transform_trans_actions[] = {
784 13, 0, 0, 0, 0, 0, 0, 3,
785 3, 3, 0, 0, 0, 1, 15, 1,
786 15, 0, 0, 3, 0, 3, 3, 0,
787 0, 0, 1, 15, 1, 15, 0, 0,
788 3, 0, 3, 3, 0, 0, 0, 1,
789 15, 1, 15, 0, 0, 3, 0, 3,
790 3, 0, 0, 0, 1, 15, 1, 15,
791 0, 0, 3, 0, 3, 3, 0, 0,
792 0, 1, 15, 1, 15, 0, 0, 3,
793 0, 3, 3, 0, 0, 0, 1, 39,
794 0, 0, 7, 11, 0, 0, 0, 0,
795 0, 0, 0, 0, 0, 0, 0, 3,
796 3, 3, 0, 0, 0, 1, 15, 1,
797 15, 0, 0, 3, 0, 3, 3, 0,
798 0, 0, 1, 15, 1, 15, 0, 0,
799 3, 0, 3, 3, 0, 0, 0, 1,
800 15, 1, 15, 0, 0, 3, 0, 3,
801 3, 0, 0, 0, 1, 15, 1, 15,
802 0, 0, 3, 0, 3, 3, 0, 0,
803 0, 1, 15, 1, 15, 0, 0, 3,
804 0, 3, 3, 0, 0, 0, 1, 0,
805 0, 0, 0, 0, 0, 0, 0, 0,
806 0, 0, 0, 0, 0, 0, 0, 0,
807 0, 0, 0, 3, 3, 3, 0, 0,
808 0, 1, 39, 15, 1, 15, 0, 0,
809 7, 3, 0, 3, 3, 0, 0, 0,
810 0, 0, 0, 3, 3, 3, 0, 0,
811 0, 1, 39, 15, 1, 15, 0, 0,
812 7, 3, 0, 3, 3, 0, 0, 0,
813 0, 0, 0, 0, 0, 0, 3, 3,
814 3, 0, 0, 0, 1, 39, 15, 1,
815 15, 0, 0, 7, 3, 0, 3, 3,
816 0, 0, 0, 1, 0, 0, 0, 0,
817 0, 0, 0, 0, 0, 1, 0, 0,
818 0, 0, 0, 0, 0, 0, 0, 0,
819 0, 3, 3, 3, 0, 0, 0, 1,
820 39, 0, 0, 7, 0, 0, 0, 3,
821 3, 3, 0, 0, 0, 1, 39, 0,
822 0, 7, 0, 0, 0, 0, 0, 1,
823 15, 1, 15, 0, 0, 3, 0, 3,
824 3, 0, 0, 0, 1, 0, 0, 0,
825 0, 0, 0, 0, 0, 0, 0, 0,
826 0, 0, 0, 0, 0, 0, 0, 0,
827 0, 0, 0, 0, 0, 0, 0, 3,
828 3, 3, 0, 0, 0, 1, 15, 1,
829 15, 0, 0, 3, 0, 3, 3, 0,
830 0, 0, 1, 15, 1, 15, 0, 0,
831 3, 0, 3, 3, 0, 0, 0, 1,
832 0, 0, 0, 0, 0, 0, 0, 0,
833 0, 0, 0, 0, 0, 0, 3, 3,
834 3, 0, 0, 0, 1, 15, 1, 15,
835 0, 0, 3, 0, 3, 3, 0, 0,
836 0, 1, 0, 0, 0, 0, 0, 0,
837 0, 0, 0, 0, 0, 3, 3, 3,
838 0, 0, 0, 1, 0, 0, 0, 0,
839 0, 3, 3, 3, 0, 0, 0, 1,
840 0, 0, 0, 0, 0, 0, 0, 0,
841 0, 0, 0, 0, 0, 3, 3, 3,
842 0, 0, 0, 1, 15, 1, 15, 0,
843 0, 3, 0, 3, 3, 0, 0, 0,
844 1, 0, 0, 0, 0, 0, 0, 42,
845 0, 0, 0, 0, 0, 65, 89, 33,
846 33, 33, 33, 33, 9, 7, 53, 77,
847 24, 24, 24, 24, 24, 49, 73, 21,
848 21, 21, 21, 21, 45, 69, 18, 18,
849 18, 18, 18, 57, 81, 27, 27, 27,
850 27, 27, 61, 85, 30, 30, 30, 30,
851 30
852};
853
854static const char _svg_transform_to_state_actions[] = {
855 0, 0, 0, 0, 0, 0, 0, 0,
856 0, 0, 0, 0, 0, 0, 0, 0,
857 0, 0, 0, 0, 0, 0, 0, 0,
858 0, 0, 0, 0, 0, 0, 0, 0,
859 0, 0, 0, 0, 0, 0, 0, 0,
860 0, 0, 0, 0, 0, 0, 0, 0,
861 0, 0, 0, 0, 0, 0, 0, 0,
862 0, 0, 0, 0, 0, 0, 0, 0,
863 0, 0, 0, 0, 0, 0, 0, 0,
864 0, 0, 0, 0, 0, 0, 0, 0,
865 0, 0, 0, 0, 0, 0, 0, 0,
866 0, 0, 0, 0, 0, 0, 0, 0,
867 0, 0, 0, 0, 0, 0, 0, 0,
868 0, 0, 0, 0, 0, 0, 0, 0,
869 0, 0, 0, 0, 0, 0, 0, 0,
870 0, 0, 0, 0, 0, 0, 0, 0,
871 0, 0, 0, 0, 0, 0, 0, 0,
872 0, 0, 0, 0, 0, 0, 0, 0,
873 0, 0, 0, 0, 0, 0, 0, 0,
874 0, 0, 0, 0, 0, 0, 0, 0,
875 0, 0, 0, 0, 0, 0, 0, 0,
876 0, 0, 0, 0, 0, 0, 0, 0,
877 0, 0, 0, 0, 0, 0, 0, 0,
878 0, 0, 0, 0, 0, 0, 0, 0,
879 0, 0, 0, 0, 0, 0, 0, 0,
880 0, 0, 0, 0, 0, 0, 0, 0,
881 0, 0, 0, 0, 0, 0, 0, 0,
882 0, 0, 0, 0, 0, 0, 0, 0,
883 0, 0, 0, 0, 0, 0, 0, 0,
884 0, 0, 0, 0, 0, 0, 0, 0,
885 0, 0, 0, 0, 0, 0, 0, 0,
886 0, 0, 0, 0, 0, 0, 0, 0,
887 0, 0, 0, 0, 0, 0, 0, 0,
888 0, 0, 0, 0, 0, 0, 0, 0,
889 0, 0, 0, 0, 0, 0, 0, 0,
890 0, 0, 0, 0, 0, 0, 0, 0,
891 0, 0, 0, 0, 0, 0, 0, 0,
892 0, 0, 0, 0, 0, 0, 0, 0,
893 0, 0, 0, 0, 0, 0, 0, 0,
894 0, 0, 0, 0, 0, 0, 0, 0,
895 0, 0, 0, 0, 0, 0, 0, 0,
896 0, 0, 0, 0, 0, 0, 36, 0,
897 0, 0, 0, 0, 0, 0, 0
898};
899
901 0, 0, 0, 0, 0, 0, 0, 0,
902 0, 0, 0, 0, 0, 0, 0, 0,
903 0, 0, 0, 0, 0, 0, 0, 0,
904 0, 0, 0, 0, 0, 0, 0, 0,
905 0, 0, 0, 0, 0, 0, 0, 0,
906 0, 0, 0, 0, 0, 0, 0, 0,
907 0, 0, 0, 0, 0, 0, 0, 0,
908 0, 0, 0, 0, 0, 0, 0, 0,
909 0, 0, 0, 0, 0, 0, 0, 0,
910 0, 0, 0, 0, 0, 0, 0, 0,
911 0, 0, 0, 0, 0, 0, 0, 0,
912 0, 0, 0, 0, 0, 0, 0, 0,
913 0, 0, 0, 0, 0, 0, 0, 0,
914 0, 0, 0, 0, 0, 0, 0, 0,
915 0, 0, 0, 0, 0, 0, 0, 0,
916 0, 0, 0, 0, 0, 0, 0, 0,
917 0, 0, 0, 0, 0, 0, 0, 0,
918 0, 0, 0, 0, 0, 0, 0, 0,
919 0, 0, 0, 0, 0, 0, 0, 0,
920 0, 0, 0, 0, 0, 0, 0, 0,
921 0, 0, 0, 0, 0, 0, 0, 0,
922 0, 0, 0, 0, 0, 0, 0, 0,
923 0, 0, 0, 0, 0, 0, 0, 0,
924 0, 0, 0, 0, 0, 0, 0, 0,
925 0, 0, 0, 0, 0, 0, 0, 0,
926 0, 0, 0, 0, 0, 0, 0, 0,
927 0, 0, 0, 0, 0, 0, 0, 0,
928 0, 0, 0, 0, 0, 0, 0, 0,
929 0, 0, 0, 0, 0, 0, 0, 0,
930 0, 0, 0, 0, 0, 0, 0, 0,
931 0, 0, 0, 0, 0, 0, 0, 0,
932 0, 0, 0, 0, 0, 0, 0, 0,
933 0, 0, 0, 0, 0, 0, 0, 0,
934 0, 0, 0, 0, 0, 0, 0, 0,
935 0, 0, 0, 0, 0, 0, 0, 0,
936 0, 0, 0, 0, 0, 0, 0, 0,
937 0, 0, 0, 0, 0, 0, 0, 0,
938 0, 0, 0, 0, 0, 0, 0, 0,
939 0, 0, 0, 0, 0, 0, 0, 0,
940 0, 0, 0, 0, 0, 0, 0, 0,
941 0, 0, 0, 0, 0, 0, 0, 0,
942 0, 0, 0, 0, 0, 0, 5, 0,
943 0, 0, 0, 0, 0, 0, 0
944};
945
946static const short _svg_transform_eof_trans[] = {
947 0, 1, 1, 1, 1, 1, 1, 1,
948 1, 1, 1, 1, 1, 1, 1, 1,
949 1, 1, 1, 1, 1, 1, 1, 1,
950 1, 1, 1, 1, 1, 1, 1, 1,
951 84, 84, 84, 84, 84, 84, 84, 84,
952 84, 84, 84, 84, 84, 84, 84, 84,
953 84, 84, 84, 84, 84, 84, 84, 84,
954 84, 84, 84, 84, 84, 84, 84, 84,
955 84, 84, 84, 84, 84, 84, 84, 84,
956 84, 84, 84, 84, 84, 84, 84, 84,
957 84, 84, 84, 84, 84, 84, 84, 84,
958 84, 84, 84, 84, 84, 84, 84, 84,
959 84, 84, 84, 84, 84, 84, 84, 84,
960 84, 84, 84, 84, 84, 84, 84, 84,
961 84, 84, 84, 84, 84, 84, 84, 84,
962 84, 84, 84, 84, 84, 84, 84, 84,
963 84, 84, 84, 84, 84, 84, 84, 84,
964 84, 84, 84, 84, 84, 84, 84, 84,
965 84, 84, 84, 84, 84, 84, 84, 84,
966 84, 84, 84, 84, 84, 84, 84, 84,
967 84, 84, 84, 84, 84, 84, 84, 84,
968 84, 84, 84, 84, 84, 84, 84, 84,
969 84, 84, 84, 84, 84, 84, 84, 84,
970 84, 84, 84, 84, 84, 84, 84, 84,
971 84, 84, 84, 84, 84, 84, 84, 1,
972 1, 1, 1, 1, 1, 1, 1, 1,
973 1, 1, 1, 1, 1, 1, 1, 1,
974 1, 1, 1, 1, 1, 1, 1, 1,
975 1, 1, 1, 1, 1, 1, 1, 1,
976 1, 1, 1, 1, 1, 1, 1, 1,
977 1, 1, 1, 1, 1, 1, 1, 1,
978 1, 1, 1, 1, 1, 1, 1, 1,
979 1, 1, 1, 1, 1, 1, 1, 1,
980 1, 1, 1, 1, 1, 1, 1, 1,
981 1, 1, 1, 1, 1, 1, 1, 1,
982 1, 1, 1, 1, 1, 1, 1, 1,
983 1, 1, 1, 1, 1, 1, 1, 1,
984 1, 1, 1, 1, 1, 1, 1, 1,
985 1, 1, 1, 1, 1, 1, 1, 1,
986 1, 1, 1, 1, 1, 1, 1, 1,
987 1, 1, 1, 1, 1, 1, 1, 1,
988 1, 1, 1, 1, 1, 1, 0, 1,
989 494, 501, 503, 510, 517, 524, 531
990};
991
992static const int svg_transform_start = 334;
993static const int svg_transform_first_final = 334;
994
995static const int svg_transform_en_main = 334;
996
997
998#line 28 "svg-affine-parser.rl"
999
1000
1001// https://www.w3.org/TR/css-transforms-1/#svg-syntax
1002bool sp_svg_transform_read(gchar const *str, Geom::Affine *transform)
1003{
1004 if (str == nullptr)
1005 return false;
1006
1007 std::vector<double> params;
1008 Geom::Affine final_transform (Geom::identity());
1009 *transform = final_transform;
1010 Geom::Affine tmp_transform (Geom::identity());
1011 int cs;
1012 const char *p = str;
1013 const char *pe = p + strlen(p) + 1;
1014 const char *eof = pe;
1015 char const *start_num = 0;
1016 char const *ts = p;
1017 char const *te = pe;
1018 int act = 0;
1019 if (pe == p+1) return true; // ""
1020
1021
1022#line 1023 "svg-affine-parser.cpp"
1023 {
1025 ts = 0;
1026 te = 0;
1027 act = 0;
1028 }
1029
1030#line 1031 "svg-affine-parser.cpp"
1031 {
1032 int _klen;
1033 unsigned int _trans;
1034 const char *_acts;
1035 unsigned int _nacts;
1036 const char *_keys;
1037
1038 if ( p == pe )
1039 goto _test_eof;
1040 if ( cs == 0 )
1041 goto _out;
1042_resume:
1044 _nacts = (unsigned int) *_acts++;
1045 while ( _nacts-- > 0 ) {
1046 switch ( *_acts++ ) {
1047 case 11:
1048#line 1 "NONE"
1049 {ts = p;}
1050 break;
1051#line 1052 "svg-affine-parser.cpp"
1052 }
1053 }
1054
1056 _trans = _svg_transform_index_offsets[cs];
1057
1059 if ( _klen > 0 ) {
1060 const char *_lower = _keys;
1061 const char *_mid;
1062 const char *_upper = _keys + _klen - 1;
1063 while (true) {
1064 if ( _upper < _lower )
1065 break;
1066
1067 _mid = _lower + ((_upper-_lower) >> 1);
1068 if ( (*p) < *_mid )
1069 _upper = _mid - 1;
1070 else if ( (*p) > *_mid )
1071 _lower = _mid + 1;
1072 else {
1073 _trans += (unsigned int)(_mid - _keys);
1074 goto _match;
1075 }
1076 }
1077 _keys += _klen;
1078 _trans += _klen;
1079 }
1080
1081 _klen = _svg_transform_range_lengths[cs];
1082 if ( _klen > 0 ) {
1083 const char *_lower = _keys;
1084 const char *_mid;
1085 const char *_upper = _keys + (_klen<<1) - 2;
1086 while (true) {
1087 if ( _upper < _lower )
1088 break;
1089
1090 _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1091 if ( (*p) < _mid[0] )
1092 _upper = _mid - 2;
1093 else if ( (*p) > _mid[1] )
1094 _lower = _mid + 2;
1095 else {
1096 _trans += (unsigned int)((_mid - _keys)>>1);
1097 goto _match;
1098 }
1099 }
1100 _trans += _klen;
1101 }
1102
1103_match:
1104 _trans = _svg_transform_indicies[_trans];
1105_eof_trans:
1106 cs = _svg_transform_trans_targs[_trans];
1107
1108 if ( _svg_transform_trans_actions[_trans] == 0 )
1109 goto _again;
1110
1112 _nacts = (unsigned int) *_acts++;
1113 while ( _nacts-- > 0 )
1114 {
1115 switch ( *_acts++ )
1116 {
1117 case 0:
1118#line 53 "svg-affine-parser.rl"
1119 {
1120 std::string buf(start_num, p);
1121 params.push_back(g_ascii_strtod(buf.c_str(), NULL));
1122 }
1123 break;
1124 case 1:
1125#line 58 "svg-affine-parser.rl"
1126 { tmp_transform = Geom::Translate(params[0], params.size() == 1 ? 0 : params[1]); }
1127 break;
1128 case 2:
1129#line 59 "svg-affine-parser.rl"
1130 { tmp_transform = Geom::Scale(params[0], params.size() == 1 ? params[0] : params[1]); }
1131 break;
1132 case 3:
1133#line 60 "svg-affine-parser.rl"
1134 {
1135 if (params.size() == 1)
1136 tmp_transform = Geom::Rotate(Geom::rad_from_deg(params[0]));
1137 else {
1138 tmp_transform = Geom::Translate(-params[1], -params[2]) *
1139 Geom::Rotate(Geom::rad_from_deg(params[0])) *
1140 Geom::Translate(params[1], params[2]);
1141 }
1142 }
1143 break;
1144 case 4:
1145#line 69 "svg-affine-parser.rl"
1146 { tmp_transform = Geom::Affine(1, 0, tan(params[0] * M_PI / 180.0), 1, 0, 0); }
1147 break;
1148 case 5:
1149#line 70 "svg-affine-parser.rl"
1150 { tmp_transform = Geom::Affine(1, tan(params[0] * M_PI / 180.0), 0, 1, 0, 0); }
1151 break;
1152 case 6:
1153#line 71 "svg-affine-parser.rl"
1154 { tmp_transform = Geom::Affine(params[0], params[1], params[2], params[3], params[4], params[5]);}
1155 break;
1156 case 7:
1157#line 72 "svg-affine-parser.rl"
1158 {params.clear(); final_transform = tmp_transform * final_transform ;}
1159 break;
1160 case 8:
1161#line 87 "svg-affine-parser.rl"
1162 {start_num = p;}
1163 break;
1164 case 12:
1165#line 1 "NONE"
1166 {te = p+1;}
1167 break;
1168 case 13:
1169#line 73 "svg-affine-parser.rl"
1170 {act = 1;}
1171 break;
1172 case 14:
1173#line 73 "svg-affine-parser.rl"
1174 {te = p;p--;{ *transform = final_transform; /*printf("%p %p %p %p
1175%d\n",p, pe, ts, te, cs);*/ return (te+1 == pe);}}
1176 break;
1177 case 15:
1178#line 73 "svg-affine-parser.rl"
1179 {{p = ((te))-1;}{ *transform = final_transform; /*printf("%p %p %p %p
1180%d\n",p, pe, ts, te, cs);*/ return (te+1 == pe);}}
1181 break;
1182 case 16:
1183#line 1 "NONE"
1184 { switch( act ) {
1185 case 0:
1186 {{cs = 0;goto _again;}}
1187 break;
1188 case 1:
1189 {{p = ((te))-1;} *transform = final_transform; /*printf("%p %p %p %p
1190%d\n",p, pe, ts, te, cs);*/ return (te+1 == pe);}
1191 break;
1192 }
1193 }
1194 break;
1195#line 1196 "svg-affine-parser.cpp"
1196 }
1197 }
1198
1199_again:
1201 _nacts = (unsigned int) *_acts++;
1202 while ( _nacts-- > 0 ) {
1203 switch ( *_acts++ ) {
1204 case 9:
1205#line 1 "NONE"
1206 {ts = 0;}
1207 break;
1208 case 10:
1209#line 1 "NONE"
1210 {act = 0;}
1211 break;
1212#line 1213 "svg-affine-parser.cpp"
1213 }
1214 }
1215
1216 if ( cs == 0 )
1217 goto _out;
1218 if ( ++p != pe )
1219 goto _resume;
1220 _test_eof: {}
1221 if ( p == eof )
1222 {
1223 if ( _svg_transform_eof_trans[cs] > 0 ) {
1224 _trans = _svg_transform_eof_trans[cs] - 1;
1225 goto _eof_trans;
1226 }
1227 }
1228
1229 _out: {}
1230 }
1231
1232#line 117 "svg-affine-parser.rl"
1233
1234 g_warning("could not parse transform attribute");
1235
1236 return false;
1237}
1238
1239/*
1240 Local Variables:
1241 mode:c++
1242 c-file-style:"stroustrup"
1243 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
1244 indent-tabs-mode:nil
1245 fill-column:99
1246 End:
1247*/
1248// vim: filetype=ragel:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
3x3 matrix representing an affine transformation.
Definition affine.h:70
Rotation around the origin.
Definition transforms.h:187
Scaling from the origin.
Definition transforms.h:150
Translation by a vector.
Definition transforms.h:115
Affine identity()
Create an identity matrix.
Definition affine.h:210
int buf
Singleton class to access the preferences file in a convenient way.
static const char _svg_transform_trans_actions[]
static const char _svg_transform_single_lengths[]
bool sp_svg_transform_read(gchar const *str, Geom::Affine *transform)
static const short _svg_transform_indicies[]
static const char _svg_transform_from_state_actions[]
static const short _svg_transform_index_offsets[]
static const int svg_transform_first_final
static const char _svg_transform_trans_keys[]
static const short _svg_transform_key_offsets[]
static const short _svg_transform_trans_targs[]
static const int svg_transform_start
static const char _svg_transform_to_state_actions[]
static const short _svg_transform_eof_trans[]
static const int svg_transform_en_main
static const char _svg_transform_range_lengths[]
static const char _svg_transform_actions[]
Affine transformation classes.