From b51b73b530f4aba3591be92fd98705acc5c3797f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 9 Jun 2015 09:40:44 +0530 Subject: [PATCH] Update regex engine (fixes a thread safety bug) --- src/regex/__init__.py | 2 +- src/regex/_regex.c | 16 +- src/regex/_regex_core.py | 25 +- src/regex/_regex_unicode.c | 1092 +++++++++++++++++++++++++----------- src/regex/_regex_unicode.h | 14 +- 5 files changed, 814 insertions(+), 335 deletions(-) diff --git a/src/regex/__init__.py b/src/regex/__init__.py index e620cc1f97..1537313c5a 100644 --- a/src/regex/__init__.py +++ b/src/regex/__init__.py @@ -225,7 +225,7 @@ __all__ = ["compile", "escape", "findall", "finditer", "fullmatch", "match", "V0", "VERSION0", "V1", "VERSION1", "X", "VERBOSE", "W", "WORD", "error", "Regex"] -__version__ = "2.4.61" +__version__ = "2.4.64" # -------------------------------------------------------------------- # Public interface. diff --git a/src/regex/_regex.c b/src/regex/_regex.c index 8433f218c3..9dee1405b9 100644 --- a/src/regex/_regex.c +++ b/src/regex/_regex.c @@ -1194,6 +1194,18 @@ Py_LOCAL_INLINE(BOOL) locale_has_property(RE_LocaleInfo* locale_info, RE_CODE case RE_PROP_LOWER >> 16: v = locale_islower(locale_info, ch); break; + case RE_PROP_POSIX_ALNUM >> 16: + v = re_get_posix_alnum(ch) != 0; + break; + case RE_PROP_POSIX_DIGIT >> 16: + v = re_get_posix_digit(ch) != 0; + break; + case RE_PROP_POSIX_PUNCT >> 16: + v = re_get_posix_punct(ch) != 0; + break; + case RE_PROP_POSIX_XDIGIT >> 16: + v = re_get_posix_xdigit(ch) != 0; + break; case RE_PROP_PRINT >> 16: v = locale_isprint(locale_info, ch); break; @@ -19101,8 +19113,8 @@ Py_LOCAL_INLINE(PyObject*) pattern_subx(PatternObject* self, PyObject* #if PY_VERSION_HEX >= 0x02060000 BOOL built_capture = FALSE; #endif - PyObject* args = NULL; - PyObject* kwargs = NULL; + PyObject* args; + PyObject* kwargs; Py_ssize_t end_pos; /* Get the string. */ diff --git a/src/regex/_regex_core.py b/src/regex/_regex_core.py index e300b669e9..0a4c0f88bc 100644 --- a/src/regex/_regex_core.py +++ b/src/regex/_regex_core.py @@ -262,7 +262,7 @@ def _shrink_cache(cache_dict, args_dict, locale_sensitive, max_length, divisor=5 # Rebuild the arguments and locale-sensitivity dictionaries. args_dict.clear() sensitivity_dict = {} - for pattern, pattern_type, flags, args, default_version, locale in cache_dict: + for pattern, pattern_type, flags, args, default_version, locale in tuple(cache_dict): args_dict[pattern, pattern_type, flags, default_version, locale] = args try: sensitivity_dict[pattern_type, pattern] = locale_sensitive[pattern_type, pattern] @@ -292,6 +292,9 @@ def _compile_firstset(info, fs): # If we ignore the case, for simplicity we won't build a firstset. members = set() for i in fs: + if isinstance(i, Character) and not i.positive: + return [] + if i.case_flags: if isinstance(i, Character): if is_cased(info, i.value): @@ -1476,7 +1479,7 @@ def parse_posix_class(source, info): if not source.match(":]"): raise ParseError() - return lookup_property(prop_name, name, not negate, source) + return lookup_property(prop_name, name, not negate, source, posix=True) def float_to_rational(flt): "Converts a float to a rational pair." @@ -1517,7 +1520,9 @@ def standardise_name(name): except (ValueError, ZeroDivisionError): return "".join(ch for ch in name if ch not in "_- ").upper() -def lookup_property(property, value, positive, source=None): +_posix_classes = set('ALNUM DIGIT PUNCT XDIGIT'.split()) + +def lookup_property(property, value, positive, source=None, posix=False): "Looks up a property." # Normalise the names (which may still be lists). property = standardise_name(property) if property else None @@ -1526,6 +1531,9 @@ def lookup_property(property, value, positive, source=None): if (property, value) == ("GENERALCATEGORY", "ASSIGNED"): property, value, positive = "GENERALCATEGORY", "UNASSIGNED", not positive + if posix and not property and value.upper() in _posix_classes: + value = 'POSIX' + value + if property: # Both the property and the value are provided. prop = PROPERTIES.get(property) @@ -2650,11 +2658,10 @@ class Grapheme(RegexBase): def _compile(self, reverse, fuzzy): # Match at least 1 character until a grapheme boundary is reached. Note # that this is the same whether matching forwards or backwards. - character_matcher = LazyRepeat(AnyAll(), 1, None).compile(reverse, - fuzzy) - boundary_matcher = [(OP.GRAPHEME_BOUNDARY, 1)] + grapheme_matcher = Atomic(Sequence([LazyRepeat(AnyAll(), 1, None), + GraphemeBoundary()])) - return character_matcher + boundary_matcher + return grapheme_matcher.compile(reverse, fuzzy) def _dump(self, indent, reverse): print "%sGRAPHEME" % (INDENT * indent) @@ -2662,6 +2669,10 @@ class Grapheme(RegexBase): def max_width(self): return UNLIMITED +class GraphemeBoundary: + def compile(self, reverse, fuzzy): + return [(OP.GRAPHEME_BOUNDARY, 1)] + class GreedyRepeat(RegexBase): _opcode = OP.GREEDY_REPEAT _op_name = "GREEDY_REPEAT" diff --git a/src/regex/_regex_unicode.c b/src/regex/_regex_unicode.c index 69b1e70962..074acb8377 100644 --- a/src/regex/_regex_unicode.c +++ b/src/regex/_regex_unicode.c @@ -1007,6 +1007,10 @@ char* re_strings[] = { "PO", "POPDIRECTIONALFORMAT", "POPDIRECTIONALISOLATE", + "POSIXALNUM", + "POSIXDIGIT", + "POSIXPUNCT", + "POSIXXDIGIT", "POSTFIXNUMERIC", "PP", "PR", @@ -1277,7 +1281,7 @@ char* re_strings[] = { "ZZZZ", }; -/* strings: 11780 bytes. */ +/* strings: 11825 bytes. */ /* properties. */ @@ -1286,21 +1290,21 @@ RE_Property re_properties[] = { { 522, 0, 0}, { 238, 1, 1}, { 237, 1, 1}, - {1048, 2, 2}, - {1046, 2, 2}, - {1220, 3, 3}, - {1215, 3, 3}, + {1052, 2, 2}, + {1050, 2, 2}, + {1224, 3, 3}, + {1219, 3, 3}, { 544, 4, 4}, { 523, 4, 4}, - {1054, 5, 5}, - {1045, 5, 5}, + {1058, 5, 5}, + {1049, 5, 5}, { 797, 6, 6}, { 159, 7, 6}, { 158, 7, 6}, { 741, 8, 6}, { 740, 8, 6}, - {1188, 9, 6}, - {1187, 9, 6}, + {1192, 9, 6}, + {1191, 9, 6}, { 280, 10, 6}, { 282, 11, 6}, { 334, 11, 6}, @@ -1318,10 +1322,10 @@ RE_Property re_properties[] = { { 606, 17, 6}, { 602, 18, 6}, { 601, 18, 6}, - {1228, 19, 6}, - {1227, 19, 6}, - {1226, 20, 6}, - {1225, 20, 6}, + {1232, 19, 6}, + {1231, 19, 6}, + {1230, 20, 6}, + {1229, 20, 6}, { 437, 21, 6}, { 445, 21, 6}, { 545, 22, 6}, @@ -1330,19 +1334,19 @@ RE_Property re_properties[] = { { 547, 23, 6}, { 546, 24, 6}, { 554, 24, 6}, - {1216, 25, 6}, - {1223, 25, 6}, - {1082, 25, 6}, + {1220, 25, 6}, + {1227, 25, 6}, + {1086, 25, 6}, { 230, 26, 6}, { 228, 26, 6}, { 645, 27, 6}, { 643, 27, 6}, { 430, 28, 6}, { 599, 29, 6}, - {1011, 30, 6}, - {1008, 30, 6}, - {1149, 31, 6}, - {1148, 31, 6}, + {1015, 30, 6}, + {1012, 30, 6}, + {1153, 31, 6}, + {1152, 31, 6}, { 942, 32, 6}, { 923, 32, 6}, { 588, 33, 6}, @@ -1369,24 +1373,24 @@ RE_Property re_properties[] = { { 607, 43, 6}, { 611, 44, 6}, { 609, 44, 6}, - {1013, 45, 6}, + {1017, 45, 6}, + {1188, 46, 6}, {1184, 46, 6}, - {1180, 46, 6}, { 936, 47, 6}, { 907, 47, 6}, { 439, 48, 6}, { 438, 48, 6}, - {1078, 49, 6}, - {1049, 49, 6}, + {1082, 49, 6}, + {1053, 49, 6}, { 739, 50, 6}, { 738, 50, 6}, { 939, 51, 6}, { 912, 51, 6}, { 938, 52, 6}, { 911, 52, 6}, - {1091, 53, 6}, - {1193, 54, 6}, - {1209, 54, 6}, + {1095, 53, 6}, + {1197, 54, 6}, + {1213, 54, 6}, { 960, 55, 6}, { 961, 55, 6}, { 959, 56, 6}, @@ -1422,23 +1426,27 @@ RE_Property re_properties[] = { { 169, 71, 6}, { 236, 72, 6}, { 542, 73, 6}, - { 994, 74, 6}, - {1219, 75, 6}, - {1224, 76, 6}, + { 998, 74, 6}, + {1223, 75, 6}, + {1228, 76, 6}, + { 990, 77, 6}, + { 989, 78, 6}, + { 991, 79, 6}, + { 992, 80, 6}, }; -/* properties: 572 bytes. */ +/* properties: 588 bytes. */ /* property values. */ RE_PropertyValue re_property_values[] = { - {1181, 0, 0}, + {1185, 0, 0}, { 365, 0, 0}, - {1189, 0, 1}, + {1193, 0, 1}, { 748, 0, 1}, { 742, 0, 2}, { 735, 0, 2}, - {1161, 0, 3}, + {1165, 0, 3}, { 747, 0, 3}, { 839, 0, 4}, { 736, 0, 4}, @@ -1448,7 +1456,7 @@ RE_PropertyValue re_property_values[] = { { 837, 0, 6}, { 483, 0, 7}, { 805, 0, 7}, - {1084, 0, 8}, + {1088, 0, 8}, { 804, 0, 8}, { 435, 0, 9}, { 868, 0, 9}, @@ -1457,25 +1465,25 @@ RE_PropertyValue re_property_values[] = { { 876, 0, 10}, { 944, 0, 11}, { 877, 0, 11}, - {1083, 0, 12}, - {1252, 0, 12}, + {1087, 0, 12}, + {1256, 0, 12}, { 733, 0, 13}, - {1250, 0, 13}, + {1254, 0, 13}, { 957, 0, 14}, - {1251, 0, 14}, + {1255, 0, 14}, { 394, 0, 15}, { 285, 0, 15}, { 366, 0, 15}, { 515, 0, 16}, { 324, 0, 16}, - { 995, 0, 17}, + { 999, 0, 17}, { 367, 0, 17}, - {1116, 0, 18}, + {1120, 0, 18}, { 404, 0, 18}, { 431, 0, 19}, { 965, 0, 19}, { 926, 0, 20}, - { 998, 0, 20}, + {1002, 0, 20}, { 363, 0, 21}, { 968, 0, 21}, { 383, 0, 22}, @@ -1483,13 +1491,13 @@ RE_PropertyValue re_property_values[] = { { 945, 0, 23}, { 986, 0, 23}, { 802, 0, 24}, - {1072, 0, 24}, + {1076, 0, 24}, { 408, 0, 25}, - {1046, 0, 25}, + {1050, 0, 25}, { 841, 0, 26}, - {1071, 0, 26}, + {1075, 0, 26}, { 946, 0, 27}, - {1077, 0, 27}, + {1081, 0, 27}, { 621, 0, 28}, { 983, 0, 28}, { 510, 0, 29}, @@ -1507,16 +1515,16 @@ RE_PropertyValue re_property_values[] = { { 896, 0, 33}, { 857, 0, 33}, { 858, 0, 33}, - {1002, 0, 34}, + {1006, 0, 34}, { 952, 0, 34}, - {1001, 0, 34}, + {1005, 0, 34}, { 953, 0, 34}, - {1121, 0, 35}, - {1035, 0, 35}, - {1036, 0, 35}, - {1056, 0, 36}, - {1245, 0, 36}, - {1246, 0, 36}, + {1125, 0, 35}, + {1039, 0, 35}, + {1040, 0, 35}, + {1060, 0, 36}, + {1249, 0, 36}, + {1250, 0, 36}, { 281, 0, 37}, { 707, 0, 37}, { 191, 0, 38}, @@ -1533,7 +1541,7 @@ RE_PropertyValue re_property_values[] = { { 695, 1, 4}, { 631, 1, 5}, { 630, 1, 5}, - {1085, 1, 6}, + {1089, 1, 6}, { 840, 1, 6}, { 369, 1, 7}, { 448, 1, 7}, @@ -1546,12 +1554,12 @@ RE_PropertyValue re_property_values[] = { { 185, 1, 11}, { 582, 1, 12}, { 172, 1, 13}, - {1123, 1, 14}, + {1127, 1, 14}, { 184, 1, 15}, { 183, 1, 15}, - {1154, 1, 16}, + {1158, 1, 16}, { 874, 1, 17}, - {1040, 1, 18}, + {1044, 1, 18}, { 765, 1, 19}, { 174, 1, 20}, { 173, 1, 20}, @@ -1560,14 +1568,14 @@ RE_PropertyValue re_property_values[] = { { 557, 1, 23}, { 555, 1, 24}, { 928, 1, 25}, - {1140, 1, 26}, - {1147, 1, 27}, + {1144, 1, 26}, + {1151, 1, 27}, { 662, 1, 28}, { 763, 1, 29}, - {1069, 1, 30}, - {1155, 1, 31}, + {1073, 1, 30}, + {1159, 1, 31}, { 687, 1, 32}, - {1156, 1, 33}, + {1160, 1, 33}, { 851, 1, 34}, { 531, 1, 35}, { 572, 1, 36}, @@ -1576,36 +1584,36 @@ RE_PropertyValue re_property_values[] = { { 493, 1, 38}, { 492, 1, 38}, { 333, 1, 39}, - {1182, 1, 40}, - {1176, 1, 40}, + {1186, 1, 40}, + {1180, 1, 40}, { 272, 1, 40}, { 909, 1, 41}, - {1033, 1, 42}, - {1126, 1, 43}, + {1037, 1, 42}, + {1130, 1, 43}, { 579, 1, 44}, { 263, 1, 45}, - {1128, 1, 46}, + {1132, 1, 46}, { 672, 1, 47}, { 845, 1, 48}, - {1183, 1, 49}, - {1177, 1, 49}, + {1187, 1, 49}, + {1181, 1, 49}, { 724, 1, 50}, - {1131, 1, 51}, + {1135, 1, 51}, { 871, 1, 52}, { 673, 1, 53}, { 261, 1, 54}, - {1132, 1, 55}, + {1136, 1, 55}, { 370, 1, 56}, { 449, 1, 56}, { 209, 1, 57}, - {1095, 1, 58}, + {1099, 1, 58}, { 217, 1, 59}, { 718, 1, 60}, { 913, 1, 61}, - {1097, 1, 62}, - {1096, 1, 62}, - {1197, 1, 63}, - {1196, 1, 63}, + {1101, 1, 62}, + {1100, 1, 62}, + {1201, 1, 63}, + {1200, 1, 63}, { 980, 1, 64}, { 979, 1, 64}, { 981, 1, 65}, @@ -1617,9 +1625,9 @@ RE_PropertyValue re_property_values[] = { { 551, 1, 68}, { 550, 1, 68}, { 526, 1, 69}, - {1002, 1, 69}, - {1104, 1, 70}, - {1103, 1, 70}, + {1006, 1, 69}, + {1108, 1, 70}, + {1107, 1, 70}, { 409, 1, 71}, { 371, 1, 72}, { 450, 1, 72}, @@ -1644,16 +1652,16 @@ RE_PropertyValue re_property_values[] = { { 453, 1, 85}, { 824, 1, 86}, { 830, 1, 86}, - {1106, 1, 87}, - {1099, 1, 87}, + {1110, 1, 87}, + {1103, 1, 87}, { 255, 1, 88}, { 254, 1, 88}, - {1107, 1, 89}, - {1100, 1, 89}, + {1111, 1, 89}, + {1104, 1, 89}, { 825, 1, 90}, { 831, 1, 90}, + {1113, 1, 91}, {1109, 1, 91}, - {1105, 1, 91}, { 827, 1, 92}, { 823, 1, 92}, { 536, 1, 93}, @@ -1662,13 +1670,13 @@ RE_PropertyValue re_property_values[] = { { 397, 1, 95}, { 533, 1, 96}, { 532, 1, 96}, - {1158, 1, 97}, + {1162, 1, 97}, { 490, 1, 98}, { 488, 1, 98}, { 420, 1, 99}, { 418, 1, 99}, - {1110, 1, 100}, - {1115, 1, 100}, + {1114, 1, 100}, + {1119, 1, 100}, { 351, 1, 101}, { 350, 1, 101}, { 661, 1, 102}, @@ -1694,29 +1702,29 @@ RE_PropertyValue re_property_values[] = { { 338, 1, 114}, { 356, 1, 115}, { 346, 1, 115}, - {1240, 1, 116}, - {1239, 1, 116}, + {1244, 1, 116}, + {1243, 1, 116}, { 355, 1, 117}, { 337, 1, 117}, - {1242, 1, 118}, - {1241, 1, 119}, + {1246, 1, 118}, + {1245, 1, 119}, { 734, 1, 120}, - {1191, 1, 121}, + {1195, 1, 121}, { 421, 1, 122}, { 419, 1, 122}, { 211, 1, 123}, { 842, 1, 124}, { 703, 1, 125}, { 697, 1, 125}, - {1120, 1, 126}, + {1124, 1, 126}, { 377, 1, 127}, { 615, 1, 127}, { 972, 1, 128}, - {1044, 1, 129}, + {1048, 1, 129}, { 444, 1, 130}, { 443, 1, 130}, { 668, 1, 131}, - {1017, 1, 132}, + {1021, 1, 132}, { 573, 1, 133}, { 637, 1, 133}, { 640, 1, 134}, @@ -1725,7 +1733,7 @@ RE_PropertyValue re_property_values[] = { { 326, 1, 136}, { 854, 1, 137}, { 852, 1, 137}, - {1133, 1, 138}, + {1137, 1, 138}, { 811, 1, 139}, { 810, 1, 139}, { 491, 1, 140}, @@ -1741,29 +1749,29 @@ RE_PropertyValue re_property_values[] = { { 589, 1, 146}, { 590, 1, 146}, { 743, 1, 147}, - { 996, 1, 148}, {1000, 1, 148}, - { 995, 1, 148}, + {1004, 1, 148}, + { 999, 1, 148}, { 342, 1, 149}, { 344, 1, 149}, { 161, 1, 150}, { 160, 1, 150}, { 181, 1, 151}, { 179, 1, 151}, - {1194, 1, 152}, - {1209, 1, 152}, - {1200, 1, 153}, + {1198, 1, 152}, + {1213, 1, 152}, + {1204, 1, 153}, { 373, 1, 154}, { 564, 1, 154}, { 341, 1, 155}, { 339, 1, 155}, - {1075, 1, 156}, - {1074, 1, 156}, + {1079, 1, 156}, + {1078, 1, 156}, { 182, 1, 157}, { 180, 1, 157}, { 566, 1, 158}, { 563, 1, 158}, - {1086, 1, 159}, + {1090, 1, 159}, { 730, 1, 160}, { 729, 1, 161}, { 146, 1, 162}, @@ -1777,10 +1785,10 @@ RE_PropertyValue re_property_values[] = { { 915, 1, 169}, { 539, 1, 170}, { 917, 1, 171}, - {1179, 1, 172}, + {1183, 1, 172}, { 918, 1, 173}, { 440, 1, 174}, - {1059, 1, 175}, + {1063, 1, 175}, { 933, 1, 176}, { 471, 1, 177}, { 283, 1, 178}, @@ -1800,25 +1808,25 @@ RE_PropertyValue re_property_values[] = { { 203, 1, 192}, { 625, 1, 193}, { 624, 1, 194}, - { 999, 1, 195}, + {1003, 1, 195}, { 920, 1, 196}, - {1032, 1, 197}, - {1031, 1, 197}, + {1036, 1, 197}, + {1035, 1, 197}, { 251, 1, 198}, { 653, 1, 199}, - {1080, 1, 200}, + {1084, 1, 200}, { 325, 1, 201}, { 759, 1, 202}, - {1058, 1, 203}, - {1070, 1, 204}, + {1062, 1, 203}, + {1074, 1, 204}, { 676, 1, 205}, { 677, 1, 206}, { 541, 1, 207}, - {1160, 1, 208}, - {1065, 1, 209}, + {1164, 1, 208}, + {1069, 1, 209}, { 838, 1, 210}, - {1137, 1, 211}, - {1213, 1, 212}, + {1141, 1, 211}, + {1217, 1, 212}, { 963, 1, 213}, { 405, 1, 214}, { 407, 1, 215}, @@ -1833,15 +1841,15 @@ RE_PropertyValue re_property_values[] = { { 657, 1, 222}, { 656, 1, 222}, { 464, 1, 223}, - {1062, 1, 224}, + {1066, 1, 224}, { 266, 1, 225}, { 265, 1, 225}, { 850, 1, 226}, { 849, 1, 226}, { 166, 1, 227}, { 165, 1, 227}, - {1135, 1, 228}, - {1134, 1, 228}, + {1139, 1, 228}, + {1138, 1, 228}, { 400, 1, 229}, { 399, 1, 229}, { 799, 1, 230}, @@ -1862,14 +1870,14 @@ RE_PropertyValue re_property_values[] = { { 832, 1, 238}, { 472, 1, 239}, { 930, 1, 240}, - {1173, 1, 241}, - {1172, 1, 241}, + {1177, 1, 241}, + {1176, 1, 241}, { 154, 1, 242}, { 153, 1, 242}, { 529, 1, 243}, { 528, 1, 243}, - {1108, 1, 244}, - {1101, 1, 244}, + {1112, 1, 244}, + {1105, 1, 244}, { 357, 1, 245}, { 347, 1, 245}, { 358, 1, 246}, @@ -1878,17 +1886,17 @@ RE_PropertyValue re_property_values[] = { { 349, 1, 247}, { 343, 1, 248}, { 345, 1, 248}, - {1129, 1, 249}, - {1195, 1, 250}, - {1210, 1, 250}, - {1111, 1, 251}, - {1113, 1, 251}, - {1112, 1, 252}, - {1114, 1, 252}, - {1185, 2, 0}, - {1256, 2, 0}, + {1133, 1, 249}, + {1199, 1, 250}, + {1214, 1, 250}, + {1115, 1, 251}, + {1117, 1, 251}, + {1116, 1, 252}, + {1118, 1, 252}, + {1189, 2, 0}, + {1260, 2, 0}, { 376, 2, 1}, - {1255, 2, 1}, + {1259, 2, 1}, { 689, 2, 2}, { 705, 2, 2}, { 548, 2, 3}, @@ -1901,10 +1909,10 @@ RE_PropertyValue re_property_values[] = { { 581, 2, 6}, { 172, 2, 7}, { 171, 2, 7}, - {1123, 2, 8}, - {1122, 2, 8}, - {1154, 2, 9}, - {1153, 2, 9}, + {1127, 2, 8}, + {1126, 2, 8}, + {1158, 2, 9}, + {1157, 2, 9}, { 442, 2, 10}, { 441, 2, 10}, { 226, 2, 11}, @@ -1915,21 +1923,21 @@ RE_PropertyValue re_property_values[] = { { 556, 2, 13}, { 928, 2, 14}, { 931, 2, 14}, - {1140, 2, 15}, - {1141, 2, 15}, - {1147, 2, 16}, - {1146, 2, 16}, + {1144, 2, 15}, + {1145, 2, 15}, + {1151, 2, 16}, + {1150, 2, 16}, { 662, 2, 17}, { 678, 2, 17}, { 763, 2, 18}, { 836, 2, 18}, - {1069, 2, 19}, - {1068, 2, 19}, - {1155, 2, 20}, + {1073, 2, 19}, + {1072, 2, 19}, + {1159, 2, 20}, { 687, 2, 21}, { 688, 2, 21}, - {1156, 2, 22}, - {1157, 2, 22}, + {1160, 2, 22}, + {1161, 2, 22}, { 851, 2, 23}, { 856, 2, 23}, { 531, 2, 24}, @@ -1944,8 +1952,8 @@ RE_PropertyValue re_property_values[] = { { 275, 2, 28}, { 909, 2, 29}, { 908, 2, 29}, - {1033, 2, 30}, - {1034, 2, 30}, + {1037, 2, 30}, + {1038, 2, 30}, { 672, 2, 31}, { 674, 2, 31}, { 845, 2, 32}, @@ -1958,8 +1966,8 @@ RE_PropertyValue re_property_values[] = { { 241, 2, 35}, { 568, 2, 36}, { 577, 2, 36}, - {1237, 2, 37}, - {1238, 2, 37}, + {1241, 2, 37}, + {1242, 2, 37}, { 915, 2, 38}, { 635, 2, 38}, { 539, 2, 39}, @@ -1967,26 +1975,26 @@ RE_PropertyValue re_property_values[] = { { 440, 2, 40}, { 460, 2, 40}, { 618, 2, 41}, - {1249, 2, 41}, - {1005, 2, 41}, - {1126, 2, 42}, - {1152, 2, 42}, + {1253, 2, 41}, + {1009, 2, 41}, + {1130, 2, 42}, + {1156, 2, 42}, { 579, 2, 43}, { 578, 2, 43}, { 263, 2, 44}, { 262, 2, 44}, - {1128, 2, 45}, - {1127, 2, 45}, + {1132, 2, 45}, + {1131, 2, 45}, { 724, 2, 46}, { 723, 2, 46}, - {1131, 2, 47}, - {1138, 2, 47}, + {1135, 2, 47}, + {1142, 2, 47}, { 728, 2, 48}, { 726, 2, 48}, - {1179, 2, 49}, - {1178, 2, 49}, - {1059, 2, 50}, - {1060, 2, 50}, + {1183, 2, 49}, + {1182, 2, 49}, + {1063, 2, 50}, + {1064, 2, 50}, { 933, 2, 51}, { 932, 2, 51}, { 415, 2, 52}, @@ -1997,43 +2005,43 @@ RE_PropertyValue re_property_values[] = { { 260, 2, 54}, { 397, 2, 55}, { 396, 2, 55}, - {1004, 2, 55}, + {1008, 2, 55}, { 871, 2, 56}, - {1139, 2, 56}, + {1143, 2, 56}, { 536, 2, 57}, { 535, 2, 57}, - {1158, 2, 58}, - {1151, 2, 58}, - {1120, 2, 59}, - {1119, 2, 59}, + {1162, 2, 58}, + {1155, 2, 58}, + {1124, 2, 59}, + {1123, 2, 59}, { 918, 2, 60}, - {1229, 2, 60}, + {1233, 2, 60}, { 671, 2, 61}, { 670, 2, 61}, { 209, 2, 62}, { 208, 2, 62}, { 405, 2, 63}, - {1230, 2, 63}, + {1234, 2, 63}, { 978, 2, 64}, { 977, 2, 64}, { 972, 2, 65}, { 971, 2, 65}, { 874, 2, 66}, { 875, 2, 66}, - {1095, 2, 67}, - {1094, 2, 67}, + {1099, 2, 67}, + {1098, 2, 67}, { 718, 2, 68}, { 717, 2, 68}, { 913, 2, 69}, { 914, 2, 69}, - {1191, 2, 70}, - {1192, 2, 70}, - {1044, 2, 71}, - {1043, 2, 71}, + {1195, 2, 70}, + {1196, 2, 70}, + {1048, 2, 71}, + {1047, 2, 71}, { 668, 2, 72}, { 654, 2, 72}, - {1017, 2, 73}, - {1026, 2, 73}, + {1021, 2, 73}, + {1030, 2, 73}, { 754, 2, 74}, { 753, 2, 74}, { 278, 2, 75}, @@ -2041,16 +2049,16 @@ RE_PropertyValue re_property_values[] = { { 756, 2, 76}, { 755, 2, 76}, { 326, 2, 77}, - {1132, 2, 78}, + {1136, 2, 78}, { 686, 2, 78}, - {1133, 2, 79}, - {1142, 2, 79}, + {1137, 2, 79}, + {1146, 2, 79}, { 203, 2, 80}, { 204, 2, 80}, { 469, 2, 81}, { 468, 2, 81}, - {1040, 2, 82}, - {1041, 2, 82}, + {1044, 2, 82}, + {1045, 2, 82}, { 734, 2, 83}, { 211, 2, 84}, { 210, 2, 84}, @@ -2061,9 +2069,9 @@ RE_PropertyValue re_property_values[] = { { 612, 2, 87}, { 186, 2, 87}, { 919, 2, 88}, - {1042, 2, 88}, + {1046, 2, 88}, { 625, 2, 89}, - { 997, 2, 89}, + {1001, 2, 89}, { 624, 2, 90}, { 975, 2, 90}, { 920, 2, 91}, @@ -2084,12 +2092,12 @@ RE_PropertyValue re_property_values[] = { { 815, 2, 98}, { 818, 2, 99}, { 985, 2, 99}, - {1058, 2, 100}, - {1063, 2, 100}, - {1080, 2, 101}, - {1079, 2, 101}, - {1137, 2, 102}, - {1136, 2, 102}, + {1062, 2, 100}, + {1067, 2, 100}, + {1084, 2, 101}, + {1083, 2, 101}, + {1141, 2, 102}, + {1140, 2, 102}, { 283, 2, 103}, { 147, 2, 103}, { 216, 2, 104}, @@ -2125,24 +2133,24 @@ RE_PropertyValue re_property_values[] = { { 962, 2, 119}, { 917, 2, 120}, { 969, 2, 120}, - { 999, 2, 121}, + {1003, 2, 121}, { 976, 2, 121}, - {1065, 2, 122}, - {1064, 2, 122}, + {1069, 2, 122}, + {1068, 2, 122}, { 677, 2, 123}, - {1066, 2, 123}, - {1160, 2, 124}, - {1159, 2, 124}, - {1213, 2, 125}, - {1212, 2, 125}, + {1070, 2, 123}, + {1164, 2, 124}, + {1163, 2, 124}, + {1217, 2, 125}, + {1216, 2, 125}, { 666, 2, 126}, { 596, 2, 126}, { 934, 3, 0}, - {1231, 3, 0}, + {1235, 3, 0}, { 458, 3, 1}, { 459, 3, 1}, - {1067, 3, 2}, - {1087, 3, 2}, + {1071, 3, 2}, + {1091, 3, 2}, { 583, 3, 3}, { 594, 3, 3}, { 403, 3, 4}, @@ -2150,8 +2158,8 @@ RE_PropertyValue re_property_values[] = { { 870, 3, 6}, { 876, 3, 6}, { 500, 3, 7}, - {1014, 3, 8}, - {1019, 3, 8}, + {1018, 3, 8}, + {1023, 3, 8}, { 515, 3, 9}, { 513, 3, 9}, { 664, 3, 10}, @@ -2169,75 +2177,75 @@ RE_PropertyValue re_property_values[] = { { 502, 3, 16}, { 497, 3, 16}, { 934, 4, 0}, - {1231, 4, 0}, + {1235, 4, 0}, { 403, 4, 1}, { 722, 4, 2}, { 394, 4, 3}, { 365, 4, 3}, { 500, 4, 4}, { 497, 4, 4}, - {1014, 4, 5}, - {1019, 4, 5}, - {1084, 4, 6}, - {1072, 4, 6}, + {1018, 4, 5}, + {1023, 4, 5}, + {1088, 4, 6}, + {1076, 4, 6}, { 682, 4, 7}, - {1190, 4, 8}, - {1125, 4, 9}, + {1194, 4, 8}, + {1129, 4, 9}, { 749, 4, 10}, { 751, 4, 11}, - { 993, 4, 12}, - { 990, 4, 12}, + { 997, 4, 12}, + { 994, 4, 12}, { 934, 5, 0}, - {1231, 5, 0}, + {1235, 5, 0}, { 403, 5, 1}, { 722, 5, 2}, { 500, 5, 3}, { 497, 5, 3}, - {1055, 5, 4}, - {1050, 5, 4}, + {1059, 5, 4}, + {1054, 5, 4}, { 515, 5, 5}, { 513, 5, 5}, - {1081, 5, 6}, + {1085, 5, 6}, { 740, 5, 7}, { 737, 5, 7}, - {1187, 5, 8}, - {1186, 5, 8}, + {1191, 5, 8}, + {1190, 5, 8}, { 921, 5, 9}, { 708, 5, 9}, { 899, 5, 10}, { 894, 5, 10}, { 197, 5, 11}, { 192, 5, 11}, - {1091, 5, 12}, - {1090, 5, 12}, + {1095, 5, 12}, + {1094, 5, 12}, { 361, 5, 13}, { 360, 5, 13}, - {1047, 5, 14}, - {1046, 5, 14}, + {1051, 5, 14}, + {1050, 5, 14}, { 877, 6, 0}, { 857, 6, 0}, { 503, 6, 0}, { 504, 6, 0}, + {1240, 6, 1}, {1236, 6, 1}, - {1232, 6, 1}, - {1125, 6, 1}, - {1174, 6, 1}, + {1129, 6, 1}, + {1178, 6, 1}, { 888, 7, 0}, { 859, 7, 0}, { 709, 7, 1}, { 682, 7, 1}, - {1207, 7, 2}, - {1190, 7, 2}, - {1170, 7, 3}, - {1125, 7, 3}, + {1211, 7, 2}, + {1194, 7, 2}, + {1174, 7, 3}, + {1129, 7, 3}, { 750, 7, 4}, { 749, 7, 4}, { 752, 7, 5}, { 751, 7, 5}, { 713, 8, 0}, { 682, 8, 0}, - {1022, 8, 1}, - {1012, 8, 1}, + {1026, 8, 1}, + {1016, 8, 1}, { 494, 8, 2}, { 473, 8, 2}, { 495, 8, 3}, @@ -2250,10 +2258,10 @@ RE_PropertyValue re_property_values[] = { { 404, 8, 6}, { 957, 8, 7}, { 205, 8, 7}, - {1052, 8, 8}, - {1035, 8, 8}, - {1216, 8, 9}, - {1222, 8, 9}, + {1056, 8, 8}, + {1039, 8, 8}, + {1220, 8, 9}, + {1226, 8, 9}, { 943, 8, 10}, { 924, 8, 10}, { 247, 8, 11}, @@ -2264,18 +2272,18 @@ RE_PropertyValue re_property_values[] = { { 151, 8, 13}, { 716, 8, 14}, { 746, 8, 14}, - {1025, 8, 15}, {1029, 8, 15}, + {1033, 8, 15}, { 714, 8, 16}, { 744, 8, 16}, - {1023, 8, 17}, {1027, 8, 17}, + {1031, 8, 17}, { 987, 8, 18}, { 966, 8, 18}, { 715, 8, 19}, { 745, 8, 19}, - {1024, 8, 20}, {1028, 8, 20}, + {1032, 8, 20}, { 512, 8, 21}, { 518, 8, 21}, { 988, 8, 22}, @@ -2292,9 +2300,9 @@ RE_PropertyValue re_property_values[] = { { 658, 9, 3}, { 129, 9, 3}, { 681, 9, 3}, - {1201, 9, 4}, + {1205, 9, 4}, { 135, 9, 4}, - {1208, 9, 4}, + {1212, 9, 4}, { 287, 9, 5}, { 13, 9, 5}, { 290, 9, 6}, @@ -2388,9 +2396,9 @@ RE_PropertyValue re_property_values[] = { { 710, 9, 47}, { 59, 9, 47}, { 682, 9, 47}, - {1020, 9, 48}, + {1024, 9, 48}, { 60, 9, 48}, - {1012, 9, 48}, + {1016, 9, 48}, { 144, 9, 49}, { 61, 9, 49}, { 151, 9, 49}, @@ -2432,18 +2440,18 @@ RE_PropertyValue re_property_values[] = { { 633, 10, 8}, { 335, 10, 9}, { 474, 10, 9}, + {1106, 10, 10}, {1102, 10, 10}, - {1098, 10, 10}, - {1093, 10, 11}, - {1199, 10, 12}, - {1198, 10, 12}, - {1217, 10, 13}, + {1097, 10, 11}, + {1203, 10, 12}, + {1202, 10, 12}, + {1221, 10, 13}, { 864, 10, 14}, { 862, 10, 14}, - {1073, 10, 15}, - {1076, 10, 15}, - {1089, 10, 16}, - {1088, 10, 16}, + {1077, 10, 15}, + {1080, 10, 15}, + {1093, 10, 16}, + {1092, 10, 16}, { 517, 10, 17}, { 516, 10, 17}, { 869, 11, 0}, @@ -2452,8 +2460,8 @@ RE_PropertyValue re_property_values[] = { { 142, 11, 1}, { 565, 11, 2}, { 559, 11, 2}, - {1217, 11, 3}, - {1211, 11, 3}, + {1221, 11, 3}, + {1215, 11, 3}, { 519, 11, 4}, { 503, 11, 4}, { 864, 11, 5}, @@ -2473,7 +2481,7 @@ RE_PropertyValue re_property_values[] = { { 521, 12, 12}, { 562, 12, 13}, { 567, 12, 14}, - {1145, 12, 14}, + {1149, 12, 14}, { 580, 12, 15}, { 584, 12, 16}, { 585, 12, 17}, @@ -2488,36 +2496,36 @@ RE_PropertyValue re_property_values[] = { { 887, 12, 26}, { 902, 12, 27}, { 968, 12, 28}, - {1006, 12, 29}, - {1007, 12, 30}, - {1016, 12, 31}, - {1018, 12, 32}, - {1038, 12, 33}, - {1039, 12, 34}, - {1051, 12, 35}, - {1053, 12, 36}, - {1061, 12, 37}, - {1117, 12, 38}, - {1130, 12, 39}, - {1143, 12, 40}, - {1144, 12, 41}, - {1150, 12, 42}, - {1214, 12, 43}, - {1124, 12, 44}, - {1233, 12, 45}, - {1234, 12, 46}, - {1235, 12, 47}, - {1243, 12, 48}, - {1244, 12, 49}, - {1247, 12, 50}, - {1248, 12, 51}, + {1010, 12, 29}, + {1011, 12, 30}, + {1020, 12, 31}, + {1022, 12, 32}, + {1042, 12, 33}, + {1043, 12, 34}, + {1055, 12, 35}, + {1057, 12, 36}, + {1065, 12, 37}, + {1121, 12, 38}, + {1134, 12, 39}, + {1147, 12, 40}, + {1148, 12, 41}, + {1154, 12, 42}, + {1218, 12, 43}, + {1128, 12, 44}, + {1237, 12, 45}, + {1238, 12, 46}, + {1239, 12, 47}, + {1247, 12, 48}, + {1248, 12, 49}, + {1251, 12, 50}, + {1252, 12, 51}, { 669, 12, 52}, { 506, 12, 53}, { 264, 12, 54}, { 505, 12, 55}, { 904, 12, 56}, - {1030, 12, 57}, - {1092, 12, 58}, + {1034, 12, 57}, + {1096, 12, 58}, { 769, 12, 59}, { 770, 12, 60}, { 771, 12, 61}, @@ -2546,25 +2554,25 @@ RE_PropertyValue re_property_values[] = { { 794, 12, 84}, { 795, 12, 85}, { 884, 13, 0}, - {1175, 13, 0}, + {1179, 13, 0}, { 644, 13, 1}, { 267, 13, 1}, { 462, 13, 2}, { 426, 13, 2}, - {1021, 13, 3}, - {1012, 13, 3}, + {1025, 13, 3}, + {1016, 13, 3}, { 712, 13, 4}, { 682, 13, 4}, - {1171, 13, 5}, - {1125, 13, 5}, - {1185, 14, 0}, - {1231, 14, 0}, + {1175, 13, 5}, + {1129, 13, 5}, + {1189, 14, 0}, + {1235, 14, 0}, { 926, 14, 1}, { 925, 14, 1}, { 363, 14, 2}, { 360, 14, 2}, - {1010, 14, 3}, - {1009, 14, 3}, + {1014, 14, 3}, + {1013, 14, 3}, { 537, 14, 4}, { 534, 14, 4}, { 886, 14, 5}, @@ -2572,12 +2580,12 @@ RE_PropertyValue re_property_values[] = { { 498, 14, 6}, { 497, 14, 6}, { 259, 14, 7}, - {1118, 14, 7}, + {1122, 14, 7}, { 617, 14, 8}, { 632, 14, 8}, - { 992, 14, 9}, - { 991, 14, 9}, - { 989, 14, 10}, + { 996, 14, 9}, + { 995, 14, 9}, + { 993, 14, 10}, { 986, 14, 10}, { 899, 14, 11}, { 894, 14, 11}, @@ -2596,8 +2604,8 @@ RE_PropertyValue re_property_values[] = { { 219, 14, 17}, { 256, 14, 18}, { 207, 14, 18}, - {1082, 14, 19}, - {1081, 14, 19}, + {1086, 14, 19}, + {1085, 14, 19}, { 766, 14, 20}, { 234, 14, 20}, { 279, 14, 21}, @@ -2607,19 +2615,19 @@ RE_PropertyValue re_property_values[] = { { 393, 14, 23}, { 284, 14, 23}, { 381, 14, 24}, - {1037, 14, 24}, + {1041, 14, 24}, { 163, 14, 25}, { 149, 14, 25}, { 258, 14, 26}, { 206, 14, 26}, - {1116, 14, 27}, - {1057, 14, 27}, - {1254, 14, 28}, - {1253, 14, 28}, + {1120, 14, 27}, + {1061, 14, 27}, + {1258, 14, 28}, + {1257, 14, 28}, { 872, 14, 29}, { 876, 14, 29}, - {1221, 14, 30}, - {1218, 14, 30}, + {1225, 14, 30}, + {1222, 14, 30}, { 642, 14, 31}, { 650, 14, 32}, { 649, 14, 33}, @@ -2631,8 +2639,8 @@ RE_PropertyValue re_property_values[] = { { 594, 14, 37}, { 382, 14, 38}, { 336, 14, 38}, - {1014, 14, 39}, - {1019, 14, 39}, + {1018, 14, 39}, + {1023, 14, 39}, { 882, 15, 0}, { 899, 15, 1}, { 894, 15, 1}, @@ -2760,30 +2768,30 @@ RE_PropertyValue re_property_values[] = { { 20, 16, 117}, { 21, 16, 118}, { 859, 17, 0}, - {1020, 17, 1}, + {1024, 17, 1}, { 710, 17, 2}, - {1203, 17, 3}, + {1207, 17, 3}, { 711, 17, 4}, - {1164, 17, 5}, + {1168, 17, 5}, { 245, 17, 6}, - {1165, 17, 7}, - {1169, 17, 8}, - {1167, 17, 9}, - {1168, 17, 10}, + {1169, 17, 7}, + {1173, 17, 8}, + {1171, 17, 9}, + {1172, 17, 10}, { 246, 17, 11}, - {1166, 17, 12}, + {1170, 17, 12}, { 951, 17, 13}, { 934, 18, 0}, { 233, 18, 1}, - {1202, 18, 2}, + {1206, 18, 2}, { 202, 18, 3}, { 895, 18, 4}, - {1201, 18, 5}, - {1003, 18, 6}, + {1205, 18, 5}, + {1007, 18, 6}, { 628, 18, 7}, - {1206, 18, 8}, - {1205, 18, 9}, - {1204, 18, 10}, + {1210, 18, 8}, + {1209, 18, 9}, + {1208, 18, 10}, { 389, 18, 11}, { 384, 18, 12}, { 385, 18, 13}, @@ -2794,11 +2802,11 @@ RE_PropertyValue re_property_values[] = { { 386, 18, 18}, { 387, 18, 19}, { 843, 18, 20}, - {1162, 18, 21}, - {1163, 18, 22}, + {1166, 18, 21}, + {1167, 18, 22}, { 524, 18, 23}, { 276, 18, 24}, - {1015, 18, 25}, + {1019, 18, 25}, { 883, 18, 26}, { 646, 18, 27}, { 898, 18, 28}, @@ -12508,6 +12516,442 @@ RE_UINT32 re_get_xdigit(RE_UINT32 ch) { return value; } +/* Posix_Digit. */ + +static RE_UINT8 re_posix_digit_stage_1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, +}; + +static RE_UINT8 re_posix_digit_stage_2[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_digit_stage_3[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_digit_stage_4[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_digit_stage_5[] = { + 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +/* Posix_Digit: 97 bytes. */ + +RE_UINT32 re_get_posix_digit(RE_UINT32 ch) { + RE_UINT32 code; + RE_UINT32 f; + RE_UINT32 pos; + RE_UINT32 value; + + f = ch >> 16; + code = ch ^ (f << 16); + pos = (RE_UINT32)re_posix_digit_stage_1[f] << 4; + f = code >> 12; + code ^= f << 12; + pos = (RE_UINT32)re_posix_digit_stage_2[pos + f] << 3; + f = code >> 9; + code ^= f << 9; + pos = (RE_UINT32)re_posix_digit_stage_3[pos + f] << 3; + f = code >> 6; + code ^= f << 6; + pos = (RE_UINT32)re_posix_digit_stage_4[pos + f] << 6; + pos += code; + value = (re_posix_digit_stage_5[pos >> 3] >> (pos & 0x7)) & 0x1; + + return value; +} + +/* Posix_AlNum. */ + +static RE_UINT8 re_posix_alnum_stage_1[] = { + 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, +}; + +static RE_UINT8 re_posix_alnum_stage_2[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 13, 13, 13, 14, + 15, 16, 17, 18, 19, 13, 20, 13, 13, 13, 13, 13, 13, 21, 13, 13, + 13, 13, 13, 13, 13, 13, 22, 23, 13, 13, 24, 13, 13, 25, 26, 13, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 27, 7, 28, 29, 13, 13, 13, 13, 13, 13, 13, 30, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +}; + +static RE_UINT8 re_posix_alnum_stage_3[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 28, + 29, 30, 31, 31, 32, 31, 31, 31, 31, 31, 31, 31, 33, 34, 35, 31, + 36, 37, 31, 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 39, + 1, 1, 1, 1, 40, 1, 41, 42, 43, 44, 45, 46, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 47, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 1, 48, 49, 1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 1, 59, + 60, 61, 62, 63, 64, 31, 31, 31, 65, 66, 67, 68, 69, 70, 71, 31, + 72, 31, 73, 31, 31, 31, 31, 31, 1, 1, 1, 74, 75, 31, 31, 31, + 1, 1, 1, 1, 76, 31, 31, 31, 1, 1, 77, 78, 31, 31, 31, 79, + 80, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 81, 31, 31, 31, + 31, 31, 31, 31, 82, 83, 84, 85, 86, 31, 31, 31, 31, 31, 87, 31, + 31, 88, 31, 31, 31, 31, 31, 31, 1, 1, 1, 1, 1, 1, 89, 1, + 1, 1, 1, 1, 1, 1, 1, 90, 91, 31, 31, 31, 31, 31, 31, 31, + 1, 1, 91, 31, 31, 31, 31, 31, +}; + +static RE_UINT8 re_posix_alnum_stage_4[] = { + 0, 1, 2, 2, 0, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 6, 7, 0, 0, 8, 9, 10, 11, 5, 12, + 5, 5, 5, 5, 13, 5, 5, 5, 5, 14, 15, 16, 17, 18, 19, 20, + 21, 5, 22, 23, 5, 5, 24, 25, 26, 5, 27, 5, 5, 28, 29, 30, + 31, 32, 33, 0, 0, 34, 0, 35, 5, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 48, 52, 53, 54, 55, 56, 0, + 57, 58, 59, 50, 60, 61, 62, 63, 60, 64, 65, 66, 67, 68, 69, 70, + 16, 71, 72, 0, 73, 74, 75, 0, 76, 0, 77, 78, 79, 80, 0, 0, + 5, 81, 26, 82, 83, 5, 84, 85, 5, 5, 86, 5, 87, 88, 89, 5, + 90, 5, 91, 0, 92, 5, 5, 93, 16, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 94, 2, 5, 5, 95, 96, 97, 97, 98, 5, 99, 100, 0, + 0, 5, 5, 101, 5, 102, 5, 103, 104, 105, 26, 106, 5, 107, 108, 0, + 109, 5, 104, 110, 0, 111, 0, 0, 5, 112, 113, 0, 5, 114, 5, 115, + 5, 103, 116, 117, 0, 0, 0, 118, 5, 5, 5, 5, 5, 5, 0, 119, + 120, 5, 121, 117, 5, 122, 123, 124, 0, 0, 0, 125, 126, 0, 0, 0, + 127, 128, 129, 5, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 5, 108, 5, 132, 104, 5, 5, 5, 5, 133, + 5, 84, 5, 134, 135, 136, 136, 5, 0, 137, 0, 0, 0, 0, 0, 0, + 138, 139, 16, 5, 140, 16, 5, 85, 141, 142, 5, 5, 143, 71, 0, 26, + 5, 5, 5, 5, 5, 103, 0, 0, 5, 5, 5, 5, 5, 5, 32, 0, + 5, 5, 5, 5, 32, 0, 26, 117, 144, 145, 5, 146, 147, 5, 5, 92, + 148, 149, 5, 5, 150, 151, 0, 148, 152, 17, 5, 97, 5, 5, 50, 153, + 29, 102, 34, 80, 5, 154, 137, 155, 5, 135, 156, 157, 5, 104, 158, 159, + 160, 161, 85, 162, 0, 0, 5, 163, 5, 5, 5, 5, 5, 164, 165, 109, + 5, 5, 5, 166, 5, 5, 167, 0, 168, 169, 170, 5, 5, 28, 171, 5, + 5, 117, 26, 5, 172, 5, 17, 173, 0, 0, 0, 174, 5, 5, 5, 80, + 0, 2, 2, 175, 5, 104, 176, 0, 177, 178, 179, 0, 5, 5, 5, 71, + 0, 0, 5, 93, 0, 0, 0, 0, 0, 0, 0, 0, 80, 5, 180, 0, + 5, 26, 102, 71, 117, 5, 181, 0, 5, 5, 5, 5, 117, 0, 0, 0, + 5, 182, 5, 50, 0, 0, 0, 0, 5, 135, 103, 17, 0, 0, 0, 0, + 183, 184, 103, 135, 104, 0, 0, 0, 103, 167, 0, 0, 5, 185, 0, 0, + 186, 97, 0, 80, 80, 0, 77, 187, 5, 103, 103, 34, 28, 0, 0, 0, + 5, 5, 130, 0, 0, 0, 0, 0, 5, 5, 188, 0, 149, 33, 26, 130, + 5, 34, 26, 189, 5, 5, 190, 0, 191, 192, 0, 0, 0, 26, 5, 130, + 51, 48, 193, 50, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 194, 0, + 0, 0, 0, 0, 5, 195, 0, 0, 5, 104, 196, 0, 5, 103, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 197, 0, 0, 0, 0, 0, 0, 5, 33, + 5, 5, 5, 5, 33, 0, 0, 0, 5, 5, 5, 143, 0, 0, 0, 0, + 5, 143, 0, 0, 0, 0, 0, 0, 5, 33, 104, 0, 0, 0, 26, 156, + 5, 135, 50, 198, 92, 0, 0, 0, 5, 5, 199, 104, 171, 0, 0, 0, + 200, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 201, 202, 0, 0, 0, + 5, 5, 203, 5, 204, 205, 206, 5, 207, 208, 209, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 210, 211, 85, 203, 203, 132, 132, 212, 212, 213, 0, + 5, 5, 5, 5, 5, 5, 187, 0, 206, 214, 215, 216, 217, 218, 0, 0, + 0, 26, 219, 219, 108, 0, 0, 0, 5, 5, 5, 5, 5, 5, 135, 0, + 5, 93, 5, 5, 5, 5, 5, 5, 117, 0, 0, 0, 0, 0, 0, 0, +}; + +static RE_UINT8 re_posix_alnum_stage_5[] = { + 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 0, 4, 32, 4, + 255, 255, 127, 255, 255, 255, 255, 255, 195, 255, 3, 0, 31, 80, 0, 0, + 32, 0, 0, 0, 0, 0, 223, 188, 64, 215, 255, 255, 251, 255, 255, 255, + 255, 255, 191, 255, 3, 252, 255, 255, 255, 255, 254, 255, 255, 255, 127, 2, + 254, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 191, 182, 0, 255, 255, + 255, 7, 7, 0, 0, 0, 255, 7, 255, 255, 255, 254, 0, 192, 255, 255, + 255, 255, 239, 31, 254, 225, 0, 156, 0, 0, 255, 255, 0, 224, 255, 255, + 255, 255, 3, 0, 0, 252, 255, 255, 255, 7, 48, 4, 255, 255, 255, 252, + 255, 31, 0, 0, 255, 255, 255, 1, 255, 255, 7, 0, 240, 3, 255, 255, + 255, 255, 255, 239, 255, 223, 225, 255, 15, 0, 254, 255, 239, 159, 249, 255, + 255, 253, 197, 227, 159, 89, 128, 176, 15, 0, 3, 0, 238, 135, 249, 255, + 255, 253, 109, 195, 135, 25, 2, 94, 0, 0, 63, 0, 238, 191, 251, 255, + 255, 253, 237, 227, 191, 27, 1, 0, 15, 0, 0, 0, 238, 159, 249, 255, + 159, 25, 192, 176, 15, 0, 2, 0, 236, 199, 61, 214, 24, 199, 255, 195, + 199, 29, 129, 0, 239, 223, 253, 255, 255, 253, 255, 227, 223, 29, 96, 3, + 238, 223, 253, 255, 255, 253, 239, 227, 223, 29, 96, 64, 15, 0, 6, 0, + 255, 255, 255, 231, 223, 93, 128, 0, 15, 0, 0, 252, 236, 255, 127, 252, + 255, 255, 251, 47, 127, 128, 95, 255, 0, 0, 12, 0, 255, 255, 255, 7, + 127, 32, 0, 0, 150, 37, 240, 254, 174, 236, 255, 59, 95, 32, 0, 240, + 1, 0, 0, 0, 255, 254, 255, 255, 255, 31, 254, 255, 3, 255, 255, 254, + 255, 255, 255, 31, 255, 255, 127, 249, 231, 193, 255, 255, 127, 64, 0, 48, + 191, 32, 255, 255, 255, 255, 255, 247, 255, 61, 127, 61, 255, 61, 255, 255, + 255, 255, 61, 127, 61, 255, 127, 255, 255, 255, 61, 255, 255, 255, 255, 135, + 255, 255, 0, 0, 255, 255, 31, 0, 255, 159, 255, 255, 255, 199, 255, 1, + 255, 223, 15, 0, 255, 255, 15, 0, 255, 223, 13, 0, 255, 255, 207, 255, + 255, 1, 128, 16, 255, 255, 255, 0, 255, 7, 255, 255, 255, 255, 63, 0, + 255, 255, 255, 127, 255, 15, 255, 1, 255, 63, 31, 0, 255, 15, 255, 255, + 255, 3, 0, 0, 255, 255, 255, 15, 254, 255, 31, 0, 128, 0, 0, 0, + 255, 255, 239, 255, 239, 15, 0, 0, 255, 243, 0, 252, 191, 255, 3, 0, + 0, 224, 0, 252, 255, 255, 255, 63, 0, 222, 111, 0, 128, 255, 31, 0, + 255, 255, 63, 63, 63, 63, 255, 170, 255, 255, 223, 95, 220, 31, 207, 15, + 255, 31, 220, 31, 0, 0, 2, 128, 0, 0, 255, 31, 132, 252, 47, 62, + 80, 189, 255, 243, 224, 67, 0, 0, 255, 1, 0, 0, 0, 0, 192, 255, + 255, 127, 255, 255, 31, 120, 12, 0, 255, 128, 0, 0, 255, 255, 127, 0, + 127, 127, 127, 127, 0, 128, 0, 0, 224, 0, 0, 0, 254, 3, 62, 31, + 255, 255, 127, 224, 224, 255, 255, 255, 255, 63, 254, 255, 255, 127, 0, 0, + 255, 31, 255, 255, 0, 12, 0, 0, 255, 127, 240, 143, 255, 255, 255, 191, + 0, 0, 128, 255, 252, 255, 255, 255, 255, 121, 255, 255, 255, 63, 3, 0, + 187, 247, 255, 255, 0, 0, 252, 8, 255, 255, 247, 255, 223, 255, 0, 124, + 255, 63, 0, 0, 255, 255, 127, 196, 5, 0, 0, 56, 255, 255, 60, 0, + 126, 126, 126, 0, 127, 127, 255, 255, 48, 0, 0, 0, 255, 7, 0, 0, + 15, 0, 255, 255, 127, 248, 255, 255, 255, 63, 255, 255, 255, 255, 255, 3, + 127, 0, 248, 224, 255, 253, 127, 95, 219, 255, 255, 255, 0, 0, 248, 255, + 255, 255, 252, 255, 0, 0, 255, 15, 0, 0, 223, 255, 192, 255, 255, 255, + 252, 252, 252, 28, 255, 239, 255, 255, 127, 255, 255, 183, 255, 63, 255, 63, + 255, 255, 1, 0, 15, 255, 62, 0, 255, 0, 255, 255, 63, 253, 255, 255, + 255, 255, 191, 145, 255, 255, 255, 192, 111, 240, 239, 254, 31, 0, 0, 0, + 63, 0, 0, 0, 255, 255, 71, 0, 30, 0, 0, 4, 255, 255, 251, 255, + 255, 255, 159, 0, 159, 25, 128, 224, 179, 0, 0, 0, 255, 255, 63, 127, + 17, 0, 0, 0, 0, 0, 0, 128, 248, 255, 255, 224, 31, 0, 255, 255, + 3, 0, 0, 0, 255, 7, 255, 31, 255, 1, 255, 67, 255, 255, 223, 255, + 255, 255, 255, 223, 100, 222, 255, 235, 239, 255, 255, 255, 191, 231, 223, 223, + 255, 255, 255, 123, 95, 252, 253, 255, 63, 255, 255, 255, 253, 255, 255, 247, + 255, 253, 255, 255, 247, 15, 0, 0, 150, 254, 247, 10, 132, 234, 150, 170, + 150, 247, 247, 94, 255, 251, 255, 15, 238, 251, 255, 15, 255, 3, 255, 255, +}; + +/* Posix_AlNum: 2009 bytes. */ + +RE_UINT32 re_get_posix_alnum(RE_UINT32 ch) { + RE_UINT32 code; + RE_UINT32 f; + RE_UINT32 pos; + RE_UINT32 value; + + f = ch >> 16; + code = ch ^ (f << 16); + pos = (RE_UINT32)re_posix_alnum_stage_1[f] << 5; + f = code >> 11; + code ^= f << 11; + pos = (RE_UINT32)re_posix_alnum_stage_2[pos + f] << 3; + f = code >> 8; + code ^= f << 8; + pos = (RE_UINT32)re_posix_alnum_stage_3[pos + f] << 3; + f = code >> 5; + code ^= f << 5; + pos = (RE_UINT32)re_posix_alnum_stage_4[pos + f] << 5; + pos += code; + value = (re_posix_alnum_stage_5[pos >> 3] >> (pos & 0x7)) & 0x1; + + return value; +} + +/* Posix_Punct. */ + +static RE_UINT8 re_posix_punct_stage_1[] = { + 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, +}; + +static RE_UINT8 re_posix_punct_stage_2[] = { + 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 7, + 8, 9, 10, 5, 5, 5, 11, 5, 5, 5, 5, 12, 5, 13, 14, 15, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +}; + +static RE_UINT8 re_posix_punct_stage_3[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 28, 29, 30, 31, 26, 26, 26, 26, 26, 26, 26, 32, 33, 34, + 35, 36, 37, 26, 38, 39, 26, 26, 40, 41, 42, 43, 26, 26, 26, 26, + 26, 26, 44, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 45, 26, 26, + 26, 26, 26, 26, 26, 26, 46, 26, 47, 48, 26, 49, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 50, 51, 52, 53, 54, 55, 26, 26, 26, +}; + +static RE_UINT8 re_posix_punct_stage_4[] = { + 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 4, 6, 7, 8, + 4, 4, 9, 4, 4, 10, 11, 12, 13, 14, 4, 15, 16, 4, 4, 17, + 18, 19, 4, 4, 4, 20, 4, 21, 4, 4, 4, 22, 4, 23, 4, 24, + 4, 25, 4, 4, 4, 26, 4, 27, 25, 28, 4, 4, 29, 4, 30, 31, + 4, 32, 33, 34, 4, 4, 4, 4, 4, 4, 4, 4, 4, 35, 36, 4, + 37, 4, 4, 4, 4, 4, 4, 4, 4, 38, 39, 40, 41, 4, 4, 42, + 43, 4, 4, 4, 4, 44, 4, 45, 33, 4, 46, 4, 4, 47, 4, 48, + 49, 50, 4, 51, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 52, 53, + 54, 55, 56, 4, 57, 58, 59, 60, 60, 60, 60, 60, 60, 60, 60, 61, + 62, 43, 63, 4, 60, 60, 60, 60, 60, 60, 60, 60, 60, 64, 65, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 66, 67, 68, + 4, 4, 4, 69, 4, 23, 4, 4, 70, 71, 72, 73, 60, 60, 60, 74, + 75, 4, 76, 34, 4, 4, 77, 78, 79, 80, 81, 82, 60, 60, 60, 60, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 60, + 4, 4, 59, 83, 4, 4, 4, 4, 84, 85, 4, 86, 87, 4, 88, 4, + 89, 90, 4, 91, 92, 93, 4, 94, 4, 95, 4, 96, 4, 97, 4, 98, + 4, 4, 4, 4, 99, 4, 100, 101, 4, 4, 4, 4, 50, 4, 4, 102, + 103, 104, 4, 4, 105, 106, 4, 107, 4, 4, 4, 4, 108, 109, 110, 111, + 4, 4, 4, 4, 4, 4, 93, 112, 4, 4, 4, 4, 4, 113, 4, 4, + 4, 114, 4, 4, 115, 4, 4, 4, 4, 116, 4, 117, 109, 4, 118, 4, + 4, 119, 120, 101, 4, 121, 4, 122, 123, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 124, 4, 4, 4, 125, 4, 126, 4, 4, 4, 4, 4, 4, + 4, 127, 4, 4, 4, 4, 4, 4, 4, 92, 4, 128, 129, 130, 4, 4, + 4, 4, 131, 4, 4, 4, 4, 4, 60, 60, 60, 64, 132, 133, 134, 135, + 60, 136, 4, 4, 60, 137, 4, 4, 4, 4, 4, 138, 139, 140, 141, 142, + 4, 4, 4, 22, 4, 4, 4, 4, 143, 60, 144, 145, 146, 147, 148, 149, + 150, 151, 4, 4, 152, 153, 60, 154, 60, 60, 60, 82, 60, 155, 156, 60, + 60, 157, 60, 158, 60, 73, 60, 159, 160, 161, 162, 4, 4, 4, 4, 4, +}; + +static RE_UINT8 re_posix_punct_stage_5[] = { + 0, 0, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, 1, 0, 0, 120, + 0, 0, 0, 0, 254, 219, 211, 137, 0, 0, 128, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 252, 255, 224, 175, 255, 255, + 0, 0, 0, 0, 0, 0, 32, 64, 176, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 252, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 64, + 73, 0, 0, 0, 0, 0, 24, 0, 192, 255, 0, 200, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 16, 64, 0, 2, 0, 96, + 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 3, + 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 0, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 12, + 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 248, 7, 0, 0, 0, 0, 0, 0, 0, 128, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 128, 0, 12, 0, 0, 0, 0, 254, 255, 255, 252, 0, 0, 80, 61, + 32, 0, 0, 0, 0, 0, 0, 192, 191, 223, 255, 7, 0, 0, 0, 0, + 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 255, 1, 0, 0, + 0, 0, 255, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 112, 15, 0, 0, 0, 0, 255, 7, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255, 255, + 0, 0, 0, 0, 127, 63, 0, 0, 0, 0, 0, 252, 255, 7, 240, 31, + 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 248, + 0, 0, 0, 0, 0, 0, 0, 192, 255, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 160, 3, 224, 0, 224, 0, 224, 0, 96, + 0, 0, 255, 255, 255, 0, 255, 255, 255, 255, 255, 127, 0, 0, 0, 124, + 0, 124, 0, 0, 255, 255, 255, 63, 123, 3, 208, 193, 175, 66, 0, 12, + 31, 188, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, + 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 240, 255, 255, 63, 0, + 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 240, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 207, 255, 255, 255, 63, 255, 255, 255, 255, 227, + 255, 253, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 7, 0, 222, + 255, 255, 255, 255, 255, 127, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, + 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, + 255, 255, 63, 0, 0, 0, 255, 15, 30, 255, 255, 255, 1, 0, 193, 224, + 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 195, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 15, 0, 0, 0, 255, 255, 255, 127, 0, 252, 255, 255, + 255, 0, 1, 0, 255, 255, 255, 255, 0, 252, 255, 255, 255, 255, 1, 0, + 255, 255, 255, 255, 255, 255, 255, 127, 127, 0, 0, 0, 0, 0, 0, 192, + 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, + 0, 0, 0, 0, 0, 0, 252, 0, 255, 255, 127, 0, 3, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 192, 3, + 0, 0, 0, 0, 0, 0, 240, 0, 0, 192, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, + 254, 63, 0, 192, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 128, 3, + 0, 0, 0, 192, 0, 0, 3, 0, 0, 0, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 252, 255, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 255, 3, 0, 0, 255, 255, + 255, 255, 247, 255, 127, 15, 0, 0, 254, 255, 0, 252, 1, 0, 0, 248, + 1, 0, 0, 248, 63, 0, 0, 0, 0, 0, 0, 0, 127, 127, 0, 48, + 7, 0, 0, 0, 0, 0, 128, 255, 0, 0, 0, 0, 0, 0, 0, 254, + 255, 19, 255, 15, 1, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 31, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, + 0, 0, 128, 0, 0, 0, 128, 1, 0, 0, 0, 128, 0, 0, 0, 128, + 0, 0, 255, 1, 0, 0, 0, 128, 0, 1, 0, 0, 0, 0, 127, 0, + 0, 0, 0, 30, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 216, 15, 0, 0, 0, 0, 0, 48, 0, + 224, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 0, 0, 0, 0, 0, 0, 0, 254, 3, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 128, 255, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, + 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 31, 28, 0, 0, + 24, 240, 255, 255, 255, 195, 255, 255, 255, 255, 255, 63, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 255, 255, 127, 0, 0, 0, 0, 0, + 2, 0, 0, 8, 0, 0, 0, 8, 0, 0, 32, 0, 0, 0, 32, 0, + 0, 128, 0, 0, 0, 128, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 15, 255, 255, + 255, 255, 15, 0, 255, 127, 254, 255, 254, 255, 254, 255, 255, 255, 63, 0, + 0, 0, 255, 255, 255, 127, 0, 0, 0, 252, 0, 0, 0, 12, 0, 0, + 0, 252, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 255, 255, + 7, 0, 255, 255, 255, 255, 255, 7, 255, 1, 3, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, + 255, 127, 240, 255, 255, 255, 255, 0, 255, 7, 255, 255, 255, 255, 255, 251, + 255, 255, 255, 255, 239, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 0, 0, 255, 31, 15, 0, 255, 255, 31, 0, 0, 0, 0, 0, + 255, 15, 255, 255, 255, 255, 255, 255, 255, 0, 255, 3, 255, 255, 255, 255, + 255, 0, 255, 255, 255, 63, 0, 0, +}; + +/* Posix_Punct: 1945 bytes. */ + +RE_UINT32 re_get_posix_punct(RE_UINT32 ch) { + RE_UINT32 code; + RE_UINT32 f; + RE_UINT32 pos; + RE_UINT32 value; + + f = ch >> 16; + code = ch ^ (f << 16); + pos = (RE_UINT32)re_posix_punct_stage_1[f] << 4; + f = code >> 12; + code ^= f << 12; + pos = (RE_UINT32)re_posix_punct_stage_2[pos + f] << 3; + f = code >> 9; + code ^= f << 9; + pos = (RE_UINT32)re_posix_punct_stage_3[pos + f] << 3; + f = code >> 6; + code ^= f << 6; + pos = (RE_UINT32)re_posix_punct_stage_4[pos + f] << 6; + pos += code; + value = (re_posix_punct_stage_5[pos >> 3] >> (pos & 0x7)) & 0x1; + + return value; +} + +/* Posix_XDigit. */ + +static RE_UINT8 re_posix_xdigit_stage_1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, +}; + +static RE_UINT8 re_posix_xdigit_stage_2[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_xdigit_stage_3[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_xdigit_stage_4[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; + +static RE_UINT8 re_posix_xdigit_stage_5[] = { + 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +/* Posix_XDigit: 97 bytes. */ + +RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch) { + RE_UINT32 code; + RE_UINT32 f; + RE_UINT32 pos; + RE_UINT32 value; + + f = ch >> 16; + code = ch ^ (f << 16); + pos = (RE_UINT32)re_posix_xdigit_stage_1[f] << 3; + f = code >> 13; + code ^= f << 13; + pos = (RE_UINT32)re_posix_xdigit_stage_2[pos + f] << 3; + f = code >> 10; + code ^= f << 10; + pos = (RE_UINT32)re_posix_xdigit_stage_3[pos + f] << 3; + f = code >> 7; + code ^= f << 7; + pos = (RE_UINT32)re_posix_xdigit_stage_4[pos + f] << 7; + pos += code; + value = (re_posix_xdigit_stage_5[pos >> 3] >> (pos & 0x7)) & 0x1; + + return value; +} + /* All_Cases. */ static RE_UINT8 re_all_cases_stage_1[] = { @@ -13453,4 +13897,8 @@ RE_GetPropertyFunc re_get_property[] = { re_get_print, re_get_word, re_get_xdigit, + re_get_posix_digit, + re_get_posix_alnum, + re_get_posix_punct, + re_get_posix_xdigit, }; diff --git a/src/regex/_regex_unicode.h b/src/regex/_regex_unicode.h index f0d49b4d39..112f1b20bd 100644 --- a/src/regex/_regex_unicode.h +++ b/src/regex/_regex_unicode.h @@ -97,6 +97,10 @@ typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch); #define RE_PROP_UPPER 0x090001 #define RE_PROP_WORD 0x4B0001 #define RE_PROP_XDIGIT 0x4C0001 +#define RE_PROP_POSIX_ALNUM 0x4E0001 +#define RE_PROP_POSIX_DIGIT 0x4D0001 +#define RE_PROP_POSIX_PUNCT 0x4F0001 +#define RE_PROP_POSIX_XDIGIT 0x500001 #define RE_BREAK_OTHER 0 #define RE_BREAK_DOUBLEQUOTE 1 @@ -130,11 +134,11 @@ typedef RE_UINT32 (*RE_GetPropertyFunc)(RE_UINT32 ch); #define RE_GBREAK_LVT 11 #define RE_GBREAK_PREPEND 12 -extern char* re_strings[1257]; -extern RE_Property re_properties[143]; +extern char* re_strings[1261]; +extern RE_Property re_properties[147]; extern RE_PropertyValue re_property_values[1372]; extern RE_UINT16 re_expand_on_folding[104]; -extern RE_GetPropertyFunc re_get_property[77]; +extern RE_GetPropertyFunc re_get_property[81]; RE_UINT32 re_get_general_category(RE_UINT32 ch); RE_UINT32 re_get_block(RE_UINT32 ch); @@ -213,6 +217,10 @@ RE_UINT32 re_get_graph(RE_UINT32 ch); RE_UINT32 re_get_print(RE_UINT32 ch); RE_UINT32 re_get_word(RE_UINT32 ch); RE_UINT32 re_get_xdigit(RE_UINT32 ch); +RE_UINT32 re_get_posix_digit(RE_UINT32 ch); +RE_UINT32 re_get_posix_alnum(RE_UINT32 ch); +RE_UINT32 re_get_posix_punct(RE_UINT32 ch); +RE_UINT32 re_get_posix_xdigit(RE_UINT32 ch); int re_get_all_cases(RE_UINT32 ch, RE_UINT32* codepoints); RE_UINT32 re_get_simple_case_folding(RE_UINT32 ch); int re_get_full_case_folding(RE_UINT32 ch, RE_UINT32* codepoints);