REAL
Regular Expression Algorithmic Library — constexpr C++20 regex
Loading...
Searching...
No Matches
unicode_props.hpp
Go to the documentation of this file.
1
10#ifndef REAL_UNICODE_PROPS_HPP
11#define REAL_UNICODE_PROPS_HPP
12
13// Internal — do not include directly.
14// Users: #include <real/real.hpp> (or the documented opt-ins <real/dfa.hpp>, <real/std/regex.hpp>).
15
16#include "real/version.hpp"
17
18#include <cstddef>
19#include <cstdint>
20#include <span>
21
22#include "real/core/program.hpp" // code_range
23
24namespace real::detail {
25
27 inline constexpr const char* unicode_props_unidata_version {"16.0.0"};
28
30 inline constexpr code_range word_ranges[] {
31 {0x0030, 0x0039},
32 {0x0041, 0x005A},
33 {0x005F, 0x005F},
34 {0x0061, 0x007A},
35 {0x00AA, 0x00AA},
36 {0x00B2, 0x00B3},
37 {0x00B5, 0x00B5},
38 {0x00B9, 0x00BA},
39 {0x00BC, 0x00BE},
40 {0x00C0, 0x00D6},
41 {0x00D8, 0x00F6},
42 {0x00F8, 0x02C1},
43 {0x02C6, 0x02D1},
44 {0x02E0, 0x02E4},
45 {0x02EC, 0x02EC},
46 {0x02EE, 0x02EE},
47 {0x0370, 0x0374},
48 {0x0376, 0x0377},
49 {0x037A, 0x037D},
50 {0x037F, 0x037F},
51 {0x0386, 0x0386},
52 {0x0388, 0x038A},
53 {0x038C, 0x038C},
54 {0x038E, 0x03A1},
55 {0x03A3, 0x03F5},
56 {0x03F7, 0x0481},
57 {0x048A, 0x052F},
58 {0x0531, 0x0556},
59 {0x0559, 0x0559},
60 {0x0560, 0x0588},
61 {0x05D0, 0x05EA},
62 {0x05EF, 0x05F2},
63 {0x0620, 0x064A},
64 {0x0660, 0x0669},
65 {0x066E, 0x066F},
66 {0x0671, 0x06D3},
67 {0x06D5, 0x06D5},
68 {0x06E5, 0x06E6},
69 {0x06EE, 0x06FC},
70 {0x06FF, 0x06FF},
71 {0x0710, 0x0710},
72 {0x0712, 0x072F},
73 {0x074D, 0x07A5},
74 {0x07B1, 0x07B1},
75 {0x07C0, 0x07EA},
76 {0x07F4, 0x07F5},
77 {0x07FA, 0x07FA},
78 {0x0800, 0x0815},
79 {0x081A, 0x081A},
80 {0x0824, 0x0824},
81 {0x0828, 0x0828},
82 {0x0840, 0x0858},
83 {0x0860, 0x086A},
84 {0x0870, 0x0887},
85 {0x0889, 0x088E},
86 {0x08A0, 0x08C9},
87 {0x0904, 0x0939},
88 {0x093D, 0x093D},
89 {0x0950, 0x0950},
90 {0x0958, 0x0961},
91 {0x0966, 0x096F},
92 {0x0971, 0x0980},
93 {0x0985, 0x098C},
94 {0x098F, 0x0990},
95 {0x0993, 0x09A8},
96 {0x09AA, 0x09B0},
97 {0x09B2, 0x09B2},
98 {0x09B6, 0x09B9},
99 {0x09BD, 0x09BD},
100 {0x09CE, 0x09CE},
101 {0x09DC, 0x09DD},
102 {0x09DF, 0x09E1},
103 {0x09E6, 0x09F1},
104 {0x09F4, 0x09F9},
105 {0x09FC, 0x09FC},
106 {0x0A05, 0x0A0A},
107 {0x0A0F, 0x0A10},
108 {0x0A13, 0x0A28},
109 {0x0A2A, 0x0A30},
110 {0x0A32, 0x0A33},
111 {0x0A35, 0x0A36},
112 {0x0A38, 0x0A39},
113 {0x0A59, 0x0A5C},
114 {0x0A5E, 0x0A5E},
115 {0x0A66, 0x0A6F},
116 {0x0A72, 0x0A74},
117 {0x0A85, 0x0A8D},
118 {0x0A8F, 0x0A91},
119 {0x0A93, 0x0AA8},
120 {0x0AAA, 0x0AB0},
121 {0x0AB2, 0x0AB3},
122 {0x0AB5, 0x0AB9},
123 {0x0ABD, 0x0ABD},
124 {0x0AD0, 0x0AD0},
125 {0x0AE0, 0x0AE1},
126 {0x0AE6, 0x0AEF},
127 {0x0AF9, 0x0AF9},
128 {0x0B05, 0x0B0C},
129 {0x0B0F, 0x0B10},
130 {0x0B13, 0x0B28},
131 {0x0B2A, 0x0B30},
132 {0x0B32, 0x0B33},
133 {0x0B35, 0x0B39},
134 {0x0B3D, 0x0B3D},
135 {0x0B5C, 0x0B5D},
136 {0x0B5F, 0x0B61},
137 {0x0B66, 0x0B6F},
138 {0x0B71, 0x0B77},
139 {0x0B83, 0x0B83},
140 {0x0B85, 0x0B8A},
141 {0x0B8E, 0x0B90},
142 {0x0B92, 0x0B95},
143 {0x0B99, 0x0B9A},
144 {0x0B9C, 0x0B9C},
145 {0x0B9E, 0x0B9F},
146 {0x0BA3, 0x0BA4},
147 {0x0BA8, 0x0BAA},
148 {0x0BAE, 0x0BB9},
149 {0x0BD0, 0x0BD0},
150 {0x0BE6, 0x0BF2},
151 {0x0C05, 0x0C0C},
152 {0x0C0E, 0x0C10},
153 {0x0C12, 0x0C28},
154 {0x0C2A, 0x0C39},
155 {0x0C3D, 0x0C3D},
156 {0x0C58, 0x0C5A},
157 {0x0C5D, 0x0C5D},
158 {0x0C60, 0x0C61},
159 {0x0C66, 0x0C6F},
160 {0x0C78, 0x0C7E},
161 {0x0C80, 0x0C80},
162 {0x0C85, 0x0C8C},
163 {0x0C8E, 0x0C90},
164 {0x0C92, 0x0CA8},
165 {0x0CAA, 0x0CB3},
166 {0x0CB5, 0x0CB9},
167 {0x0CBD, 0x0CBD},
168 {0x0CDD, 0x0CDE},
169 {0x0CE0, 0x0CE1},
170 {0x0CE6, 0x0CEF},
171 {0x0CF1, 0x0CF2},
172 {0x0D04, 0x0D0C},
173 {0x0D0E, 0x0D10},
174 {0x0D12, 0x0D3A},
175 {0x0D3D, 0x0D3D},
176 {0x0D4E, 0x0D4E},
177 {0x0D54, 0x0D56},
178 {0x0D58, 0x0D61},
179 {0x0D66, 0x0D78},
180 {0x0D7A, 0x0D7F},
181 {0x0D85, 0x0D96},
182 {0x0D9A, 0x0DB1},
183 {0x0DB3, 0x0DBB},
184 {0x0DBD, 0x0DBD},
185 {0x0DC0, 0x0DC6},
186 {0x0DE6, 0x0DEF},
187 {0x0E01, 0x0E30},
188 {0x0E32, 0x0E33},
189 {0x0E40, 0x0E46},
190 {0x0E50, 0x0E59},
191 {0x0E81, 0x0E82},
192 {0x0E84, 0x0E84},
193 {0x0E86, 0x0E8A},
194 {0x0E8C, 0x0EA3},
195 {0x0EA5, 0x0EA5},
196 {0x0EA7, 0x0EB0},
197 {0x0EB2, 0x0EB3},
198 {0x0EBD, 0x0EBD},
199 {0x0EC0, 0x0EC4},
200 {0x0EC6, 0x0EC6},
201 {0x0ED0, 0x0ED9},
202 {0x0EDC, 0x0EDF},
203 {0x0F00, 0x0F00},
204 {0x0F20, 0x0F33},
205 {0x0F40, 0x0F47},
206 {0x0F49, 0x0F6C},
207 {0x0F88, 0x0F8C},
208 {0x1000, 0x102A},
209 {0x103F, 0x1049},
210 {0x1050, 0x1055},
211 {0x105A, 0x105D},
212 {0x1061, 0x1061},
213 {0x1065, 0x1066},
214 {0x106E, 0x1070},
215 {0x1075, 0x1081},
216 {0x108E, 0x108E},
217 {0x1090, 0x1099},
218 {0x10A0, 0x10C5},
219 {0x10C7, 0x10C7},
220 {0x10CD, 0x10CD},
221 {0x10D0, 0x10FA},
222 {0x10FC, 0x1248},
223 {0x124A, 0x124D},
224 {0x1250, 0x1256},
225 {0x1258, 0x1258},
226 {0x125A, 0x125D},
227 {0x1260, 0x1288},
228 {0x128A, 0x128D},
229 {0x1290, 0x12B0},
230 {0x12B2, 0x12B5},
231 {0x12B8, 0x12BE},
232 {0x12C0, 0x12C0},
233 {0x12C2, 0x12C5},
234 {0x12C8, 0x12D6},
235 {0x12D8, 0x1310},
236 {0x1312, 0x1315},
237 {0x1318, 0x135A},
238 {0x1369, 0x137C},
239 {0x1380, 0x138F},
240 {0x13A0, 0x13F5},
241 {0x13F8, 0x13FD},
242 {0x1401, 0x166C},
243 {0x166F, 0x167F},
244 {0x1681, 0x169A},
245 {0x16A0, 0x16EA},
246 {0x16EE, 0x16F8},
247 {0x1700, 0x1711},
248 {0x171F, 0x1731},
249 {0x1740, 0x1751},
250 {0x1760, 0x176C},
251 {0x176E, 0x1770},
252 {0x1780, 0x17B3},
253 {0x17D7, 0x17D7},
254 {0x17DC, 0x17DC},
255 {0x17E0, 0x17E9},
256 {0x17F0, 0x17F9},
257 {0x1810, 0x1819},
258 {0x1820, 0x1878},
259 {0x1880, 0x1884},
260 {0x1887, 0x18A8},
261 {0x18AA, 0x18AA},
262 {0x18B0, 0x18F5},
263 {0x1900, 0x191E},
264 {0x1946, 0x196D},
265 {0x1970, 0x1974},
266 {0x1980, 0x19AB},
267 {0x19B0, 0x19C9},
268 {0x19D0, 0x19DA},
269 {0x1A00, 0x1A16},
270 {0x1A20, 0x1A54},
271 {0x1A80, 0x1A89},
272 {0x1A90, 0x1A99},
273 {0x1AA7, 0x1AA7},
274 {0x1B05, 0x1B33},
275 {0x1B45, 0x1B4C},
276 {0x1B50, 0x1B59},
277 {0x1B83, 0x1BA0},
278 {0x1BAE, 0x1BE5},
279 {0x1C00, 0x1C23},
280 {0x1C40, 0x1C49},
281 {0x1C4D, 0x1C7D},
282 {0x1C80, 0x1C8A},
283 {0x1C90, 0x1CBA},
284 {0x1CBD, 0x1CBF},
285 {0x1CE9, 0x1CEC},
286 {0x1CEE, 0x1CF3},
287 {0x1CF5, 0x1CF6},
288 {0x1CFA, 0x1CFA},
289 {0x1D00, 0x1DBF},
290 {0x1E00, 0x1F15},
291 {0x1F18, 0x1F1D},
292 {0x1F20, 0x1F45},
293 {0x1F48, 0x1F4D},
294 {0x1F50, 0x1F57},
295 {0x1F59, 0x1F59},
296 {0x1F5B, 0x1F5B},
297 {0x1F5D, 0x1F5D},
298 {0x1F5F, 0x1F7D},
299 {0x1F80, 0x1FB4},
300 {0x1FB6, 0x1FBC},
301 {0x1FBE, 0x1FBE},
302 {0x1FC2, 0x1FC4},
303 {0x1FC6, 0x1FCC},
304 {0x1FD0, 0x1FD3},
305 {0x1FD6, 0x1FDB},
306 {0x1FE0, 0x1FEC},
307 {0x1FF2, 0x1FF4},
308 {0x1FF6, 0x1FFC},
309 {0x2070, 0x2071},
310 {0x2074, 0x2079},
311 {0x207F, 0x2089},
312 {0x2090, 0x209C},
313 {0x2102, 0x2102},
314 {0x2107, 0x2107},
315 {0x210A, 0x2113},
316 {0x2115, 0x2115},
317 {0x2119, 0x211D},
318 {0x2124, 0x2124},
319 {0x2126, 0x2126},
320 {0x2128, 0x2128},
321 {0x212A, 0x212D},
322 {0x212F, 0x2139},
323 {0x213C, 0x213F},
324 {0x2145, 0x2149},
325 {0x214E, 0x214E},
326 {0x2150, 0x2189},
327 {0x2460, 0x249B},
328 {0x24EA, 0x24FF},
329 {0x2776, 0x2793},
330 {0x2C00, 0x2CE4},
331 {0x2CEB, 0x2CEE},
332 {0x2CF2, 0x2CF3},
333 {0x2CFD, 0x2CFD},
334 {0x2D00, 0x2D25},
335 {0x2D27, 0x2D27},
336 {0x2D2D, 0x2D2D},
337 {0x2D30, 0x2D67},
338 {0x2D6F, 0x2D6F},
339 {0x2D80, 0x2D96},
340 {0x2DA0, 0x2DA6},
341 {0x2DA8, 0x2DAE},
342 {0x2DB0, 0x2DB6},
343 {0x2DB8, 0x2DBE},
344 {0x2DC0, 0x2DC6},
345 {0x2DC8, 0x2DCE},
346 {0x2DD0, 0x2DD6},
347 {0x2DD8, 0x2DDE},
348 {0x2E2F, 0x2E2F},
349 {0x3005, 0x3007},
350 {0x3021, 0x3029},
351 {0x3031, 0x3035},
352 {0x3038, 0x303C},
353 {0x3041, 0x3096},
354 {0x309D, 0x309F},
355 {0x30A1, 0x30FA},
356 {0x30FC, 0x30FF},
357 {0x3105, 0x312F},
358 {0x3131, 0x318E},
359 {0x3192, 0x3195},
360 {0x31A0, 0x31BF},
361 {0x31F0, 0x31FF},
362 {0x3220, 0x3229},
363 {0x3248, 0x324F},
364 {0x3251, 0x325F},
365 {0x3280, 0x3289},
366 {0x32B1, 0x32BF},
367 {0x3400, 0x4DBF},
368 {0x4E00, 0xA48C},
369 {0xA4D0, 0xA4FD},
370 {0xA500, 0xA60C},
371 {0xA610, 0xA62B},
372 {0xA640, 0xA66E},
373 {0xA67F, 0xA69D},
374 {0xA6A0, 0xA6EF},
375 {0xA717, 0xA71F},
376 {0xA722, 0xA788},
377 {0xA78B, 0xA7CD},
378 {0xA7D0, 0xA7D1},
379 {0xA7D3, 0xA7D3},
380 {0xA7D5, 0xA7DC},
381 {0xA7F2, 0xA801},
382 {0xA803, 0xA805},
383 {0xA807, 0xA80A},
384 {0xA80C, 0xA822},
385 {0xA830, 0xA835},
386 {0xA840, 0xA873},
387 {0xA882, 0xA8B3},
388 {0xA8D0, 0xA8D9},
389 {0xA8F2, 0xA8F7},
390 {0xA8FB, 0xA8FB},
391 {0xA8FD, 0xA8FE},
392 {0xA900, 0xA925},
393 {0xA930, 0xA946},
394 {0xA960, 0xA97C},
395 {0xA984, 0xA9B2},
396 {0xA9CF, 0xA9D9},
397 {0xA9E0, 0xA9E4},
398 {0xA9E6, 0xA9FE},
399 {0xAA00, 0xAA28},
400 {0xAA40, 0xAA42},
401 {0xAA44, 0xAA4B},
402 {0xAA50, 0xAA59},
403 {0xAA60, 0xAA76},
404 {0xAA7A, 0xAA7A},
405 {0xAA7E, 0xAAAF},
406 {0xAAB1, 0xAAB1},
407 {0xAAB5, 0xAAB6},
408 {0xAAB9, 0xAABD},
409 {0xAAC0, 0xAAC0},
410 {0xAAC2, 0xAAC2},
411 {0xAADB, 0xAADD},
412 {0xAAE0, 0xAAEA},
413 {0xAAF2, 0xAAF4},
414 {0xAB01, 0xAB06},
415 {0xAB09, 0xAB0E},
416 {0xAB11, 0xAB16},
417 {0xAB20, 0xAB26},
418 {0xAB28, 0xAB2E},
419 {0xAB30, 0xAB5A},
420 {0xAB5C, 0xAB69},
421 {0xAB70, 0xABE2},
422 {0xABF0, 0xABF9},
423 {0xAC00, 0xD7A3},
424 {0xD7B0, 0xD7C6},
425 {0xD7CB, 0xD7FB},
426 {0xF900, 0xFA6D},
427 {0xFA70, 0xFAD9},
428 {0xFB00, 0xFB06},
429 {0xFB13, 0xFB17},
430 {0xFB1D, 0xFB1D},
431 {0xFB1F, 0xFB28},
432 {0xFB2A, 0xFB36},
433 {0xFB38, 0xFB3C},
434 {0xFB3E, 0xFB3E},
435 {0xFB40, 0xFB41},
436 {0xFB43, 0xFB44},
437 {0xFB46, 0xFBB1},
438 {0xFBD3, 0xFD3D},
439 {0xFD50, 0xFD8F},
440 {0xFD92, 0xFDC7},
441 {0xFDF0, 0xFDFB},
442 {0xFE70, 0xFE74},
443 {0xFE76, 0xFEFC},
444 {0xFF10, 0xFF19},
445 {0xFF21, 0xFF3A},
446 {0xFF41, 0xFF5A},
447 {0xFF66, 0xFFBE},
448 {0xFFC2, 0xFFC7},
449 {0xFFCA, 0xFFCF},
450 {0xFFD2, 0xFFD7},
451 {0xFFDA, 0xFFDC},
452 {0x10000, 0x1000B},
453 {0x1000D, 0x10026},
454 {0x10028, 0x1003A},
455 {0x1003C, 0x1003D},
456 {0x1003F, 0x1004D},
457 {0x10050, 0x1005D},
458 {0x10080, 0x100FA},
459 {0x10107, 0x10133},
460 {0x10140, 0x10178},
461 {0x1018A, 0x1018B},
462 {0x10280, 0x1029C},
463 {0x102A0, 0x102D0},
464 {0x102E1, 0x102FB},
465 {0x10300, 0x10323},
466 {0x1032D, 0x1034A},
467 {0x10350, 0x10375},
468 {0x10380, 0x1039D},
469 {0x103A0, 0x103C3},
470 {0x103C8, 0x103CF},
471 {0x103D1, 0x103D5},
472 {0x10400, 0x1049D},
473 {0x104A0, 0x104A9},
474 {0x104B0, 0x104D3},
475 {0x104D8, 0x104FB},
476 {0x10500, 0x10527},
477 {0x10530, 0x10563},
478 {0x10570, 0x1057A},
479 {0x1057C, 0x1058A},
480 {0x1058C, 0x10592},
481 {0x10594, 0x10595},
482 {0x10597, 0x105A1},
483 {0x105A3, 0x105B1},
484 {0x105B3, 0x105B9},
485 {0x105BB, 0x105BC},
486 {0x105C0, 0x105F3},
487 {0x10600, 0x10736},
488 {0x10740, 0x10755},
489 {0x10760, 0x10767},
490 {0x10780, 0x10785},
491 {0x10787, 0x107B0},
492 {0x107B2, 0x107BA},
493 {0x10800, 0x10805},
494 {0x10808, 0x10808},
495 {0x1080A, 0x10835},
496 {0x10837, 0x10838},
497 {0x1083C, 0x1083C},
498 {0x1083F, 0x10855},
499 {0x10858, 0x10876},
500 {0x10879, 0x1089E},
501 {0x108A7, 0x108AF},
502 {0x108E0, 0x108F2},
503 {0x108F4, 0x108F5},
504 {0x108FB, 0x1091B},
505 {0x10920, 0x10939},
506 {0x10980, 0x109B7},
507 {0x109BC, 0x109CF},
508 {0x109D2, 0x10A00},
509 {0x10A10, 0x10A13},
510 {0x10A15, 0x10A17},
511 {0x10A19, 0x10A35},
512 {0x10A40, 0x10A48},
513 {0x10A60, 0x10A7E},
514 {0x10A80, 0x10A9F},
515 {0x10AC0, 0x10AC7},
516 {0x10AC9, 0x10AE4},
517 {0x10AEB, 0x10AEF},
518 {0x10B00, 0x10B35},
519 {0x10B40, 0x10B55},
520 {0x10B58, 0x10B72},
521 {0x10B78, 0x10B91},
522 {0x10BA9, 0x10BAF},
523 {0x10C00, 0x10C48},
524 {0x10C80, 0x10CB2},
525 {0x10CC0, 0x10CF2},
526 {0x10CFA, 0x10D23},
527 {0x10D30, 0x10D39},
528 {0x10D40, 0x10D65},
529 {0x10D6F, 0x10D85},
530 {0x10E60, 0x10E7E},
531 {0x10E80, 0x10EA9},
532 {0x10EB0, 0x10EB1},
533 {0x10EC2, 0x10EC4},
534 {0x10F00, 0x10F27},
535 {0x10F30, 0x10F45},
536 {0x10F51, 0x10F54},
537 {0x10F70, 0x10F81},
538 {0x10FB0, 0x10FCB},
539 {0x10FE0, 0x10FF6},
540 {0x11003, 0x11037},
541 {0x11052, 0x1106F},
542 {0x11071, 0x11072},
543 {0x11075, 0x11075},
544 {0x11083, 0x110AF},
545 {0x110D0, 0x110E8},
546 {0x110F0, 0x110F9},
547 {0x11103, 0x11126},
548 {0x11136, 0x1113F},
549 {0x11144, 0x11144},
550 {0x11147, 0x11147},
551 {0x11150, 0x11172},
552 {0x11176, 0x11176},
553 {0x11183, 0x111B2},
554 {0x111C1, 0x111C4},
555 {0x111D0, 0x111DA},
556 {0x111DC, 0x111DC},
557 {0x111E1, 0x111F4},
558 {0x11200, 0x11211},
559 {0x11213, 0x1122B},
560 {0x1123F, 0x11240},
561 {0x11280, 0x11286},
562 {0x11288, 0x11288},
563 {0x1128A, 0x1128D},
564 {0x1128F, 0x1129D},
565 {0x1129F, 0x112A8},
566 {0x112B0, 0x112DE},
567 {0x112F0, 0x112F9},
568 {0x11305, 0x1130C},
569 {0x1130F, 0x11310},
570 {0x11313, 0x11328},
571 {0x1132A, 0x11330},
572 {0x11332, 0x11333},
573 {0x11335, 0x11339},
574 {0x1133D, 0x1133D},
575 {0x11350, 0x11350},
576 {0x1135D, 0x11361},
577 {0x11380, 0x11389},
578 {0x1138B, 0x1138B},
579 {0x1138E, 0x1138E},
580 {0x11390, 0x113B5},
581 {0x113B7, 0x113B7},
582 {0x113D1, 0x113D1},
583 {0x113D3, 0x113D3},
584 {0x11400, 0x11434},
585 {0x11447, 0x1144A},
586 {0x11450, 0x11459},
587 {0x1145F, 0x11461},
588 {0x11480, 0x114AF},
589 {0x114C4, 0x114C5},
590 {0x114C7, 0x114C7},
591 {0x114D0, 0x114D9},
592 {0x11580, 0x115AE},
593 {0x115D8, 0x115DB},
594 {0x11600, 0x1162F},
595 {0x11644, 0x11644},
596 {0x11650, 0x11659},
597 {0x11680, 0x116AA},
598 {0x116B8, 0x116B8},
599 {0x116C0, 0x116C9},
600 {0x116D0, 0x116E3},
601 {0x11700, 0x1171A},
602 {0x11730, 0x1173B},
603 {0x11740, 0x11746},
604 {0x11800, 0x1182B},
605 {0x118A0, 0x118F2},
606 {0x118FF, 0x11906},
607 {0x11909, 0x11909},
608 {0x1190C, 0x11913},
609 {0x11915, 0x11916},
610 {0x11918, 0x1192F},
611 {0x1193F, 0x1193F},
612 {0x11941, 0x11941},
613 {0x11950, 0x11959},
614 {0x119A0, 0x119A7},
615 {0x119AA, 0x119D0},
616 {0x119E1, 0x119E1},
617 {0x119E3, 0x119E3},
618 {0x11A00, 0x11A00},
619 {0x11A0B, 0x11A32},
620 {0x11A3A, 0x11A3A},
621 {0x11A50, 0x11A50},
622 {0x11A5C, 0x11A89},
623 {0x11A9D, 0x11A9D},
624 {0x11AB0, 0x11AF8},
625 {0x11BC0, 0x11BE0},
626 {0x11BF0, 0x11BF9},
627 {0x11C00, 0x11C08},
628 {0x11C0A, 0x11C2E},
629 {0x11C40, 0x11C40},
630 {0x11C50, 0x11C6C},
631 {0x11C72, 0x11C8F},
632 {0x11D00, 0x11D06},
633 {0x11D08, 0x11D09},
634 {0x11D0B, 0x11D30},
635 {0x11D46, 0x11D46},
636 {0x11D50, 0x11D59},
637 {0x11D60, 0x11D65},
638 {0x11D67, 0x11D68},
639 {0x11D6A, 0x11D89},
640 {0x11D98, 0x11D98},
641 {0x11DA0, 0x11DA9},
642 {0x11EE0, 0x11EF2},
643 {0x11F02, 0x11F02},
644 {0x11F04, 0x11F10},
645 {0x11F12, 0x11F33},
646 {0x11F50, 0x11F59},
647 {0x11FB0, 0x11FB0},
648 {0x11FC0, 0x11FD4},
649 {0x12000, 0x12399},
650 {0x12400, 0x1246E},
651 {0x12480, 0x12543},
652 {0x12F90, 0x12FF0},
653 {0x13000, 0x1342F},
654 {0x13441, 0x13446},
655 {0x13460, 0x143FA},
656 {0x14400, 0x14646},
657 {0x16100, 0x1611D},
658 {0x16130, 0x16139},
659 {0x16800, 0x16A38},
660 {0x16A40, 0x16A5E},
661 {0x16A60, 0x16A69},
662 {0x16A70, 0x16ABE},
663 {0x16AC0, 0x16AC9},
664 {0x16AD0, 0x16AED},
665 {0x16B00, 0x16B2F},
666 {0x16B40, 0x16B43},
667 {0x16B50, 0x16B59},
668 {0x16B5B, 0x16B61},
669 {0x16B63, 0x16B77},
670 {0x16B7D, 0x16B8F},
671 {0x16D40, 0x16D6C},
672 {0x16D70, 0x16D79},
673 {0x16E40, 0x16E96},
674 {0x16F00, 0x16F4A},
675 {0x16F50, 0x16F50},
676 {0x16F93, 0x16F9F},
677 {0x16FE0, 0x16FE1},
678 {0x16FE3, 0x16FE3},
679 {0x17000, 0x187F7},
680 {0x18800, 0x18CD5},
681 {0x18CFF, 0x18D08},
682 {0x1AFF0, 0x1AFF3},
683 {0x1AFF5, 0x1AFFB},
684 {0x1AFFD, 0x1AFFE},
685 {0x1B000, 0x1B122},
686 {0x1B132, 0x1B132},
687 {0x1B150, 0x1B152},
688 {0x1B155, 0x1B155},
689 {0x1B164, 0x1B167},
690 {0x1B170, 0x1B2FB},
691 {0x1BC00, 0x1BC6A},
692 {0x1BC70, 0x1BC7C},
693 {0x1BC80, 0x1BC88},
694 {0x1BC90, 0x1BC99},
695 {0x1CCF0, 0x1CCF9},
696 {0x1D2C0, 0x1D2D3},
697 {0x1D2E0, 0x1D2F3},
698 {0x1D360, 0x1D378},
699 {0x1D400, 0x1D454},
700 {0x1D456, 0x1D49C},
701 {0x1D49E, 0x1D49F},
702 {0x1D4A2, 0x1D4A2},
703 {0x1D4A5, 0x1D4A6},
704 {0x1D4A9, 0x1D4AC},
705 {0x1D4AE, 0x1D4B9},
706 {0x1D4BB, 0x1D4BB},
707 {0x1D4BD, 0x1D4C3},
708 {0x1D4C5, 0x1D505},
709 {0x1D507, 0x1D50A},
710 {0x1D50D, 0x1D514},
711 {0x1D516, 0x1D51C},
712 {0x1D51E, 0x1D539},
713 {0x1D53B, 0x1D53E},
714 {0x1D540, 0x1D544},
715 {0x1D546, 0x1D546},
716 {0x1D54A, 0x1D550},
717 {0x1D552, 0x1D6A5},
718 {0x1D6A8, 0x1D6C0},
719 {0x1D6C2, 0x1D6DA},
720 {0x1D6DC, 0x1D6FA},
721 {0x1D6FC, 0x1D714},
722 {0x1D716, 0x1D734},
723 {0x1D736, 0x1D74E},
724 {0x1D750, 0x1D76E},
725 {0x1D770, 0x1D788},
726 {0x1D78A, 0x1D7A8},
727 {0x1D7AA, 0x1D7C2},
728 {0x1D7C4, 0x1D7CB},
729 {0x1D7CE, 0x1D7FF},
730 {0x1DF00, 0x1DF1E},
731 {0x1DF25, 0x1DF2A},
732 {0x1E030, 0x1E06D},
733 {0x1E100, 0x1E12C},
734 {0x1E137, 0x1E13D},
735 {0x1E140, 0x1E149},
736 {0x1E14E, 0x1E14E},
737 {0x1E290, 0x1E2AD},
738 {0x1E2C0, 0x1E2EB},
739 {0x1E2F0, 0x1E2F9},
740 {0x1E4D0, 0x1E4EB},
741 {0x1E4F0, 0x1E4F9},
742 {0x1E5D0, 0x1E5ED},
743 {0x1E5F0, 0x1E5FA},
744 {0x1E7E0, 0x1E7E6},
745 {0x1E7E8, 0x1E7EB},
746 {0x1E7ED, 0x1E7EE},
747 {0x1E7F0, 0x1E7FE},
748 {0x1E800, 0x1E8C4},
749 {0x1E8C7, 0x1E8CF},
750 {0x1E900, 0x1E943},
751 {0x1E94B, 0x1E94B},
752 {0x1E950, 0x1E959},
753 {0x1EC71, 0x1ECAB},
754 {0x1ECAD, 0x1ECAF},
755 {0x1ECB1, 0x1ECB4},
756 {0x1ED01, 0x1ED2D},
757 {0x1ED2F, 0x1ED3D},
758 {0x1EE00, 0x1EE03},
759 {0x1EE05, 0x1EE1F},
760 {0x1EE21, 0x1EE22},
761 {0x1EE24, 0x1EE24},
762 {0x1EE27, 0x1EE27},
763 {0x1EE29, 0x1EE32},
764 {0x1EE34, 0x1EE37},
765 {0x1EE39, 0x1EE39},
766 {0x1EE3B, 0x1EE3B},
767 {0x1EE42, 0x1EE42},
768 {0x1EE47, 0x1EE47},
769 {0x1EE49, 0x1EE49},
770 {0x1EE4B, 0x1EE4B},
771 {0x1EE4D, 0x1EE4F},
772 {0x1EE51, 0x1EE52},
773 {0x1EE54, 0x1EE54},
774 {0x1EE57, 0x1EE57},
775 {0x1EE59, 0x1EE59},
776 {0x1EE5B, 0x1EE5B},
777 {0x1EE5D, 0x1EE5D},
778 {0x1EE5F, 0x1EE5F},
779 {0x1EE61, 0x1EE62},
780 {0x1EE64, 0x1EE64},
781 {0x1EE67, 0x1EE6A},
782 {0x1EE6C, 0x1EE72},
783 {0x1EE74, 0x1EE77},
784 {0x1EE79, 0x1EE7C},
785 {0x1EE7E, 0x1EE7E},
786 {0x1EE80, 0x1EE89},
787 {0x1EE8B, 0x1EE9B},
788 {0x1EEA1, 0x1EEA3},
789 {0x1EEA5, 0x1EEA9},
790 {0x1EEAB, 0x1EEBB},
791 {0x1F100, 0x1F10C},
792 {0x1FBF0, 0x1FBF9},
793 {0x20000, 0x2A6DF},
794 {0x2A700, 0x2B739},
795 {0x2B740, 0x2B81D},
796 {0x2B820, 0x2CEA1},
797 {0x2CEB0, 0x2EBE0},
798 {0x2EBF0, 0x2EE5D},
799 {0x2F800, 0x2FA1D},
800 {0x30000, 0x3134A},
801 {0x31350, 0x323AF},
802 };
803 inline constexpr std::size_t word_ranges_size {771};
804
806 inline constexpr code_range digit_ranges[] {
807 {0x0030, 0x0039},
808 {0x0660, 0x0669},
809 {0x06F0, 0x06F9},
810 {0x07C0, 0x07C9},
811 {0x0966, 0x096F},
812 {0x09E6, 0x09EF},
813 {0x0A66, 0x0A6F},
814 {0x0AE6, 0x0AEF},
815 {0x0B66, 0x0B6F},
816 {0x0BE6, 0x0BEF},
817 {0x0C66, 0x0C6F},
818 {0x0CE6, 0x0CEF},
819 {0x0D66, 0x0D6F},
820 {0x0DE6, 0x0DEF},
821 {0x0E50, 0x0E59},
822 {0x0ED0, 0x0ED9},
823 {0x0F20, 0x0F29},
824 {0x1040, 0x1049},
825 {0x1090, 0x1099},
826 {0x17E0, 0x17E9},
827 {0x1810, 0x1819},
828 {0x1946, 0x194F},
829 {0x19D0, 0x19D9},
830 {0x1A80, 0x1A89},
831 {0x1A90, 0x1A99},
832 {0x1B50, 0x1B59},
833 {0x1BB0, 0x1BB9},
834 {0x1C40, 0x1C49},
835 {0x1C50, 0x1C59},
836 {0xA620, 0xA629},
837 {0xA8D0, 0xA8D9},
838 {0xA900, 0xA909},
839 {0xA9D0, 0xA9D9},
840 {0xA9F0, 0xA9F9},
841 {0xAA50, 0xAA59},
842 {0xABF0, 0xABF9},
843 {0xFF10, 0xFF19},
844 {0x104A0, 0x104A9},
845 {0x10D30, 0x10D39},
846 {0x10D40, 0x10D49},
847 {0x11066, 0x1106F},
848 {0x110F0, 0x110F9},
849 {0x11136, 0x1113F},
850 {0x111D0, 0x111D9},
851 {0x112F0, 0x112F9},
852 {0x11450, 0x11459},
853 {0x114D0, 0x114D9},
854 {0x11650, 0x11659},
855 {0x116C0, 0x116C9},
856 {0x116D0, 0x116E3},
857 {0x11730, 0x11739},
858 {0x118E0, 0x118E9},
859 {0x11950, 0x11959},
860 {0x11BF0, 0x11BF9},
861 {0x11C50, 0x11C59},
862 {0x11D50, 0x11D59},
863 {0x11DA0, 0x11DA9},
864 {0x11F50, 0x11F59},
865 {0x16130, 0x16139},
866 {0x16A60, 0x16A69},
867 {0x16AC0, 0x16AC9},
868 {0x16B50, 0x16B59},
869 {0x16D70, 0x16D79},
870 {0x1CCF0, 0x1CCF9},
871 {0x1D7CE, 0x1D7FF},
872 {0x1E140, 0x1E149},
873 {0x1E2F0, 0x1E2F9},
874 {0x1E4F0, 0x1E4F9},
875 {0x1E5F1, 0x1E5FA},
876 {0x1E950, 0x1E959},
877 {0x1FBF0, 0x1FBF9},
878 };
879 inline constexpr std::size_t digit_ranges_size {71};
880
882 inline constexpr code_range space_ranges[] {
883 {0x0009, 0x000D},
884 {0x001C, 0x0020},
885 {0x0085, 0x0085},
886 {0x00A0, 0x00A0},
887 {0x1680, 0x1680},
888 {0x2000, 0x200A},
889 {0x2028, 0x2029},
890 {0x202F, 0x202F},
891 {0x205F, 0x205F},
892 {0x3000, 0x3000},
893 };
894 inline constexpr std::size_t space_ranges_size {10};
895
898 constexpr bool cp_in_ranges(std::span<const code_range> ranges,
899 char32_t cp)
900 {
901 std::size_t lo {0};
902 std::size_t hi {ranges.size()};
903 while (lo < hi) {
904 const std::size_t mid {lo + ((hi - lo) / 2)};
905 if (ranges[mid].hi < cp) {
906 lo = mid + 1;
907 }
908 else {
909 hi = mid;
910 }
911 }
912 return lo < ranges.size() && cp >= ranges[lo].lo && cp <= ranges[lo].hi;
913 }
914
916 constexpr bool is_word_cp(char32_t cp) { return cp_in_ranges(word_ranges, cp); }
917 constexpr bool is_digit_cp(char32_t cp) { return cp_in_ranges(digit_ranges, cp); }
918 constexpr bool is_space_cp(char32_t cp) { return cp_in_ranges(space_ranges, cp); }
919
920} // namespace real::detail
921
922#endif // REAL_UNICODE_PROPS_HPP
constexpr bool cp_in_ranges(std::span< const code_range > ranges, char32_t cp)
Binary-searches a sorted, non-overlapping range table for cp. Returns a bool (not a pointer into the ...
constexpr std::size_t digit_ranges_size
constexpr bool is_space_cp(char32_t cp)
constexpr std::size_t space_ranges_size
constexpr std::size_t word_ranges_size
constexpr code_range word_ranges[]
Code-point ranges matched by \w (771 ranges, 142940 code points).
constexpr code_range space_ranges[]
Code-point ranges matched by \s (10 ranges, 29 code points).
constexpr bool is_word_cp(char32_t cp)
Whether cp is a Unicode word / digit / whitespace code point (== re \w/\d/\s).
constexpr const char * unicode_props_unidata_version
The Unicode data version these tables were generated from (16.0.0).
constexpr code_range digit_ranges[]
Code-point ranges matched by \d (71 ranges, 760 code points).
constexpr bool is_digit_cp(char32_t cp)
Compiled form of a pattern and the public flags / error types.
An inclusive code-point range [lo, hi]. Shared by character classes (ast.hpp) and the generated Unico...
Definition program.hpp:168
std::uint32_t lo
First code point (inclusive).
Definition program.hpp:169
REAL's version macros and the C++20 language-standard guard.