1
2#line 1 "Parser.rl"
3/*
4 * Copyright (c) 2015-2017, Intel Corporation
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * * Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * * Neither the name of Intel Corporation nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31/** \file
32 * \brief Parser code (generated with Ragel from Parser.rl).
33 */
34
35#include "config.h"
36
37/* Parser.cpp is a built source, may not be in same dir as parser files */
38#include "parser/check_refs.h"
39#include "parser/control_verbs.h"
40#include "parser/ComponentAlternation.h"
41#include "parser/ComponentAssertion.h"
42#include "parser/ComponentAtomicGroup.h"
43#include "parser/ComponentBackReference.h"
44#include "parser/ComponentBoundary.h"
45#include "parser/ComponentByte.h"
46#include "parser/ComponentClass.h"
47#include "parser/ComponentCondReference.h"
48#include "parser/ComponentEmpty.h"
49#include "parser/ComponentEUS.h"
50#include "parser/Component.h"
51#include "parser/ComponentRepeat.h"
52#include "parser/ComponentSequence.h"
53#include "parser/ComponentWordBoundary.h"
54#include "parser/parse_error.h"
55#include "parser/Parser.h"
56#include "ue2common.h"
57#include "util/compare.h"
58#include "util/flat_containers.h"
59#include "util/make_unique.h"
60#include "util/unicode_def.h"
61#include "util/verify_types.h"
62
63#include <cassert>
64#include <cctype>
65#include <cstring>
66#include <cstdlib>
67#include <map>
68#include <sstream>
69#include <string>
70#include <vector>
71
72using namespace std;
73
74namespace ue2 {
75
76#define PUSH_SEQUENCE do {\
77 sequences.push_back(ExprState(currentSeq, (size_t)(ts - ptr), \
78 mode)); \
79 } while(0)
80#define POP_SEQUENCE do {\
81 currentSeq = sequences.back().seq; \
82 mode = sequences.back().mode; \
83 sequences.pop_back(); \
84 } while(0)
85
86namespace {
87
88/** \brief Structure representing current state as we're parsing (current
89 * sequence, current options). Stored in the 'sequences' vector. */
90struct ExprState {
91 ExprState(ComponentSequence *seq_in, size_t offset,
92 const ParseMode &mode_in) :
93 seq(seq_in), seqOffset(offset), mode(mode_in) {}
94
95 ComponentSequence *seq; //!< current sequence
96 size_t seqOffset; //!< offset seq was entered, for error reporting
97 ParseMode mode; //!< current mode flags
98};
99
100} // namespace
101
102static
103unsigned parseAsDecimal(unsigned oct) {
104 // The input was parsed as octal, but should have been parsed as decimal.
105 // Deconstruct the octal number and reconstruct into decimal
106 unsigned ret = 0;
107 unsigned multiplier = 1;
108 while (oct) {
109 ret += (oct & 0x7) * multiplier;
110 oct >>= 3;
111 multiplier *= 10;
112 }
113 return ret;
114}
115
116/** \brief Maximum value for a positive integer. We use INT_MAX, as that's what
117 * PCRE uses. */
118static constexpr u32 MAX_NUMBER = INT_MAX;
119
120static
121void pushDec(u32 *acc, char raw_digit) {
122 assert(raw_digit >= '0' && raw_digit <= '9');
123 u32 digit_val = raw_digit - '0';
124
125 // Ensure that we don't overflow.
126 u64a val = ((u64a)*acc * 10) + digit_val;
127 if (val > MAX_NUMBER) {
128 throw LocatedParseError("Number is too big");
129 }
130
131 *acc = verify_u32(val);
132}
133
134static
135void pushOct(u32 *acc, char raw_digit) {
136 assert(raw_digit >= '0' && raw_digit <= '7');
137 u32 digit_val = raw_digit - '0';
138
139 // Ensure that we don't overflow.
140 u64a val = ((u64a)*acc * 8) + digit_val;
141 if (val > MAX_NUMBER) {
142 throw LocatedParseError("Number is too big");
143 }
144
145 *acc = verify_u32(val);
146}
147
148static
149void throwInvalidRepeat(void) {
150 throw LocatedParseError("Invalid repeat");
151}
152
153static
154void throwInvalidUtf8(void) {
155 throw ParseError("Expression is not valid UTF-8.");
156}
157
158/**
159 * Adds the given child component to the parent sequence, returning a pointer
160 * to the new (child) "current sequence".
161 */
162static
163ComponentSequence *enterSequence(ComponentSequence *parent,
164 unique_ptr<ComponentSequence> child) {
165 assert(parent);
166 assert(child);
167
168 ComponentSequence *seq = child.get();
169 parent->addComponent(move(child));
170 return seq;
171}
172
173static
174void addLiteral(ComponentSequence *currentSeq, char c, const ParseMode &mode) {
175 if (mode.utf8 && mode.caseless) {
176 /* leverage ComponentClass to generate the vertices */
177 auto cc = getComponentClass(mode);
178 assert(cc);
179 cc->add(c);
180 cc->finalize();
181 currentSeq->addComponent(move(cc));
182 } else {
183 currentSeq->addComponent(getLiteralComponentClass(c, mode.caseless));
184 }
185}
186
187static
188void addEscaped(ComponentSequence *currentSeq, unichar accum,
189 const ParseMode &mode, const char *err_msg) {
190 if (mode.utf8) {
191 /* leverage ComponentClass to generate the vertices */
192 auto cc = getComponentClass(mode);
193 assert(cc);
194 cc->add(accum);
195 cc->finalize();
196 currentSeq->addComponent(move(cc));
197 } else {
198 if (accum > 255) {
199 throw LocatedParseError(err_msg);
200 }
201 addLiteral(currentSeq, (char)accum, mode);
202 }
203}
204
205static
206void addEscapedOctal(ComponentSequence *currentSeq, unichar accum,
207 const ParseMode &mode) {
208 addEscaped(currentSeq, accum, mode, "Octal value is greater than \\377");
209}
210
211static
212void addEscapedHex(ComponentSequence *currentSeq, unichar accum,
213 const ParseMode &mode) {
214 addEscaped(currentSeq, accum, mode,
215 "Hexadecimal value is greater than \\xFF");
216}
217
218#define SLASH_C_ERROR "\\c must be followed by an ASCII character"
219
220static
221u8 decodeCtrl(char raw) {
222 if (raw & 0x80) {
223 throw LocatedParseError(SLASH_C_ERROR);
224 }
225 return mytoupper(raw) ^ 0x40;
226}
227
228static
229unichar readUtf8CodePoint2c(const char *s) {
230 auto *ts = (const u8 *)s;
231 assert(ts[0] >= 0xc0 && ts[0] < 0xe0);
232 assert(ts[1] >= 0x80 && ts[1] < 0xc0);
233 unichar val = ts[0] & 0x1f;
234 val <<= 6;
235 val |= ts[1] & 0x3f;
236 DEBUG_PRINTF("utf8 %02hhx %02hhx ->\\x{%x}\n", ts[0],
237 ts[1], val);
238 return val;
239}
240
241static
242unichar readUtf8CodePoint3c(const char *s) {
243 auto *ts = (const u8 *)s;
244 assert(ts[0] >= 0xe0 && ts[0] < 0xf0);
245 assert(ts[1] >= 0x80 && ts[1] < 0xc0);
246 assert(ts[2] >= 0x80 && ts[2] < 0xc0);
247 unichar val = ts[0] & 0x0f;
248 val <<= 6;
249 val |= ts[1] & 0x3f;
250 val <<= 6;
251 val |= ts[2] & 0x3f;
252 DEBUG_PRINTF("utf8 %02hhx %02hhx %02hhx ->\\x{%x}\n", ts[0],
253 ts[1], ts[2], val);
254 return val;
255}
256
257static
258unichar readUtf8CodePoint4c(const char *s) {
259 auto *ts = (const u8 *)s;
260 assert(ts[0] >= 0xf0 && ts[0] < 0xf8);
261 assert(ts[1] >= 0x80 && ts[1] < 0xc0);
262 assert(ts[2] >= 0x80 && ts[2] < 0xc0);
263 assert(ts[3] >= 0x80 && ts[3] < 0xc0);
264 unichar val = ts[0] & 0x07;
265 val <<= 6;
266 val |= ts[1] & 0x3f;
267 val <<= 6;
268 val |= ts[2] & 0x3f;
269 val <<= 6;
270 val |= ts[3] & 0x3f;
271 DEBUG_PRINTF("utf8 %02hhx %02hhx %02hhx %02hhx ->\\x{%x}\n", ts[0],
272 ts[1], ts[2], ts[3], val);
273 return val;
274}
275
276
277#line 1910 "Parser.rl"
278
279
280
281#line 282 "Parser.cpp"
282static const short _regex_actions[] = {
283 0, 1, 0, 1, 1, 1, 2, 1,
284 3, 1, 4, 1, 7, 1, 8, 1,
285 9, 1, 10, 1, 11, 1, 12, 1,
286 13, 1, 15, 1, 16, 1, 17, 1,
287 18, 1, 19, 1, 20, 1, 21, 1,
288 22, 1, 23, 1, 24, 1, 25, 1,
289 26, 1, 27, 1, 28, 1, 29, 1,
290 30, 1, 31, 1, 32, 1, 33, 1,
291 34, 1, 35, 1, 36, 1, 37, 1,
292 38, 1, 39, 1, 40, 1, 41, 1,
293 42, 1, 43, 1, 44, 1, 45, 1,
294 46, 1, 47, 1, 48, 1, 49, 1,
295 50, 1, 51, 1, 52, 1, 53, 1,
296 54, 1, 55, 1, 56, 1, 57, 1,
297 58, 1, 59, 1, 60, 1, 61, 1,
298 62, 1, 63, 1, 64, 1, 65, 1,
299 66, 1, 67, 1, 68, 1, 69, 1,
300 70, 1, 71, 1, 72, 1, 73, 1,
301 74, 1, 75, 1, 76, 1, 77, 1,
302 78, 1, 79, 1, 80, 1, 81, 1,
303 82, 1, 83, 1, 84, 1, 85, 1,
304 86, 1, 87, 1, 88, 1, 89, 1,
305 90, 1, 91, 1, 92, 1, 93, 1,
306 94, 1, 95, 1, 96, 1, 97, 1,
307 98, 1, 99, 1, 100, 1, 101, 1,
308 102, 1, 103, 1, 104, 1, 105, 1,
309 106, 1, 107, 1, 108, 1, 109, 1,
310 110, 1, 111, 1, 112, 1, 113, 1,
311 114, 1, 115, 1, 116, 1, 117, 1,
312 118, 1, 119, 1, 120, 1, 121, 1,
313 122, 1, 123, 1, 124, 1, 125, 1,
314 126, 1, 127, 1, 128, 1, 129, 1,
315 130, 1, 131, 1, 132, 1, 133, 1,
316 134, 1, 135, 1, 136, 1, 137, 1,
317 138, 1, 139, 1, 140, 1, 141, 1,
318 142, 1, 143, 1, 144, 1, 145, 1,
319 146, 1, 147, 1, 148, 1, 149, 1,
320 150, 1, 151, 1, 152, 1, 153, 1,
321 154, 1, 155, 1, 156, 1, 157, 1,
322 158, 1, 159, 1, 160, 1, 161, 1,
323 162, 1, 163, 1, 164, 1, 165, 1,
324 166, 1, 167, 1, 168, 1, 169, 1,
325 170, 1, 171, 1, 172, 1, 173, 1,
326 174, 1, 175, 1, 176, 1, 177, 1,
327 178, 1, 179, 1, 180, 1, 181, 1,
328 182, 1, 183, 1, 184, 1, 185, 1,
329 186, 1, 187, 1, 188, 1, 189, 1,
330 190, 1, 191, 1, 192, 1, 193, 1,
331 194, 1, 195, 1, 196, 1, 197, 1,
332 198, 1, 199, 1, 200, 1, 201, 1,
333 202, 1, 203, 1, 204, 1, 205, 1,
334 206, 1, 207, 1, 208, 1, 209, 1,
335 210, 1, 211, 1, 212, 1, 213, 1,
336 214, 1, 215, 1, 216, 1, 217, 1,
337 218, 1, 219, 1, 220, 1, 221, 1,
338 222, 1, 223, 1, 224, 1, 225, 1,
339 226, 1, 227, 1, 228, 1, 229, 1,
340 230, 1, 231, 1, 232, 1, 233, 1,
341 234, 1, 235, 1, 236, 1, 237, 1,
342 240, 1, 242, 1, 243, 1, 244, 1,
343 245, 1, 246, 1, 247, 1, 248, 1,
344 249, 1, 250, 1, 251, 1, 252, 1,
345 253, 1, 254, 1, 255, 1, 256, 1,
346 257, 1, 258, 1, 259, 1, 260, 1,
347 261, 1, 262, 1, 263, 1, 264, 1,
348 265, 1, 266, 1, 267, 1, 268, 1,
349 269, 1, 270, 1, 271, 1, 272, 1,
350 273, 1, 274, 1, 275, 1, 276, 1,
351 277, 1, 278, 1, 279, 1, 280, 1,
352 281, 1, 282, 1, 283, 1, 284, 1,
353 285, 1, 286, 1, 287, 1, 288, 1,
354 289, 1, 290, 1, 291, 1, 292, 1,
355 293, 1, 294, 1, 295, 1, 296, 1,
356 297, 1, 298, 1, 299, 1, 300, 1,
357 301, 1, 302, 1, 303, 1, 307, 1,
358 308, 1, 309, 1, 310, 1, 311, 1,
359 312, 1, 313, 1, 314, 1, 315, 1,
360 316, 1, 317, 1, 318, 1, 319, 1,
361 320, 1, 321, 1, 322, 1, 323, 1,
362 324, 1, 325, 1, 326, 1, 327, 1,
363 328, 1, 329, 1, 330, 1, 331, 1,
364 332, 1, 333, 1, 334, 1, 335, 1,
365 336, 1, 337, 1, 338, 1, 342, 1,
366 343, 1, 344, 1, 345, 1, 346, 1,
367 347, 1, 348, 1, 349, 1, 350, 1,
368 352, 1, 353, 1, 354, 1, 355, 1,
369 356, 1, 357, 1, 358, 1, 359, 1,
370 360, 1, 361, 1, 362, 1, 363, 1,
371 364, 1, 365, 1, 366, 1, 367, 1,
372 368, 1, 369, 1, 370, 1, 371, 1,
373 372, 1, 373, 1, 374, 1, 375, 1,
374 376, 1, 377, 1, 378, 1, 379, 1,
375 380, 1, 381, 1, 382, 1, 383, 1,
376 384, 1, 385, 1, 386, 1, 387, 1,
377 388, 1, 389, 1, 390, 1, 391, 1,
378 392, 1, 393, 1, 394, 1, 395, 1,
379 396, 1, 397, 1, 398, 1, 399, 1,
380 400, 1, 401, 1, 402, 1, 403, 1,
381 404, 1, 405, 1, 406, 1, 407, 1,
382 408, 1, 409, 1, 410, 1, 411, 1,
383 412, 1, 413, 1, 414, 1, 415, 1,
384 416, 1, 417, 1, 418, 1, 419, 1,
385 420, 1, 421, 1, 422, 1, 423, 1,
386 424, 1, 425, 1, 426, 1, 427, 1,
387 428, 1, 429, 1, 430, 1, 431, 1,
388 432, 1, 433, 1, 434, 1, 435, 1,
389 436, 2, 3, 0, 2, 4, 5, 2,
390 5, 1, 2, 9, 10, 2, 9, 238,
391 2, 9, 239, 2, 9, 339, 2, 10,
392 1, 2, 10, 340, 2, 10, 341, 2,
393 11, 241, 2, 11, 351, 2, 12, 241,
394 2, 12, 351, 2, 13, 241, 2, 13,
395 351, 2, 14, 375, 2, 14, 376, 2,
396 25, 0, 2, 25, 3, 2, 25, 6,
397 2, 25, 14, 3, 25, 5, 306, 3,
398 25, 10, 305, 3, 25, 14, 15, 4,
399 25, 9, 304, 10
400};
401
402static const char _regex_cond_offsets[] = {
403 0, 0, 0, 0, 0, 0, 0, 0,
404 0, 0, 0, 0, 0, 0, 0, 0,
405 0, 0, 0, 0, 0, 0, 0, 0,
406 0, 0, 0, 0, 0, 0, 0, 0,
407 0, 0, 0, 0, 0, 0, 0, 0,
408 0, 0, 0, 0, 0, 0, 0, 0,
409 0, 0, 0, 0, 0, 0, 0, 0,
410 0, 0, 0, 0, 0, 0, 0, 1,
411 2, 3, 3, 3, 3, 3, 3, 3,
412 3, 3, 3, 3, 3, 3, 3, 3,
413 3, 3, 3, 3, 3, 3, 3, 3,
414 3, 3, 3, 3, 3, 3, 3, 3,
415 3, 3, 3, 3, 3, 3, 3, 3,
416 3, 3, 3, 3, 3, 3, 3, 3,
417 3, 3, 3, 3, 3, 3, 3, 3,
418 3, 3, 3, 3, 3, 3, 3, 3,
419 3, 3, 3, 3, 3, 3, 3, 3,
420 3, 3, 3, 3, 3, 3, 3, 3,
421 3, 3, 3, 3, 3, 3, 3, 3,
422 3, 3, 3, 3, 3, 3, 3, 3,
423 3, 3, 3, 3, 3, 3, 3, 3,
424 3, 3, 3, 3, 3, 3, 3, 3,
425 3, 3, 3, 3, 3, 3, 3, 3,
426 3, 3, 3, 3, 3, 3, 3, 3,
427 3, 3, 3, 3, 3, 3, 3, 3,
428 3, 3, 3, 3, 3, 3, 3, 3,
429 3, 3, 3, 3, 3, 3, 3, 3,
430 3, 3, 3, 3, 3, 3, 3, 3,
431 3, 3, 3, 3, 3, 3, 3, 3,
432 3, 3, 3, 3, 3, 3, 3, 3,
433 3, 3, 3, 3, 3, 3, 3, 3,
434 3, 3, 3, 3, 3, 3, 3, 3,
435 3, 3, 3, 3, 3, 3, 3, 3,
436 3, 3, 3, 3, 3, 3, 3, 3,
437 3, 3, 3, 3, 3, 3, 3, 3,
438 3, 3, 3, 3, 3, 3, 3, 3,
439 3, 3, 3, 3, 3, 3, 3, 3,
440 3, 3, 3, 3, 3, 3, 3, 3,
441 3, 3, 3, 3, 3, 3, 3, 3,
442 3, 3, 3, 3, 3, 3, 3, 3,
443 3, 3, 3, 3, 3, 3, 3, 3,
444 3, 3, 3, 3, 3, 3, 3, 3,
445 3, 3, 3, 3, 3, 3, 3, 3,
446 3, 3, 3, 3, 3, 3, 3, 3,
447 3, 3, 3, 3, 3, 3, 3, 3,
448 3, 3, 3, 3, 3, 3, 3, 3,
449 3, 3, 3, 3, 3, 3, 3, 3,
450 3, 3, 3, 3, 3, 3, 3, 3,
451 3, 3, 3, 3, 3, 3, 3, 3,
452 3, 3, 3, 3, 3, 3, 3, 3,
453 3, 3, 3, 3, 3, 3, 3, 3,
454 3, 3, 3, 3, 3, 3, 3, 3,
455 3, 3, 3, 3, 3, 3, 3, 3,
456 3, 3, 3, 3, 3, 3, 3, 3,
457 3, 3, 3, 3, 3, 3, 3, 3,
458 3, 3, 3, 3, 3, 3, 3, 3,
459 3, 3, 3, 3, 3, 3, 3, 3,
460 3, 3, 3, 3, 3, 3, 3, 3,
461 3, 3, 3, 3, 3, 3, 3, 3,
462 3, 3, 3, 3, 3, 3, 3, 3,
463 3, 3, 3, 3, 3, 3, 3, 3,
464 3, 3, 3, 3, 3, 3, 3, 3,
465 3, 3, 3, 3, 3, 3, 3, 3,
466 3, 3, 3, 3, 3, 3, 3, 3,
467 3, 3, 3, 3, 3, 3, 3, 3,
468 3, 3, 3, 3, 3, 3, 3, 3,
469 3, 3, 3, 3, 3, 3, 3, 3,
470 3, 3, 3, 3, 3, 3, 3, 3,
471 3, 3, 3, 3, 3, 3, 3, 3,
472 3, 3, 3, 3, 3, 3, 3, 3,
473 3, 3, 3, 3, 3, 3, 3, 3,
474 3, 3, 3, 3, 3, 3, 3, 3,
475 3, 3, 3, 3, 3, 3, 3, 3,
476 3, 3, 3, 3, 3, 3, 3, 3,
477 3, 3, 3, 3, 3, 3, 3, 3,
478 3, 3, 3, 3, 3, 3, 3, 3,
479 3, 3, 3, 3, 3, 3, 3, 3,
480 3, 3, 3, 3, 3, 3, 3, 3,
481 3, 3, 3, 3, 3, 3, 3, 3,
482 3, 3, 3, 3, 3, 3, 3, 3,
483 3, 3, 3, 3, 3, 3, 3, 3,
484 3, 3, 3, 3, 3, 3, 3, 3,
485 3, 3, 3, 3, 3, 3, 3, 3,
486 3, 3, 3, 3, 3, 3, 3, 3,
487 3, 3, 3, 3, 3, 3, 3, 3,
488 3, 3, 3, 3, 3, 3, 3, 3,
489 3, 3, 3, 3, 3, 3, 3, 3,
490 3, 3, 3, 3, 3, 3, 3, 3,
491 3, 3, 3, 3, 3, 3, 3, 3,
492 3, 3, 3, 3, 3, 3, 3, 3,
493 3, 3, 3, 3, 3, 3, 3, 3,
494 3, 3, 3, 3, 3, 3, 3, 3,
495 3, 3, 4, 5, 6, 7, 8, 9,
496 10, 11, 12, 18, 18, 18, 18, 18,
497 18, 18, 18, 18, 18, 18, 18, 18,
498 18, 18, 18, 18, 18, 18, 18, 18,
499 18, 18, 18, 18, 18, 18, 18, 18,
500 18, 18, 18, 18, 18, 18, 18, 18,
501 18, 19, 20, 21, 21, 21, 21, 21,
502 21, 21, 21, 21, 21, 21, 21, 21,
503 21, 21, 21, 21, 21, 21, 21, 21,
504 21, 21, 21, 21, 21, 21, 21, 21,
505 21, 21, 21, 21, 26, 26, 26, 26,
506 26, 26, 26, 26, 26, 26, 26, 26,
507 26, 26, 27, 28, 29, 31, 31, 36,
508 36, 37, 38, 39, 44, 44, 45, 46,
509 47, 47
510};
511
512static const char _regex_cond_lengths[] = {
513 0, 0, 0, 0, 0, 0, 0, 0,
514 0, 0, 0, 0, 0, 0, 0, 0,
515 0, 0, 0, 0, 0, 0, 0, 0,
516 0, 0, 0, 0, 0, 0, 0, 0,
517 0, 0, 0, 0, 0, 0, 0, 0,
518 0, 0, 0, 0, 0, 0, 0, 0,
519 0, 0, 0, 0, 0, 0, 0, 0,
520 0, 0, 0, 0, 0, 0, 1, 1,
521 1, 0, 0, 0, 0, 0, 0, 0,
522 0, 0, 0, 0, 0, 0, 0, 0,
523 0, 0, 0, 0, 0, 0, 0, 0,
524 0, 0, 0, 0, 0, 0, 0, 0,
525 0, 0, 0, 0, 0, 0, 0, 0,
526 0, 0, 0, 0, 0, 0, 0, 0,
527 0, 0, 0, 0, 0, 0, 0, 0,
528 0, 0, 0, 0, 0, 0, 0, 0,
529 0, 0, 0, 0, 0, 0, 0, 0,
530 0, 0, 0, 0, 0, 0, 0, 0,
531 0, 0, 0, 0, 0, 0, 0, 0,
532 0, 0, 0, 0, 0, 0, 0, 0,
533 0, 0, 0, 0, 0, 0, 0, 0,
534 0, 0, 0, 0, 0, 0, 0, 0,
535 0, 0, 0, 0, 0, 0, 0, 0,
536 0, 0, 0, 0, 0, 0, 0, 0,
537 0, 0, 0, 0, 0, 0, 0, 0,
538 0, 0, 0, 0, 0, 0, 0, 0,
539 0, 0, 0, 0, 0, 0, 0, 0,
540 0, 0, 0, 0, 0, 0, 0, 0,
541 0, 0, 0, 0, 0, 0, 0, 0,
542 0, 0, 0, 0, 0, 0, 0, 0,
543 0, 0, 0, 0, 0, 0, 0, 0,
544 0, 0, 0, 0, 0, 0, 0, 0,
545 0, 0, 0, 0, 0, 0, 0, 0,
546 0, 0, 0, 0, 0, 0, 0, 0,
547 0, 0, 0, 0, 0, 0, 0, 0,
548 0, 0, 0, 0, 0, 0, 0, 0,
549 0, 0, 0, 0, 0, 0, 0, 0,
550 0, 0, 0, 0, 0, 0, 0, 0,
551 0, 0, 0, 0, 0, 0, 0, 0,
552 0, 0, 0, 0, 0, 0, 0, 0,
553 0, 0, 0, 0, 0, 0, 0, 0,
554 0, 0, 0, 0, 0, 0, 0, 0,
555 0, 0, 0, 0, 0, 0, 0, 0,
556 0, 0, 0, 0, 0, 0, 0, 0,
557 0, 0, 0, 0, 0, 0, 0, 0,
558 0, 0, 0, 0, 0, 0, 0, 0,
559 0, 0, 0, 0, 0, 0, 0, 0,
560 0, 0, 0, 0, 0, 0, 0, 0,
561 0, 0, 0, 0, 0, 0, 0, 0,
562 0, 0, 0, 0, 0, 0, 0, 0,
563 0, 0, 0, 0, 0, 0, 0, 0,
564 0, 0, 0, 0, 0, 0, 0, 0,
565 0, 0, 0, 0, 0, 0, 0, 0,
566 0, 0, 0, 0, 0, 0, 0, 0,
567 0, 0, 0, 0, 0, 0, 0, 0,
568 0, 0, 0, 0, 0, 0, 0, 0,
569 0, 0, 0, 0, 0, 0, 0, 0,
570 0, 0, 0, 0, 0, 0, 0, 0,
571 0, 0, 0, 0, 0, 0, 0, 0,
572 0, 0, 0, 0, 0, 0, 0, 0,
573 0, 0, 0, 0, 0, 0, 0, 0,
574 0, 0, 0, 0, 0, 0, 0, 0,
575 0, 0, 0, 0, 0, 0, 0, 0,
576 0, 0, 0, 0, 0, 0, 0, 0,
577 0, 0, 0, 0, 0, 0, 0, 0,
578 0, 0, 0, 0, 0, 0, 0, 0,
579 0, 0, 0, 0, 0, 0, 0, 0,
580 0, 0, 0, 0, 0, 0, 0, 0,
581 0, 0, 0, 0, 0, 0, 0, 0,
582 0, 0, 0, 0, 0, 0, 0, 0,
583 0, 0, 0, 0, 0, 0, 0, 0,
584 0, 0, 0, 0, 0, 0, 0, 0,
585 0, 0, 0, 0, 0, 0, 0, 0,
586 0, 0, 0, 0, 0, 0, 0, 0,
587 0, 0, 0, 0, 0, 0, 0, 0,
588 0, 0, 0, 0, 0, 0, 0, 0,
589 0, 0, 0, 0, 0, 0, 0, 0,
590 0, 0, 0, 0, 0, 0, 0, 0,
591 0, 0, 0, 0, 0, 0, 0, 0,
592 0, 0, 0, 0, 0, 0, 0, 0,
593 0, 0, 0, 0, 0, 0, 0, 0,
594 0, 0, 0, 0, 0, 0, 0, 0,
595 0, 0, 0, 0, 0, 0, 0, 0,
596 0, 0, 0, 0, 0, 0, 0, 0,
597 0, 0, 0, 0, 0, 0, 0, 0,
598 0, 0, 0, 0, 0, 0, 0, 0,
599 0, 0, 0, 0, 0, 0, 0, 0,
600 0, 0, 0, 0, 0, 0, 0, 0,
601 0, 0, 0, 0, 0, 0, 0, 0,
602 0, 0, 0, 0, 0, 0, 0, 0,
603 0, 0, 0, 0, 0, 0, 0, 0,
604 0, 0, 0, 0, 0, 0, 0, 0,
605 0, 1, 1, 1, 1, 1, 1, 1,
606 1, 1, 6, 0, 0, 0, 0, 0,
607 0, 0, 0, 0, 0, 0, 0, 0,
608 0, 0, 0, 0, 0, 0, 0, 0,
609 0, 0, 0, 0, 0, 0, 0, 0,
610 0, 0, 0, 0, 0, 0, 0, 0,
611 1, 1, 1, 0, 0, 0, 0, 0,
612 0, 0, 0, 0, 0, 0, 0, 0,
613 0, 0, 0, 0, 0, 0, 0, 0,
614 0, 0, 0, 0, 0, 0, 0, 0,
615 0, 0, 0, 5, 0, 0, 0, 0,
616 0, 0, 0, 0, 0, 0, 0, 0,
617 0, 1, 1, 1, 2, 0, 5, 0,
618 1, 1, 1, 5, 0, 1, 1, 1,
619 0, 0
620};
621
622static const short _regex_cond_keys[] = {
623 -128, -65, -128, -65, -128, -65, -128, -65,
624 -128, -65, -128, -65, -128, -65, -128, -65,
625 -128, -65, -128, -65, -128, -65, -128, -65,
626 -128, -65, -64, -33, -32, -17, -16, -9,
627 -8, -1, 35, 35, -128, -65, -128, -65,
628 -128, -65, -128, -65, -64, -33, -32, -17,
629 -16, -9, -8, -1, -128, -65, -128, -65,
630 -128, -65, 93, 93, 94, 94, -128, -65,
631 -64, -33, -32, -17, -16, -9, -8, -1,
632 -128, -65, -128, -65, -128, -65, -128, -65,
633 -64, -33, -32, -17, -16, -9, -8, -1,
634 -128, -65, -128, -65, -128, -65, 0
635};
636
637static const char _regex_cond_spaces[] = {
638 0, 0, 0, 0, 0, 0, 0, 0,
639 0, 0, 0, 0, 0, 0, 0, 0,
640 0, 1, 0, 0, 0, 0, 0, 0,
641 0, 0, 0, 0, 0, 2, 2, 0,
642 0, 0, 0, 0, 0, 0, 0, 0,
643 0, 0, 0, 0, 0, 0, 0, 0
644};
645
646static const short _regex_key_offsets[] = {
647 0, 0, 1, 23, 31, 39, 46, 54,
648 55, 63, 71, 79, 86, 94, 97, 99,
649 108, 115, 123, 131, 134, 140, 148, 151,
650 158, 165, 173, 180, 184, 191, 194, 197,
651 199, 202, 205, 207, 210, 213, 215, 216,
652 218, 219, 227, 229, 232, 235, 236, 244,
653 252, 260, 268, 275, 283, 290, 298, 305,
654 313, 315, 318, 325, 329, 332, 335, 337,
655 339, 341, 342, 344, 345, 347, 349, 350,
656 351, 353, 354, 355, 356, 357, 358, 359,
657 360, 361, 362, 363, 364, 365, 366, 369,
658 370, 371, 372, 373, 374, 375, 376, 377,
659 378, 379, 380, 381, 382, 383, 384, 385,
660 386, 387, 388, 389, 390, 392, 393, 394,
661 395, 396, 397, 399, 400, 401, 402, 403,
662 404, 405, 406, 408, 409, 410, 411, 412,
663 413, 414, 415, 416, 417, 418, 419, 420,
664 421, 422, 423, 424, 425, 426, 427, 429,
665 430, 431, 432, 433, 434, 435, 436, 437,
666 438, 439, 440, 441, 442, 443, 444, 445,
667 446, 447, 448, 450, 451, 452, 453, 454,
668 455, 456, 457, 458, 459, 461, 462, 463,
669 464, 465, 466, 467, 468, 469, 470, 471,
670 472, 473, 474, 475, 476, 477, 478, 479,
671 480, 481, 482, 483, 484, 485, 486, 487,
672 488, 489, 490, 491, 492, 493, 494, 495,
673 496, 497, 498, 499, 500, 501, 502, 503,
674 504, 505, 506, 507, 508, 509, 510, 511,
675 512, 513, 514, 515, 516, 517, 519, 520,
676 521, 522, 523, 524, 525, 526, 527, 528,
677 529, 530, 531, 532, 533, 534, 535, 536,
678 537, 538, 539, 540, 541, 542, 543, 544,
679 545, 546, 547, 548, 549, 550, 551, 552,
680 553, 554, 555, 556, 557, 558, 559, 561,
681 562, 563, 564, 565, 566, 567, 568, 569,
682 570, 571, 572, 573, 574, 575, 576, 577,
683 578, 579, 580, 582, 583, 584, 585, 586,
684 587, 588, 589, 590, 591, 592, 593, 594,
685 595, 596, 597, 601, 602, 603, 604, 605,
686 606, 607, 608, 609, 610, 611, 612, 613,
687 614, 615, 616, 617, 618, 620, 621, 622,
688 623, 624, 625, 626, 627, 628, 629, 631,
689 632, 633, 634, 635, 636, 637, 640, 641,
690 642, 643, 644, 645, 646, 647, 648, 650,
691 651, 652, 653, 654, 655, 656, 658, 659,
692 660, 661, 662, 663, 664, 665, 666, 667,
693 668, 669, 670, 671, 672, 673, 674, 675,
694 676, 677, 678, 679, 680, 681, 682, 683,
695 684, 685, 686, 687, 688, 689, 690, 691,
696 692, 693, 694, 695, 696, 697, 698, 699,
697 700, 701, 702, 704, 705, 706, 707, 708,
698 709, 710, 714, 715, 716, 717, 718, 719,
699 720, 721, 722, 723, 724, 725, 726, 727,
700 728, 729, 730, 731, 732, 733, 734, 735,
701 736, 737, 738, 739, 740, 741, 742, 743,
702 744, 745, 746, 747, 748, 749, 750, 752,
703 753, 754, 755, 756, 757, 758, 759, 760,
704 761, 762, 763, 764, 765, 766, 767, 768,
705 769, 770, 771, 773, 774, 775, 776, 777,
706 778, 779, 780, 781, 782, 783, 784, 785,
707 786, 787, 788, 789, 790, 791, 792, 793,
708 794, 795, 796, 797, 798, 799, 800, 801,
709 802, 803, 805, 806, 807, 808, 809, 810,
710 811, 812, 813, 814, 815, 816, 817, 820,
711 822, 823, 824, 825, 826, 827, 828, 829,
712 830, 833, 834, 835, 836, 837, 838, 839,
713 840, 841, 842, 843, 844, 845, 846, 847,
714 849, 850, 851, 853, 854, 855, 856, 857,
715 858, 859, 860, 861, 862, 863, 864, 865,
716 866, 867, 868, 869, 870, 871, 872, 873,
717 874, 875, 876, 877, 880, 883, 885, 900,
718 903, 906, 908, 922, 927, 932, 936, 940,
719 943, 946, 950, 954, 957, 960, 964, 968,
720 972, 975, 978, 982, 986, 990, 994, 997,
721 1000, 1004, 1008, 1012, 1016, 1019, 1022, 1026,
722 1030, 1034, 1038, 1041, 1044, 1048, 1052, 1056,
723 1060, 1063, 1066, 1070, 1074, 1078, 1082, 1085,
724 1088, 1093, 1097, 1101, 1105, 1108, 1111, 1115,
725 1119, 1123, 1126, 1129, 1133, 1137, 1141, 1145,
726 1148, 1151, 1155, 1159, 1163, 1167, 1170, 1173,
727 1177, 1181, 1185, 1188, 1191, 1195, 1199, 1203,
728 1207, 1211, 1214, 1217, 1222, 1227, 1231, 1235,
729 1238, 1241, 1245, 1249, 1252, 1255, 1259, 1263,
730 1267, 1270, 1273, 1277, 1281, 1285, 1289, 1292,
731 1295, 1299, 1303, 1307, 1311, 1314, 1317, 1321,
732 1325, 1329, 1333, 1336, 1339, 1343, 1347, 1351,
733 1355, 1358, 1361, 1365, 1369, 1373, 1377, 1380,
734 1383, 1388, 1392, 1396, 1400, 1403, 1406, 1410,
735 1414, 1418, 1421, 1424, 1428, 1432, 1436, 1440,
736 1443, 1446, 1450, 1454, 1458, 1462, 1465, 1468,
737 1472, 1476, 1480, 1483, 1486, 1490, 1494, 1498,
738 1502, 1506, 1509, 1512, 1515, 1518, 1520, 1522,
739 1525, 1532, 1534, 1536, 1538, 1540, 1542, 1544,
740 1546, 1548, 1550, 1584, 1586, 1593, 1600, 1614,
741 1616, 1622, 1625, 1634, 1635, 1638, 1641, 1648,
742 1650, 1652, 1654, 1657, 1702, 1704, 1706, 1710,
743 1714, 1716, 1717, 1717, 1723, 1725, 1727, 1729,
744 1731, 1734, 1735, 1736, 1743, 1749, 1755, 1757,
745 1759, 1761, 1763, 1765, 1767, 1768, 1771, 1794,
746 1797, 1802, 1811, 1813, 1814, 1816, 1821, 1824,
747 1826, 1828, 1829, 1831, 1841, 1847, 1848, 1853,
748 1857, 1865, 1867, 1876, 1880, 1881, 1882, 1886,
749 1887, 1890, 1890, 1897, 1913, 1916, 1955, 1957,
750 1959, 1961, 1963, 1964, 1964, 1965, 1966, 1973,
751 1979, 1985, 1987, 1989, 1991, 2000, 2002, 2015,
752 2016, 2018, 2020, 2022, 2035, 2036, 2038, 2040,
753 2042, 2043
754};
755
756static const short _regex_trans_keys[] = {
757 41, 33, 35, 38, 39, 40, 41, 43,
758 45, 58, 60, 61, 62, 63, 67, 80,
759 105, 109, 115, 120, 123, 48, 57, 41,
760 95, 48, 57, 65, 90, 97, 122, 39,
761 95, 48, 57, 65, 90, 97, 122, 95,
762 48, 57, 65, 90, 97, 122, 39, 95,
763 48, 57, 65, 90, 97, 122, 41, 41,
764 95, 48, 57, 65, 90, 97, 122, 41,
765 95, 48, 57, 65, 90, 97, 122, 41,
766 95, 48, 57, 65, 90, 97, 122, 95,
767 48, 57, 65, 90, 97, 122, 62, 95,
768 48, 57, 65, 90, 97, 122, 33, 60,
769 61, 33, 61, 38, 41, 95, 48, 57,
770 65, 90, 97, 122, 95, 48, 57, 65,
771 90, 97, 122, 41, 95, 48, 57, 65,
772 90, 97, 122, 41, 95, 48, 57, 65,
773 90, 97, 122, 41, 48, 57, 41, 58,
774 105, 109, 115, 120, 62, 95, 48, 57,
775 65, 90, 97, 122, 41, 48, 57, 95,
776 48, 57, 65, 90, 97, 122, 95, 48,
777 57, 65, 90, 97, 122, 41, 95, 48,
778 57, 65, 90, 97, 122, 95, 48, 57,
779 65, 90, 97, 122, 105, 109, 115, 120,
780 41, 45, 58, 105, 109, 115, 120, 46,
781 92, 93, 46, 92, 93, 46, 92, 58,
782 92, 93, 58, 92, 93, 58, 92, 61,
783 92, 93, 61, 92, 93, 61, 92, 39,
784 48, 57, 62, 45, 95, 48, 57, 65,
785 90, 97, 122, 48, 57, 125, 48, 57,
786 125, 48, 57, 125, 95, 125, 48, 57,
787 65, 90, 97, 122, 95, 125, 48, 57,
788 65, 90, 97, 122, 95, 125, 48, 57,
789 65, 90, 97, 122, 95, 125, 48, 57,
790 65, 90, 97, 122, 95, 48, 57, 65,
791 90, 97, 122, 39, 95, 48, 57, 65,
792 90, 97, 122, 95, 48, 57, 65, 90,
793 97, 122, 62, 95, 48, 57, 65, 90,
794 97, 122, 95, 48, 57, 65, 90, 97,
795 122, 95, 125, 48, 57, 65, 90, 97,
796 122, 48, 55, 125, 48, 55, 125, 48,
797 57, 65, 70, 97, 102, 44, 125, 48,
798 57, 125, 48, 57, 125, 48, 57, 384,
799 447, 384, 447, 384, 447, 41, 41, 80,
800 41, 41, 70, 41, 56, 41, 121, 97,
801 109, 98, 105, 99, 101, 110, 105, 97,
802 110, 101, 115, 116, 97, 110, 108, 109,
803 116, 105, 110, 101, 115, 101, 117, 109,
804 97, 107, 110, 103, 97, 108, 105, 112,
805 111, 109, 111, 102, 111, 97, 104, 105,
806 109, 105, 108, 108, 101, 103, 104, 105,
807 110, 101, 115, 101, 105, 100, 110, 114,
808 97, 100, 105, 97, 110, 95, 65, 98,
809 111, 114, 105, 103, 105, 110, 97, 108,
810 105, 97, 110, 97, 101, 109, 114, 111,
811 107, 101, 101, 109, 111, 110, 116, 105,
812 99, 110, 101, 105, 102, 111, 114, 109,
813 112, 114, 114, 105, 111, 116, 105, 108,
814 108, 105, 99, 115, 118, 101, 114, 101,
815 116, 97, 110, 97, 103, 97, 114, 105,
816 121, 112, 116, 105, 97, 110, 95, 72,
817 105, 101, 114, 111, 103, 108, 121, 112,
818 104, 115, 104, 105, 111, 112, 105, 99,
819 111, 114, 103, 105, 97, 110, 97, 103,
820 111, 108, 105, 116, 105, 99, 116, 104,
821 105, 99, 101, 101, 107, 106, 114, 97,
822 114, 97, 116, 105, 109, 117, 107, 104,
823 105, 110, 117, 108, 110, 111, 111, 98,
824 114, 101, 119, 114, 97, 103, 97, 110,
825 97, 112, 101, 114, 105, 97, 108, 95,
826 65, 114, 97, 109, 97, 105, 99, 104,
827 115, 101, 114, 105, 116, 101, 100, 99,
828 114, 105, 112, 116, 105, 111, 110, 97,
829 108, 95, 80, 97, 104, 114, 108, 97,
830 118, 105, 116, 104, 105, 97, 110, 118,
831 97, 110, 101, 115, 101, 105, 110, 116,
832 121, 116, 104, 105, 110, 97, 100, 97,
833 97, 107, 97, 110, 97, 97, 104, 95,
834 76, 105, 97, 109, 114, 111, 115, 104,
835 116, 104, 105, 101, 114, 111, 116, 105,
836 110, 112, 99, 104, 97, 109, 110, 115,
837 98, 117, 101, 97, 114, 95, 66, 117,
838 99, 100, 105, 97, 110, 105, 97, 110,
839 108, 110, 97, 121, 97, 108, 97, 109,
840 100, 97, 105, 99, 116, 101, 105, 95,
841 77, 97, 121, 101, 107, 110, 103, 111,
842 108, 105, 97, 110, 97, 110, 109, 97,
843 114, 119, 95, 84, 97, 105, 95, 76,
844 117, 101, 111, 104, 97, 109, 95, 100,
845 67, 104, 105, 107, 105, 95, 73, 80,
846 83, 84, 116, 97, 108, 105, 99, 101,
847 114, 115, 105, 97, 110, 111, 117, 116,
848 104, 95, 65, 114, 97, 98, 105, 97,
849 110, 117, 114, 107, 105, 99, 105, 121,
850 97, 109, 97, 110, 121, 97, 97, 111,
851 103, 115, 95, 80, 97, 101, 110, 105,
852 99, 105, 97, 110, 106, 97, 110, 103,
853 110, 105, 99, 109, 117, 97, 114, 105,
854 116, 97, 110, 114, 97, 115, 104, 116,
855 114, 97, 97, 118, 105, 97, 110, 110,
856 104, 97, 108, 97, 110, 100, 97, 110,
857 101, 115, 101, 108, 114, 111, 116, 105,
858 95, 78, 97, 103, 114, 105, 105, 97,
859 99, 103, 105, 109, 97, 98, 108, 111,
860 103, 97, 110, 119, 97, 95, 76, 84,
861 86, 101, 104, 97, 109, 105, 101, 116,
862 105, 108, 108, 117, 103, 117, 97, 97,
863 105, 110, 97, 98, 102, 101, 116, 97,
864 110, 105, 110, 97, 103, 104, 97, 114,
865 105, 116, 105, 99, 105, 110, 115, 112,
866 100, 123, 94, 125, 94, 46, 92, 93,
867 46, 92, 93, 46, 92, 58, 92, 93,
868 94, 97, 98, 99, 100, 103, 108, 112,
869 115, 117, 119, 120, 58, 92, 93, 58,
870 92, 93, 58, 92, 58, 92, 93, 97,
871 98, 99, 100, 103, 108, 112, 115, 117,
872 119, 120, 58, 92, 93, 108, 115, 58,
873 92, 93, 110, 112, 58, 92, 93, 117,
874 58, 92, 93, 109, 58, 92, 93, 58,
875 92, 93, 58, 92, 93, 104, 58, 92,
876 93, 97, 58, 92, 93, 58, 92, 93,
877 58, 92, 93, 99, 58, 92, 93, 105,
878 58, 92, 93, 105, 58, 92, 93, 58,
879 92, 93, 58, 92, 93, 108, 58, 92,
880 93, 97, 58, 92, 93, 110, 58, 92,
881 93, 107, 58, 92, 93, 58, 92, 93,
882 58, 92, 93, 110, 58, 92, 93, 116,
883 58, 92, 93, 114, 58, 92, 93, 108,
884 58, 92, 93, 58, 92, 93, 58, 92,
885 93, 105, 58, 92, 93, 103, 58, 92,
886 93, 105, 58, 92, 93, 116, 58, 92,
887 93, 58, 92, 93, 58, 92, 93, 114,
888 58, 92, 93, 97, 58, 92, 93, 112,
889 58, 92, 93, 104, 58, 92, 93, 58,
890 92, 93, 58, 92, 93, 111, 58, 92,
891 93, 119, 58, 92, 93, 101, 58, 92,
892 93, 114, 58, 92, 93, 58, 92, 93,
893 58, 92, 93, 114, 117, 58, 92, 93,
894 105, 58, 92, 93, 110, 58, 92, 93,
895 116, 58, 92, 93, 58, 92, 93, 58,
896 92, 93, 110, 58, 92, 93, 99, 58,
897 92, 93, 116, 58, 92, 93, 58, 92,
898 93, 58, 92, 93, 112, 58, 92, 93,
899 97, 58, 92, 93, 99, 58, 92, 93,
900 101, 58, 92, 93, 58, 92, 93, 58,
901 92, 93, 112, 58, 92, 93, 112, 58,
902 92, 93, 101, 58, 92, 93, 114, 58,
903 92, 93, 58, 92, 93, 58, 92, 93,
904 111, 58, 92, 93, 114, 58, 92, 93,
905 100, 58, 92, 93, 58, 92, 93, 58,
906 92, 93, 100, 58, 92, 93, 105, 58,
907 92, 93, 103, 58, 92, 93, 105, 58,
908 92, 93, 116, 58, 92, 93, 58, 92,
909 93, 58, 92, 93, 108, 115, 58, 92,
910 93, 110, 112, 58, 92, 93, 117, 58,
911 92, 93, 109, 58, 92, 93, 58, 92,
912 93, 58, 92, 93, 104, 58, 92, 93,
913 97, 58, 92, 93, 58, 92, 93, 58,
914 92, 93, 99, 58, 92, 93, 105, 58,
915 92, 93, 105, 58, 92, 93, 58, 92,
916 93, 58, 92, 93, 108, 58, 92, 93,
917 97, 58, 92, 93, 110, 58, 92, 93,
918 107, 58, 92, 93, 58, 92, 93, 58,
919 92, 93, 110, 58, 92, 93, 116, 58,
920 92, 93, 114, 58, 92, 93, 108, 58,
921 92, 93, 58, 92, 93, 58, 92, 93,
922 105, 58, 92, 93, 103, 58, 92, 93,
923 105, 58, 92, 93, 116, 58, 92, 93,
924 58, 92, 93, 58, 92, 93, 114, 58,
925 92, 93, 97, 58, 92, 93, 112, 58,
926 92, 93, 104, 58, 92, 93, 58, 92,
927 93, 58, 92, 93, 111, 58, 92, 93,
928 119, 58, 92, 93, 101, 58, 92, 93,
929 114, 58, 92, 93, 58, 92, 93, 58,
930 92, 93, 114, 117, 58, 92, 93, 105,
931 58, 92, 93, 110, 58, 92, 93, 116,
932 58, 92, 93, 58, 92, 93, 58, 92,
933 93, 110, 58, 92, 93, 99, 58, 92,
934 93, 116, 58, 92, 93, 58, 92, 93,
935 58, 92, 93, 112, 58, 92, 93, 97,
936 58, 92, 93, 99, 58, 92, 93, 101,
937 58, 92, 93, 58, 92, 93, 58, 92,
938 93, 112, 58, 92, 93, 112, 58, 92,
939 93, 101, 58, 92, 93, 114, 58, 92,
940 93, 58, 92, 93, 58, 92, 93, 111,
941 58, 92, 93, 114, 58, 92, 93, 100,
942 58, 92, 93, 58, 92, 93, 58, 92,
943 93, 100, 58, 92, 93, 105, 58, 92,
944 93, 103, 58, 92, 93, 105, 58, 92,
945 93, 116, 58, 92, 93, 58, 92, 93,
946 61, 92, 93, 61, 92, 93, 61, 92,
947 48, 55, 125, 48, 55, 125, 48, 57,
948 65, 70, 97, 102, 384, 447, 384, 447,
949 384, 447, 384, 447, 384, 447, 384, 447,
950 384, 447, 384, 447, 384, 447, 0, 32,
951 36, 40, 41, 42, 43, 46, 63, 91,
952 92, 94, 123, 124, 1315, 1571, 1, 8,
953 9, 13, 14, 34, 37, 255, 384, 447,
954 448, 479, 480, 495, 496, 503, 504, 511,
955 42, 63, 95, 48, 57, 65, 90, 97,
956 122, 95, 48, 57, 65, 90, 97, 122,
957 39, 48, 60, 63, 82, 95, 49, 55,
958 56, 57, 65, 90, 97, 122, 48, 57,
959 105, 109, 115, 120, 48, 57, 41, 48,
960 57, 33, 61, 95, 48, 57, 65, 90,
961 97, 122, 123, 41, 48, 57, 60, 61,
962 62, 41, 45, 58, 105, 109, 115, 120,
963 43, 63, 43, 63, 43, 63, 46, 58,
964 61, 48, 65, 66, 67, 68, 69, 71,
965 72, 75, 76, 78, 80, 81, 82, 83,
966 85, 86, 87, 88, 90, 97, 98, 99,
967 100, 101, 102, 103, 104, 107, 108, 110,
968 111, 112, 114, 115, 116, 117, 118, 119,
969 120, 122, 49, 55, 56, 57, 48, 55,
970 48, 55, 48, 55, 56, 57, 48, 55,
971 56, 57, 48, 57, 123, 39, 45, 60,
972 123, 48, 57, 48, 57, 48, 57, 48,
973 57, 48, 57, 39, 60, 123, 123, 123,
974 123, 48, 57, 65, 70, 97, 102, 48,
975 57, 65, 70, 97, 102, 48, 57, 65,
976 70, 97, 102, 48, 57, 43, 63, 384,
977 447, 384, 447, 384, 447, 41, 85, 41,
978 41, 67, 84, 65, 66, 67, 68, 69,
979 71, 72, 73, 74, 75, 76, 77, 78,
980 79, 80, 82, 83, 84, 85, 86, 88,
981 89, 90, 110, 114, 118, 97, 101, 111,
982 114, 117, 97, 99, 102, 104, 110, 111,
983 115, 117, 121, 109, 112, 101, 103, 116,
984 101, 108, 111, 114, 117, 97, 101, 105,
985 103, 117, 109, 110, 97, 97, 104, 38,
986 97, 101, 105, 108, 109, 111, 116, 117,
987 121, 97, 99, 101, 110, 111, 121, 101,
988 100, 101, 107, 108, 111, 103, 108, 114,
989 115, 99, 100, 101, 102, 104, 105, 111,
990 115, 101, 117, 97, 99, 104, 105, 107,
991 109, 111, 117, 121, 97, 101, 104, 105,
992 103, 97, 97, 112, 115, 119, 105, 108,
993 112, 115, 67, 76, 77, 78, 80, 83,
994 90, 45, 91, 92, 93, 0, 255, 384,
995 447, 448, 479, 480, 495, 496, 503, 504,
996 511, 46, 58, 61, 48, 68, 69, 72,
997 76, 78, 80, 81, 83, 85, 86, 87,
998 97, 98, 99, 100, 101, 102, 103, 104,
999 108, 110, 111, 112, 114, 115, 116, 117,
1000 118, 119, 120, 49, 55, 56, 57, 65,
1001 90, 105, 122, 48, 55, 48, 55, 48,
1002 55, 48, 55, 123, 123, 123, 123, 48,
1003 57, 65, 70, 97, 102, 48, 57, 65,
1004 70, 97, 102, 48, 57, 65, 70, 97,
1005 102, 384, 447, 384, 447, 384, 447, 92,
1006 1117, 1118, -128, 91, 95, 127, 861, 862,
1007 69, 81, 92, 0, 255, 384, 447, 448,
1008 479, 480, 495, 496, 503, 504, 511, 69,
1009 384, 447, 384, 447, 384, 447, 92, 0,
1010 255, 384, 447, 448, 479, 480, 495, 496,
1011 503, 504, 511, 69, 384, 447, 384, 447,
1012 384, 447, 41, 10, 0
1013};
1014
1015static const char _regex_single_lengths[] = {
1016 0, 1, 20, 2, 2, 1, 2, 1,
1017 2, 2, 2, 1, 2, 3, 2, 3,
1018 1, 2, 2, 1, 6, 2, 1, 1,
1019 1, 2, 1, 4, 7, 3, 3, 2,
1020 3, 3, 2, 3, 3, 2, 1, 0,
1021 1, 2, 0, 1, 1, 1, 2, 2,
1022 2, 2, 1, 2, 1, 2, 1, 2,
1023 0, 1, 1, 2, 1, 1, 0, 0,
1024 0, 1, 2, 1, 2, 2, 1, 1,
1025 2, 1, 1, 1, 1, 1, 1, 1,
1026 1, 1, 1, 1, 1, 1, 3, 1,
1027 1, 1, 1, 1, 1, 1, 1, 1,
1028 1, 1, 1, 1, 1, 1, 1, 1,
1029 1, 1, 1, 1, 2, 1, 1, 1,
1030 1, 1, 2, 1, 1, 1, 1, 1,
1031 1, 1, 2, 1, 1, 1, 1, 1,
1032 1, 1, 1, 1, 1, 1, 1, 1,
1033 1, 1, 1, 1, 1, 1, 2, 1,
1034 1, 1, 1, 1, 1, 1, 1, 1,
1035 1, 1, 1, 1, 1, 1, 1, 1,
1036 1, 1, 2, 1, 1, 1, 1, 1,
1037 1, 1, 1, 1, 2, 1, 1, 1,
1038 1, 1, 1, 1, 1, 1, 1, 1,
1039 1, 1, 1, 1, 1, 1, 1, 1,
1040 1, 1, 1, 1, 1, 1, 1, 1,
1041 1, 1, 1, 1, 1, 1, 1, 1,
1042 1, 1, 1, 1, 1, 1, 1, 1,
1043 1, 1, 1, 1, 1, 1, 1, 1,
1044 1, 1, 1, 1, 1, 2, 1, 1,
1045 1, 1, 1, 1, 1, 1, 1, 1,
1046 1, 1, 1, 1, 1, 1, 1, 1,
1047 1, 1, 1, 1, 1, 1, 1, 1,
1048 1, 1, 1, 1, 1, 1, 1, 1,
1049 1, 1, 1, 1, 1, 1, 2, 1,
1050 1, 1, 1, 1, 1, 1, 1, 1,
1051 1, 1, 1, 1, 1, 1, 1, 1,
1052 1, 1, 2, 1, 1, 1, 1, 1,
1053 1, 1, 1, 1, 1, 1, 1, 1,
1054 1, 1, 4, 1, 1, 1, 1, 1,
1055 1, 1, 1, 1, 1, 1, 1, 1,
1056 1, 1, 1, 1, 2, 1, 1, 1,
1057 1, 1, 1, 1, 1, 1, 2, 1,
1058 1, 1, 1, 1, 1, 3, 1, 1,
1059 1, 1, 1, 1, 1, 1, 2, 1,
1060 1, 1, 1, 1, 1, 2, 1, 1,
1061 1, 1, 1, 1, 1, 1, 1, 1,
1062 1, 1, 1, 1, 1, 1, 1, 1,
1063 1, 1, 1, 1, 1, 1, 1, 1,
1064 1, 1, 1, 1, 1, 1, 1, 1,
1065 1, 1, 1, 1, 1, 1, 1, 1,
1066 1, 1, 2, 1, 1, 1, 1, 1,
1067 1, 4, 1, 1, 1, 1, 1, 1,
1068 1, 1, 1, 1, 1, 1, 1, 1,
1069 1, 1, 1, 1, 1, 1, 1, 1,
1070 1, 1, 1, 1, 1, 1, 1, 1,
1071 1, 1, 1, 1, 1, 1, 2, 1,
1072 1, 1, 1, 1, 1, 1, 1, 1,
1073 1, 1, 1, 1, 1, 1, 1, 1,
1074 1, 1, 2, 1, 1, 1, 1, 1,
1075 1, 1, 1, 1, 1, 1, 1, 1,
1076 1, 1, 1, 1, 1, 1, 1, 1,
1077 1, 1, 1, 1, 1, 1, 1, 1,
1078 1, 2, 1, 1, 1, 1, 1, 1,
1079 1, 1, 1, 1, 1, 1, 3, 2,
1080 1, 1, 1, 1, 1, 1, 1, 1,
1081 3, 1, 1, 1, 1, 1, 1, 1,
1082 1, 1, 1, 1, 1, 1, 1, 2,
1083 1, 1, 2, 1, 1, 1, 1, 1,
1084 1, 1, 1, 1, 1, 1, 1, 1,
1085 1, 1, 1, 1, 1, 1, 1, 1,
1086 1, 1, 1, 3, 3, 2, 15, 3,
1087 3, 2, 14, 5, 5, 4, 4, 3,
1088 3, 4, 4, 3, 3, 4, 4, 4,
1089 3, 3, 4, 4, 4, 4, 3, 3,
1090 4, 4, 4, 4, 3, 3, 4, 4,
1091 4, 4, 3, 3, 4, 4, 4, 4,
1092 3, 3, 4, 4, 4, 4, 3, 3,
1093 5, 4, 4, 4, 3, 3, 4, 4,
1094 4, 3, 3, 4, 4, 4, 4, 3,
1095 3, 4, 4, 4, 4, 3, 3, 4,
1096 4, 4, 3, 3, 4, 4, 4, 4,
1097 4, 3, 3, 5, 5, 4, 4, 3,
1098 3, 4, 4, 3, 3, 4, 4, 4,
1099 3, 3, 4, 4, 4, 4, 3, 3,
1100 4, 4, 4, 4, 3, 3, 4, 4,
1101 4, 4, 3, 3, 4, 4, 4, 4,
1102 3, 3, 4, 4, 4, 4, 3, 3,
1103 5, 4, 4, 4, 3, 3, 4, 4,
1104 4, 3, 3, 4, 4, 4, 4, 3,
1105 3, 4, 4, 4, 4, 3, 3, 4,
1106 4, 4, 3, 3, 4, 4, 4, 4,
1107 4, 3, 3, 3, 3, 2, 0, 1,
1108 1, 0, 0, 0, 0, 0, 0, 0,
1109 0, 0, 16, 2, 1, 1, 6, 0,
1110 4, 1, 3, 1, 1, 3, 7, 2,
1111 2, 2, 3, 41, 0, 0, 0, 0,
1112 0, 1, 0, 4, 0, 0, 0, 0,
1113 3, 1, 1, 1, 0, 0, 0, 2,
1114 0, 0, 0, 2, 1, 3, 23, 3,
1115 5, 9, 2, 1, 2, 5, 3, 2,
1116 2, 1, 2, 10, 6, 1, 5, 4,
1117 8, 2, 9, 4, 1, 1, 4, 1,
1118 3, 0, 7, 4, 3, 31, 0, 0,
1119 0, 0, 1, 0, 1, 1, 1, 0,
1120 0, 0, 0, 0, 3, 2, 1, 1,
1121 0, 0, 0, 1, 1, 0, 0, 0,
1122 1, 1
1123};
1124
1125static const char _regex_range_lengths[] = {
1126 0, 0, 1, 3, 3, 3, 3, 0,
1127 3, 3, 3, 3, 3, 0, 0, 3,
1128 3, 3, 3, 1, 0, 3, 1, 3,
1129 3, 3, 3, 0, 0, 0, 0, 0,
1130 0, 0, 0, 0, 0, 0, 0, 1,
1131 0, 3, 1, 1, 1, 0, 3, 3,
1132 3, 3, 3, 3, 3, 3, 3, 3,
1133 1, 1, 3, 1, 1, 1, 1, 1,
1134 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,
1139 0, 0, 0, 0, 0, 0, 0, 0,
1140 0, 0, 0, 0, 0, 0, 0, 0,
1141 0, 0, 0, 0, 0, 0, 0, 0,
1142 0, 0, 0, 0, 0, 0, 0, 0,
1143 0, 0, 0, 0, 0, 0, 0, 0,
1144 0, 0, 0, 0, 0, 0, 0, 0,
1145 0, 0, 0, 0, 0, 0, 0, 0,
1146 0, 0, 0, 0, 0, 0, 0, 0,
1147 0, 0, 0, 0, 0, 0, 0, 0,
1148 0, 0, 0, 0, 0, 0, 0, 0,
1149 0, 0, 0, 0, 0, 0, 0, 0,
1150 0, 0, 0, 0, 0, 0, 0, 0,
1151 0, 0, 0, 0, 0, 0, 0, 0,
1152 0, 0, 0, 0, 0, 0, 0, 0,
1153 0, 0, 0, 0, 0, 0, 0, 0,
1154 0, 0, 0, 0, 0, 0, 0, 0,
1155 0, 0, 0, 0, 0, 0, 0, 0,
1156 0, 0, 0, 0, 0, 0, 0, 0,
1157 0, 0, 0, 0, 0, 0, 0, 0,
1158 0, 0, 0, 0, 0, 0, 0, 0,
1159 0, 0, 0, 0, 0, 0, 0, 0,
1160 0, 0, 0, 0, 0, 0, 0, 0,
1161 0, 0, 0, 0, 0, 0, 0, 0,
1162 0, 0, 0, 0, 0, 0, 0, 0,
1163 0, 0, 0, 0, 0, 0, 0, 0,
1164 0, 0, 0, 0, 0, 0, 0, 0,
1165 0, 0, 0, 0, 0, 0, 0, 0,
1166 0, 0, 0, 0, 0, 0, 0, 0,
1167 0, 0, 0, 0, 0, 0, 0, 0,
1168 0, 0, 0, 0, 0, 0, 0, 0,
1169 0, 0, 0, 0, 0, 0, 0, 0,
1170 0, 0, 0, 0, 0, 0, 0, 0,
1171 0, 0, 0, 0, 0, 0, 0, 0,
1172 0, 0, 0, 0, 0, 0, 0, 0,
1173 0, 0, 0, 0, 0, 0, 0, 0,
1174 0, 0, 0, 0, 0, 0, 0, 0,
1175 0, 0, 0, 0, 0, 0, 0, 0,
1176 0, 0, 0, 0, 0, 0, 0, 0,
1177 0, 0, 0, 0, 0, 0, 0, 0,
1178 0, 0, 0, 0, 0, 0, 0, 0,
1179 0, 0, 0, 0, 0, 0, 0, 0,
1180 0, 0, 0, 0, 0, 0, 0, 0,
1181 0, 0, 0, 0, 0, 0, 0, 0,
1182 0, 0, 0, 0, 0, 0, 0, 0,
1183 0, 0, 0, 0, 0, 0, 0, 0,
1184 0, 0, 0, 0, 0, 0, 0, 0,
1185 0, 0, 0, 0, 0, 0, 0, 0,
1186 0, 0, 0, 0, 0, 0, 0, 0,
1187 0, 0, 0, 0, 0, 0, 0, 0,
1188 0, 0, 0, 0, 0, 0, 0, 0,
1189 0, 0, 0, 0, 0, 0, 0, 0,
1190 0, 0, 0, 0, 0, 0, 0, 0,
1191 0, 0, 0, 0, 0, 0, 0, 0,
1192 0, 0, 0, 0, 0, 0, 0, 0,
1193 0, 0, 0, 0, 0, 0, 0, 0,
1194 0, 0, 0, 0, 0, 0, 0, 0,
1195 0, 0, 0, 0, 0, 0, 0, 0,
1196 0, 0, 0, 0, 0, 0, 0, 0,
1197 0, 0, 0, 0, 0, 0, 0, 0,
1198 0, 0, 0, 0, 0, 0, 0, 0,
1199 0, 0, 0, 0, 0, 0, 0, 0,
1200 0, 0, 0, 0, 0, 0, 0, 0,
1201 0, 0, 0, 0, 0, 0, 0, 0,
1202 0, 0, 0, 0, 0, 0, 0, 0,
1203 0, 0, 0, 0, 0, 0, 0, 0,
1204 0, 0, 0, 0, 0, 0, 0, 0,
1205 0, 0, 0, 0, 0, 0, 0, 0,
1206 0, 0, 0, 0, 0, 0, 0, 0,
1207 0, 0, 0, 0, 0, 0, 0, 0,
1208 0, 0, 0, 0, 0, 0, 0, 0,
1209 0, 0, 0, 0, 0, 0, 0, 0,
1210 0, 0, 0, 0, 0, 0, 0, 0,
1211 0, 0, 0, 0, 0, 0, 0, 0,
1212 0, 0, 0, 0, 0, 0, 0, 0,
1213 0, 0, 0, 0, 0, 0, 0, 0,
1214 0, 0, 0, 0, 0, 0, 0, 0,
1215 0, 0, 0, 0, 0, 0, 0, 0,
1216 0, 0, 0, 0, 0, 0, 0, 0,
1217 0, 0, 0, 0, 0, 0, 1, 1,
1218 3, 1, 1, 1, 1, 1, 1, 1,
1219 1, 1, 9, 0, 3, 3, 4, 1,
1220 1, 1, 3, 0, 1, 0, 0, 0,
1221 0, 0, 0, 2, 1, 1, 2, 2,
1222 1, 0, 0, 1, 1, 1, 1, 1,
1223 0, 0, 0, 3, 3, 3, 1, 0,
1224 1, 1, 1, 0, 0, 0, 0, 0,
1225 0, 0, 0, 0, 0, 0, 0, 0,
1226 0, 0, 0, 0, 0, 0, 0, 0,
1227 0, 0, 0, 0, 0, 0, 0, 0,
1228 0, 0, 0, 6, 0, 4, 1, 1,
1229 1, 1, 0, 0, 0, 0, 3, 3,
1230 3, 1, 1, 1, 3, 0, 6, 0,
1231 1, 1, 1, 6, 0, 1, 1, 1,
1232 0, 0
1233};
1234
1235static const short _regex_index_offsets[] = {
1236 0, 0, 2, 24, 30, 36, 41, 47,
1237 49, 55, 61, 67, 72, 78, 82, 85,
1238 92, 97, 103, 109, 112, 119, 125, 128,
1239 133, 138, 144, 149, 154, 162, 166, 170,
1240 173, 177, 181, 184, 188, 192, 195, 197,
1241 199, 201, 207, 209, 212, 215, 217, 223,
1242 229, 235, 241, 246, 252, 257, 263, 268,
1243 274, 276, 279, 284, 288, 291, 294, 296,
1244 298, 300, 302, 305, 307, 310, 313, 315,
1245 317, 320, 322, 324, 326, 328, 330, 332,
1246 334, 336, 338, 340, 342, 344, 346, 350,
1247 352, 354, 356, 358, 360, 362, 364, 366,
1248 368, 370, 372, 374, 376, 378, 380, 382,
1249 384, 386, 388, 390, 392, 395, 397, 399,
1250 401, 403, 405, 408, 410, 412, 414, 416,
1251 418, 420, 422, 425, 427, 429, 431, 433,
1252 435, 437, 439, 441, 443, 445, 447, 449,
1253 451, 453, 455, 457, 459, 461, 463, 466,
1254 468, 470, 472, 474, 476, 478, 480, 482,
1255 484, 486, 488, 490, 492, 494, 496, 498,
1256 500, 502, 504, 507, 509, 511, 513, 515,
1257 517, 519, 521, 523, 525, 528, 530, 532,
1258 534, 536, 538, 540, 542, 544, 546, 548,
1259 550, 552, 554, 556, 558, 560, 562, 564,
1260 566, 568, 570, 572, 574, 576, 578, 580,
1261 582, 584, 586, 588, 590, 592, 594, 596,
1262 598, 600, 602, 604, 606, 608, 610, 612,
1263 614, 616, 618, 620, 622, 624, 626, 628,
1264 630, 632, 634, 636, 638, 640, 643, 645,
1265 647, 649, 651, 653, 655, 657, 659, 661,
1266 663, 665, 667, 669, 671, 673, 675, 677,
1267 679, 681, 683, 685, 687, 689, 691, 693,
1268 695, 697, 699, 701, 703, 705, 707, 709,
1269 711, 713, 715, 717, 719, 721, 723, 726,
1270 728, 730, 732, 734, 736, 738, 740, 742,
1271 744, 746, 748, 750, 752, 754, 756, 758,
1272 760, 762, 764, 767, 769, 771, 773, 775,
1273 777, 779, 781, 783, 785, 787, 789, 791,
1274 793, 795, 797, 802, 804, 806, 808, 810,
1275 812, 814, 816, 818, 820, 822, 824, 826,
1276 828, 830, 832, 834, 836, 839, 841, 843,
1277 845, 847, 849, 851, 853, 855, 857, 860,
1278 862, 864, 866, 868, 870, 872, 876, 878,
1279 880, 882, 884, 886, 888, 890, 892, 895,
1280 897, 899, 901, 903, 905, 907, 910, 912,
1281 914, 916, 918, 920, 922, 924, 926, 928,
1282 930, 932, 934, 936, 938, 940, 942, 944,
1283 946, 948, 950, 952, 954, 956, 958, 960,
1284 962, 964, 966, 968, 970, 972, 974, 976,
1285 978, 980, 982, 984, 986, 988, 990, 992,
1286 994, 996, 998, 1001, 1003, 1005, 1007, 1009,
1287 1011, 1013, 1018, 1020, 1022, 1024, 1026, 1028,
1288 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044,
1289 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060,
1290 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076,
1291 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1093,
1292 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109,
1293 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125,
1294 1127, 1129, 1131, 1134, 1136, 1138, 1140, 1142,
1295 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158,
1296 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174,
1297 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190,
1298 1192, 1194, 1197, 1199, 1201, 1203, 1205, 1207,
1299 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1225,
1300 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242,
1301 1244, 1248, 1250, 1252, 1254, 1256, 1258, 1260,
1302 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276,
1303 1279, 1281, 1283, 1286, 1288, 1290, 1292, 1294,
1304 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310,
1305 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326,
1306 1328, 1330, 1332, 1334, 1338, 1342, 1345, 1361,
1307 1365, 1369, 1372, 1387, 1393, 1399, 1404, 1409,
1308 1413, 1417, 1422, 1427, 1431, 1435, 1440, 1445,
1309 1450, 1454, 1458, 1463, 1468, 1473, 1478, 1482,
1310 1486, 1491, 1496, 1501, 1506, 1510, 1514, 1519,
1311 1524, 1529, 1534, 1538, 1542, 1547, 1552, 1557,
1312 1562, 1566, 1570, 1575, 1580, 1585, 1590, 1594,
1313 1598, 1604, 1609, 1614, 1619, 1623, 1627, 1632,
1314 1637, 1642, 1646, 1650, 1655, 1660, 1665, 1670,
1315 1674, 1678, 1683, 1688, 1693, 1698, 1702, 1706,
1316 1711, 1716, 1721, 1725, 1729, 1734, 1739, 1744,
1317 1749, 1754, 1758, 1762, 1768, 1774, 1779, 1784,
1318 1788, 1792, 1797, 1802, 1806, 1810, 1815, 1820,
1319 1825, 1829, 1833, 1838, 1843, 1848, 1853, 1857,
1320 1861, 1866, 1871, 1876, 1881, 1885, 1889, 1894,
1321 1899, 1904, 1909, 1913, 1917, 1922, 1927, 1932,
1322 1937, 1941, 1945, 1950, 1955, 1960, 1965, 1969,
1323 1973, 1979, 1984, 1989, 1994, 1998, 2002, 2007,
1324 2012, 2017, 2021, 2025, 2030, 2035, 2040, 2045,
1325 2049, 2053, 2058, 2063, 2068, 2073, 2077, 2081,
1326 2086, 2091, 2096, 2100, 2104, 2109, 2114, 2119,
1327 2124, 2129, 2133, 2137, 2141, 2145, 2148, 2150,
1328 2153, 2158, 2160, 2162, 2164, 2166, 2168, 2170,
1329 2172, 2174, 2176, 2202, 2205, 2210, 2215, 2226,
1330 2228, 2234, 2237, 2244, 2246, 2249, 2253, 2261,
1331 2264, 2267, 2270, 2274, 2318, 2320, 2322, 2325,
1332 2328, 2330, 2332, 2333, 2339, 2341, 2343, 2345,
1333 2347, 2351, 2353, 2355, 2360, 2364, 2368, 2370,
1334 2373, 2375, 2377, 2379, 2382, 2384, 2388, 2412,
1335 2416, 2422, 2432, 2435, 2437, 2440, 2446, 2450,
1336 2453, 2456, 2458, 2461, 2472, 2479, 2481, 2487,
1337 2492, 2501, 2504, 2514, 2519, 2521, 2523, 2528,
1338 2530, 2534, 2535, 2543, 2554, 2558, 2594, 2596,
1339 2598, 2600, 2602, 2604, 2605, 2607, 2609, 2614,
1340 2618, 2622, 2624, 2626, 2628, 2635, 2638, 2646,
1341 2648, 2650, 2652, 2654, 2662, 2664, 2666, 2668,
1342 2670, 2672
1343};
1344
1345static const short _regex_indicies[] = {
1346 0, 1, 3, 4, 5, 6, 7, 8,
1347 9, 10, 12, 13, 14, 15, 16, 17,
1348 18, 19, 19, 19, 19, 20, 11, 2,
1349 22, 23, 23, 23, 23, 21, 24, 25,
1350 25, 25, 25, 21, 27, 27, 27, 27,
1351 26, 28, 27, 27, 27, 27, 26, 29,
1352 26, 29, 30, 30, 30, 30, 26, 31,
1353 30, 32, 30, 30, 26, 29, 30, 32,
1354 30, 30, 26, 33, 33, 33, 33, 26,
1355 28, 33, 33, 33, 33, 26, 34, 35,
1356 36, 26, 37, 38, 26, 39, 40, 30,
1357 41, 30, 30, 26, 42, 42, 42, 42,
1358 26, 40, 42, 42, 42, 42, 26, 40,
1359 30, 41, 30, 30, 26, 43, 44, 21,
1360 45, 46, 47, 47, 47, 47, 21, 24,
1361 48, 48, 48, 48, 21, 49, 50, 21,
1362 48, 48, 48, 48, 21, 51, 51, 51,
1363 51, 21, 52, 51, 51, 51, 51, 21,
1364 23, 23, 23, 23, 21, 47, 47, 47,
1365 47, 21, 45, 53, 46, 54, 54, 54,
1366 54, 21, 57, 58, 55, 56, 57, 58,
1367 59, 56, 57, 58, 56, 61, 62, 55,
1368 60, 61, 62, 63, 60, 61, 62, 60,
1369 65, 66, 55, 64, 65, 66, 59, 64,
1370 65, 66, 64, 69, 68, 70, 67, 69,
1371 71, 72, 74, 73, 74, 74, 67, 75,
1372 67, 77, 76, 67, 77, 78, 67, 77,
1373 67, 74, 80, 79, 74, 74, 67, 74,
1374 80, 81, 74, 74, 67, 74, 80, 74,
1375 74, 74, 67, 74, 82, 74, 74, 74,
1376 67, 84, 84, 84, 84, 83, 85, 84,
1377 84, 84, 84, 83, 86, 86, 86, 86,
1378 83, 87, 86, 86, 86, 86, 83, 88,
1379 88, 88, 88, 83, 88, 89, 88, 88,
1380 88, 83, 91, 90, 92, 91, 90, 95,
1381 94, 94, 94, 93, 97, 99, 98, 96,
1382 101, 100, 96, 102, 100, 96, 104, 103,
1383 105, 103, 106, 103, 109, 108, 109, 110,
1384 108, 111, 108, 109, 112, 108, 113, 114,
1385 108, 115, 108, 117, 116, 118, 119, 116,
1386 120, 116, 121, 116, 122, 116, 123, 116,
1387 124, 116, 125, 116, 126, 116, 127, 116,
1388 128, 116, 129, 116, 130, 116, 131, 116,
1389 132, 116, 133, 134, 135, 116, 136, 116,
1390 137, 116, 138, 116, 139, 116, 140, 116,
1391 141, 116, 142, 116, 143, 116, 144, 116,
1392 145, 116, 146, 116, 147, 116, 148, 116,
1393 149, 116, 150, 116, 151, 116, 152, 116,
1394 153, 116, 154, 116, 155, 116, 156, 116,
1395 157, 158, 116, 159, 116, 160, 116, 161,
1396 116, 162, 116, 163, 116, 164, 165, 116,
1397 166, 116, 167, 116, 168, 116, 169, 116,
1398 170, 116, 171, 116, 172, 116, 174, 175,
1399 173, 176, 173, 177, 173, 178, 173, 179,
1400 173, 180, 173, 181, 173, 182, 173, 183,
1401 173, 184, 173, 185, 173, 186, 173, 187,
1402 173, 188, 173, 189, 173, 190, 173, 191,
1403 173, 192, 173, 193, 173, 194, 173, 195,
1404 196, 173, 197, 173, 198, 173, 199, 173,
1405 200, 173, 201, 173, 202, 173, 204, 203,
1406 205, 203, 206, 203, 207, 203, 208, 203,
1407 209, 203, 210, 173, 211, 173, 212, 173,
1408 213, 173, 214, 173, 215, 173, 216, 173,
1409 217, 218, 173, 219, 173, 220, 173, 221,
1410 173, 222, 173, 223, 173, 224, 173, 225,
1411 173, 226, 173, 227, 173, 228, 229, 116,
1412 230, 116, 231, 116, 232, 116, 233, 116,
1413 234, 116, 235, 116, 236, 116, 237, 116,
1414 238, 116, 239, 116, 240, 116, 241, 116,
1415 242, 116, 243, 116, 244, 116, 245, 116,
1416 246, 116, 247, 116, 248, 116, 249, 116,
1417 250, 116, 251, 116, 252, 116, 253, 116,
1418 254, 116, 255, 116, 256, 116, 257, 116,
1419 258, 116, 259, 116, 260, 116, 261, 116,
1420 262, 116, 263, 116, 264, 116, 265, 116,
1421 266, 116, 267, 116, 268, 116, 269, 116,
1422 270, 116, 271, 116, 272, 116, 273, 116,
1423 274, 116, 275, 116, 276, 116, 277, 116,
1424 278, 116, 279, 116, 280, 116, 281, 116,
1425 282, 116, 283, 116, 284, 116, 285, 116,
1426 286, 287, 116, 288, 116, 289, 116, 290,
1427 116, 291, 116, 292, 116, 293, 116, 294,
1428 116, 295, 116, 296, 116, 297, 116, 298,
1429 116, 300, 299, 301, 299, 302, 299, 303,
1430 299, 304, 299, 305, 116, 306, 116, 307,
1431 116, 308, 116, 309, 116, 310, 116, 311,
1432 116, 312, 116, 313, 116, 314, 116, 315,
1433 116, 316, 116, 317, 116, 318, 116, 319,
1434 116, 320, 116, 321, 116, 322, 116, 323,
1435 116, 324, 116, 325, 116, 326, 116, 327,
1436 116, 328, 116, 329, 330, 116, 331, 116,
1437 332, 116, 333, 116, 334, 116, 335, 116,
1438 336, 116, 337, 116, 338, 116, 339, 116,
1439 340, 116, 341, 116, 342, 116, 343, 116,
1440 344, 116, 345, 116, 346, 116, 347, 116,
1441 348, 116, 349, 116, 350, 351, 116, 352,
1442 116, 353, 116, 354, 116, 355, 116, 356,
1443 116, 357, 116, 358, 116, 359, 116, 360,
1444 116, 361, 116, 362, 116, 363, 116, 364,
1445 116, 365, 116, 366, 116, 367, 368, 369,
1446 370, 116, 371, 116, 372, 116, 373, 116,
1447 374, 116, 375, 116, 376, 116, 377, 116,
1448 378, 116, 379, 116, 380, 116, 381, 116,
1449 382, 116, 383, 116, 384, 116, 385, 116,
1450 386, 116, 387, 116, 388, 389, 116, 390,
1451 116, 391, 116, 392, 116, 393, 116, 394,
1452 116, 395, 116, 396, 116, 397, 116, 398,
1453 116, 400, 401, 399, 402, 399, 403, 399,
1454 404, 399, 405, 399, 406, 399, 407, 399,
1455 408, 409, 410, 399, 411, 399, 412, 399,
1456 413, 399, 414, 399, 415, 399, 416, 399,
1457 417, 399, 418, 399, 419, 420, 399, 421,
1458 399, 422, 399, 423, 399, 424, 399, 425,
1459 399, 426, 399, 428, 429, 427, 430, 427,
1460 431, 427, 432, 427, 433, 427, 434, 427,
1461 435, 427, 436, 427, 437, 427, 438, 427,
1462 439, 427, 441, 440, 442, 440, 443, 440,
1463 444, 440, 445, 440, 446, 440, 447, 440,
1464 448, 440, 449, 440, 450, 427, 451, 427,
1465 452, 427, 453, 427, 454, 427, 455, 427,
1466 456, 427, 457, 427, 458, 427, 459, 427,
1467 460, 427, 461, 427, 463, 462, 464, 462,
1468 465, 462, 466, 462, 467, 462, 468, 462,
1469 469, 462, 470, 462, 471, 462, 472, 462,
1470 473, 116, 474, 116, 475, 116, 476, 477,
1471 116, 478, 116, 479, 116, 480, 116, 481,
1472 116, 482, 116, 483, 116, 484, 485, 486,
1473 487, 116, 488, 116, 489, 116, 490, 116,
1474 491, 116, 492, 116, 493, 116, 494, 116,
1475 495, 116, 496, 116, 497, 116, 498, 116,
1476 499, 116, 500, 116, 501, 116, 502, 116,
1477 503, 116, 504, 116, 505, 116, 506, 116,
1478 507, 116, 508, 116, 509, 116, 510, 116,
1479 511, 116, 512, 116, 513, 116, 514, 116,
1480 515, 116, 516, 116, 517, 116, 518, 116,
1481 519, 116, 520, 116, 521, 116, 522, 116,
1482 523, 116, 525, 526, 524, 527, 524, 528,
1483 524, 529, 524, 530, 524, 531, 524, 532,
1484 524, 533, 524, 534, 524, 535, 524, 536,
1485 524, 537, 524, 538, 524, 539, 116, 540,
1486 116, 541, 116, 542, 116, 543, 116, 544,
1487 116, 545, 116, 547, 548, 546, 549, 546,
1488 550, 546, 551, 546, 552, 546, 553, 546,
1489 554, 546, 555, 546, 556, 546, 557, 546,
1490 558, 546, 559, 546, 560, 546, 561, 546,
1491 562, 546, 563, 546, 564, 546, 565, 546,
1492 566, 546, 567, 546, 568, 546, 569, 546,
1493 570, 546, 571, 546, 572, 546, 573, 546,
1494 574, 546, 575, 546, 576, 546, 577, 546,
1495 578, 546, 579, 580, 546, 581, 546, 582,
1496 546, 583, 546, 584, 546, 585, 546, 586,
1497 546, 587, 546, 588, 546, 589, 546, 590,
1498 546, 591, 546, 592, 546, 593, 594, 595,
1499 116, 596, 597, 116, 598, 116, 599, 116,
1500 600, 116, 601, 116, 602, 116, 603, 116,
1501 604, 116, 605, 116, 606, 607, 608, 116,
1502 609, 116, 610, 116, 611, 116, 612, 116,
1503 613, 116, 614, 116, 615, 116, 616, 116,
1504 617, 116, 618, 116, 619, 116, 620, 116,
1505 621, 116, 622, 116, 623, 624, 116, 625,
1506 116, 626, 116, 627, 628, 116, 629, 116,
1507 630, 116, 631, 116, 632, 116, 633, 116,
1508 634, 116, 635, 116, 636, 116, 637, 116,
1509 638, 116, 639, 116, 640, 116, 641, 116,
1510 642, 116, 643, 116, 644, 116, 645, 116,
1511 646, 116, 647, 116, 648, 116, 650, 649,
1512 652, 651, 653, 649, 649, 651, 656, 657,
1513 654, 655, 656, 657, 658, 655, 656, 657,
1514 655, 660, 661, 654, 662, 663, 664, 665,
1515 666, 667, 668, 669, 670, 671, 672, 673,
1516 659, 660, 661, 654, 659, 660, 661, 674,
1517 659, 660, 661, 659, 660, 661, 654, 675,
1518 676, 677, 678, 679, 680, 681, 682, 683,
1519 684, 685, 659, 660, 661, 654, 686, 687,
1520 659, 660, 661, 654, 688, 689, 659, 660,
1521 661, 654, 690, 659, 660, 661, 654, 691,
1522 659, 692, 661, 654, 659, 660, 661, 693,
1523 659, 660, 661, 654, 694, 659, 660, 661,
1524 654, 695, 659, 696, 661, 654, 659, 660,
1525 661, 697, 659, 660, 661, 654, 698, 659,
1526 660, 661, 654, 699, 659, 660, 661, 654,
1527 700, 659, 701, 661, 654, 659, 660, 661,
1528 702, 659, 660, 661, 654, 703, 659, 660,
1529 661, 654, 704, 659, 660, 661, 654, 705,
1530 659, 660, 661, 654, 706, 659, 707, 661,
1531 654, 659, 660, 661, 708, 659, 660, 661,
1532 654, 709, 659, 660, 661, 654, 710, 659,
1533 660, 661, 654, 711, 659, 660, 661, 654,
1534 712, 659, 713, 661, 654, 659, 660, 661,
1535 714, 659, 660, 661, 654, 715, 659, 660,
1536 661, 654, 716, 659, 660, 661, 654, 717,
1537 659, 660, 661, 654, 718, 659, 719, 661,
1538 654, 659, 660, 661, 720, 659, 660, 661,
1539 654, 721, 659, 660, 661, 654, 722, 659,
1540 660, 661, 654, 723, 659, 660, 661, 654,
1541 724, 659, 725, 661, 654, 659, 660, 661,
1542 726, 659, 660, 661, 654, 727, 659, 660,
1543 661, 654, 728, 659, 660, 661, 654, 729,
1544 659, 660, 661, 654, 730, 659, 731, 661,
1545 654, 659, 660, 661, 732, 659, 660, 661,
1546 654, 733, 734, 659, 660, 661, 654, 735,
1547 659, 660, 661, 654, 736, 659, 660, 661,
1548 654, 737, 659, 738, 661, 654, 659, 660,
1549 661, 739, 659, 660, 661, 654, 740, 659,
1550 660, 661, 654, 741, 659, 660, 661, 654,
1551 742, 659, 743, 661, 654, 659, 660, 661,
1552 744, 659, 660, 661, 654, 745, 659, 660,
1553 661, 654, 746, 659, 660, 661, 654, 747,
1554 659, 660, 661, 654, 748, 659, 749, 661,
1555 654, 659, 660, 661, 750, 659, 660, 661,
1556 654, 751, 659, 660, 661, 654, 752, 659,
1557 660, 661, 654, 753, 659, 660, 661, 654,
1558 754, 659, 755, 661, 654, 659, 660, 661,
1559 756, 659, 660, 661, 654, 757, 659, 660,
1560 661, 654, 758, 659, 660, 661, 654, 759,
1561 659, 760, 661, 654, 659, 660, 661, 761,
1562 659, 660, 661, 654, 762, 659, 660, 661,
1563 654, 763, 659, 660, 661, 654, 764, 659,
1564 660, 661, 654, 765, 659, 660, 661, 654,
1565 766, 659, 767, 661, 654, 659, 660, 661,
1566 768, 659, 660, 661, 654, 769, 770, 659,
1567 660, 661, 654, 771, 772, 659, 660, 661,
1568 654, 773, 659, 660, 661, 654, 774, 659,
1569 775, 661, 654, 659, 660, 661, 776, 659,
1570 660, 661, 654, 777, 659, 660, 661, 654,
1571 778, 659, 779, 661, 654, 659, 660, 661,
1572 780, 659, 660, 661, 654, 781, 659, 660,
1573 661, 654, 782, 659, 660, 661, 654, 783,
1574 659, 784, 661, 654, 659, 660, 661, 785,
1575 659, 660, 661, 654, 786, 659, 660, 661,
1576 654, 787, 659, 660, 661, 654, 788, 659,
1577 660, 661, 654, 789, 659, 790, 661, 654,
1578 659, 660, 661, 791, 659, 660, 661, 654,
1579 792, 659, 660, 661, 654, 793, 659, 660,
1580 661, 654, 794, 659, 660, 661, 654, 795,
1581 659, 796, 661, 654, 659, 660, 661, 797,
1582 659, 660, 661, 654, 798, 659, 660, 661,
1583 654, 799, 659, 660, 661, 654, 800, 659,
1584 660, 661, 654, 801, 659, 802, 661, 654,
1585 659, 660, 661, 803, 659, 660, 661, 654,
1586 804, 659, 660, 661, 654, 805, 659, 660,
1587 661, 654, 806, 659, 660, 661, 654, 807,
1588 659, 808, 661, 654, 659, 660, 661, 809,
1589 659, 660, 661, 654, 810, 659, 660, 661,
1590 654, 811, 659, 660, 661, 654, 812, 659,
1591 660, 661, 654, 813, 659, 814, 661, 654,
1592 659, 660, 661, 815, 659, 660, 661, 654,
1593 816, 817, 659, 660, 661, 654, 818, 659,
1594 660, 661, 654, 819, 659, 660, 661, 654,
1595 820, 659, 821, 661, 654, 659, 660, 661,
1596 822, 659, 660, 661, 654, 823, 659, 660,
1597 661, 654, 824, 659, 660, 661, 654, 825,
1598 659, 826, 661, 654, 659, 660, 661, 827,
1599 659, 660, 661, 654, 828, 659, 660, 661,
1600 654, 829, 659, 660, 661, 654, 830, 659,
1601 660, 661, 654, 831, 659, 832, 661, 654,
1602 659, 660, 661, 833, 659, 660, 661, 654,
1603 834, 659, 660, 661, 654, 835, 659, 660,
1604 661, 654, 836, 659, 660, 661, 654, 837,
1605 659, 838, 661, 654, 659, 660, 661, 839,
1606 659, 660, 661, 654, 840, 659, 660, 661,
1607 654, 841, 659, 660, 661, 654, 842, 659,
1608 843, 661, 654, 659, 660, 661, 844, 659,
1609 660, 661, 654, 845, 659, 660, 661, 654,
1610 846, 659, 660, 661, 654, 847, 659, 660,
1611 661, 654, 848, 659, 660, 661, 654, 849,
1612 659, 850, 661, 654, 659, 660, 661, 851,
1613 659, 853, 854, 654, 852, 853, 854, 658,
1614 852, 853, 854, 852, 856, 855, 857, 856,
1615 855, 860, 859, 859, 859, 858, 862, 861,
1616 863, 861, 864, 861, 866, 865, 867, 865,
1617 868, 865, 870, 869, 871, 869, 872, 869,
1618 873, 876, 877, 878, 879, 880, 881, 882,
1619 883, 884, 885, 886, 887, 888, 875, 893,
1620 875, 876, 875, 875, 889, 890, 891, 892,
1621 889, 874, 895, 896, 894, 23, 23, 23,
1622 23, 897, 25, 25, 25, 25, 897, 899,
1623 30, 902, 903, 904, 30, 900, 901, 30,
1624 30, 898, 44, 897, 47, 47, 47, 47,
1625 44, 897, 43, 44, 897, 905, 906, 48,
1626 48, 48, 48, 897, 907, 897, 49, 50,
1627 897, 908, 909, 910, 897, 45, 53, 46,
1628 54, 54, 54, 54, 897, 912, 913, 911,
1629 915, 916, 914, 918, 919, 917, 56, 60,
1630 64, 920, 923, 926, 927, 928, 929, 930,
1631 931, 932, 933, 934, 934, 935, 936, 937,
1632 938, 934, 939, 940, 941, 942, 943, 944,
1633 945, 946, 947, 948, 949, 950, 951, 934,
1634 952, 953, 954, 955, 956, 957, 934, 958,
1635 959, 960, 961, 924, 925, 922, 963, 962,
1636 964, 962, 966, 967, 965, 969, 967, 968,
1637 967, 970, 973, 972, 975, 68, 977, 71,
1638 979, 978, 976, 981, 980, 982, 980, 984,
1639 983, 985, 983, 987, 988, 989, 986, 991,
1640 990, 994, 993, 999, 996, 997, 998, 995,
1641 1000, 1001, 1002, 995, 94, 94, 94, 1003,
1642 98, 1004, 1006, 1007, 1005, 1009, 1008, 1010,
1643 1008, 1011, 1008, 1013, 1014, 1012, 109, 108,
1644 109, 1016, 1017, 108, 1019, 1020, 1021, 1022,
1645 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
1646 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
1647 1039, 1040, 1041, 1018, 1043, 1044, 1045, 1042,
1648 1046, 1047, 1048, 1049, 1050, 1042, 1052, 1053,
1649 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1051,
1650 1062, 1063, 1061, 1064, 1042, 1065, 1066, 1042,
1651 1067, 1068, 1069, 1070, 1071, 1042, 1072, 1073,
1652 1074, 1042, 1076, 1077, 1075, 1078, 1079, 1042,
1653 1080, 1042, 1081, 1082, 1042, 1084, 1085, 1086,
1654 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1083,
1655 1095, 1096, 1097, 1098, 1099, 1100, 1094, 1102,
1656 1101, 1104, 1105, 1106, 1107, 1108, 1103, 1109,
1657 1110, 1111, 1112, 1042, 1114, 1115, 1116, 1117,
1658 1118, 1119, 1120, 1121, 1113, 1122, 1123, 1042,
1659 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132,
1660 1133, 1124, 1134, 1135, 1136, 1137, 1042, 1138,
1661 1042, 1139, 1042, 1140, 1141, 1142, 1143, 1042,
1662 1144, 1042, 1146, 1147, 1148, 1145, 649, 1150,
1663 1151, 1152, 1153, 1154, 1155, 1156, 1149, 1158,
1664 1159, 1160, 1161, 1157, 1162, 1163, 1164, 1165,
1665 1162, 874, 655, 1167, 852, 1166, 1169, 1173,
1666 1174, 1175, 1176, 1176, 1177, 1178, 1179, 1176,
1667 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
1668 1188, 1189, 1176, 1190, 1191, 1192, 1193, 1194,
1669 1195, 1176, 1196, 1197, 1198, 1170, 1171, 1172,
1670 1172, 1168, 1200, 1199, 1201, 1199, 1203, 1202,
1671 1204, 1202, 1207, 1206, 1209, 1211, 1210, 1214,
1672 1213, 1219, 1216, 1217, 1218, 1215, 1220, 1221,
1673 1222, 1215, 859, 859, 859, 1223, 1225, 1224,
1674 1226, 1224, 1227, 1224, 1229, 1230, 1231, 1228,
1675 1228, 1228, 874, 1233, 1234, 1232, 1236, 1235,
1676 1237, 1238, 1239, 1240, 1237, 874, 1242, 1241,
1677 1244, 1243, 1245, 1243, 1246, 1243, 1248, 1247,
1678 1249, 1250, 1251, 1252, 1249, 874, 1254, 1253,
1679 1256, 1255, 1257, 1255, 1258, 1255, 1260, 1259,
1680 1262, 1261, 0
1681};
1682
1683static const short _regex_trans_targs[] = {
1684 746, 746, 746, 746, 746, 748, 749, 750,
1685 746, 751, 752, 753, 746, 754, 746, 746,
1686 755, 756, 757, 758, 746, 746, 746, 3,
1687 746, 4, 746, 6, 7, 746, 8, 746,
1688 9, 12, 746, 14, 746, 746, 746, 16,
1689 746, 18, 17, 746, 19, 746, 746, 20,
1690 21, 746, 22, 25, 746, 27, 28, 746,
1691 29, 30, 31, 746, 32, 33, 34, 746,
1692 35, 36, 37, 746, 38, 746, 772, 40,
1693 42, 46, 49, 43, 44, 746, 45, 47,
1694 746, 48, 746, 746, 51, 746, 53, 746,
1695 55, 746, 746, 57, 746, 746, 58, 746,
1696 746, 60, 59, 783, 61, 783, 783, 746,
1697 746, 64, 746, 787, 65, 787, 67, 787,
1698 69, 787, 70, 787, 790, 790, 73, 76,
1699 74, 75, 790, 77, 78, 79, 80, 790,
1700 82, 83, 84, 85, 790, 87, 92, 94,
1701 88, 89, 90, 91, 790, 93, 790, 95,
1702 790, 97, 98, 99, 100, 790, 102, 103,
1703 104, 105, 106, 790, 108, 109, 111, 110,
1704 790, 112, 113, 790, 115, 120, 116, 117,
1705 118, 119, 790, 121, 790, 790, 123, 139,
1706 124, 125, 126, 127, 128, 129, 130, 131,
1707 132, 133, 134, 135, 136, 137, 138, 790,
1708 140, 141, 790, 143, 144, 790, 145, 146,
1709 147, 148, 790, 790, 150, 151, 790, 153,
1710 154, 790, 156, 157, 158, 159, 160, 161,
1711 790, 163, 167, 164, 165, 166, 790, 168,
1712 169, 170, 171, 790, 173, 177, 174, 175,
1713 176, 790, 178, 179, 180, 181, 182, 183,
1714 790, 185, 186, 187, 188, 189, 190, 191,
1715 192, 193, 194, 195, 196, 197, 198, 199,
1716 200, 201, 790, 203, 204, 205, 206, 207,
1717 790, 209, 210, 211, 212, 213, 790, 215,
1718 216, 217, 218, 219, 220, 221, 790, 223,
1719 224, 225, 790, 227, 228, 790, 230, 235,
1720 231, 232, 233, 234, 790, 236, 237, 238,
1721 239, 790, 799, 790, 242, 790, 244, 245,
1722 790, 247, 248, 249, 790, 251, 252, 253,
1723 254, 255, 790, 257, 258, 259, 260, 261,
1724 262, 263, 264, 265, 266, 267, 268, 269,
1725 790, 271, 277, 272, 273, 274, 275, 276,
1726 790, 278, 279, 280, 281, 282, 283, 284,
1727 285, 286, 287, 288, 289, 290, 291, 295,
1728 292, 293, 294, 790, 296, 297, 298, 299,
1729 790, 301, 302, 303, 304, 305, 790, 307,
1730 310, 314, 319, 308, 309, 790, 311, 312,
1731 313, 790, 315, 316, 317, 318, 790, 320,
1732 321, 322, 323, 790, 325, 332, 326, 327,
1733 328, 329, 330, 331, 790, 333, 790, 790,
1734 790, 335, 336, 790, 338, 339, 340, 790,
1735 342, 344, 349, 343, 790, 345, 346, 347,
1736 348, 790, 790, 351, 354, 352, 353, 790,
1737 355, 356, 790, 790, 358, 364, 359, 360,
1738 361, 362, 363, 790, 365, 366, 367, 790,
1739 790, 369, 370, 371, 372, 373, 374, 375,
1740 376, 790, 378, 379, 380, 381, 382, 383,
1741 790, 385, 386, 387, 388, 790, 790, 390,
1742 391, 392, 393, 394, 395, 396, 397, 790,
1743 790, 400, 401, 790, 403, 408, 404, 405,
1744 406, 407, 790, 409, 410, 415, 421, 433,
1745 411, 412, 413, 414, 790, 416, 417, 418,
1746 419, 420, 790, 422, 423, 424, 425, 426,
1747 427, 428, 429, 430, 431, 432, 790, 434,
1748 435, 436, 437, 790, 439, 440, 790, 442,
1749 443, 444, 445, 790, 790, 447, 452, 448,
1750 449, 450, 451, 790, 453, 454, 455, 456,
1751 457, 458, 790, 460, 461, 462, 790, 464,
1752 465, 790, 790, 467, 473, 468, 469, 470,
1753 471, 472, 790, 474, 475, 476, 477, 478,
1754 479, 790, 481, 482, 483, 484, 790, 486,
1755 487, 488, 489, 790, 491, 492, 493, 494,
1756 495, 496, 790, 498, 507, 499, 500, 501,
1757 502, 503, 504, 505, 506, 790, 508, 509,
1758 790, 511, 519, 528, 512, 515, 513, 514,
1759 790, 516, 517, 518, 790, 520, 521, 522,
1760 525, 790, 523, 524, 790, 526, 527, 790,
1761 529, 790, 531, 532, 533, 790, 535, 536,
1762 790, 537, 790, 539, 543, 540, 541, 542,
1763 790, 544, 545, 546, 547, 790, 549, 550,
1764 551, 552, 553, 790, 790, 790, 790, 790,
1765 790, 0, 560, 561, 562, 817, 819, 563,
1766 564, 565, 819, 567, 568, 569, 570, 651,
1767 666, 672, 678, 684, 690, 696, 707, 713,
1768 719, 724, 819, 571, 586, 592, 598, 604,
1769 610, 616, 627, 633, 639, 644, 572, 581,
1770 573, 577, 574, 575, 576, 819, 578, 579,
1771 580, 819, 582, 583, 584, 585, 819, 587,
1772 588, 589, 590, 591, 819, 593, 594, 595,
1773 596, 597, 819, 599, 600, 601, 602, 603,
1774 819, 605, 606, 607, 608, 609, 819, 611,
1775 612, 613, 614, 615, 819, 617, 622, 618,
1776 619, 620, 621, 819, 623, 624, 625, 626,
1777 819, 628, 629, 630, 631, 632, 819, 634,
1778 635, 636, 637, 638, 819, 640, 641, 642,
1779 643, 819, 645, 646, 647, 648, 649, 650,
1780 819, 652, 661, 653, 657, 654, 655, 656,
1781 819, 658, 659, 660, 819, 662, 663, 664,
1782 665, 819, 667, 668, 669, 670, 671, 819,
1783 673, 674, 675, 676, 677, 819, 679, 680,
1784 681, 682, 683, 819, 685, 686, 687, 688,
1785 689, 819, 691, 692, 693, 694, 695, 819,
1786 697, 702, 698, 699, 700, 701, 819, 703,
1787 704, 705, 706, 819, 708, 709, 710, 711,
1788 712, 819, 714, 715, 716, 717, 718, 819,
1789 720, 721, 722, 723, 819, 725, 726, 727,
1790 728, 729, 730, 819, 731, 732, 733, 819,
1791 735, 819, 819, 736, 819, 819, 819, 739,
1792 819, 838, 838, 742, 838, 843, 843, 745,
1793 843, 746, 0, 746, 746, 746, 747, 746,
1794 759, 760, 746, 761, 762, 763, 746, 782,
1795 746, 746, 784, 785, 786, 746, 746, 1,
1796 2, 746, 746, 5, 9, 10, 11, 13,
1797 15, 746, 746, 746, 23, 24, 26, 746,
1798 746, 746, 746, 746, 746, 746, 746, 746,
1799 746, 746, 746, 764, 766, 768, 746, 746,
1800 746, 746, 746, 746, 746, 746, 746, 769,
1801 746, 746, 746, 746, 746, 746, 746, 746,
1802 746, 770, 746, 746, 746, 771, 746, 776,
1803 746, 777, 778, 746, 746, 746, 746, 746,
1804 779, 746, 746, 765, 746, 746, 767, 768,
1805 746, 768, 746, 746, 746, 746, 746, 746,
1806 746, 39, 774, 41, 746, 773, 746, 746,
1807 775, 746, 746, 50, 52, 54, 746, 56,
1808 746, 746, 746, 746, 780, 780, 780, 781,
1809 746, 746, 746, 746, 746, 746, 746, 746,
1810 746, 746, 62, 63, 788, 787, 789, 787,
1811 66, 68, 790, 791, 792, 793, 795, 796,
1812 797, 798, 800, 801, 802, 803, 804, 806,
1813 807, 808, 809, 810, 811, 812, 813, 814,
1814 815, 816, 790, 71, 72, 81, 86, 96,
1815 101, 107, 114, 790, 122, 790, 790, 142,
1816 790, 794, 790, 155, 162, 790, 149, 152,
1817 172, 184, 202, 208, 214, 222, 226, 229,
1818 240, 246, 250, 790, 241, 243, 256, 270,
1819 300, 306, 324, 790, 790, 334, 337, 341,
1820 790, 790, 790, 790, 790, 350, 790, 357,
1821 790, 805, 790, 377, 384, 790, 368, 790,
1822 790, 389, 398, 790, 790, 399, 402, 438,
1823 441, 790, 790, 790, 790, 790, 446, 790,
1824 790, 790, 459, 463, 790, 466, 790, 480,
1825 485, 790, 790, 790, 490, 497, 510, 530,
1826 534, 538, 548, 554, 555, 556, 557, 558,
1827 790, 790, 790, 790, 790, 818, 818, 818,
1828 818, 818, 818, 818, 818, 819, 819, 820,
1829 821, 819, 819, 833, 834, 835, 819, 566,
1830 819, 822, 824, 819, 819, 819, 819, 819,
1831 819, 826, 819, 819, 819, 819, 819, 819,
1832 827, 819, 819, 819, 819, 819, 819, 828,
1833 829, 819, 819, 819, 819, 819, 830, 819,
1834 823, 819, 819, 825, 819, 819, 819, 819,
1835 819, 819, 819, 734, 819, 819, 819, 819,
1836 831, 831, 831, 832, 819, 819, 819, 819,
1837 819, 819, 737, 738, 836, 837, 836, 836,
1838 836, 836, 836, 838, 839, 838, 840, 841,
1839 842, 838, 838, 838, 838, 740, 741, 843,
1840 844, 843, 845, 846, 847, 843, 843, 843,
1841 843, 743, 744, 848, 848, 849, 849
1842};
1843
1844static const short _regex_trans_actions[] = {
1845 827, 631, 765, 731, 723, 45, 903, 903,
1846 897, 45, 912, 45, 900, 903, 729, 741,
1847 0, 45, 45, 923, 737, 841, 747, 0,
1848 743, 3, 839, 3, 0, 761, 3, 759,
1849 870, 3, 751, 0, 749, 755, 753, 0,
1850 757, 3, 0, 745, 0, 725, 727, 27,
1851 3, 763, 0, 3, 673, 0, 25, 829,
1852 0, 0, 0, 603, 0, 0, 0, 601,
1853 0, 0, 0, 831, 0, 675, 17, 0,
1854 7, 870, 3, 17, 17, 663, 17, 870,
1855 661, 870, 665, 837, 3, 671, 3, 669,
1856 3, 667, 833, 0, 677, 835, 0, 679,
1857 845, 0, 11, 29, 13, 31, 0, 843,
1858 769, 0, 771, 59, 0, 53, 0, 51,
1859 0, 49, 0, 47, 359, 315, 0, 0,
1860 0, 0, 127, 0, 0, 0, 0, 129,
1861 0, 0, 0, 0, 131, 0, 0, 0,
1862 0, 0, 0, 0, 133, 0, 135, 0,
1863 137, 0, 0, 0, 0, 139, 0, 0,
1864 0, 0, 0, 141, 0, 0, 0, 0,
1865 143, 0, 0, 145, 0, 0, 0, 0,
1866 0, 0, 147, 0, 149, 341, 0, 0,
1867 0, 0, 0, 0, 0, 0, 0, 0,
1868 0, 0, 0, 0, 0, 0, 0, 151,
1869 0, 0, 153, 0, 0, 155, 0, 0,
1870 0, 0, 157, 343, 0, 0, 159, 0,
1871 0, 161, 0, 0, 0, 0, 0, 0,
1872 163, 0, 0, 0, 0, 0, 165, 0,
1873 0, 0, 0, 167, 0, 0, 0, 0,
1874 0, 169, 0, 0, 0, 0, 0, 0,
1875 171, 0, 0, 0, 0, 0, 0, 0,
1876 0, 0, 0, 0, 0, 0, 0, 0,
1877 0, 0, 173, 0, 0, 0, 0, 0,
1878 175, 0, 0, 0, 0, 0, 177, 0,
1879 0, 0, 0, 0, 0, 0, 179, 0,
1880 0, 0, 181, 0, 0, 183, 0, 0,
1881 0, 0, 0, 0, 185, 0, 0, 0,
1882 0, 187, 45, 357, 0, 189, 0, 0,
1883 191, 0, 0, 0, 193, 0, 0, 0,
1884 0, 0, 195, 0, 0, 0, 0, 0,
1885 0, 0, 0, 0, 0, 0, 0, 0,
1886 197, 0, 0, 0, 0, 0, 0, 0,
1887 199, 0, 0, 0, 0, 0, 0, 0,
1888 0, 0, 0, 0, 0, 0, 0, 0,
1889 0, 0, 0, 201, 0, 0, 0, 0,
1890 203, 0, 0, 0, 0, 0, 205, 0,
1891 0, 0, 0, 0, 0, 207, 0, 0,
1892 0, 209, 0, 0, 0, 0, 211, 0,
1893 0, 0, 0, 213, 0, 0, 0, 0,
1894 0, 0, 0, 0, 215, 0, 217, 345,
1895 219, 0, 0, 221, 0, 0, 0, 223,
1896 0, 0, 0, 0, 225, 0, 0, 0,
1897 0, 227, 229, 0, 0, 0, 0, 231,
1898 0, 0, 233, 347, 0, 0, 0, 0,
1899 0, 0, 0, 235, 0, 0, 0, 237,
1900 349, 0, 0, 0, 0, 0, 0, 0,
1901 0, 239, 0, 0, 0, 0, 0, 0,
1902 241, 0, 0, 0, 0, 243, 351, 0,
1903 0, 0, 0, 0, 0, 0, 0, 245,
1904 247, 0, 0, 249, 0, 0, 0, 0,
1905 0, 0, 251, 0, 0, 0, 0, 0,
1906 0, 0, 0, 0, 253, 0, 0, 0,
1907 0, 0, 255, 0, 0, 0, 0, 0,
1908 0, 0, 0, 0, 0, 0, 257, 0,
1909 0, 0, 0, 259, 0, 0, 261, 0,
1910 0, 0, 0, 263, 353, 0, 0, 0,
1911 0, 0, 0, 265, 0, 0, 0, 0,
1912 0, 0, 267, 0, 0, 0, 269, 0,
1913 0, 271, 355, 0, 0, 0, 0, 0,
1914 0, 0, 273, 0, 0, 0, 0, 0,
1915 0, 275, 0, 0, 0, 0, 277, 0,
1916 0, 0, 0, 279, 0, 0, 0, 0,
1917 0, 0, 281, 0, 0, 0, 0, 0,
1918 0, 0, 0, 0, 0, 283, 0, 0,
1919 285, 0, 0, 0, 0, 0, 0, 0,
1920 287, 0, 0, 0, 289, 0, 0, 0,
1921 0, 291, 0, 0, 293, 0, 0, 295,
1922 0, 297, 0, 0, 0, 299, 0, 0,
1923 303, 0, 301, 0, 0, 0, 0, 0,
1924 305, 0, 0, 0, 0, 307, 0, 0,
1925 0, 0, 0, 309, 311, 119, 121, 123,
1926 125, 39, 0, 35, 33, 37, 539, 0,
1927 0, 0, 377, 0, 0, 0, 0, 0,
1928 0, 0, 0, 0, 0, 0, 0, 0,
1929 0, 0, 435, 0, 0, 0, 0, 0,
1930 0, 0, 0, 0, 0, 0, 0, 0,
1931 0, 0, 0, 0, 0, 381, 0, 0,
1932 0, 385, 0, 0, 0, 0, 389, 0,
1933 0, 0, 0, 0, 393, 0, 0, 0,
1934 0, 0, 397, 0, 0, 0, 0, 0,
1935 401, 0, 0, 0, 0, 0, 405, 0,
1936 0, 0, 0, 0, 409, 0, 0, 0,
1937 0, 0, 0, 413, 0, 0, 0, 0,
1938 417, 0, 0, 0, 0, 0, 421, 0,
1939 0, 0, 0, 0, 425, 0, 0, 0,
1940 0, 429, 0, 0, 0, 0, 0, 0,
1941 433, 0, 0, 0, 0, 0, 0, 0,
1942 379, 0, 0, 0, 383, 0, 0, 0,
1943 0, 387, 0, 0, 0, 0, 0, 391,
1944 0, 0, 0, 0, 0, 395, 0, 0,
1945 0, 0, 0, 399, 0, 0, 0, 0,
1946 0, 403, 0, 0, 0, 0, 0, 407,
1947 0, 0, 0, 0, 0, 0, 411, 0,
1948 0, 0, 0, 415, 0, 0, 0, 0,
1949 0, 419, 0, 0, 0, 0, 0, 423,
1950 0, 0, 0, 0, 427, 0, 0, 0,
1951 0, 0, 0, 431, 0, 0, 0, 533,
1952 0, 471, 535, 0, 475, 537, 503, 0,
1953 505, 569, 557, 0, 559, 587, 575, 0,
1954 577, 633, 0, 777, 775, 637, 45, 597,
1955 0, 0, 609, 0, 45, 0, 635, 909,
1956 599, 773, 0, 45, 45, 629, 779, 0,
1957 0, 821, 819, 1, 855, 855, 1, 0,
1958 3, 735, 733, 739, 1, 1, 0, 783,
1959 615, 613, 785, 619, 617, 787, 623, 621,
1960 781, 817, 721, 5, 852, 915, 639, 647,
1961 611, 695, 607, 717, 699, 715, 683, 0,
1962 605, 713, 691, 703, 687, 719, 641, 657,
1963 645, 0, 693, 659, 655, 906, 697, 45,
1964 651, 45, 0, 653, 689, 649, 701, 685,
1965 7, 643, 791, 15, 867, 795, 858, 919,
1966 793, 927, 847, 811, 711, 709, 809, 681,
1967 801, 7, 17, 849, 799, 17, 876, 797,
1968 17, 873, 815, 1, 1, 1, 803, 0,
1969 813, 707, 705, 805, 19, 23, 21, 45,
1970 882, 894, 888, 807, 825, 789, 627, 625,
1971 823, 767, 0, 0, 45, 55, 45, 57,
1972 0, 0, 317, 45, 45, 45, 45, 45,
1973 45, 45, 45, 45, 45, 45, 45, 45,
1974 45, 45, 45, 45, 45, 45, 45, 45,
1975 0, 0, 339, 0, 0, 0, 0, 0,
1976 0, 0, 0, 319, 0, 61, 63, 0,
1977 65, 45, 67, 0, 0, 321, 0, 0,
1978 0, 0, 0, 0, 0, 0, 0, 0,
1979 0, 0, 0, 337, 0, 0, 0, 0,
1980 0, 0, 0, 323, 79, 0, 0, 0,
1981 69, 71, 73, 75, 77, 0, 325, 0,
1982 81, 45, 83, 0, 0, 327, 0, 329,
1983 85, 0, 0, 87, 89, 0, 0, 0,
1984 0, 331, 91, 93, 95, 97, 0, 99,
1985 101, 103, 0, 0, 333, 0, 105, 0,
1986 0, 107, 109, 111, 0, 0, 0, 0,
1987 0, 0, 0, 0, 0, 0, 0, 0,
1988 313, 335, 113, 115, 117, 375, 361, 363,
1989 365, 367, 369, 371, 373, 509, 491, 45,
1990 0, 511, 507, 0, 45, 45, 531, 0,
1991 499, 5, 9, 473, 497, 489, 439, 457,
1992 493, 0, 437, 485, 461, 481, 451, 441,
1993 0, 487, 453, 449, 495, 455, 445, 45,
1994 0, 447, 483, 443, 459, 479, 7, 517,
1995 15, 861, 519, 15, 864, 513, 469, 467,
1996 527, 477, 521, 0, 515, 465, 463, 523,
1997 19, 23, 21, 45, 879, 891, 885, 525,
1998 529, 501, 0, 0, 549, 0, 543, 541,
1999 551, 547, 545, 563, 0, 561, 0, 45,
2000 45, 567, 553, 565, 555, 0, 0, 581,
2001 0, 579, 0, 45, 45, 585, 571, 583,
2002 573, 0, 0, 591, 589, 595, 593
2003};
2004
2005static const short _regex_to_state_actions[] = {
2006 0, 0, 0, 0, 0, 0, 0, 0,
2007 0, 0, 0, 0, 0, 0, 0, 0,
2008 0, 0, 0, 0, 0, 0, 0, 0,
2009 0, 0, 0, 0, 0, 0, 0, 0,
2010 0, 0, 0, 0, 0, 0, 0, 0,
2011 0, 0, 0, 0, 0, 0, 0, 0,
2012 0, 0, 0, 0, 0, 0, 0, 0,
2013 0, 0, 0, 0, 0, 0, 0, 0,
2014 0, 0, 0, 0, 0, 0, 0, 0,
2015 0, 0, 0, 0, 0, 0, 0, 0,
2016 0, 0, 0, 0, 0, 0, 0, 0,
2017 0, 0, 0, 0, 0, 0, 0, 0,
2018 0, 0, 0, 0, 0, 0, 0, 0,
2019 0, 0, 0, 0, 0, 0, 0, 0,
2020 0, 0, 0, 0, 0, 0, 0, 0,
2021 0, 0, 0, 0, 0, 0, 0, 0,
2022 0, 0, 0, 0, 0, 0, 0, 0,
2023 0, 0, 0, 0, 0, 0, 0, 0,
2024 0, 0, 0, 0, 0, 0, 0, 0,
2025 0, 0, 0, 0, 0, 0, 0, 0,
2026 0, 0, 0, 0, 0, 0, 0, 0,
2027 0, 0, 0, 0, 0, 0, 0, 0,
2028 0, 0, 0, 0, 0, 0, 0, 0,
2029 0, 0, 0, 0, 0, 0, 0, 0,
2030 0, 0, 0, 0, 0, 0, 0, 0,
2031 0, 0, 0, 0, 0, 0, 0, 0,
2032 0, 0, 0, 0, 0, 0, 0, 0,
2033 0, 0, 0, 0, 0, 0, 0, 0,
2034 0, 0, 0, 0, 0, 0, 0, 0,
2035 0, 0, 0, 0, 0, 0, 0, 0,
2036 0, 0, 0, 0, 0, 0, 0, 0,
2037 0, 0, 0, 0, 0, 0, 0, 0,
2038 0, 0, 0, 0, 0, 0, 0, 0,
2039 0, 0, 0, 0, 0, 0, 0, 0,
2040 0, 0, 0, 0, 0, 0, 0, 0,
2041 0, 0, 0, 0, 0, 0, 0, 0,
2042 0, 0, 0, 0, 0, 0, 0, 0,
2043 0, 0, 0, 0, 0, 0, 0, 0,
2044 0, 0, 0, 0, 0, 0, 0, 0,
2045 0, 0, 0, 0, 0, 0, 0, 0,
2046 0, 0, 0, 0, 0, 0, 0, 0,
2047 0, 0, 0, 0, 0, 0, 0, 0,
2048 0, 0, 0, 0, 0, 0, 0, 0,
2049 0, 0, 0, 0, 0, 0, 0, 0,
2050 0, 0, 0, 0, 0, 0, 0, 0,
2051 0, 0, 0, 0, 0, 0, 0, 0,
2052 0, 0, 0, 0, 0, 0, 0, 0,
2053 0, 0, 0, 0, 0, 0, 0, 0,
2054 0, 0, 0, 0, 0, 0, 0, 0,
2055 0, 0, 0, 0, 0, 0, 0, 0,
2056 0, 0, 0, 0, 0, 0, 0, 0,
2057 0, 0, 0, 0, 0, 0, 0, 0,
2058 0, 0, 0, 0, 0, 0, 0, 0,
2059 0, 0, 0, 0, 0, 0, 0, 0,
2060 0, 0, 0, 0, 0, 0, 0, 0,
2061 0, 0, 0, 0, 0, 0, 0, 0,
2062 0, 0, 0, 0, 0, 0, 0, 0,
2063 0, 0, 0, 0, 0, 0, 0, 0,
2064 0, 0, 0, 0, 0, 0, 0, 0,
2065 0, 0, 0, 0, 0, 0, 0, 0,
2066 0, 0, 0, 0, 0, 0, 0, 0,
2067 0, 0, 0, 0, 0, 0, 0, 0,
2068 0, 0, 0, 0, 0, 0, 0, 0,
2069 0, 0, 0, 0, 0, 0, 0, 0,
2070 0, 0, 0, 0, 0, 0, 0, 0,
2071 0, 0, 0, 0, 0, 0, 0, 0,
2072 0, 0, 0, 0, 0, 0, 0, 0,
2073 0, 0, 0, 0, 0, 0, 0, 0,
2074 0, 0, 0, 0, 0, 0, 0, 0,
2075 0, 0, 0, 0, 0, 0, 0, 41,
2076 0, 41, 0, 0, 0, 0, 0, 0,
2077 0, 0, 0, 0, 0, 0, 0, 0,
2078 0, 0, 0, 0, 0, 0, 0, 0,
2079 0, 0, 0, 0, 0, 0, 0, 0,
2080 0, 0, 0, 0, 0, 0, 0, 0,
2081 0, 0, 0, 0, 0, 0, 0, 0,
2082 0, 0, 0, 0, 0, 0, 0, 0,
2083 0, 0, 0, 0, 0, 0, 0, 0,
2084 0, 0, 0, 0, 0, 0, 0, 0,
2085 0, 0, 0, 0, 0, 0, 0, 0,
2086 0, 0, 0, 0, 0, 0, 0, 0,
2087 0, 0, 0, 0, 0, 0, 0, 0,
2088 0, 0, 0, 0, 0, 0, 0, 0,
2089 0, 0, 0, 0, 0, 0, 0, 0,
2090 0, 0, 0, 0, 0, 0, 0, 0,
2091 0, 0, 0, 0, 0, 0, 0, 0,
2092 0, 0, 0, 0, 0, 0, 0, 0,
2093 0, 0, 0, 0, 0, 0, 0, 0,
2094 0, 0, 0, 0, 0, 0, 0, 0,
2095 0, 0, 0, 0, 0, 0, 0, 0,
2096 0, 0, 0, 0, 0, 0, 0, 0,
2097 0, 0, 0, 0, 0, 0, 0, 0,
2098 0, 0, 0, 0, 0, 0, 0, 0,
2099 0, 0, 41, 0, 0, 0, 0, 0,
2100 0, 0, 0, 0, 0, 0, 0, 0,
2101 0, 0, 0, 0, 0, 0, 0, 0,
2102 0, 0, 0, 0, 0, 0, 0, 0,
2103 0, 0, 0, 0, 0, 0, 0, 0,
2104 0, 0, 0, 41, 0, 0, 41, 0,
2105 0, 0, 0, 0, 0, 0, 0, 0,
2106 0, 0, 0, 0, 0, 0, 0, 0,
2107 0, 0, 0, 0, 0, 0, 0, 0,
2108 0, 0, 41, 41, 0, 0, 0, 0,
2109 0, 0, 0, 0, 0, 0, 0, 0,
2110 0, 0, 0, 0, 41, 0, 41, 0,
2111 0, 0, 0, 41, 0, 0, 0, 0,
2112 41, 41
2113};
2114
2115static const short _regex_from_state_actions[] = {
2116 0, 0, 0, 0, 0, 0, 0, 0,
2117 0, 0, 0, 0, 0, 0, 0, 0,
2118 0, 0, 0, 0, 0, 0, 0, 0,
2119 0, 0, 0, 0, 0, 0, 0, 0,
2120 0, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 0, 0, 0, 0, 0, 0,
2122 0, 0, 0, 0, 0, 0, 0, 0,
2123 0, 0, 0, 0, 0, 0, 0, 0,
2124 0, 0, 0, 0, 0, 0, 0, 0,
2125 0, 0, 0, 0, 0, 0, 0, 0,
2126 0, 0, 0, 0, 0, 0, 0, 0,
2127 0, 0, 0, 0, 0, 0, 0, 0,
2128 0, 0, 0, 0, 0, 0, 0, 0,
2129 0, 0, 0, 0, 0, 0, 0, 0,
2130 0, 0, 0, 0, 0, 0, 0, 0,
2131 0, 0, 0, 0, 0, 0, 0, 0,
2132 0, 0, 0, 0, 0, 0, 0, 0,
2133 0, 0, 0, 0, 0, 0, 0, 0,
2134 0, 0, 0, 0, 0, 0, 0, 0,
2135 0, 0, 0, 0, 0, 0, 0, 0,
2136 0, 0, 0, 0, 0, 0, 0, 0,
2137 0, 0, 0, 0, 0, 0, 0, 0,
2138 0, 0, 0, 0, 0, 0, 0, 0,
2139 0, 0, 0, 0, 0, 0, 0, 0,
2140 0, 0, 0, 0, 0, 0, 0, 0,
2141 0, 0, 0, 0, 0, 0, 0, 0,
2142 0, 0, 0, 0, 0, 0, 0, 0,
2143 0, 0, 0, 0, 0, 0, 0, 0,
2144 0, 0, 0, 0, 0, 0, 0, 0,
2145 0, 0, 0, 0, 0, 0, 0, 0,
2146 0, 0, 0, 0, 0, 0, 0, 0,
2147 0, 0, 0, 0, 0, 0, 0, 0,
2148 0, 0, 0, 0, 0, 0, 0, 0,
2149 0, 0, 0, 0, 0, 0, 0, 0,
2150 0, 0, 0, 0, 0, 0, 0, 0,
2151 0, 0, 0, 0, 0, 0, 0, 0,
2152 0, 0, 0, 0, 0, 0, 0, 0,
2153 0, 0, 0, 0, 0, 0, 0, 0,
2154 0, 0, 0, 0, 0, 0, 0, 0,
2155 0, 0, 0, 0, 0, 0, 0, 0,
2156 0, 0, 0, 0, 0, 0, 0, 0,
2157 0, 0, 0, 0, 0, 0, 0, 0,
2158 0, 0, 0, 0, 0, 0, 0, 0,
2159 0, 0, 0, 0, 0, 0, 0, 0,
2160 0, 0, 0, 0, 0, 0, 0, 0,
2161 0, 0, 0, 0, 0, 0, 0, 0,
2162 0, 0, 0, 0, 0, 0, 0, 0,
2163 0, 0, 0, 0, 0, 0, 0, 0,
2164 0, 0, 0, 0, 0, 0, 0, 0,
2165 0, 0, 0, 0, 0, 0, 0, 0,
2166 0, 0, 0, 0, 0, 0, 0, 0,
2167 0, 0, 0, 0, 0, 0, 0, 0,
2168 0, 0, 0, 0, 0, 0, 0, 0,
2169 0, 0, 0, 0, 0, 0, 0, 0,
2170 0, 0, 0, 0, 0, 0, 0, 0,
2171 0, 0, 0, 0, 0, 0, 0, 0,
2172 0, 0, 0, 0, 0, 0, 0, 0,
2173 0, 0, 0, 0, 0, 0, 0, 0,
2174 0, 0, 0, 0, 0, 0, 0, 0,
2175 0, 0, 0, 0, 0, 0, 0, 0,
2176 0, 0, 0, 0, 0, 0, 0, 0,
2177 0, 0, 0, 0, 0, 0, 0, 0,
2178 0, 0, 0, 0, 0, 0, 0, 0,
2179 0, 0, 0, 0, 0, 0, 0, 0,
2180 0, 0, 0, 0, 0, 0, 0, 0,
2181 0, 0, 0, 0, 0, 0, 0, 0,
2182 0, 0, 0, 0, 0, 0, 0, 0,
2183 0, 0, 0, 0, 0, 0, 0, 0,
2184 0, 0, 0, 0, 0, 0, 0, 0,
2185 0, 0, 0, 0, 0, 0, 0, 0,
2186 0, 0, 0, 0, 0, 0, 0, 0,
2187 0, 0, 0, 0, 0, 0, 0, 0,
2188 0, 0, 0, 0, 0, 0, 0, 0,
2189 0, 0, 0, 0, 0, 0, 0, 0,
2190 0, 0, 0, 0, 0, 0, 0, 0,
2191 0, 0, 0, 0, 0, 0, 0, 0,
2192 0, 0, 0, 0, 0, 0, 0, 0,
2193 0, 0, 0, 0, 0, 0, 0, 0,
2194 0, 0, 0, 0, 0, 0, 0, 0,
2195 0, 0, 0, 0, 0, 0, 0, 0,
2196 0, 0, 0, 0, 0, 0, 0, 0,
2197 0, 0, 0, 0, 0, 0, 0, 0,
2198 0, 0, 0, 0, 0, 0, 0, 0,
2199 0, 0, 0, 0, 0, 0, 0, 0,
2200 0, 0, 0, 0, 0, 0, 0, 0,
2201 0, 0, 0, 0, 0, 0, 0, 0,
2202 0, 0, 0, 0, 0, 0, 0, 0,
2203 0, 0, 0, 0, 0, 0, 0, 0,
2204 0, 0, 0, 0, 0, 0, 0, 0,
2205 0, 0, 0, 0, 0, 0, 0, 0,
2206 0, 0, 0, 0, 0, 0, 0, 0,
2207 0, 0, 0, 0, 0, 0, 0, 0,
2208 0, 0, 0, 0, 0, 0, 0, 0,
2209 0, 0, 43, 0, 0, 0, 0, 0,
2210 0, 0, 0, 0, 0, 0, 0, 0,
2211 0, 0, 0, 0, 0, 0, 0, 0,
2212 0, 0, 0, 0, 0, 0, 0, 0,
2213 0, 0, 0, 0, 0, 0, 0, 0,
2214 0, 0, 0, 43, 0, 0, 43, 0,
2215 0, 0, 0, 0, 0, 0, 0, 0,
2216 0, 0, 0, 0, 0, 0, 0, 0,
2217 0, 0, 0, 0, 0, 0, 0, 0,
2218 0, 0, 43, 43, 0, 0, 0, 0,
2219 0, 0, 0, 0, 0, 0, 0, 0,
2220 0, 0, 0, 0, 43, 0, 43, 0,
2221 0, 0, 0, 43, 0, 0, 0, 0,
2222 43, 43
2223};
2224
2225static const short _regex_eof_actions[] = {
2226 0, 0, 0, 0, 0, 0, 0, 0,
2227 0, 0, 0, 0, 0, 0, 0, 0,
2228 0, 0, 0, 0, 0, 0, 0, 0,
2229 0, 0, 0, 0, 0, 0, 0, 0,
2230 0, 0, 0, 0, 0, 0, 0, 0,
2231 0, 0, 0, 0, 0, 0, 0, 0,
2232 0, 0, 0, 0, 0, 0, 0, 0,
2233 0, 0, 0, 0, 0, 0, 0, 0,
2234 0, 0, 0, 0, 0, 0, 0, 0,
2235 0, 0, 0, 0, 0, 0, 0, 0,
2236 0, 0, 0, 0, 0, 0, 0, 0,
2237 0, 0, 0, 0, 0, 0, 0, 0,
2238 0, 0, 0, 0, 0, 0, 0, 0,
2239 0, 0, 0, 0, 0, 0, 0, 0,
2240 0, 0, 0, 0, 0, 0, 0, 0,
2241 0, 0, 0, 0, 0, 0, 0, 0,
2242 0, 0, 0, 0, 0, 0, 0, 0,
2243 0, 0, 0, 0, 0, 0, 0, 0,
2244 0, 0, 0, 0, 0, 0, 0, 0,
2245 0, 0, 0, 0, 0, 0, 0, 0,
2246 0, 0, 0, 0, 0, 0, 0, 0,
2247 0, 0, 0, 0, 0, 0, 0, 0,
2248 0, 0, 0, 0, 0, 0, 0, 0,
2249 0, 0, 0, 0, 0, 0, 0, 0,
2250 0, 0, 0, 0, 0, 0, 0, 0,
2251 0, 0, 0, 0, 0, 0, 0, 0,
2252 0, 0, 0, 0, 0, 0, 0, 0,
2253 0, 0, 0, 0, 0, 0, 0, 0,
2254 0, 0, 0, 0, 0, 0, 0, 0,
2255 0, 0, 0, 0, 0, 0, 0, 0,
2256 0, 0, 0, 0, 0, 0, 0, 0,
2257 0, 0, 0, 0, 0, 0, 0, 0,
2258 0, 0, 0, 0, 0, 0, 0, 0,
2259 0, 0, 0, 0, 0, 0, 0, 0,
2260 0, 0, 0, 0, 0, 0, 0, 0,
2261 0, 0, 0, 0, 0, 0, 0, 0,
2262 0, 0, 0, 0, 0, 0, 0, 0,
2263 0, 0, 0, 0, 0, 0, 0, 0,
2264 0, 0, 0, 0, 0, 0, 0, 0,
2265 0, 0, 0, 0, 0, 0, 0, 0,
2266 0, 0, 0, 0, 0, 0, 0, 0,
2267 0, 0, 0, 0, 0, 0, 0, 0,
2268 0, 0, 0, 0, 0, 0, 0, 0,
2269 0, 0, 0, 0, 0, 0, 0, 0,
2270 0, 0, 0, 0, 0, 0, 0, 0,
2271 0, 0, 0, 0, 0, 0, 0, 0,
2272 0, 0, 0, 0, 0, 0, 0, 0,
2273 0, 0, 0, 0, 0, 0, 0, 0,
2274 0, 0, 0, 0, 0, 0, 0, 0,
2275 0, 0, 0, 0, 0, 0, 0, 0,
2276 0, 0, 0, 0, 0, 0, 0, 0,
2277 0, 0, 0, 0, 0, 0, 0, 0,
2278 0, 0, 0, 0, 0, 0, 0, 0,
2279 0, 0, 0, 0, 0, 0, 0, 0,
2280 0, 0, 0, 0, 0, 0, 0, 0,
2281 0, 0, 0, 0, 0, 0, 0, 0,
2282 0, 0, 0, 0, 0, 0, 0, 0,
2283 0, 0, 0, 0, 0, 0, 0, 0,
2284 0, 0, 0, 0, 0, 0, 0, 0,
2285 0, 0, 0, 0, 0, 0, 0, 0,
2286 0, 0, 0, 0, 0, 0, 0, 0,
2287 0, 0, 0, 0, 0, 0, 0, 0,
2288 0, 0, 0, 0, 0, 0, 0, 0,
2289 0, 0, 0, 0, 0, 0, 0, 0,
2290 0, 0, 0, 0, 0, 0, 0, 0,
2291 0, 0, 0, 0, 0, 0, 0, 0,
2292 0, 0, 0, 0, 0, 0, 0, 0,
2293 0, 0, 0, 0, 0, 0, 0, 0,
2294 0, 0, 0, 0, 0, 0, 0, 0,
2295 0, 0, 0, 0, 0, 0, 0, 39,
2296 39, 39, 39, 0, 0, 0, 0, 0,
2297 0, 0, 0, 0, 0, 0, 0, 0,
2298 0, 0, 0, 0, 0, 0, 0, 0,
2299 0, 0, 0, 0, 0, 0, 0, 0,
2300 0, 0, 0, 0, 0, 0, 0, 0,
2301 0, 0, 0, 0, 0, 0, 0, 0,
2302 0, 0, 0, 0, 0, 0, 0, 0,
2303 0, 0, 0, 0, 0, 0, 0, 0,
2304 0, 0, 0, 0, 0, 0, 0, 0,
2305 0, 0, 0, 0, 0, 0, 0, 0,
2306 0, 0, 0, 0, 0, 0, 0, 0,
2307 0, 0, 0, 0, 0, 0, 0, 0,
2308 0, 0, 0, 0, 0, 0, 0, 0,
2309 0, 0, 0, 0, 0, 0, 0, 0,
2310 0, 0, 0, 0, 0, 0, 0, 0,
2311 0, 0, 0, 0, 0, 0, 0, 0,
2312 0, 0, 0, 0, 0, 0, 0, 0,
2313 0, 0, 0, 0, 0, 0, 0, 0,
2314 0, 0, 0, 0, 0, 0, 0, 0,
2315 0, 0, 0, 0, 0, 0, 0, 0,
2316 0, 0, 0, 0, 0, 0, 0, 0,
2317 0, 0, 0, 0, 0, 0, 0, 0,
2318 0, 0, 0, 0, 0, 0, 0, 0,
2319 0, 0, 0, 0, 0, 0, 0, 0,
2320 0, 0, 0, 0, 0, 0, 0, 0,
2321 0, 0, 0, 0, 0, 0, 0, 0,
2322 0, 0, 0, 0, 0, 0, 0, 0,
2323 0, 0, 0, 0, 0, 0, 0, 0,
2324 0, 0, 0, 0, 0, 0, 0, 0,
2325 0, 0, 0, 0, 0, 0, 0, 0,
2326 0, 0, 0, 0, 0, 0, 0, 0,
2327 0, 0, 0, 0, 0, 0, 0, 0,
2328 0, 0, 0, 0, 0, 0, 0, 0,
2329 0, 0, 0, 0, 0, 0, 0, 0,
2330 0, 0, 0, 0, 0, 0, 0, 0,
2331 0, 0, 0, 0, 0, 0, 0, 0,
2332 0, 0
2333};
2334
2335static const short _regex_eof_trans[] = {
2336 0, 1, 1, 22, 22, 27, 27, 27,
2337 27, 27, 27, 27, 27, 27, 27, 27,
2338 27, 27, 27, 22, 22, 22, 22, 22,
2339 22, 22, 22, 22, 22, 56, 56, 56,
2340 56, 56, 56, 56, 56, 56, 68, 68,
2341 68, 68, 68, 68, 68, 68, 68, 68,
2342 68, 68, 84, 84, 84, 84, 84, 84,
2343 91, 91, 94, 97, 97, 97, 104, 104,
2344 104, 108, 108, 108, 108, 108, 108, 117,
2345 117, 117, 117, 117, 117, 117, 117, 117,
2346 117, 117, 117, 117, 117, 117, 117, 117,
2347 117, 117, 117, 117, 117, 117, 117, 117,
2348 117, 117, 117, 117, 117, 117, 117, 117,
2349 117, 117, 117, 117, 117, 117, 117, 117,
2350 117, 117, 117, 117, 117, 117, 117, 117,
2351 117, 117, 174, 174, 174, 174, 174, 174,
2352 174, 174, 174, 174, 174, 174, 174, 174,
2353 174, 174, 174, 174, 174, 174, 174, 174,
2354 174, 174, 174, 174, 174, 204, 204, 204,
2355 204, 204, 204, 174, 174, 174, 174, 174,
2356 174, 174, 174, 174, 174, 174, 174, 174,
2357 174, 174, 174, 174, 117, 117, 117, 117,
2358 117, 117, 117, 117, 117, 117, 117, 117,
2359 117, 117, 117, 117, 117, 117, 117, 117,
2360 117, 117, 117, 117, 117, 117, 117, 117,
2361 117, 117, 117, 117, 117, 117, 117, 117,
2362 117, 117, 117, 117, 117, 117, 117, 117,
2363 117, 117, 117, 117, 117, 117, 117, 117,
2364 117, 117, 117, 117, 117, 117, 117, 117,
2365 117, 117, 117, 117, 117, 117, 117, 117,
2366 117, 300, 300, 300, 300, 300, 117, 117,
2367 117, 117, 117, 117, 117, 117, 117, 117,
2368 117, 117, 117, 117, 117, 117, 117, 117,
2369 117, 117, 117, 117, 117, 117, 117, 117,
2370 117, 117, 117, 117, 117, 117, 117, 117,
2371 117, 117, 117, 117, 117, 117, 117, 117,
2372 117, 117, 117, 117, 117, 117, 117, 117,
2373 117, 117, 117, 117, 117, 117, 117, 117,
2374 117, 117, 117, 117, 117, 117, 117, 117,
2375 117, 117, 117, 117, 117, 117, 117, 117,
2376 117, 117, 117, 117, 117, 117, 117, 117,
2377 117, 117, 117, 117, 117, 117, 400, 400,
2378 400, 400, 400, 400, 400, 400, 400, 400,
2379 400, 400, 400, 400, 400, 400, 400, 400,
2380 400, 400, 400, 400, 400, 428, 428, 428,
2381 428, 428, 428, 428, 428, 428, 428, 428,
2382 441, 441, 441, 441, 441, 441, 441, 441,
2383 441, 428, 428, 428, 428, 428, 428, 428,
2384 428, 428, 428, 428, 428, 463, 463, 463,
2385 463, 463, 463, 463, 463, 463, 463, 117,
2386 117, 117, 117, 117, 117, 117, 117, 117,
2387 117, 117, 117, 117, 117, 117, 117, 117,
2388 117, 117, 117, 117, 117, 117, 117, 117,
2389 117, 117, 117, 117, 117, 117, 117, 117,
2390 117, 117, 117, 117, 117, 117, 117, 117,
2391 117, 117, 117, 117, 117, 117, 525, 525,
2392 525, 525, 525, 525, 525, 525, 525, 525,
2393 525, 525, 525, 117, 117, 117, 117, 117,
2394 117, 117, 547, 547, 547, 547, 547, 547,
2395 547, 547, 547, 547, 547, 547, 547, 547,
2396 547, 547, 547, 547, 547, 547, 547, 547,
2397 547, 547, 547, 547, 547, 547, 547, 547,
2398 547, 547, 547, 547, 547, 547, 547, 547,
2399 547, 547, 547, 547, 547, 547, 117, 117,
2400 117, 117, 117, 117, 117, 117, 117, 117,
2401 117, 117, 117, 117, 117, 117, 117, 117,
2402 117, 117, 117, 117, 117, 117, 117, 117,
2403 117, 117, 117, 117, 117, 117, 117, 117,
2404 117, 117, 117, 117, 117, 117, 117, 117,
2405 117, 117, 117, 117, 117, 117, 117, 0,
2406 0, 0, 0, 655, 655, 655, 655, 655,
2407 655, 655, 655, 655, 655, 655, 655, 655,
2408 655, 655, 655, 655, 655, 655, 655, 655,
2409 655, 655, 655, 655, 655, 655, 655, 655,
2410 655, 655, 655, 655, 655, 655, 655, 655,
2411 655, 655, 655, 655, 655, 655, 655, 655,
2412 655, 655, 655, 655, 655, 655, 655, 655,
2413 655, 655, 655, 655, 655, 655, 655, 655,
2414 655, 655, 655, 655, 655, 655, 655, 655,
2415 655, 655, 655, 655, 655, 655, 655, 655,
2416 655, 655, 655, 655, 655, 655, 655, 655,
2417 655, 655, 655, 655, 655, 655, 655, 655,
2418 655, 655, 655, 655, 655, 655, 655, 655,
2419 655, 655, 655, 655, 655, 655, 655, 655,
2420 655, 655, 655, 655, 655, 655, 655, 655,
2421 655, 655, 655, 655, 655, 655, 655, 655,
2422 655, 655, 655, 655, 655, 655, 655, 655,
2423 655, 655, 655, 655, 655, 655, 655, 655,
2424 655, 655, 655, 655, 655, 655, 655, 655,
2425 655, 655, 655, 655, 655, 655, 655, 655,
2426 655, 655, 655, 655, 655, 655, 655, 655,
2427 655, 655, 655, 655, 655, 655, 856, 856,
2428 859, 862, 862, 862, 866, 866, 866, 870,
2429 870, 870, 0, 895, 898, 898, 899, 898,
2430 898, 898, 898, 898, 898, 898, 898, 912,
2431 915, 918, 921, 922, 963, 963, 966, 969,
2432 971, 972, 975, 977, 981, 981, 984, 984,
2433 987, 991, 993, 996, 996, 1004, 1005, 1006,
2434 1009, 1009, 1009, 0, 1016, 1016, 0, 1043,
2435 1043, 1052, 1062, 1043, 1043, 1043, 1043, 1076,
2436 1043, 1043, 1043, 1084, 1095, 1102, 1104, 1043,
2437 1114, 1043, 1125, 1043, 1043, 1043, 1043, 1043,
2438 1146, 0, 0, 0, 1167, 1167, 1200, 1200,
2439 1203, 1203, 1206, 1209, 1211, 1213, 1216, 1216,
2440 1224, 1225, 1225, 1225, 0, 1233, 0, 1242,
2441 1244, 1244, 1244, 0, 1254, 1256, 1256, 1256,
2442 0, 0
2443};
2444
2445static const int regex_start = 746;
2446static const int regex_error = 0;
2447
2448static const int regex_en_readVerb = 787;
2449static const int regex_en_readUCP = 790;
2450static const int regex_en_readBracedUCP = 559;
2451static const int regex_en_readUCPSingle = 818;
2452static const int regex_en_charClassGuts = 819;
2453static const int regex_en_readClass = 836;
2454static const int regex_en_readQuotedLiteral = 838;
2455static const int regex_en_readQuotedClass = 843;
2456static const int regex_en_readComment = 848;
2457static const int regex_en_readNewlineTerminatedComment = 849;
2458static const int regex_en_main = 746;
2459
2460
2461#line 1913 "Parser.rl"
2462
2463/** \brief Main parser call, returns root Component or nullptr. */
2464unique_ptr<Component> parse(const char *ptr, ParseMode &globalMode) {
2465 assert(ptr);
2466
2467 const char *p = ptr;
2468 const char *pe = ptr + strlen(ptr);
2469
2470 // First, read the control verbs, set any global mode flags and move the
2471 // ptr forward.
2472 p = read_control_verbs(p, pe, 0, globalMode);
2473
2474 const char *eof = pe;
2475 int cs;
2476 UNUSED int act;
2477 int top;
2478 vector<int> stack;
2479 const char *ts, *te;
2480 unichar accumulator = 0;
2481 unichar octAccumulator = 0; /* required as we are also accumulating for
2482 * back ref when looking for octals */
2483 unsigned repeatN = 0;
2484 unsigned repeatM = 0;
2485 string label;
2486
2487 ParseMode mode = globalMode;
2488 ParseMode newMode;
2489
2490 bool negated = false;
2491 bool inComment = false;
2492
2493 // Stack of sequences and flags used to store state when we enter
2494 // sub-sequences.
2495 vector<ExprState> sequences;
2496
2497 // Index of the next capturing group. Note that zero is reserved for the
2498 // root sequence.
2499 unsigned groupIndex = 1;
2500
2501 // Set storing group names that are currently in use.
2502 flat_set<string> groupNames;
2503
2504 // Root sequence.
2505 unique_ptr<ComponentSequence> rootSeq = ue2::make_unique<ComponentSequence>();
2506 rootSeq->setCaptureIndex(0);
2507
2508 // Current sequence being appended to
2509 ComponentSequence *currentSeq = rootSeq.get();
2510
2511 // The current character class being appended to. This is used as the
2512 // accumulator for both character class and UCP properties.
2513 unique_ptr<ComponentClass> currentCls;
2514
2515 // True if the machine is currently inside a character class, i.e. square
2516 // brackets [..].
2517 bool inCharClass = false;
2518
2519 // True if the machine is inside a character class but it has not processed
2520 // any "real" elements yet, i.e. it's still processing meta-characters like
2521 // '^'.
2522 bool inCharClassEarly = false;
2523
2524 // Location at which the current character class began.
2525 const char *currentClsBegin = p;
2526
2527 // We throw exceptions on various parsing failures beyond this point: we
2528 // use a try/catch block here to clean up our allocated memory before we
2529 // re-throw the exception to the caller.
2530 try {
2531 // Embed the Ragel machine here
2532
2533#line 2534 "Parser.cpp"
2534 {
2535 cs = regex_start;
2536 top = 0;
2537 ts = 0;
2538 te = 0;
2539 act = 0;
2540 }
2541
2542#line 1984 "Parser.rl"
2543
2544#line 2545 "Parser.cpp"
2545 {
2546 int _klen;
2547 unsigned int _trans;
2548 short _widec;
2549 const short *_acts;
2550 unsigned int _nacts;
2551 const short *_keys;
2552
2553 if ( p == pe )
2554 goto _test_eof;
2555 if ( cs == 0 )
2556 goto _out;
2557_resume:
2558 _acts = _regex_actions + _regex_from_state_actions[cs];
2559 _nacts = (unsigned int) *_acts++;
2560 while ( _nacts-- > 0 ) {
2561 switch ( *_acts++ ) {
2562 case 24:
2563#line 1 "NONE"
2564 {ts = p;}
2565 break;
2566#line 2567 "Parser.cpp"
2567 }
2568 }
2569
2570 _widec = (*p);
2571 _klen = _regex_cond_lengths[cs];
2572 _keys = _regex_cond_keys + (_regex_cond_offsets[cs]*2);
2573 if ( _klen > 0 ) {
2574 const short *_lower = _keys;
2575 const short *_mid;
2576 const short *_upper = _keys + (_klen<<1) - 2;
2577 while (1) {
2578 if ( _upper < _lower )
2579 break;
2580
2581 _mid = _lower + (((_upper-_lower) >> 1) & ~1);
2582 if ( _widec < _mid[0] )
2583 _upper = _mid - 2;
2584 else if ( _widec > _mid[1] )
2585 _lower = _mid + 2;
2586 else {
2587 switch ( _regex_cond_spaces[_regex_cond_offsets[cs] + ((_mid - _keys)>>1)] ) {
2588 case 0: {
2589 _widec = (short)(128 + ((*p) - -128));
2590 if (
2591#line 476 "Parser.rl"
2592 mode.utf8 ) _widec += 256;
2593 break;
2594 }
2595 case 1: {
2596 _widec = (short)(1152 + ((*p) - -128));
2597 if (
2598#line 477 "Parser.rl"
2599 mode.ignore_space ) _widec += 256;
2600 break;
2601 }
2602 case 2: {
2603 _widec = (short)(640 + ((*p) - -128));
2604 if (
2605#line 478 "Parser.rl"
2606 inCharClassEarly ) _widec += 256;
2607 break;
2608 }
2609 }
2610 break;
2611 }
2612 }
2613 }
2614
2615 _keys = _regex_trans_keys + _regex_key_offsets[cs];
2616 _trans = _regex_index_offsets[cs];
2617
2618 _klen = _regex_single_lengths[cs];
2619 if ( _klen > 0 ) {
2620 const short *_lower = _keys;
2621 const short *_mid;
2622 const short *_upper = _keys + _klen - 1;
2623 while (1) {
2624 if ( _upper < _lower )
2625 break;
2626
2627 _mid = _lower + ((_upper-_lower) >> 1);
2628 if ( _widec < *_mid )
2629 _upper = _mid - 1;
2630 else if ( _widec > *_mid )
2631 _lower = _mid + 1;
2632 else {
2633 _trans += (unsigned int)(_mid - _keys);
2634 goto _match;
2635 }
2636 }
2637 _keys += _klen;
2638 _trans += _klen;
2639 }
2640
2641 _klen = _regex_range_lengths[cs];
2642 if ( _klen > 0 ) {
2643 const short *_lower = _keys;
2644 const short *_mid;
2645 const short *_upper = _keys + (_klen<<1) - 2;
2646 while (1) {
2647 if ( _upper < _lower )
2648 break;
2649
2650 _mid = _lower + (((_upper-_lower) >> 1) & ~1);
2651 if ( _widec < _mid[0] )
2652 _upper = _mid - 2;
2653 else if ( _widec > _mid[1] )
2654 _lower = _mid + 2;
2655 else {
2656 _trans += (unsigned int)((_mid - _keys)>>1);
2657 goto _match;
2658 }
2659 }
2660 _trans += _klen;
2661 }
2662
2663_match:
2664 _trans = _regex_indicies[_trans];
2665_eof_trans:
2666 cs = _regex_trans_targs[_trans];
2667
2668 if ( _regex_trans_actions[_trans] == 0 )
2669 goto _again;
2670
2671 _acts = _regex_actions + _regex_trans_actions[_trans];
2672 _nacts = (unsigned int) *_acts++;
2673 while ( _nacts-- > 0 )
2674 {
2675 switch ( *_acts++ )
2676 {
2677 case 0:
2678#line 286 "Parser.rl"
2679 { label.clear();}
2680 break;
2681 case 1:
2682#line 287 "Parser.rl"
2683 { label.push_back((*p));}
2684 break;
2685 case 2:
2686#line 288 "Parser.rl"
2687 { octAccumulator = 0;}
2688 break;
2689 case 3:
2690#line 289 "Parser.rl"
2691 { accumulator = 0;}
2692 break;
2693 case 4:
2694#line 290 "Parser.rl"
2695 {
2696 octAccumulator = 0;
2697 pushOct(&octAccumulator, (*p));
2698 }
2699 break;
2700 case 5:
2701#line 294 "Parser.rl"
2702 {
2703 accumulator = 0;
2704 pushDec(&accumulator, (*p));
2705 }
2706 break;
2707 case 6:
2708#line 298 "Parser.rl"
2709 { repeatN = 0; repeatM = 0; }
2710 break;
2711 case 7:
2712#line 299 "Parser.rl"
2713 { pushDec(&repeatN, (*p)); }
2714 break;
2715 case 8:
2716#line 300 "Parser.rl"
2717 { pushDec(&repeatM, (*p)); }
2718 break;
2719 case 9:
2720#line 301 "Parser.rl"
2721 { pushOct(&octAccumulator, (*p)); }
2722 break;
2723 case 10:
2724#line 302 "Parser.rl"
2725 { pushDec(&accumulator, (*p)); }
2726 break;
2727 case 11:
2728#line 303 "Parser.rl"
2729 {
2730 accumulator *= 16;
2731 accumulator += (*p) - '0';
2732 }
2733 break;
2734 case 12:
2735#line 307 "Parser.rl"
2736 {
2737 accumulator *= 16;
2738 accumulator += 10 + (*p) - 'a';
2739 }
2740 break;
2741 case 13:
2742#line 311 "Parser.rl"
2743 {
2744 accumulator *= 16;
2745 accumulator += 10 + (*p) - 'A';
2746 }
2747 break;
2748 case 14:
2749#line 431 "Parser.rl"
2750 {
2751 newMode = mode;
2752 }
2753 break;
2754 case 15:
2755#line 438 "Parser.rl"
2756 {
2757 switch ((*p)) {
2758 case 'i':
2759 newMode.caseless = true;
2760 break;
2761 case 'm':
2762 newMode.multiline = true;
2763 break;
2764 case 's':
2765 newMode.dotall = true;
2766 break;
2767 case 'x':
2768 newMode.ignore_space = true;
2769 break;
2770 default:
2771 assert(0); // this action only called for [imsx]
2772 break;
2773 }
2774 }
2775 break;
2776 case 16:
2777#line 457 "Parser.rl"
2778 {
2779 switch ((*p)) {
2780 case 'i':
2781 newMode.caseless = false;
2782 break;
2783 case 'm':
2784 newMode.multiline = false;
2785 break;
2786 case 's':
2787 newMode.dotall = false;
2788 break;
2789 case 'x':
2790 newMode.ignore_space = false;
2791 break;
2792 default:
2793 assert(0); // this action only called for [imsx]
2794 break;
2795 }
2796 }
2797 break;
2798 case 17:
2799#line 511 "Parser.rl"
2800 {repeatM = repeatN;}
2801 break;
2802 case 18:
2803#line 511 "Parser.rl"
2804 {repeatM = ComponentRepeat::NoLimit;}
2805 break;
2806 case 19:
2807#line 723 "Parser.rl"
2808 { negated = !negated; }
2809 break;
2810 case 20:
2811#line 724 "Parser.rl"
2812 { p--; {
2813 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
2814 if ((int)stack.size() == top) {
2815 stack.resize(2 * (top + 1));
2816 }
2817 {stack[top++] = cs; cs = 790; goto _again;}} }
2818 break;
2819 case 21:
2820#line 725 "Parser.rl"
2821 { if (!inCharClass) { // not inside [..]
2822 currentCls->finalize();
2823 currentSeq->addComponent(move(currentCls));
2824 }
2825 {cs = stack[--top]; goto _again;}
2826 }
2827 break;
2828 case 22:
2829#line 731 "Parser.rl"
2830 { throw LocatedParseError("Malformed property"); }
2831 break;
2832 case 25:
2833#line 1 "NONE"
2834 {te = p+1;}
2835 break;
2836 case 26:
2837#line 551 "Parser.rl"
2838 {te = p+1;{
2839 throw LocatedParseError("(*UTF8) must be at start of "
2840 "expression, encountered");
2841 }}
2842 break;
2843 case 27:
2844#line 555 "Parser.rl"
2845 {te = p+1;{
2846 throw LocatedParseError("(*UTF) must be at start of "
2847 "expression, encountered");
2848 }}
2849 break;
2850 case 28:
2851#line 559 "Parser.rl"
2852 {te = p+1;{
2853 throw LocatedParseError("(*UCP) must be at start of "
2854 "expression, encountered");
2855 }}
2856 break;
2857 case 29:
2858#line 565 "Parser.rl"
2859 {te = p+1;{
2860 ParseMode temp_mode;
2861 assert(ts - 2 >= ptr); // parser needs the '(*' at the start too.
2862 read_control_verbs(ts - 2, te, (ts - 2 - ptr), temp_mode);
2863 assert(0); // Should have thrown a parse error.
2864 throw LocatedParseError("Unknown control verb");
2865 }}
2866 break;
2867 case 30:
2868#line 572 "Parser.rl"
2869 {te = p+1;{
2870 throw LocatedParseError("Unknown control verb");
2871 }}
2872 break;
2873 case 31:
2874#line 572 "Parser.rl"
2875 {te = p;p--;{
2876 throw LocatedParseError("Unknown control verb");
2877 }}
2878 break;
2879 case 32:
2880#line 572 "Parser.rl"
2881 {{p = ((te))-1;}{
2882 throw LocatedParseError("Unknown control verb");
2883 }}
2884 break;
2885 case 33:
2886#line 582 "Parser.rl"
2887 {te = p+1;{ currentCls->add(CLASS_UCP_CC, negated); {cs = stack[--top]; goto _again;} }}
2888 break;
2889 case 34:
2890#line 583 "Parser.rl"
2891 {te = p+1;{ currentCls->add(CLASS_UCP_CF, negated); {cs = stack[--top]; goto _again;} }}
2892 break;
2893 case 35:
2894#line 584 "Parser.rl"
2895 {te = p+1;{ currentCls->add(CLASS_UCP_CN, negated); {cs = stack[--top]; goto _again;} }}
2896 break;
2897 case 36:
2898#line 586 "Parser.rl"
2899 {te = p+1;{ currentCls->add(CLASS_UCP_CS, negated); {cs = stack[--top]; goto _again;} }}
2900 break;
2901 case 37:
2902#line 588 "Parser.rl"
2903 {te = p+1;{ currentCls->add(CLASS_UCP_LL, negated); {cs = stack[--top]; goto _again;} }}
2904 break;
2905 case 38:
2906#line 589 "Parser.rl"
2907 {te = p+1;{ currentCls->add(CLASS_UCP_LM, negated); {cs = stack[--top]; goto _again;} }}
2908 break;
2909 case 39:
2910#line 590 "Parser.rl"
2911 {te = p+1;{ currentCls->add(CLASS_UCP_LO, negated); {cs = stack[--top]; goto _again;} }}
2912 break;
2913 case 40:
2914#line 591 "Parser.rl"
2915 {te = p+1;{ currentCls->add(CLASS_UCP_LT, negated); {cs = stack[--top]; goto _again;} }}
2916 break;
2917 case 41:
2918#line 592 "Parser.rl"
2919 {te = p+1;{ currentCls->add(CLASS_UCP_LU, negated); {cs = stack[--top]; goto _again;} }}
2920 break;
2921 case 42:
2922#line 593 "Parser.rl"
2923 {te = p+1;{ currentCls->add(CLASS_UCP_L_AND, negated); {cs = stack[--top]; goto _again;} }}
2924 break;
2925 case 43:
2926#line 595 "Parser.rl"
2927 {te = p+1;{ currentCls->add(CLASS_UCP_MC, negated); {cs = stack[--top]; goto _again;} }}
2928 break;
2929 case 44:
2930#line 597 "Parser.rl"
2931 {te = p+1;{ currentCls->add(CLASS_UCP_MN, negated); {cs = stack[--top]; goto _again;} }}
2932 break;
2933 case 45:
2934#line 599 "Parser.rl"
2935 {te = p+1;{ currentCls->add(CLASS_UCP_ND, negated); {cs = stack[--top]; goto _again;} }}
2936 break;
2937 case 46:
2938#line 600 "Parser.rl"
2939 {te = p+1;{ currentCls->add(CLASS_UCP_NL, negated); {cs = stack[--top]; goto _again;} }}
2940 break;
2941 case 47:
2942#line 601 "Parser.rl"
2943 {te = p+1;{ currentCls->add(CLASS_UCP_NO, negated); {cs = stack[--top]; goto _again;} }}
2944 break;
2945 case 48:
2946#line 603 "Parser.rl"
2947 {te = p+1;{ currentCls->add(CLASS_UCP_PC, negated); {cs = stack[--top]; goto _again;} }}
2948 break;
2949 case 49:
2950#line 604 "Parser.rl"
2951 {te = p+1;{ currentCls->add(CLASS_UCP_PD, negated); {cs = stack[--top]; goto _again;} }}
2952 break;
2953 case 50:
2954#line 605 "Parser.rl"
2955 {te = p+1;{ currentCls->add(CLASS_UCP_PE, negated); {cs = stack[--top]; goto _again;} }}
2956 break;
2957 case 51:
2958#line 606 "Parser.rl"
2959 {te = p+1;{ currentCls->add(CLASS_UCP_PF, negated); {cs = stack[--top]; goto _again;} }}
2960 break;
2961 case 52:
2962#line 607 "Parser.rl"
2963 {te = p+1;{ currentCls->add(CLASS_UCP_PI, negated); {cs = stack[--top]; goto _again;} }}
2964 break;
2965 case 53:
2966#line 608 "Parser.rl"
2967 {te = p+1;{ currentCls->add(CLASS_UCP_PO, negated); {cs = stack[--top]; goto _again;} }}
2968 break;
2969 case 54:
2970#line 609 "Parser.rl"
2971 {te = p+1;{ currentCls->add(CLASS_UCP_PS, negated); {cs = stack[--top]; goto _again;} }}
2972 break;
2973 case 55:
2974#line 611 "Parser.rl"
2975 {te = p+1;{ currentCls->add(CLASS_UCP_SC, negated); {cs = stack[--top]; goto _again;} }}
2976 break;
2977 case 56:
2978#line 612 "Parser.rl"
2979 {te = p+1;{ currentCls->add(CLASS_UCP_SK, negated); {cs = stack[--top]; goto _again;} }}
2980 break;
2981 case 57:
2982#line 613 "Parser.rl"
2983 {te = p+1;{ currentCls->add(CLASS_UCP_SM, negated); {cs = stack[--top]; goto _again;} }}
2984 break;
2985 case 58:
2986#line 614 "Parser.rl"
2987 {te = p+1;{ currentCls->add(CLASS_UCP_SO, negated); {cs = stack[--top]; goto _again;} }}
2988 break;
2989 case 59:
2990#line 616 "Parser.rl"
2991 {te = p+1;{ currentCls->add(CLASS_UCP_ZL, negated); {cs = stack[--top]; goto _again;} }}
2992 break;
2993 case 60:
2994#line 617 "Parser.rl"
2995 {te = p+1;{ currentCls->add(CLASS_UCP_ZP, negated); {cs = stack[--top]; goto _again;} }}
2996 break;
2997 case 61:
2998#line 618 "Parser.rl"
2999 {te = p+1;{ currentCls->add(CLASS_UCP_ZS, negated); {cs = stack[--top]; goto _again;} }}
3000 break;
3001 case 62:
3002#line 619 "Parser.rl"
3003 {te = p+1;{ currentCls->add(CLASS_UCP_XAN, negated); {cs = stack[--top]; goto _again;} }}
3004 break;
3005 case 63:
3006#line 620 "Parser.rl"
3007 {te = p+1;{ currentCls->add(CLASS_UCP_XPS, negated); {cs = stack[--top]; goto _again;} }}
3008 break;
3009 case 64:
3010#line 621 "Parser.rl"
3011 {te = p+1;{ currentCls->add(CLASS_UCP_XSP, negated); {cs = stack[--top]; goto _again;} }}
3012 break;
3013 case 65:
3014#line 622 "Parser.rl"
3015 {te = p+1;{ currentCls->add(CLASS_UCP_XWD, negated); {cs = stack[--top]; goto _again;} }}
3016 break;
3017 case 66:
3018#line 623 "Parser.rl"
3019 {te = p+1;{ currentCls->add(CLASS_SCRIPT_ARABIC, negated); {cs = stack[--top]; goto _again;} }}
3020 break;
3021 case 67:
3022#line 624 "Parser.rl"
3023 {te = p+1;{ currentCls->add(CLASS_SCRIPT_ARMENIAN, negated); {cs = stack[--top]; goto _again;} }}
3024 break;
3025 case 68:
3026#line 625 "Parser.rl"
3027 {te = p+1;{ currentCls->add(CLASS_SCRIPT_AVESTAN, negated); {cs = stack[--top]; goto _again;} }}
3028 break;
3029 case 69:
3030#line 626 "Parser.rl"
3031 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BALINESE, negated); {cs = stack[--top]; goto _again;} }}
3032 break;
3033 case 70:
3034#line 627 "Parser.rl"
3035 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BAMUM, negated); {cs = stack[--top]; goto _again;} }}
3036 break;
3037 case 71:
3038#line 628 "Parser.rl"
3039 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BATAK, negated); {cs = stack[--top]; goto _again;} }}
3040 break;
3041 case 72:
3042#line 629 "Parser.rl"
3043 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BENGALI, negated); {cs = stack[--top]; goto _again;} }}
3044 break;
3045 case 73:
3046#line 630 "Parser.rl"
3047 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BOPOMOFO, negated); {cs = stack[--top]; goto _again;} }}
3048 break;
3049 case 74:
3050#line 631 "Parser.rl"
3051 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BRAHMI, negated); {cs = stack[--top]; goto _again;} }}
3052 break;
3053 case 75:
3054#line 632 "Parser.rl"
3055 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BRAILLE, negated); {cs = stack[--top]; goto _again;} }}
3056 break;
3057 case 76:
3058#line 633 "Parser.rl"
3059 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BUGINESE, negated); {cs = stack[--top]; goto _again;} }}
3060 break;
3061 case 77:
3062#line 634 "Parser.rl"
3063 {te = p+1;{ currentCls->add(CLASS_SCRIPT_BUHID, negated); {cs = stack[--top]; goto _again;} }}
3064 break;
3065 case 78:
3066#line 635 "Parser.rl"
3067 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CANADIAN_ABORIGINAL, negated); {cs = stack[--top]; goto _again;} }}
3068 break;
3069 case 79:
3070#line 636 "Parser.rl"
3071 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CARIAN, negated); {cs = stack[--top]; goto _again;} }}
3072 break;
3073 case 80:
3074#line 637 "Parser.rl"
3075 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CHAM, negated); {cs = stack[--top]; goto _again;} }}
3076 break;
3077 case 81:
3078#line 638 "Parser.rl"
3079 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CHEROKEE, negated); {cs = stack[--top]; goto _again;} }}
3080 break;
3081 case 82:
3082#line 639 "Parser.rl"
3083 {te = p+1;{ currentCls->add(CLASS_SCRIPT_COMMON, negated); {cs = stack[--top]; goto _again;} }}
3084 break;
3085 case 83:
3086#line 640 "Parser.rl"
3087 {te = p+1;{ currentCls->add(CLASS_SCRIPT_COPTIC, negated); {cs = stack[--top]; goto _again;} }}
3088 break;
3089 case 84:
3090#line 641 "Parser.rl"
3091 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CUNEIFORM, negated); {cs = stack[--top]; goto _again;} }}
3092 break;
3093 case 85:
3094#line 642 "Parser.rl"
3095 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CYPRIOT, negated); {cs = stack[--top]; goto _again;} }}
3096 break;
3097 case 86:
3098#line 643 "Parser.rl"
3099 {te = p+1;{ currentCls->add(CLASS_SCRIPT_CYRILLIC, negated); {cs = stack[--top]; goto _again;} }}
3100 break;
3101 case 87:
3102#line 644 "Parser.rl"
3103 {te = p+1;{ currentCls->add(CLASS_SCRIPT_DESERET, negated); {cs = stack[--top]; goto _again;} }}
3104 break;
3105 case 88:
3106#line 645 "Parser.rl"
3107 {te = p+1;{ currentCls->add(CLASS_SCRIPT_DEVANAGARI, negated); {cs = stack[--top]; goto _again;} }}
3108 break;
3109 case 89:
3110#line 646 "Parser.rl"
3111 {te = p+1;{ currentCls->add(CLASS_SCRIPT_EGYPTIAN_HIEROGLYPHS, negated); {cs = stack[--top]; goto _again;} }}
3112 break;
3113 case 90:
3114#line 647 "Parser.rl"
3115 {te = p+1;{ currentCls->add(CLASS_SCRIPT_ETHIOPIC, negated); {cs = stack[--top]; goto _again;} }}
3116 break;
3117 case 91:
3118#line 648 "Parser.rl"
3119 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GEORGIAN, negated); {cs = stack[--top]; goto _again;} }}
3120 break;
3121 case 92:
3122#line 649 "Parser.rl"
3123 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GLAGOLITIC, negated); {cs = stack[--top]; goto _again;} }}
3124 break;
3125 case 93:
3126#line 650 "Parser.rl"
3127 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GOTHIC, negated); {cs = stack[--top]; goto _again;} }}
3128 break;
3129 case 94:
3130#line 651 "Parser.rl"
3131 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GREEK, negated); {cs = stack[--top]; goto _again;} }}
3132 break;
3133 case 95:
3134#line 652 "Parser.rl"
3135 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GUJARATI, negated); {cs = stack[--top]; goto _again;} }}
3136 break;
3137 case 96:
3138#line 653 "Parser.rl"
3139 {te = p+1;{ currentCls->add(CLASS_SCRIPT_GURMUKHI, negated); {cs = stack[--top]; goto _again;} }}
3140 break;
3141 case 97:
3142#line 655 "Parser.rl"
3143 {te = p+1;{ currentCls->add(CLASS_SCRIPT_HANGUL, negated); {cs = stack[--top]; goto _again;} }}
3144 break;
3145 case 98:
3146#line 656 "Parser.rl"
3147 {te = p+1;{ currentCls->add(CLASS_SCRIPT_HANUNOO, negated); {cs = stack[--top]; goto _again;} }}
3148 break;
3149 case 99:
3150#line 657 "Parser.rl"
3151 {te = p+1;{ currentCls->add(CLASS_SCRIPT_HEBREW, negated); {cs = stack[--top]; goto _again;} }}
3152 break;
3153 case 100:
3154#line 658 "Parser.rl"
3155 {te = p+1;{ currentCls->add(CLASS_SCRIPT_HIRAGANA, negated); {cs = stack[--top]; goto _again;} }}
3156 break;
3157 case 101:
3158#line 659 "Parser.rl"
3159 {te = p+1;{ currentCls->add(CLASS_SCRIPT_IMPERIAL_ARAMAIC, negated); {cs = stack[--top]; goto _again;} }}
3160 break;
3161 case 102:
3162#line 660 "Parser.rl"
3163 {te = p+1;{ currentCls->add(CLASS_SCRIPT_INHERITED, negated); {cs = stack[--top]; goto _again;} }}
3164 break;
3165 case 103:
3166#line 661 "Parser.rl"
3167 {te = p+1;{ currentCls->add(CLASS_SCRIPT_INSCRIPTIONAL_PAHLAVI, negated); {cs = stack[--top]; goto _again;} }}
3168 break;
3169 case 104:
3170#line 662 "Parser.rl"
3171 {te = p+1;{ currentCls->add(CLASS_SCRIPT_INSCRIPTIONAL_PARTHIAN, negated); {cs = stack[--top]; goto _again;} }}
3172 break;
3173 case 105:
3174#line 663 "Parser.rl"
3175 {te = p+1;{ currentCls->add(CLASS_SCRIPT_JAVANESE, negated); {cs = stack[--top]; goto _again;} }}
3176 break;
3177 case 106:
3178#line 664 "Parser.rl"
3179 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KAITHI, negated); {cs = stack[--top]; goto _again;} }}
3180 break;
3181 case 107:
3182#line 665 "Parser.rl"
3183 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KANNADA, negated); {cs = stack[--top]; goto _again;} }}
3184 break;
3185 case 108:
3186#line 666 "Parser.rl"
3187 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KATAKANA, negated); {cs = stack[--top]; goto _again;} }}
3188 break;
3189 case 109:
3190#line 667 "Parser.rl"
3191 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KAYAH_LI, negated); {cs = stack[--top]; goto _again;} }}
3192 break;
3193 case 110:
3194#line 668 "Parser.rl"
3195 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KHAROSHTHI, negated); {cs = stack[--top]; goto _again;} }}
3196 break;
3197 case 111:
3198#line 669 "Parser.rl"
3199 {te = p+1;{ currentCls->add(CLASS_SCRIPT_KHMER, negated); {cs = stack[--top]; goto _again;} }}
3200 break;
3201 case 112:
3202#line 670 "Parser.rl"
3203 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LAO, negated); {cs = stack[--top]; goto _again;} }}
3204 break;
3205 case 113:
3206#line 671 "Parser.rl"
3207 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LATIN, negated); {cs = stack[--top]; goto _again;} }}
3208 break;
3209 case 114:
3210#line 672 "Parser.rl"
3211 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LEPCHA, negated); {cs = stack[--top]; goto _again;} }}
3212 break;
3213 case 115:
3214#line 673 "Parser.rl"
3215 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LIMBU, negated); {cs = stack[--top]; goto _again;} }}
3216 break;
3217 case 116:
3218#line 674 "Parser.rl"
3219 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LINEAR_B, negated); {cs = stack[--top]; goto _again;} }}
3220 break;
3221 case 117:
3222#line 675 "Parser.rl"
3223 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LISU, negated); {cs = stack[--top]; goto _again;} }}
3224 break;
3225 case 118:
3226#line 676 "Parser.rl"
3227 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LYCIAN, negated); {cs = stack[--top]; goto _again;} }}
3228 break;
3229 case 119:
3230#line 677 "Parser.rl"
3231 {te = p+1;{ currentCls->add(CLASS_SCRIPT_LYDIAN, negated); {cs = stack[--top]; goto _again;} }}
3232 break;
3233 case 120:
3234#line 678 "Parser.rl"
3235 {te = p+1;{ currentCls->add(CLASS_SCRIPT_MALAYALAM, negated); {cs = stack[--top]; goto _again;} }}
3236 break;
3237 case 121:
3238#line 679 "Parser.rl"
3239 {te = p+1;{ currentCls->add(CLASS_SCRIPT_MANDAIC, negated); {cs = stack[--top]; goto _again;} }}
3240 break;
3241 case 122:
3242#line 680 "Parser.rl"
3243 {te = p+1;{ currentCls->add(CLASS_SCRIPT_MEETEI_MAYEK, negated); {cs = stack[--top]; goto _again;} }}
3244 break;
3245 case 123:
3246#line 681 "Parser.rl"
3247 {te = p+1;{ currentCls->add(CLASS_SCRIPT_MONGOLIAN, negated); {cs = stack[--top]; goto _again;} }}
3248 break;
3249 case 124:
3250#line 682 "Parser.rl"
3251 {te = p+1;{ currentCls->add(CLASS_SCRIPT_MYANMAR, negated); {cs = stack[--top]; goto _again;} }}
3252 break;
3253 case 125:
3254#line 683 "Parser.rl"
3255 {te = p+1;{ currentCls->add(CLASS_SCRIPT_NEW_TAI_LUE, negated); {cs = stack[--top]; goto _again;} }}
3256 break;
3257 case 126:
3258#line 684 "Parser.rl"
3259 {te = p+1;{ currentCls->add(CLASS_SCRIPT_NKO, negated); {cs = stack[--top]; goto _again;} }}
3260 break;
3261 case 127:
3262#line 685 "Parser.rl"
3263 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OGHAM, negated); {cs = stack[--top]; goto _again;} }}
3264 break;
3265 case 128:
3266#line 686 "Parser.rl"
3267 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OL_CHIKI, negated); {cs = stack[--top]; goto _again;} }}
3268 break;
3269 case 129:
3270#line 687 "Parser.rl"
3271 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OLD_ITALIC, negated); {cs = stack[--top]; goto _again;} }}
3272 break;
3273 case 130:
3274#line 688 "Parser.rl"
3275 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OLD_PERSIAN, negated); {cs = stack[--top]; goto _again;} }}
3276 break;
3277 case 131:
3278#line 689 "Parser.rl"
3279 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OLD_SOUTH_ARABIAN, negated); {cs = stack[--top]; goto _again;} }}
3280 break;
3281 case 132:
3282#line 690 "Parser.rl"
3283 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OLD_TURKIC, negated); {cs = stack[--top]; goto _again;} }}
3284 break;
3285 case 133:
3286#line 691 "Parser.rl"
3287 {te = p+1;{ currentCls->add(CLASS_SCRIPT_ORIYA, negated); {cs = stack[--top]; goto _again;} }}
3288 break;
3289 case 134:
3290#line 692 "Parser.rl"
3291 {te = p+1;{ currentCls->add(CLASS_SCRIPT_OSMANYA, negated); {cs = stack[--top]; goto _again;} }}
3292 break;
3293 case 135:
3294#line 693 "Parser.rl"
3295 {te = p+1;{ currentCls->add(CLASS_SCRIPT_PHAGS_PA, negated); {cs = stack[--top]; goto _again;} }}
3296 break;
3297 case 136:
3298#line 694 "Parser.rl"
3299 {te = p+1;{ currentCls->add(CLASS_SCRIPT_PHOENICIAN, negated); {cs = stack[--top]; goto _again;} }}
3300 break;
3301 case 137:
3302#line 695 "Parser.rl"
3303 {te = p+1;{ currentCls->add(CLASS_SCRIPT_REJANG, negated); {cs = stack[--top]; goto _again;} }}
3304 break;
3305 case 138:
3306#line 696 "Parser.rl"
3307 {te = p+1;{ currentCls->add(CLASS_SCRIPT_RUNIC, negated); {cs = stack[--top]; goto _again;} }}
3308 break;
3309 case 139:
3310#line 697 "Parser.rl"
3311 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SAMARITAN, negated); {cs = stack[--top]; goto _again;} }}
3312 break;
3313 case 140:
3314#line 698 "Parser.rl"
3315 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SAURASHTRA, negated); {cs = stack[--top]; goto _again;} }}
3316 break;
3317 case 141:
3318#line 699 "Parser.rl"
3319 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SHAVIAN, negated); {cs = stack[--top]; goto _again;} }}
3320 break;
3321 case 142:
3322#line 700 "Parser.rl"
3323 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SINHALA, negated); {cs = stack[--top]; goto _again;} }}
3324 break;
3325 case 143:
3326#line 701 "Parser.rl"
3327 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SUNDANESE, negated); {cs = stack[--top]; goto _again;} }}
3328 break;
3329 case 144:
3330#line 702 "Parser.rl"
3331 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SYLOTI_NAGRI, negated); {cs = stack[--top]; goto _again;} }}
3332 break;
3333 case 145:
3334#line 703 "Parser.rl"
3335 {te = p+1;{ currentCls->add(CLASS_SCRIPT_SYRIAC, negated); {cs = stack[--top]; goto _again;} }}
3336 break;
3337 case 146:
3338#line 704 "Parser.rl"
3339 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAGALOG, negated); {cs = stack[--top]; goto _again;} }}
3340 break;
3341 case 147:
3342#line 705 "Parser.rl"
3343 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAGBANWA, negated); {cs = stack[--top]; goto _again;} }}
3344 break;
3345 case 148:
3346#line 706 "Parser.rl"
3347 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAI_LE, negated); {cs = stack[--top]; goto _again;} }}
3348 break;
3349 case 149:
3350#line 707 "Parser.rl"
3351 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAI_THAM, negated); {cs = stack[--top]; goto _again;} }}
3352 break;
3353 case 150:
3354#line 708 "Parser.rl"
3355 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAI_VIET, negated); {cs = stack[--top]; goto _again;} }}
3356 break;
3357 case 151:
3358#line 709 "Parser.rl"
3359 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TAMIL, negated); {cs = stack[--top]; goto _again;} }}
3360 break;
3361 case 152:
3362#line 710 "Parser.rl"
3363 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TELUGU, negated); {cs = stack[--top]; goto _again;} }}
3364 break;
3365 case 153:
3366#line 711 "Parser.rl"
3367 {te = p+1;{ currentCls->add(CLASS_SCRIPT_THAANA, negated); {cs = stack[--top]; goto _again;} }}
3368 break;
3369 case 154:
3370#line 712 "Parser.rl"
3371 {te = p+1;{ currentCls->add(CLASS_SCRIPT_THAI, negated); {cs = stack[--top]; goto _again;} }}
3372 break;
3373 case 155:
3374#line 713 "Parser.rl"
3375 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TIBETAN, negated); {cs = stack[--top]; goto _again;} }}
3376 break;
3377 case 156:
3378#line 714 "Parser.rl"
3379 {te = p+1;{ currentCls->add(CLASS_SCRIPT_TIFINAGH, negated); {cs = stack[--top]; goto _again;} }}
3380 break;
3381 case 157:
3382#line 715 "Parser.rl"
3383 {te = p+1;{ currentCls->add(CLASS_SCRIPT_UGARITIC, negated); {cs = stack[--top]; goto _again;} }}
3384 break;
3385 case 158:
3386#line 716 "Parser.rl"
3387 {te = p+1;{ currentCls->add(CLASS_SCRIPT_VAI, negated); {cs = stack[--top]; goto _again;} }}
3388 break;
3389 case 159:
3390#line 717 "Parser.rl"
3391 {te = p+1;{ currentCls->add(CLASS_SCRIPT_YI, negated); {cs = stack[--top]; goto _again;} }}
3392 break;
3393 case 160:
3394#line 718 "Parser.rl"
3395 {te = p+1;{ currentCls->add(CLASS_UCP_ANY, negated); {cs = stack[--top]; goto _again;} }}
3396 break;
3397 case 161:
3398#line 719 "Parser.rl"
3399 {te = p+1;{ throw LocatedParseError("Unknown property"); }}
3400 break;
3401 case 162:
3402#line 581 "Parser.rl"
3403 {te = p;p--;{ currentCls->add(CLASS_UCP_C, negated); {cs = stack[--top]; goto _again;} }}
3404 break;
3405 case 163:
3406#line 585 "Parser.rl"
3407 {te = p;p--;{ currentCls->add(CLASS_UCP_CO, negated); {cs = stack[--top]; goto _again;} }}
3408 break;
3409 case 164:
3410#line 587 "Parser.rl"
3411 {te = p;p--;{ currentCls->add(CLASS_UCP_L, negated); {cs = stack[--top]; goto _again;} }}
3412 break;
3413 case 165:
3414#line 594 "Parser.rl"
3415 {te = p;p--;{ currentCls->add(CLASS_UCP_M, negated); {cs = stack[--top]; goto _again;} }}
3416 break;
3417 case 166:
3418#line 596 "Parser.rl"
3419 {te = p;p--;{ currentCls->add(CLASS_UCP_ME, negated); {cs = stack[--top]; goto _again;} }}
3420 break;
3421 case 167:
3422#line 598 "Parser.rl"
3423 {te = p;p--;{ currentCls->add(CLASS_UCP_N, negated); {cs = stack[--top]; goto _again;} }}
3424 break;
3425 case 168:
3426#line 602 "Parser.rl"
3427 {te = p;p--;{ currentCls->add(CLASS_UCP_P, negated); {cs = stack[--top]; goto _again;} }}
3428 break;
3429 case 169:
3430#line 610 "Parser.rl"
3431 {te = p;p--;{ currentCls->add(CLASS_UCP_S, negated); {cs = stack[--top]; goto _again;} }}
3432 break;
3433 case 170:
3434#line 615 "Parser.rl"
3435 {te = p;p--;{ currentCls->add(CLASS_UCP_Z, negated); {cs = stack[--top]; goto _again;} }}
3436 break;
3437 case 171:
3438#line 654 "Parser.rl"
3439 {te = p;p--;{ currentCls->add(CLASS_SCRIPT_HAN, negated); {cs = stack[--top]; goto _again;} }}
3440 break;
3441 case 172:
3442#line 719 "Parser.rl"
3443 {te = p;p--;{ throw LocatedParseError("Unknown property"); }}
3444 break;
3445 case 173:
3446#line 581 "Parser.rl"
3447 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_C, negated); {cs = stack[--top]; goto _again;} }}
3448 break;
3449 case 174:
3450#line 585 "Parser.rl"
3451 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_CO, negated); {cs = stack[--top]; goto _again;} }}
3452 break;
3453 case 175:
3454#line 587 "Parser.rl"
3455 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_L, negated); {cs = stack[--top]; goto _again;} }}
3456 break;
3457 case 176:
3458#line 594 "Parser.rl"
3459 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_M, negated); {cs = stack[--top]; goto _again;} }}
3460 break;
3461 case 177:
3462#line 596 "Parser.rl"
3463 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_ME, negated); {cs = stack[--top]; goto _again;} }}
3464 break;
3465 case 178:
3466#line 598 "Parser.rl"
3467 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_N, negated); {cs = stack[--top]; goto _again;} }}
3468 break;
3469 case 179:
3470#line 602 "Parser.rl"
3471 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_P, negated); {cs = stack[--top]; goto _again;} }}
3472 break;
3473 case 180:
3474#line 610 "Parser.rl"
3475 {{p = ((te))-1;}{ currentCls->add(CLASS_UCP_S, negated); {cs = stack[--top]; goto _again;} }}
3476 break;
3477 case 181:
3478#line 654 "Parser.rl"
3479 {{p = ((te))-1;}{ currentCls->add(CLASS_SCRIPT_HAN, negated); {cs = stack[--top]; goto _again;} }}
3480 break;
3481 case 182:
3482#line 719 "Parser.rl"
3483 {{p = ((te))-1;}{ throw LocatedParseError("Unknown property"); }}
3484 break;
3485 case 183:
3486#line 734 "Parser.rl"
3487 {te = p+1;{
3488 currentCls->add(CLASS_UCP_C, negated);
3489 if (!inCharClass) {
3490 currentCls->finalize();
3491 currentSeq->addComponent(move(currentCls));
3492 }
3493 {cs = stack[--top]; goto _again;}
3494 }}
3495 break;
3496 case 184:
3497#line 742 "Parser.rl"
3498 {te = p+1;{
3499 currentCls->add(CLASS_UCP_L, negated);
3500 if (!inCharClass) {
3501 currentCls->finalize();
3502 currentSeq->addComponent(move(currentCls));
3503 }
3504 {cs = stack[--top]; goto _again;}
3505 }}
3506 break;
3507 case 185:
3508#line 750 "Parser.rl"
3509 {te = p+1;{
3510 currentCls->add(CLASS_UCP_M, negated);
3511 if (!inCharClass) {
3512 currentCls->finalize();
3513 currentSeq->addComponent(move(currentCls));
3514 }
3515 {cs = stack[--top]; goto _again;}
3516 }}
3517 break;
3518 case 186:
3519#line 758 "Parser.rl"
3520 {te = p+1;{
3521 currentCls->add(CLASS_UCP_N, negated);
3522 if (!inCharClass) {
3523 currentCls->finalize();
3524 currentSeq->addComponent(move(currentCls));
3525 }
3526 {cs = stack[--top]; goto _again;}
3527 }}
3528 break;
3529 case 187:
3530#line 766 "Parser.rl"
3531 {te = p+1;{
3532 currentCls->add(CLASS_UCP_P, negated);
3533 if (!inCharClass) {
3534 currentCls->finalize();
3535 currentSeq->addComponent(move(currentCls));
3536 }
3537 {cs = stack[--top]; goto _again;}
3538 }}
3539 break;
3540 case 188:
3541#line 774 "Parser.rl"
3542 {te = p+1;{
3543 currentCls->add(CLASS_UCP_S, negated);
3544 if (!inCharClass) {
3545 currentCls->finalize();
3546 currentSeq->addComponent(move(currentCls));
3547 }
3548 {cs = stack[--top]; goto _again;}
3549 }}
3550 break;
3551 case 189:
3552#line 782 "Parser.rl"
3553 {te = p+1;{
3554 currentCls->add(CLASS_UCP_Z, negated);
3555 if (!inCharClass) {
3556 currentCls->finalize();
3557 currentSeq->addComponent(move(currentCls));
3558 }
3559 {cs = stack[--top]; goto _again;}
3560 }}
3561 break;
3562 case 190:
3563#line 791 "Parser.rl"
3564 {te = p+1;{ throw LocatedParseError("Unknown property"); }}
3565 break;
3566 case 191:
3567#line 797 "Parser.rl"
3568 {te = p+1;{
3569 throw LocatedParseError("Unsupported POSIX collating "
3570 "element");
3571 }}
3572 break;
3573 case 192:
3574#line 804 "Parser.rl"
3575 {te = p+1;{
3576 currentCls->add(CLASS_ALNUM, false);
3577 }}
3578 break;
3579 case 193:
3580#line 807 "Parser.rl"
3581 {te = p+1;{
3582 currentCls->add(CLASS_ALNUM, true);
3583 }}
3584 break;
3585 case 194:
3586#line 810 "Parser.rl"
3587 {te = p+1;{
3588 currentCls->add(CLASS_ALPHA, false);
3589 }}
3590 break;
3591 case 195:
3592#line 813 "Parser.rl"
3593 {te = p+1;{
3594 currentCls->add(CLASS_ALPHA, true);
3595 }}
3596 break;
3597 case 196:
3598#line 816 "Parser.rl"
3599 {te = p+1;{
3600 currentCls->add(CLASS_ASCII, false);
3601 }}
3602 break;
3603 case 197:
3604#line 819 "Parser.rl"
3605 {te = p+1;{
3606 currentCls->add(CLASS_ASCII, true);
3607 }}
3608 break;
3609 case 198:
3610#line 822 "Parser.rl"
3611 {te = p+1;{
3612 currentCls->add(CLASS_BLANK, false);
3613 }}
3614 break;
3615 case 199:
3616#line 825 "Parser.rl"
3617 {te = p+1;{
3618 currentCls->add(CLASS_BLANK, true);
3619 }}
3620 break;
3621 case 200:
3622#line 828 "Parser.rl"
3623 {te = p+1;{
3624 currentCls->add(CLASS_CNTRL, false);
3625 }}
3626 break;
3627 case 201:
3628#line 831 "Parser.rl"
3629 {te = p+1;{
3630 currentCls->add(CLASS_CNTRL, true);
3631 }}
3632 break;
3633 case 202:
3634#line 834 "Parser.rl"
3635 {te = p+1;{
3636 currentCls->add(CLASS_DIGIT, false);
3637 }}
3638 break;
3639 case 203:
3640#line 837 "Parser.rl"
3641 {te = p+1;{
3642 currentCls->add(CLASS_DIGIT, true);
3643 }}
3644 break;
3645 case 204:
3646#line 840 "Parser.rl"
3647 {te = p+1;{
3648 currentCls->add(CLASS_GRAPH, false);
3649 }}
3650 break;
3651 case 205:
3652#line 843 "Parser.rl"
3653 {te = p+1;{
3654 currentCls->add(CLASS_GRAPH, true);
3655 }}
3656 break;
3657 case 206:
3658#line 846 "Parser.rl"
3659 {te = p+1;{
3660 currentCls->add(CLASS_LOWER, false);
3661 }}
3662 break;
3663 case 207:
3664#line 849 "Parser.rl"
3665 {te = p+1;{
3666 currentCls->add(CLASS_LOWER, true);
3667 }}
3668 break;
3669 case 208:
3670#line 852 "Parser.rl"
3671 {te = p+1;{
3672 currentCls->add(CLASS_PRINT, false);
3673 }}
3674 break;
3675 case 209:
3676#line 855 "Parser.rl"
3677 {te = p+1;{
3678 currentCls->add(CLASS_PRINT, true);
3679 }}
3680 break;
3681 case 210:
3682#line 858 "Parser.rl"
3683 {te = p+1;{
3684 currentCls->add(CLASS_PUNCT, false);
3685 }}
3686 break;
3687 case 211:
3688#line 861 "Parser.rl"
3689 {te = p+1;{
3690 currentCls->add(CLASS_PUNCT, true);
3691 }}
3692 break;
3693 case 212:
3694#line 865 "Parser.rl"
3695 {te = p+1;{
3696 currentCls->add(CLASS_SPACE, false);
3697 }}
3698 break;
3699 case 213:
3700#line 868 "Parser.rl"
3701 {te = p+1;{
3702 currentCls->add(CLASS_SPACE, true);
3703 }}
3704 break;
3705 case 214:
3706#line 871 "Parser.rl"
3707 {te = p+1;{
3708 currentCls->add(CLASS_UPPER, false);
3709 }}
3710 break;
3711 case 215:
3712#line 874 "Parser.rl"
3713 {te = p+1;{
3714 currentCls->add(CLASS_UPPER, true);
3715 }}
3716 break;
3717 case 216:
3718#line 877 "Parser.rl"
3719 {te = p+1;{
3720 currentCls->add(CLASS_WORD, false);
3721 }}
3722 break;
3723 case 217:
3724#line 880 "Parser.rl"
3725 {te = p+1;{
3726 currentCls->add(CLASS_WORD, true);
3727 }}
3728 break;
3729 case 218:
3730#line 883 "Parser.rl"
3731 {te = p+1;{
3732 currentCls->add(CLASS_XDIGIT, false);
3733 }}
3734 break;
3735 case 219:
3736#line 886 "Parser.rl"
3737 {te = p+1;{
3738 currentCls->add(CLASS_XDIGIT, true);
3739 }}
3740 break;
3741 case 220:
3742#line 891 "Parser.rl"
3743 {te = p+1;{
3744 throw LocatedParseError("Invalid POSIX named class");
3745 }}
3746 break;
3747 case 221:
3748#line 894 "Parser.rl"
3749 {te = p+1;{
3750 {
3751 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
3752 if ((int)stack.size() == top) {
3753 stack.resize(2 * (top + 1));
3754 }
3755 {stack[top++] = cs; cs = 843; goto _again;}}
3756 }}
3757 break;
3758 case 222:
3759#line 897 "Parser.rl"
3760 {te = p+1;{ /*noop*/}}
3761 break;
3762 case 223:
3763#line 899 "Parser.rl"
3764 {te = p+1;{
3765 currentCls->add('\x08');
3766 }}
3767 break;
3768 case 224:
3769#line 903 "Parser.rl"
3770 {te = p+1;{
3771 currentCls->add('\x09');
3772 }}
3773 break;
3774 case 225:
3775#line 907 "Parser.rl"
3776 {te = p+1;{
3777 currentCls->add('\x0a');
3778 }}
3779 break;
3780 case 226:
3781#line 911 "Parser.rl"
3782 {te = p+1;{
3783 currentCls->add('\x0d');
3784 }}
3785 break;
3786 case 227:
3787#line 915 "Parser.rl"
3788 {te = p+1;{
3789 currentCls->add('\x0c');
3790 }}
3791 break;
3792 case 228:
3793#line 919 "Parser.rl"
3794 {te = p+1;{
3795 currentCls->add('\x07');
3796 }}
3797 break;
3798 case 229:
3799#line 923 "Parser.rl"
3800 {te = p+1;{
3801 currentCls->add('\x1b');
3802 }}
3803 break;
3804 case 230:
3805#line 927 "Parser.rl"
3806 {te = p+1;{
3807 currentCls->add(CLASS_HORZ, false);
3808 }}
3809 break;
3810 case 231:
3811#line 931 "Parser.rl"
3812 {te = p+1;{
3813 currentCls->add(CLASS_HORZ, true);
3814 }}
3815 break;
3816 case 232:
3817#line 935 "Parser.rl"
3818 {te = p+1;{
3819 currentCls->add(CLASS_VERT, false);
3820 }}
3821 break;
3822 case 233:
3823#line 939 "Parser.rl"
3824 {te = p+1;{
3825 currentCls->add(CLASS_VERT, true);
3826 }}
3827 break;
3828 case 234:
3829#line 943 "Parser.rl"
3830 {te = p+1;{
3831 negated = false;
3832 p--;
3833 {
3834 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
3835 if ((int)stack.size() == top) {
3836 stack.resize(2 * (top + 1));
3837 }
3838 {stack[top++] = cs; cs = 559; goto _again;}}
3839 }}
3840 break;
3841 case 235:
3842#line 949 "Parser.rl"
3843 {te = p+1;{
3844 negated = false;
3845 p--;
3846 {
3847 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
3848 if ((int)stack.size() == top) {
3849 stack.resize(2 * (top + 1));
3850 }
3851 {stack[top++] = cs; cs = 818; goto _again;}}
3852 }}
3853 break;
3854 case 236:
3855#line 955 "Parser.rl"
3856 {te = p+1;{
3857 negated = true;
3858 p--;
3859 {
3860 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
3861 if ((int)stack.size() == top) {
3862 stack.resize(2 * (top + 1));
3863 }
3864 {stack[top++] = cs; cs = 559; goto _again;}}
3865 }}
3866 break;
3867 case 237:
3868#line 961 "Parser.rl"
3869 {te = p+1;{
3870 negated = true;
3871 p--;
3872 {
3873 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
3874 if ((int)stack.size() == top) {
3875 stack.resize(2 * (top + 1));
3876 }
3877 {stack[top++] = cs; cs = 818; goto _again;}}
3878 }}
3879 break;
3880 case 238:
3881#line 971 "Parser.rl"
3882 {te = p+1;{
3883 currentCls->add(octAccumulator);
3884 }}
3885 break;
3886 case 239:
3887#line 974 "Parser.rl"
3888 {te = p+1;{
3889 currentCls->add(octAccumulator);
3890 }}
3891 break;
3892 case 240:
3893#line 978 "Parser.rl"
3894 {te = p+1;{
3895 string oct(ts + 3, te - ts - 4);
3896 unsigned long val;
3897 try {
3898 val = stoul(oct, nullptr, 8);
3899 } catch (const std::out_of_range &) {
3900 val = MAX_UNICODE + 1;
3901 }
3902 if ((!mode.utf8 && val > 255) || val > MAX_UNICODE) {
3903 throw LocatedParseError("Value in \\o{...} sequence is too large");
3904 }
3905 currentCls->add((unichar)val);
3906 }}
3907 break;
3908 case 241:
3909#line 998 "Parser.rl"
3910 {te = p+1;{
3911 currentCls->add(accumulator);
3912 }}
3913 break;
3914 case 242:
3915#line 1002 "Parser.rl"
3916 {te = p+1;{
3917 // whatever we found here
3918 currentCls->add(*(ts + 1));
3919
3920 }}
3921 break;
3922 case 243:
3923#line 1008 "Parser.rl"
3924 {te = p+1;{
3925 string hex(ts + 3, te - ts - 4);
3926 unsigned long val;
3927 try {
3928 val = stoul(hex, nullptr, 16);
3929 } catch (const std::out_of_range &) {
3930 val = MAX_UNICODE + 1;
3931 }
3932 if (val > MAX_UNICODE) {
3933 throw LocatedParseError("Value in \\x{...} sequence is too large");
3934 }
3935 currentCls->add((unichar)val);
3936 }}
3937 break;
3938 case 244:
3939#line 1026 "Parser.rl"
3940 {te = p+1;{
3941 if (te - ts < 3) {
3942 assert(te - ts == 2);
3943 throw LocatedParseError(SLASH_C_ERROR);
3944 } else {
3945 assert(te - ts == 3);
3946 currentCls->add(decodeCtrl(ts[2]));
3947 }
3948 }}
3949 break;
3950 case 245:
3951#line 1036 "Parser.rl"
3952 {te = p+1;{
3953 currentCls->add(CLASS_WORD, false);
3954 }}
3955 break;
3956 case 246:
3957#line 1040 "Parser.rl"
3958 {te = p+1;{
3959 currentCls->add(CLASS_WORD, true);
3960 }}
3961 break;
3962 case 247:
3963#line 1044 "Parser.rl"
3964 {te = p+1;{
3965 currentCls->add(CLASS_SPACE, false);
3966 }}
3967 break;
3968 case 248:
3969#line 1048 "Parser.rl"
3970 {te = p+1;{
3971 currentCls->add(CLASS_SPACE, true);
3972 }}
3973 break;
3974 case 249:
3975#line 1052 "Parser.rl"
3976 {te = p+1;{
3977 currentCls->add(CLASS_DIGIT, false);
3978 }}
3979 break;
3980 case 250:
3981#line 1056 "Parser.rl"
3982 {te = p+1;{
3983 currentCls->add(CLASS_DIGIT, true);
3984 }}
3985 break;
3986 case 251:
3987#line 1059 "Parser.rl"
3988 {te = p+1;{
3989 currentCls->addDash();
3990 }}
3991 break;
3992 case 252:
3993#line 277 "Parser.rl"
3994 {te = p+1;{
3995 ostringstream str;
3996 str << "'\\" << *(ts + 1) << "' at index " << ts - ptr
3997 << " not supported in a character class.";
3998 throw ParseError(str.str());
3999 }}
4000 break;
4001 case 253:
4002#line 277 "Parser.rl"
4003 {te = p+1;{
4004 ostringstream str;
4005 str << "'\\" << *(ts + 1) << "' at index " << ts - ptr
4006 << " not supported in a character class.";
4007 throw ParseError(str.str());
4008 }}
4009 break;
4010 case 254:
4011#line 277 "Parser.rl"
4012 {te = p+1;{
4013 ostringstream str;
4014 str << "'\\" << *(ts + 1) << "' at index " << ts - ptr
4015 << " not supported in a character class.";
4016 throw ParseError(str.str());
4017 }}
4018 break;
4019 case 255:
4020#line 1076 "Parser.rl"
4021 {te = p+1;{
4022 // add the literal char
4023 currentCls->add(*(ts + 1));
4024 }}
4025 break;
4026 case 256:
4027#line 1082 "Parser.rl"
4028 {te = p+1;{
4029 assert(mode.utf8);
4030 currentCls->add(readUtf8CodePoint2c(ts));
4031 }}
4032 break;
4033 case 257:
4034#line 1087 "Parser.rl"
4035 {te = p+1;{
4036 assert(mode.utf8);
4037 currentCls->add(readUtf8CodePoint3c(ts));
4038 }}
4039 break;
4040 case 258:
4041#line 1092 "Parser.rl"
4042 {te = p+1;{
4043 assert(mode.utf8);
4044 currentCls->add(readUtf8CodePoint4c(ts));
4045 }}
4046 break;
4047 case 259:
4048#line 1097 "Parser.rl"
4049 {te = p+1;{
4050 assert(mode.utf8);
4051 throwInvalidUtf8();
4052 }}
4053 break;
4054 case 260:
4055#line 1103 "Parser.rl"
4056 {te = p+1;{
4057 currentCls->add((u8)*ts);
4058 }}
4059 break;
4060 case 261:
4061#line 1107 "Parser.rl"
4062 {te = p+1;{
4063 currentCls->finalize();
4064 currentSeq->addComponent(move(currentCls));
4065 inCharClass = false;
4066 {cs = 746; goto _again;}
4067 }}
4068 break;
4069 case 262:
4070#line 967 "Parser.rl"
4071 {te = p;p--;{ throw LocatedParseError("Malformed property"); }}
4072 break;
4073 case 263:
4074#line 968 "Parser.rl"
4075 {te = p;p--;{ throw LocatedParseError("Malformed property"); }}
4076 break;
4077 case 264:
4078#line 971 "Parser.rl"
4079 {te = p;p--;{
4080 currentCls->add(octAccumulator);
4081 }}
4082 break;
4083 case 265:
4084#line 974 "Parser.rl"
4085 {te = p;p--;{
4086 currentCls->add(octAccumulator);
4087 }}
4088 break;
4089 case 266:
4090#line 993 "Parser.rl"
4091 {te = p;p--;{
4092 throw LocatedParseError("Value in \\o{...} sequence is non-octal or missing braces");
4093 }}
4094 break;
4095 case 267:
4096#line 998 "Parser.rl"
4097 {te = p;p--;{
4098 currentCls->add(accumulator);
4099 }}
4100 break;
4101 case 268:
4102#line 1022 "Parser.rl"
4103 {te = p;p--;{
4104 throw LocatedParseError("Value in \\x{...} sequence is non-hex or missing }");
4105 }}
4106 break;
4107 case 269:
4108#line 1026 "Parser.rl"
4109 {te = p;p--;{
4110 if (te - ts < 3) {
4111 assert(te - ts == 2);
4112 throw LocatedParseError(SLASH_C_ERROR);
4113 } else {
4114 assert(te - ts == 3);
4115 currentCls->add(decodeCtrl(ts[2]));
4116 }
4117 }}
4118 break;
4119 case 270:
4120#line 1097 "Parser.rl"
4121 {te = p;p--;{
4122 assert(mode.utf8);
4123 throwInvalidUtf8();
4124 }}
4125 break;
4126 case 271:
4127#line 1103 "Parser.rl"
4128 {te = p;p--;{
4129 currentCls->add((u8)*ts);
4130 }}
4131 break;
4132 case 272:
4133#line 993 "Parser.rl"
4134 {{p = ((te))-1;}{
4135 throw LocatedParseError("Value in \\o{...} sequence is non-octal or missing braces");
4136 }}
4137 break;
4138 case 273:
4139#line 1022 "Parser.rl"
4140 {{p = ((te))-1;}{
4141 throw LocatedParseError("Value in \\x{...} sequence is non-hex or missing }");
4142 }}
4143 break;
4144 case 274:
4145#line 1097 "Parser.rl"
4146 {{p = ((te))-1;}{
4147 assert(mode.utf8);
4148 throwInvalidUtf8();
4149 }}
4150 break;
4151 case 275:
4152#line 1103 "Parser.rl"
4153 {{p = ((te))-1;}{
4154 currentCls->add((u8)*ts);
4155 }}
4156 break;
4157 case 276:
4158#line 1121 "Parser.rl"
4159 {te = p+1;{
4160 if (currentCls->isNegated()) {
4161 // Already seen a caret; the second one is not a meta-character.
4162 inCharClassEarly = false;
4163 p--; {cs = 819; goto _again;}
4164 } else {
4165 currentCls->negate();
4166 // Note: we cannot switch off inCharClassEarly here, as /[^]]/
4167 // needs to use the right square bracket path below.
4168 }
4169 }}
4170 break;
4171 case 277:
4172#line 1134 "Parser.rl"
4173 {te = p+1;{
4174 currentCls->add(']');
4175 inCharClassEarly = false;
4176 }}
4177 break;
4178 case 278:
4179#line 1139 "Parser.rl"
4180 {te = p+1;{ {
4181 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4182 if ((int)stack.size() == top) {
4183 stack.resize(2 * (top + 1));
4184 }
4185 {stack[top++] = cs; cs = 843; goto _again;}} }}
4186 break;
4187 case 279:
4188#line 1140 "Parser.rl"
4189 {te = p+1;{ /*noop*/}}
4190 break;
4191 case 280:
4192#line 1143 "Parser.rl"
4193 {te = p+1;{
4194 inCharClassEarly = false;
4195 p--;
4196 {cs = 819; goto _again;}
4197 }}
4198 break;
4199 case 281:
4200#line 1143 "Parser.rl"
4201 {te = p;p--;{
4202 inCharClassEarly = false;
4203 p--;
4204 {cs = 819; goto _again;}
4205 }}
4206 break;
4207 case 282:
4208#line 1155 "Parser.rl"
4209 {te = p+1;{
4210 {cs = 746; goto _again;}
4211 }}
4212 break;
4213 case 283:
4214#line 1160 "Parser.rl"
4215 {te = p+1;{
4216 assert(mode.utf8);
4217 /* leverage ComponentClass to generate the vertices */
4218 auto cc = getComponentClass(mode);
4219 cc->add(readUtf8CodePoint2c(ts));
4220 cc->finalize();
4221 currentSeq->addComponent(move(cc));
4222 }}
4223 break;
4224 case 284:
4225#line 1169 "Parser.rl"
4226 {te = p+1;{
4227 assert(mode.utf8);
4228 /* leverage ComponentClass to generate the vertices */
4229 auto cc = getComponentClass(mode);
4230 cc->add(readUtf8CodePoint3c(ts));
4231 cc->finalize();
4232 currentSeq->addComponent(move(cc));
4233 }}
4234 break;
4235 case 285:
4236#line 1178 "Parser.rl"
4237 {te = p+1;{
4238 assert(mode.utf8);
4239 /* leverage ComponentClass to generate the vertices */
4240 auto cc = getComponentClass(mode);
4241 cc->add(readUtf8CodePoint4c(ts));
4242 cc->finalize();
4243 currentSeq->addComponent(move(cc));
4244 }}
4245 break;
4246 case 286:
4247#line 1187 "Parser.rl"
4248 {te = p+1;{
4249 assert(mode.utf8);
4250 throwInvalidUtf8();
4251 }}
4252 break;
4253 case 287:
4254#line 1193 "Parser.rl"
4255 {te = p+1;{
4256 addLiteral(currentSeq, *ts, mode);
4257 }}
4258 break;
4259 case 288:
4260#line 1187 "Parser.rl"
4261 {te = p;p--;{
4262 assert(mode.utf8);
4263 throwInvalidUtf8();
4264 }}
4265 break;
4266 case 289:
4267#line 1193 "Parser.rl"
4268 {te = p;p--;{
4269 addLiteral(currentSeq, *ts, mode);
4270 }}
4271 break;
4272 case 290:
4273#line 1187 "Parser.rl"
4274 {{p = ((te))-1;}{
4275 assert(mode.utf8);
4276 throwInvalidUtf8();
4277 }}
4278 break;
4279 case 291:
4280#line 1203 "Parser.rl"
4281 {te = p+1;{
4282 {cs = stack[--top]; goto _again;}
4283 }}
4284 break;
4285 case 292:
4286#line 1208 "Parser.rl"
4287 {te = p+1;{
4288 assert(mode.utf8);
4289 currentCls->add(readUtf8CodePoint2c(ts));
4290 inCharClassEarly = false;
4291 }}
4292 break;
4293 case 293:
4294#line 1214 "Parser.rl"
4295 {te = p+1;{
4296 assert(mode.utf8);
4297 currentCls->add(readUtf8CodePoint3c(ts));
4298 inCharClassEarly = false;
4299 }}
4300 break;
4301 case 294:
4302#line 1220 "Parser.rl"
4303 {te = p+1;{
4304 assert(mode.utf8);
4305 currentCls->add(readUtf8CodePoint4c(ts));
4306 inCharClassEarly = false;
4307 }}
4308 break;
4309 case 295:
4310#line 1226 "Parser.rl"
4311 {te = p+1;{
4312 assert(mode.utf8);
4313 throwInvalidUtf8();
4314 }}
4315 break;
4316 case 296:
4317#line 1232 "Parser.rl"
4318 {te = p+1;{
4319 currentCls->add(*ts);
4320 inCharClassEarly = false;
4321 }}
4322 break;
4323 case 297:
4324#line 1226 "Parser.rl"
4325 {te = p;p--;{
4326 assert(mode.utf8);
4327 throwInvalidUtf8();
4328 }}
4329 break;
4330 case 298:
4331#line 1232 "Parser.rl"
4332 {te = p;p--;{
4333 currentCls->add(*ts);
4334 inCharClassEarly = false;
4335 }}
4336 break;
4337 case 299:
4338#line 1226 "Parser.rl"
4339 {{p = ((te))-1;}{
4340 assert(mode.utf8);
4341 throwInvalidUtf8();
4342 }}
4343 break;
4344 case 300:
4345#line 1244 "Parser.rl"
4346 {te = p+1;{ inComment = false; {cs = 746; goto _again;} }}
4347 break;
4348 case 301:
4349#line 1248 "Parser.rl"
4350 {te = p+1;}
4351 break;
4352 case 302:
4353#line 1256 "Parser.rl"
4354 {te = p+1;{ inComment = false; {cs = 746; goto _again;} }}
4355 break;
4356 case 303:
4357#line 1260 "Parser.rl"
4358 {te = p+1;}
4359 break;
4360 case 304:
4361#line 1492 "Parser.rl"
4362 {act = 288;}
4363 break;
4364 case 305:
4365#line 1509 "Parser.rl"
4366 {act = 290;}
4367 break;
4368 case 306:
4369#line 1738 "Parser.rl"
4370 {act = 330;}
4371 break;
4372 case 307:
4373#line 363 "Parser.rl"
4374 {te = p+1;{
4375 if (sequences.empty()) {
4376 throw LocatedParseError("Unmatched parentheses");
4377 }
4378 currentSeq->finalize();
4379 POP_SEQUENCE;
4380 }}
4381 break;
4382 case 308:
4383#line 1275 "Parser.rl"
4384 {te = p+1;{
4385 currentSeq->addAlternation();
4386 }}
4387 break;
4388 case 309:
4389#line 1280 "Parser.rl"
4390 {te = p+1;{
4391 throw LocatedParseError("POSIX named classes are only "
4392 "supported inside a class");
4393 }}
4394 break;
4395 case 310:
4396#line 1287 "Parser.rl"
4397 {te = p+1;{
4398 throw LocatedParseError("Unsupported POSIX collating "
4399 "element");
4400 }}
4401 break;
4402 case 311:
4403#line 1294 "Parser.rl"
4404 {te = p+1;{
4405 {cs = 838; goto _again;}
4406 }}
4407 break;
4408 case 312:
4409#line 1298 "Parser.rl"
4410 {te = p+1;{ /* noop */ }}
4411 break;
4412 case 313:
4413#line 1300 "Parser.rl"
4414 {te = p+1;{
4415 currentSeq->addComponent(generateComponent(CLASS_ANY, false, mode));
4416 }}
4417 break;
4418 case 314:
4419#line 1304 "Parser.rl"
4420 {te = p+1;{
4421 if (mode.utf8) {
4422 throw LocatedParseError("\\C is unsupported in UTF8");
4423 }
4424 currentSeq->addComponent(ue2::make_unique<ComponentByte>());
4425 }}
4426 break;
4427 case 315:
4428#line 1318 "Parser.rl"
4429 {te = p+1;{
4430 if (!currentSeq->addRepeat(0, ComponentRepeat::NoLimit,
4431 ComponentRepeat::REPEAT_NONGREEDY)) {
4432 throwInvalidRepeat();
4433 }
4434 }}
4435 break;
4436 case 316:
4437#line 1325 "Parser.rl"
4438 {te = p+1;{
4439 if (!currentSeq->addRepeat(0, ComponentRepeat::NoLimit,
4440 ComponentRepeat::REPEAT_POSSESSIVE)) {
4441 throwInvalidRepeat();
4442 }
4443 }}
4444 break;
4445 case 317:
4446#line 1339 "Parser.rl"
4447 {te = p+1;{
4448 if (!currentSeq->addRepeat(1, ComponentRepeat::NoLimit,
4449 ComponentRepeat::REPEAT_NONGREEDY)) {
4450 throwInvalidRepeat();
4451 }
4452 }}
4453 break;
4454 case 318:
4455#line 1346 "Parser.rl"
4456 {te = p+1;{
4457 if (!currentSeq->addRepeat(1, ComponentRepeat::NoLimit,
4458 ComponentRepeat::REPEAT_POSSESSIVE)) {
4459 throwInvalidRepeat();
4460 }
4461 }}
4462 break;
4463 case 319:
4464#line 1360 "Parser.rl"
4465 {te = p+1;{
4466 if (!currentSeq->addRepeat(
4467 0, 1, ComponentRepeat::REPEAT_NONGREEDY)) {
4468 throwInvalidRepeat();
4469 }
4470 }}
4471 break;
4472 case 320:
4473#line 1367 "Parser.rl"
4474 {te = p+1;{
4475 if (!currentSeq->addRepeat(
4476 0, 1, ComponentRepeat::REPEAT_POSSESSIVE)) {
4477 throwInvalidRepeat();
4478 }
4479 }}
4480 break;
4481 case 321:
4482#line 1384 "Parser.rl"
4483 {te = p+1;{
4484 if (repeatN > repeatM || repeatM == 0) {
4485 throwInvalidRepeat();
4486 } else if (!currentSeq->addRepeat(
4487 repeatN, repeatM,
4488 ComponentRepeat::REPEAT_NONGREEDY)) {
4489 throwInvalidRepeat();
4490 }
4491 }}
4492 break;
4493 case 322:
4494#line 1394 "Parser.rl"
4495 {te = p+1;{
4496 if (repeatN > repeatM || repeatM == 0) {
4497 throwInvalidRepeat();
4498 } else if (!currentSeq->addRepeat(
4499 repeatN, repeatM,
4500 ComponentRepeat::REPEAT_POSSESSIVE)) {
4501 throwInvalidRepeat();
4502 }
4503 }}
4504 break;
4505 case 323:
4506#line 323 "Parser.rl"
4507 {te = p+1;{
4508 inComment = true;
4509 {cs = 849; goto _again;}
4510 }}
4511 break;
4512 case 324:
4513#line 1411 "Parser.rl"
4514 {te = p+1;{ p--; {
4515 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4516 if ((int)stack.size() == top) {
4517 stack.resize(2 * (top + 1));
4518 }
4519 {stack[top++] = cs; cs = 787; goto _again;}} }}
4520 break;
4521 case 325:
4522#line 1415 "Parser.rl"
4523 {te = p+1;{ assert(0); {p++; goto _out; } }}
4524 break;
4525 case 326:
4526#line 1422 "Parser.rl"
4527 {te = p+1;{
4528 auto bound = mode.multiline ? ComponentBoundary::BEGIN_LINE
4529 : ComponentBoundary::BEGIN_STRING;
4530 currentSeq->addComponent(ue2::make_unique<ComponentBoundary>(bound));
4531 }}
4532 break;
4533 case 327:
4534#line 1429 "Parser.rl"
4535 {te = p+1;{
4536 auto bound = mode.multiline ? ComponentBoundary::END_LINE
4537 : ComponentBoundary::END_STRING_OPTIONAL_LF;
4538 currentSeq->addComponent(ue2::make_unique<ComponentBoundary>(bound));
4539 }}
4540 break;
4541 case 328:
4542#line 1435 "Parser.rl"
4543 {te = p+1;{
4544 auto bound = ComponentBoundary::BEGIN_STRING;
4545 currentSeq->addComponent(ue2::make_unique<ComponentBoundary>(bound));
4546 }}
4547 break;
4548 case 329:
4549#line 1440 "Parser.rl"
4550 {te = p+1;{
4551 auto bound = ComponentBoundary::END_STRING_OPTIONAL_LF;
4552 currentSeq->addComponent(ue2::make_unique<ComponentBoundary>(bound));
4553 }}
4554 break;
4555 case 330:
4556#line 1445 "Parser.rl"
4557 {te = p+1;{
4558 auto bound = ComponentBoundary::END_STRING;
4559 currentSeq->addComponent(ue2::make_unique<ComponentBoundary>(bound));
4560 }}
4561 break;
4562 case 331:
4563#line 1450 "Parser.rl"
4564 {te = p+1;{
4565 currentSeq->addComponent(
4566 ue2::make_unique<ComponentWordBoundary>(ts - ptr, false, mode));
4567 }}
4568 break;
4569 case 332:
4570#line 1455 "Parser.rl"
4571 {te = p+1;{
4572 currentSeq->addComponent(
4573 ue2::make_unique<ComponentWordBoundary>(ts - ptr, true, mode));
4574 }}
4575 break;
4576 case 333:
4577#line 1465 "Parser.rl"
4578 {te = p+1;{
4579 addLiteral(currentSeq, '\x09', mode);
4580 }}
4581 break;
4582 case 334:
4583#line 1469 "Parser.rl"
4584 {te = p+1;{
4585 addLiteral(currentSeq, '\x0a', mode);
4586 }}
4587 break;
4588 case 335:
4589#line 1473 "Parser.rl"
4590 {te = p+1;{
4591 addLiteral(currentSeq, '\x0d', mode);
4592 }}
4593 break;
4594 case 336:
4595#line 1477 "Parser.rl"
4596 {te = p+1;{
4597 addLiteral(currentSeq, '\x0c', mode);
4598 }}
4599 break;
4600 case 337:
4601#line 1481 "Parser.rl"
4602 {te = p+1;{
4603 addLiteral(currentSeq, '\x07', mode);
4604 }}
4605 break;
4606 case 338:
4607#line 1485 "Parser.rl"
4608 {te = p+1;{
4609 addLiteral(currentSeq, '\x1b', mode);
4610 }}
4611 break;
4612 case 339:
4613#line 1489 "Parser.rl"
4614 {te = p+1;{
4615 addLiteral(currentSeq, octAccumulator, mode);
4616 }}
4617 break;
4618 case 340:
4619#line 480 "Parser.rl"
4620 {te = p+1;{
4621 if (accumulator == 0) {
4622 throw LocatedParseError("Numbered reference cannot be zero");
4623 }
4624 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
4625 }}
4626 break;
4627 case 341:
4628#line 487 "Parser.rl"
4629 {te = p+1;{
4630 // Accumulator is a negative offset.
4631 if (accumulator == 0) {
4632 throw LocatedParseError("Numbered reference cannot be zero");
4633 }
4634 if (accumulator >= groupIndex) {
4635 throw LocatedParseError("Invalid reference");
4636 }
4637 unsigned idx = groupIndex - accumulator;
4638 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(idx));
4639 }}
4640 break;
4641 case 342:
4642#line 480 "Parser.rl"
4643 {te = p+1;{
4644 if (accumulator == 0) {
4645 throw LocatedParseError("Numbered reference cannot be zero");
4646 }
4647 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
4648 }}
4649 break;
4650 case 343:
4651#line 487 "Parser.rl"
4652 {te = p+1;{
4653 // Accumulator is a negative offset.
4654 if (accumulator == 0) {
4655 throw LocatedParseError("Numbered reference cannot be zero");
4656 }
4657 if (accumulator >= groupIndex) {
4658 throw LocatedParseError("Invalid reference");
4659 }
4660 unsigned idx = groupIndex - accumulator;
4661 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(idx));
4662 }}
4663 break;
4664 case 344:
4665#line 499 "Parser.rl"
4666 {te = p+1;{
4667 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(label));
4668 }}
4669 break;
4670 case 345:
4671#line 499 "Parser.rl"
4672 {te = p+1;{
4673 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(label));
4674 }}
4675 break;
4676 case 346:
4677#line 499 "Parser.rl"
4678 {te = p+1;{
4679 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(label));
4680 }}
4681 break;
4682 case 347:
4683#line 499 "Parser.rl"
4684 {te = p+1;{
4685 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(label));
4686 }}
4687 break;
4688 case 348:
4689#line 499 "Parser.rl"
4690 {te = p+1;{
4691 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(label));
4692 }}
4693 break;
4694 case 349:
4695#line 1550 "Parser.rl"
4696 {te = p+1;{
4697 ostringstream str;
4698 str << "Onigiruma subroutine call at index " << ts - ptr <<
4699 " not supported.";
4700 throw ParseError(str.str());
4701 }}
4702 break;
4703 case 350:
4704#line 1561 "Parser.rl"
4705 {te = p+1;{
4706 string oct(ts + 3, te - ts - 4);
4707 unsigned long val;
4708 try {
4709 val = stoul(oct, nullptr, 8);
4710 } catch (const std::out_of_range &) {
4711 val = MAX_UNICODE + 1;
4712 }
4713 if ((!mode.utf8 && val > 255) || val > MAX_UNICODE) {
4714 throw LocatedParseError("Value in \\o{...} sequence is too large");
4715 }
4716 addEscapedOctal(currentSeq, (unichar)val, mode);
4717 }}
4718 break;
4719 case 351:
4720#line 1579 "Parser.rl"
4721 {te = p+1;{
4722 addEscapedHex(currentSeq, accumulator, mode);
4723 }}
4724 break;
4725 case 352:
4726#line 1583 "Parser.rl"
4727 {te = p+1;{
4728 string hex(ts + 3, te - ts - 4);
4729 unsigned long val;
4730 try {
4731 val = stoul(hex, nullptr, 16);
4732 } catch (const std::out_of_range &) {
4733 val = MAX_UNICODE + 1;
4734 }
4735 if (val > MAX_UNICODE) {
4736 throw LocatedParseError("Value in \\x{...} sequence is too large");
4737 }
4738 addEscapedHex(currentSeq, (unichar)val, mode);
4739 }}
4740 break;
4741 case 353:
4742#line 1601 "Parser.rl"
4743 {te = p+1;{
4744 if (te - ts < 3) {
4745 assert(te - ts == 2);
4746 throw LocatedParseError(SLASH_C_ERROR);
4747 } else {
4748 assert(te - ts == 3);
4749 addLiteral(currentSeq, decodeCtrl(ts[2]), mode);
4750 }
4751 }}
4752 break;
4753 case 354:
4754#line 1611 "Parser.rl"
4755 {te = p+1;{
4756 ostringstream str;
4757 str << "'\\" << *(ts + 1) << "' at index " << ts - ptr
4758 << " not supported.";
4759 throw ParseError(str.str());
4760 }}
4761 break;
4762 case 355:
4763#line 1619 "Parser.rl"
4764 {te = p+1;{
4765 auto cc = generateComponent(CLASS_WORD, false, mode);
4766 currentSeq->addComponent(move(cc));
4767 }}
4768 break;
4769 case 356:
4770#line 1624 "Parser.rl"
4771 {te = p+1;{
4772 auto cc = generateComponent(CLASS_WORD, true, mode);
4773 currentSeq->addComponent(move(cc));
4774 }}
4775 break;
4776 case 357:
4777#line 1629 "Parser.rl"
4778 {te = p+1;{
4779 auto cc = generateComponent(CLASS_SPACE, false, mode);
4780 currentSeq->addComponent(move(cc));
4781 }}
4782 break;
4783 case 358:
4784#line 1634 "Parser.rl"
4785 {te = p+1;{
4786 auto cc = generateComponent(CLASS_SPACE, true, mode);
4787 currentSeq->addComponent(move(cc));
4788 }}
4789 break;
4790 case 359:
4791#line 1639 "Parser.rl"
4792 {te = p+1;{
4793 auto cc = generateComponent(CLASS_DIGIT, false, mode);
4794 currentSeq->addComponent(move(cc));
4795 }}
4796 break;
4797 case 360:
4798#line 1644 "Parser.rl"
4799 {te = p+1;{
4800 auto cc = generateComponent(CLASS_DIGIT, true, mode);
4801 currentSeq->addComponent(move(cc));
4802 }}
4803 break;
4804 case 361:
4805#line 1649 "Parser.rl"
4806 {te = p+1;{
4807 auto cc = generateComponent(CLASS_HORZ, false, mode);
4808 currentSeq->addComponent(move(cc));
4809 }}
4810 break;
4811 case 362:
4812#line 1654 "Parser.rl"
4813 {te = p+1;{
4814 auto cc = generateComponent(CLASS_HORZ, true, mode);
4815 currentSeq->addComponent(move(cc));
4816 }}
4817 break;
4818 case 363:
4819#line 1659 "Parser.rl"
4820 {te = p+1;{
4821 auto cc = generateComponent(CLASS_VERT, false, mode);
4822 currentSeq->addComponent(move(cc));
4823 }}
4824 break;
4825 case 364:
4826#line 1664 "Parser.rl"
4827 {te = p+1;{
4828 auto cc = generateComponent(CLASS_VERT, true, mode);
4829 currentSeq->addComponent(move(cc));
4830 }}
4831 break;
4832 case 365:
4833#line 1669 "Parser.rl"
4834 {te = p+1;{
4835 assert(!currentCls && !inCharClass);
4836 currentCls = getComponentClass(mode);
4837 negated = false;
4838 p--;
4839 {
4840 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4841 if ((int)stack.size() == top) {
4842 stack.resize(2 * (top + 1));
4843 }
4844 {stack[top++] = cs; cs = 559; goto _again;}}
4845 }}
4846 break;
4847 case 366:
4848#line 1677 "Parser.rl"
4849 {te = p+1;{
4850 assert(!currentCls && !inCharClass);
4851 currentCls = getComponentClass(mode);
4852 negated = false;
4853 p--;
4854 {
4855 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4856 if ((int)stack.size() == top) {
4857 stack.resize(2 * (top + 1));
4858 }
4859 {stack[top++] = cs; cs = 818; goto _again;}}
4860 }}
4861 break;
4862 case 367:
4863#line 1685 "Parser.rl"
4864 {te = p+1;{
4865 assert(!currentCls && !inCharClass);
4866 currentCls = getComponentClass(mode);
4867 negated = true;
4868 p--;
4869 {
4870 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4871 if ((int)stack.size() == top) {
4872 stack.resize(2 * (top + 1));
4873 }
4874 {stack[top++] = cs; cs = 559; goto _again;}}
4875 }}
4876 break;
4877 case 368:
4878#line 1693 "Parser.rl"
4879 {te = p+1;{
4880 assert(!currentCls && !inCharClass);
4881 currentCls = getComponentClass(mode);
4882 negated = true;
4883 p--;
4884 {
4885 DEBUG_PRINTF("stack %zu top %d\n", stack.size(), top);
4886 if ((int)stack.size() == top) {
4887 stack.resize(2 * (top + 1));
4888 }
4889 {stack[top++] = cs; cs = 818; goto _again;}}
4890 }}
4891 break;
4892 case 369:
4893#line 1705 "Parser.rl"
4894 {te = p+1;{
4895 ostringstream str;
4896 str << "\\R at index " << ts - ptr << " not supported.";
4897 throw ParseError(str.str());
4898 }}
4899 break;
4900 case 370:
4901#line 1712 "Parser.rl"
4902 {te = p+1;{
4903 ostringstream str;
4904 str << "\\K at index " << ts - ptr << " not supported.";
4905 throw ParseError(str.str());
4906 }}
4907 break;
4908 case 371:
4909#line 1727 "Parser.rl"
4910 {te = p+1;{
4911 ostringstream str;
4912 str << "\\G at index " << ts - ptr << " not supported.";
4913 throw ParseError(str.str());
4914 }}
4915 break;
4916 case 372:
4917#line 1733 "Parser.rl"
4918 {te = p+1;{
4919 currentSeq->addComponent(ue2::make_unique<ComponentEUS>(ts - ptr, mode));
4920 }}
4921 break;
4922 case 373:
4923#line 1738 "Parser.rl"
4924 {te = p+1;{
4925 addLiteral(currentSeq, *(ts + 1), mode);
4926 }}
4927 break;
4928 case 374:
4929#line 317 "Parser.rl"
4930 {te = p+1;{
4931 inComment = true;
4932 {cs = 848; goto _again;}
4933 }}
4934 break;
4935 case 375:
4936#line 434 "Parser.rl"
4937 {te = p+1;{
4938 mode = newMode;
4939 currentSeq->addComponent(ue2::make_unique<ComponentEmpty>());
4940 }}
4941 break;
4942 case 376:
4943#line 356 "Parser.rl"
4944 {te = p+1;{
4945 PUSH_SEQUENCE;
4946 mode = newMode;
4947 currentSeq =
4948 enterSequence(currentSeq, ue2::make_unique<ComponentSequence>());
4949 }}
4950 break;
4951 case 377:
4952#line 370 "Parser.rl"
4953 {te = p+1;{
4954 PUSH_SEQUENCE;
4955 currentSeq = enterSequence(currentSeq,
4956 ue2::make_unique<ComponentAssertion>(ComponentAssertion::LOOKAHEAD,
4957 ComponentAssertion::POS));
4958 }}
4959 break;
4960 case 378:
4961#line 376 "Parser.rl"
4962 {te = p+1;{
4963 PUSH_SEQUENCE;
4964 currentSeq = enterSequence(currentSeq,
4965 ue2::make_unique<ComponentAssertion>(ComponentAssertion::LOOKAHEAD,
4966 ComponentAssertion::NEG));
4967 }}
4968 break;
4969 case 379:
4970#line 382 "Parser.rl"
4971 {te = p+1;{
4972 PUSH_SEQUENCE;
4973 currentSeq = enterSequence(currentSeq,
4974 ue2::make_unique<ComponentAssertion>(ComponentAssertion::LOOKBEHIND,
4975 ComponentAssertion::POS));
4976 }}
4977 break;
4978 case 380:
4979#line 388 "Parser.rl"
4980 {te = p+1;{
4981 PUSH_SEQUENCE;
4982 currentSeq = enterSequence(currentSeq,
4983 ue2::make_unique<ComponentAssertion>(ComponentAssertion::LOOKBEHIND,
4984 ComponentAssertion::NEG));
4985 }}
4986 break;
4987 case 381:
4988#line 394 "Parser.rl"
4989 {te = p+1;{
4990 throw LocatedParseError("Embedded code is not supported");
4991 }}
4992 break;
4993 case 382:
4994#line 394 "Parser.rl"
4995 {te = p+1;{
4996 throw LocatedParseError("Embedded code is not supported");
4997 }}
4998 break;
4999 case 383:
5000#line 417 "Parser.rl"
5001 {te = p+1;{
5002 PUSH_SEQUENCE;
5003 currentSeq = enterSequence(currentSeq,
5004 ue2::make_unique<ComponentAtomicGroup>());
5005 }}
5006 break;
5007 case 384:
5008#line 337 "Parser.rl"
5009 {te = p+1;{
5010 assert(!label.empty()); // should be guaranteed by machine
5011 char c = *label.begin();
5012 if (c >= '0' && c <= '9') {
5013 throw LocatedParseError("Group name cannot begin with a digit");
5014 }
5015 if (!groupNames.insert(label).second) {
5016 throw LocatedParseError("Two named subpatterns use the name '" + label + "'");
5017 }
5018 PUSH_SEQUENCE;
5019 auto seq = ue2::make_unique<ComponentSequence>();
5020 seq->setCaptureIndex(groupIndex++);
5021 seq->setCaptureName(label);
5022 currentSeq = enterSequence(currentSeq, move(seq));
5023 }}
5024 break;
5025 case 385:
5026#line 400 "Parser.rl"
5027 {te = p+1;{
5028 throw LocatedParseError("Subpattern reference unsupported");
5029 }}
5030 break;
5031 case 386:
5032#line 400 "Parser.rl"
5033 {te = p+1;{
5034 throw LocatedParseError("Subpattern reference unsupported");
5035 }}
5036 break;
5037 case 387:
5038#line 1784 "Parser.rl"
5039 {te = p+1;{
5040 auto a = ue2::make_unique<ComponentAssertion>(
5041 ComponentAssertion::LOOKAHEAD, ComponentAssertion::POS);
5042 ComponentAssertion *a_seq = a.get();
5043 PUSH_SEQUENCE;
5044 currentSeq = enterSequence(currentSeq,
5045 ue2::make_unique<ComponentCondReference>(move(a)));
5046 PUSH_SEQUENCE;
5047 currentSeq = a_seq;
5048 }}
5049 break;
5050 case 388:
5051#line 1795 "Parser.rl"
5052 {te = p+1;{
5053 auto a = ue2::make_unique<ComponentAssertion>(
5054 ComponentAssertion::LOOKAHEAD, ComponentAssertion::NEG);
5055 ComponentAssertion *a_seq = a.get();
5056 PUSH_SEQUENCE;
5057 currentSeq = enterSequence(currentSeq,
5058 ue2::make_unique<ComponentCondReference>(move(a)));
5059 PUSH_SEQUENCE;
5060 currentSeq = a_seq;
5061 }}
5062 break;
5063 case 389:
5064#line 1806 "Parser.rl"
5065 {te = p+1;{
5066 auto a = ue2::make_unique<ComponentAssertion>(
5067 ComponentAssertion::LOOKBEHIND, ComponentAssertion::POS);
5068 ComponentAssertion *a_seq = a.get();
5069 PUSH_SEQUENCE;
5070 currentSeq = enterSequence(currentSeq,
5071 ue2::make_unique<ComponentCondReference>(move(a)));
5072 PUSH_SEQUENCE;
5073 currentSeq = a_seq;
5074 }}
5075 break;
5076 case 390:
5077#line 1817 "Parser.rl"
5078 {te = p+1;{
5079 auto a = ue2::make_unique<ComponentAssertion>(
5080 ComponentAssertion::LOOKBEHIND, ComponentAssertion::NEG);
5081 ComponentAssertion *a_seq = a.get();
5082 PUSH_SEQUENCE;
5083 currentSeq = enterSequence(currentSeq,
5084 ue2::make_unique<ComponentCondReference>(move(a)));
5085 PUSH_SEQUENCE;
5086 currentSeq = a_seq;
5087 }}
5088 break;
5089 case 391:
5090#line 1829 "Parser.rl"
5091 {te = p+1;{
5092 throw LocatedParseError("Pattern recursion not supported");
5093 }}
5094 break;
5095 case 392:
5096#line 403 "Parser.rl"
5097 {te = p+1;{
5098 if (accumulator == 0) {
5099 throw LocatedParseError("Numbered reference cannot be zero");
5100 }
5101 PUSH_SEQUENCE;
5102 currentSeq = enterSequence(currentSeq,
5103 ue2::make_unique<ComponentCondReference>(accumulator));
5104 }}
5105 break;
5106 case 393:
5107#line 411 "Parser.rl"
5108 {te = p+1;{
5109 PUSH_SEQUENCE;
5110 assert(!label.empty());
5111 currentSeq = enterSequence(currentSeq,
5112 ue2::make_unique<ComponentCondReference>(label));
5113 }}
5114 break;
5115 case 394:
5116#line 1845 "Parser.rl"
5117 {te = p+1;{
5118 ostringstream str;
5119 str << "Callout at index " << ts - ptr << " not supported.";
5120 throw ParseError(str.str());
5121 }}
5122 break;
5123 case 395:
5124#line 1853 "Parser.rl"
5125 {te = p+1;{
5126 throw LocatedParseError("Unrecognised character after (?");
5127 }}
5128 break;
5129 case 396:
5130#line 1858 "Parser.rl"
5131 {te = p+1;{
5132 assert(mode.utf8);
5133 /* leverage ComponentClass to generate the vertices */
5134 auto cc = getComponentClass(mode);
5135 cc->add(readUtf8CodePoint2c(ts));
5136 cc->finalize();
5137 currentSeq->addComponent(move(cc));
5138 }}
5139 break;
5140 case 397:
5141#line 1867 "Parser.rl"
5142 {te = p+1;{
5143 assert(mode.utf8);
5144 /* leverage ComponentClass to generate the vertices */
5145 auto cc = getComponentClass(mode);
5146 cc->add(readUtf8CodePoint3c(ts));
5147 cc->finalize();
5148 currentSeq->addComponent(move(cc));
5149 }}
5150 break;
5151 case 398:
5152#line 1876 "Parser.rl"
5153 {te = p+1;{
5154 assert(mode.utf8);
5155 /* leverage ComponentClass to generate the vertices */
5156 auto cc = getComponentClass(mode);
5157 cc->add(readUtf8CodePoint4c(ts));
5158 cc->finalize();
5159 currentSeq->addComponent(move(cc));
5160 }}
5161 break;
5162 case 399:
5163#line 1885 "Parser.rl"
5164 {te = p+1;{
5165 assert(mode.utf8);
5166 throwInvalidUtf8();
5167 }}
5168 break;
5169 case 400:
5170#line 1894 "Parser.rl"
5171 {te = p+1;{
5172 if (mode.ignore_space == false) {
5173 addLiteral(currentSeq, *ts, mode);
5174 }
5175 }}
5176 break;
5177 case 401:
5178#line 1899 "Parser.rl"
5179 {te = p+1;{
5180 addLiteral(currentSeq, *ts, mode);
5181 }}
5182 break;
5183 case 402:
5184#line 329 "Parser.rl"
5185 {te = p;p--;{
5186 PUSH_SEQUENCE;
5187 auto seq = ue2::make_unique<ComponentSequence>();
5188 seq->setCaptureIndex(groupIndex++);
5189 currentSeq = enterSequence(currentSeq, move(seq));
5190 }}
5191 break;
5192 case 403:
5193#line 422 "Parser.rl"
5194 {te = p;p--;{
5195 assert(!currentCls);
5196 assert(!inCharClass); // not reentrant
5197 currentCls = getComponentClass(mode);
5198 inCharClass = true;
5199 inCharClassEarly = true;
5200 currentClsBegin = ts;
5201 {cs = 836; goto _again;}
5202 }}
5203 break;
5204 case 404:
5205#line 1311 "Parser.rl"
5206 {te = p;p--;{
5207 if (!currentSeq->addRepeat(0, ComponentRepeat::NoLimit,
5208 ComponentRepeat::REPEAT_GREEDY)) {
5209 throwInvalidRepeat();
5210 }
5211 }}
5212 break;
5213 case 405:
5214#line 1332 "Parser.rl"
5215 {te = p;p--;{
5216 if (!currentSeq->addRepeat(1, ComponentRepeat::NoLimit,
5217 ComponentRepeat::REPEAT_GREEDY)) {
5218 throwInvalidRepeat();
5219 }
5220 }}
5221 break;
5222 case 406:
5223#line 1353 "Parser.rl"
5224 {te = p;p--;{
5225 if (!currentSeq->addRepeat(
5226 0, 1, ComponentRepeat::REPEAT_GREEDY)) {
5227 throwInvalidRepeat();
5228 }
5229 }}
5230 break;
5231 case 407:
5232#line 1374 "Parser.rl"
5233 {te = p;p--;{
5234 if (repeatN > repeatM || repeatM == 0) {
5235 throwInvalidRepeat();
5236 } else if (!currentSeq->addRepeat(
5237 repeatN, repeatM,
5238 ComponentRepeat::REPEAT_GREEDY)) {
5239 throwInvalidRepeat();
5240 }
5241 }}
5242 break;
5243 case 408:
5244#line 1489 "Parser.rl"
5245 {te = p;p--;{
5246 addLiteral(currentSeq, octAccumulator, mode);
5247 }}
5248 break;
5249 case 409:
5250#line 1492 "Parser.rl"
5251 {te = p;p--;{
5252 // If there are enough capturing sub expressions, this may be
5253 // a back reference
5254 accumulator = parseAsDecimal(octAccumulator);
5255 if (accumulator < groupIndex) {
5256 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
5257 } else {
5258 addEscapedOctal(currentSeq, octAccumulator, mode);
5259 }
5260 }}
5261 break;
5262 case 410:
5263#line 480 "Parser.rl"
5264 {te = p;p--;{
5265 if (accumulator == 0) {
5266 throw LocatedParseError("Numbered reference cannot be zero");
5267 }
5268 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
5269 }}
5270 break;
5271 case 411:
5272#line 480 "Parser.rl"
5273 {te = p;p--;{
5274 if (accumulator == 0) {
5275 throw LocatedParseError("Numbered reference cannot be zero");
5276 }
5277 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
5278 }}
5279 break;
5280 case 412:
5281#line 487 "Parser.rl"
5282 {te = p;p--;{
5283 // Accumulator is a negative offset.
5284 if (accumulator == 0) {
5285 throw LocatedParseError("Numbered reference cannot be zero");
5286 }
5287 if (accumulator >= groupIndex) {
5288 throw LocatedParseError("Invalid reference");
5289 }
5290 unsigned idx = groupIndex - accumulator;
5291 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(idx));
5292 }}
5293 break;
5294 case 413:
5295#line 1558 "Parser.rl"
5296 {te = p;p--;{
5297 throw LocatedParseError("Invalid reference after \\g");
5298 }}
5299 break;
5300 case 414:
5301#line 1575 "Parser.rl"
5302 {te = p;p--;{
5303 throw LocatedParseError("Value in \\o{...} sequence is non-octal or missing braces");
5304 }}
5305 break;
5306 case 415:
5307#line 1579 "Parser.rl"
5308 {te = p;p--;{
5309 addEscapedHex(currentSeq, accumulator, mode);
5310 }}
5311 break;
5312 case 416:
5313#line 1597 "Parser.rl"
5314 {te = p;p--;{
5315 throw LocatedParseError("Value in \\x{...} sequence is non-hex or missing }");
5316 }}
5317 break;
5318 case 417:
5319#line 1601 "Parser.rl"
5320 {te = p;p--;{
5321 if (te - ts < 3) {
5322 assert(te - ts == 2);
5323 throw LocatedParseError(SLASH_C_ERROR);
5324 } else {
5325 assert(te - ts == 3);
5326 addLiteral(currentSeq, decodeCtrl(ts[2]), mode);
5327 }
5328 }}
5329 break;
5330 case 418:
5331#line 1701 "Parser.rl"
5332 {te = p;p--;{ throw LocatedParseError("Malformed property"); }}
5333 break;
5334 case 419:
5335#line 1702 "Parser.rl"
5336 {te = p;p--;{ throw LocatedParseError("Malformed property"); }}
5337 break;
5338 case 420:
5339#line 1720 "Parser.rl"
5340 {te = p;p--;{
5341 ostringstream str;
5342 str << "\\k at index " << ts - ptr << " not supported.";
5343 throw ParseError(str.str());
5344 }}
5345 break;
5346 case 421:
5347#line 1743 "Parser.rl"
5348 {te = p;p--;{
5349 assert(ts + 1 == pe);
5350 ostringstream str;
5351 str << "Unescaped \\ at end of input, index " << ts - ptr << ".";
5352 throw ParseError(str.str());
5353 }}
5354 break;
5355 case 422:
5356#line 397 "Parser.rl"
5357 {te = p;p--;{
5358 throw LocatedParseError("Conditional subpattern unsupported");
5359 }}
5360 break;
5361 case 423:
5362#line 1853 "Parser.rl"
5363 {te = p;p--;{
5364 throw LocatedParseError("Unrecognised character after (?");
5365 }}
5366 break;
5367 case 424:
5368#line 1885 "Parser.rl"
5369 {te = p;p--;{
5370 assert(mode.utf8);
5371 throwInvalidUtf8();
5372 }}
5373 break;
5374 case 425:
5375#line 1899 "Parser.rl"
5376 {te = p;p--;{
5377 addLiteral(currentSeq, *ts, mode);
5378 }}
5379 break;
5380 case 426:
5381#line 329 "Parser.rl"
5382 {{p = ((te))-1;}{
5383 PUSH_SEQUENCE;
5384 auto seq = ue2::make_unique<ComponentSequence>();
5385 seq->setCaptureIndex(groupIndex++);
5386 currentSeq = enterSequence(currentSeq, move(seq));
5387 }}
5388 break;
5389 case 427:
5390#line 422 "Parser.rl"
5391 {{p = ((te))-1;}{
5392 assert(!currentCls);
5393 assert(!inCharClass); // not reentrant
5394 currentCls = getComponentClass(mode);
5395 inCharClass = true;
5396 inCharClassEarly = true;
5397 currentClsBegin = ts;
5398 {cs = 836; goto _again;}
5399 }}
5400 break;
5401 case 428:
5402#line 1558 "Parser.rl"
5403 {{p = ((te))-1;}{
5404 throw LocatedParseError("Invalid reference after \\g");
5405 }}
5406 break;
5407 case 429:
5408#line 1575 "Parser.rl"
5409 {{p = ((te))-1;}{
5410 throw LocatedParseError("Value in \\o{...} sequence is non-octal or missing braces");
5411 }}
5412 break;
5413 case 430:
5414#line 1597 "Parser.rl"
5415 {{p = ((te))-1;}{
5416 throw LocatedParseError("Value in \\x{...} sequence is non-hex or missing }");
5417 }}
5418 break;
5419 case 431:
5420#line 1720 "Parser.rl"
5421 {{p = ((te))-1;}{
5422 ostringstream str;
5423 str << "\\k at index " << ts - ptr << " not supported.";
5424 throw ParseError(str.str());
5425 }}
5426 break;
5427 case 432:
5428#line 397 "Parser.rl"
5429 {{p = ((te))-1;}{
5430 throw LocatedParseError("Conditional subpattern unsupported");
5431 }}
5432 break;
5433 case 433:
5434#line 1853 "Parser.rl"
5435 {{p = ((te))-1;}{
5436 throw LocatedParseError("Unrecognised character after (?");
5437 }}
5438 break;
5439 case 434:
5440#line 1885 "Parser.rl"
5441 {{p = ((te))-1;}{
5442 assert(mode.utf8);
5443 throwInvalidUtf8();
5444 }}
5445 break;
5446 case 435:
5447#line 1899 "Parser.rl"
5448 {{p = ((te))-1;}{
5449 addLiteral(currentSeq, *ts, mode);
5450 }}
5451 break;
5452 case 436:
5453#line 1 "NONE"
5454 { switch( act ) {
5455 case 288:
5456 {{p = ((te))-1;}
5457 // If there are enough capturing sub expressions, this may be
5458 // a back reference
5459 accumulator = parseAsDecimal(octAccumulator);
5460 if (accumulator < groupIndex) {
5461 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
5462 } else {
5463 addEscapedOctal(currentSeq, octAccumulator, mode);
5464 }
5465 }
5466 break;
5467 case 290:
5468 {{p = ((te))-1;}
5469 // if there are enough left parens to this point, back ref
5470 if (accumulator < groupIndex) {
5471 currentSeq->addComponent(ue2::make_unique<ComponentBackReference>(accumulator));
5472 } else {
5473 // Otherwise, we interpret the first three digits as an
5474 // octal escape, and the remaining characters stand for
5475 // themselves as literals.
5476 const char *s = ts;
5477 unsigned int accum = 0;
5478 unsigned int oct_digits = 0;
5479 assert(*s == '\\'); // token starts at backslash
5480 for (++s; s < te && oct_digits < 3; ++oct_digits, ++s) {
5481 u8 digit = *s - '0';
5482 if (digit < 8) {
5483 accum = digit + accum * 8;
5484 } else {
5485 break;
5486 }
5487 }
5488
5489 if (oct_digits > 0) {
5490 addEscapedOctal(currentSeq, accum, mode);
5491 }
5492
5493 // And then the rest of the digits, if any, are literal.
5494 for (; s < te; ++s) {
5495 addLiteral(currentSeq, *s, mode);
5496 }
5497 }
5498 }
5499 break;
5500 case 330:
5501 {{p = ((te))-1;}
5502 addLiteral(currentSeq, *(ts + 1), mode);
5503 }
5504 break;
5505 }
5506 }
5507 break;
5508#line 5509 "Parser.cpp"
5509 }
5510 }
5511
5512_again:
5513 _acts = _regex_actions + _regex_to_state_actions[cs];
5514 _nacts = (unsigned int) *_acts++;
5515 while ( _nacts-- > 0 ) {
5516 switch ( *_acts++ ) {
5517 case 23:
5518#line 1 "NONE"
5519 {ts = 0;}
5520 break;
5521#line 5522 "Parser.cpp"
5522 }
5523 }
5524
5525 if ( cs == 0 )
5526 goto _out;
5527 if ( ++p != pe )
5528 goto _resume;
5529 _test_eof: {}
5530 if ( p == eof )
5531 {
5532 if ( _regex_eof_trans[cs] > 0 ) {
5533 _trans = _regex_eof_trans[cs] - 1;
5534 goto _eof_trans;
5535 }
5536 const short *__acts = _regex_actions + _regex_eof_actions[cs];
5537 unsigned int __nacts = (unsigned int) *__acts++;
5538 while ( __nacts-- > 0 ) {
5539 switch ( *__acts++ ) {
5540 case 22:
5541#line 731 "Parser.rl"
5542 { throw LocatedParseError("Malformed property"); }
5543 break;
5544#line 5545 "Parser.cpp"
5545 }
5546 }
5547 }
5548
5549 _out: {}
5550 }
5551
5552#line 1985 "Parser.rl"
5553
5554 if (p != pe && *p != '\0') {
5555 // didn't make it to the end of our input, but we didn't throw a ParseError?
5556 assert(0);
5557 ostringstream str;
5558 str << "Parse error at index " << (p - ptr) << ".";
5559 throw ParseError(str.str());
5560 }
5561
5562 if (currentCls) {
5563 assert(inCharClass);
5564 assert(currentClsBegin);
5565 ostringstream oss;
5566 oss << "Unterminated character class starting at index "
5567 << currentClsBegin - ptr << ".";
5568 throw ParseError(oss.str());
5569 }
5570
5571 if (inComment) {
5572 throw ParseError("Unterminated comment.");
5573 }
5574
5575 if (!sequences.empty()) {
5576 ostringstream str;
5577 str << "Missing close parenthesis for group started at index "
5578 << sequences.back().seqOffset << ".";
5579 throw ParseError(str.str());
5580 }
5581
5582 // Unlikely, but possible
5583 if (groupIndex > 65535) {
5584 throw ParseError("The maximum number of capturing subexpressions is 65535.");
5585 }
5586
5587 // Finalize the top-level sequence, which will take care of any
5588 // top-level alternation.
5589 currentSeq->finalize();
5590 assert(currentSeq == rootSeq.get());
5591
5592 // Ensure that all references are valid.
5593 checkReferences(*rootSeq, groupIndex, groupNames);
5594
5595 return rootSeq;
5596 } catch (LocatedParseError &error) {
5597 if (ts >= ptr && ts <= pe) {
5598 error.locate(ts - ptr);
5599 } else {
5600 error.locate(0);
5601 }
5602 throw;
5603 }
5604}
5605
5606} // namespace ue2
5607