<<
path:
root/public/blog.git/html/modules/uniform/unicode_casefold.jai
blob: be23566fc4d17ab35e7931d47e6413e53b30f5c2
[raw]
[clear marker]
5OddEvenSkip :: EvenOddSkip + 1;
13// Searches the case folding tables and returns the CaseFold* that contains r.
14// If there isn't one, returns the CaseFold* with smallest f.lo bigger than r.
15// If there isn't one, returns null.
16lookup_casefold :: (folds: [] CaseFold, r: Rune) -> *CaseFold {
17 // Binary search for entry containing r.
21 if f[m].lo <= r && r <= f[m].hi {
32 // There is no entry that contains r, but f points
33 // where it would have been. Unless f points at
34 // the end of the array, it points at the next entry
36 if f.count return *f[0];
38 // No entry contains r; no entry contains runes > r.
42// Returns the result of applying the fold f to the rune r.
43apply_fold :: (f: *CaseFold, r: Rune) -> Rune {
48 case EvenOddSkip; // even <-> odd but only applies to every other
49 if (r - f.lo) % 2 return r;
51 case EvenOdd; // even <-> odd
52 if r % 2 == 0 return r + 1;
56 case OddEvenSkip; // odd <-> even but only applies to every other
57 if (r - f.lo) % 2 return r;
59 case OddEven; // odd <-> even
60 if r%2 == 1 return r + 1;
66// Returns the next Rune in r's folding cycle (see unicode_casefold.h).
68// CycleFoldRune('A') = 'a'
69// CycleFoldRune('a') = 'A'
71// CycleFoldRune('K') = 'k'
72// CycleFoldRune('k') = 0x212A (Kelvin)
73// CycleFoldRune(0x212A) = 'K'
75// CycleFoldRune('?') = '?'
76cycle_fold_rune :: (r: Rune) -> Rune {
77 f:= lookup_casefold(unicode_casefold, r);
78 if f == null || r < f.lo return r;
80 return apply_fold(f, r);
83unicode_casefold :: CaseFold.[
99 .{256, 303, EvenOdd },
100 .{306, 311, EvenOdd },
101 .{313, 328, OddEven },
102 .{330, 375, EvenOdd },
104 .{377, 382, OddEven },
108 .{386, 389, EvenOdd },
110 .{391, 392, OddEven },
112 .{395, 396, OddEven },
116 .{401, 402, OddEven },
122 .{408, 409, EvenOdd },
128 .{416, 421, EvenOdd },
130 .{423, 424, OddEven },
132 .{428, 429, EvenOdd },
134 .{431, 432, OddEven },
136 .{435, 438, OddEven },
138 .{440, 441, EvenOdd },
139 .{444, 445, EvenOdd },
141 .{452, 452, EvenOdd },
142 .{453, 453, OddEven },
144 .{455, 455, OddEven },
145 .{456, 456, EvenOdd },
147 .{458, 458, EvenOdd },
148 .{459, 459, OddEven },
150 .{461, 476, OddEven },
152 .{478, 495, EvenOdd },
153 .{497, 497, OddEven },
154 .{498, 498, EvenOdd },
156 .{500, 501, EvenOdd },
159 .{504, 543, EvenOdd },
161 .{546, 563, EvenOdd },
163 .{571, 572, OddEven },
167 .{577, 578, OddEven },
171 .{582, 591, EvenOdd },
208 .{880, 883, EvenOdd },
209 .{886, 887, EvenOdd },
234 .{962, 962, EvenOdd },
248 .{984, 1007, EvenOdd },
252 .{1011, 1011, -116 },
255 .{1015, 1016, OddEven },
257 .{1018, 1019, EvenOdd },
258 .{1021, 1023, -130 },
262 .{1074, 1074, 6222 },
264 .{1076, 1076, 6221 },
266 .{1086, 1086, 6212 },
268 .{1089, 1090, 6210 },
270 .{1098, 1098, 6204 },
273 .{1120, 1122, EvenOdd },
274 .{1123, 1123, 6180 },
275 .{1124, 1153, EvenOdd },
276 .{1162, 1215, EvenOdd },
278 .{1217, 1230, OddEven },
280 .{1232, 1327, EvenOdd },
283 .{4256, 4293, 7264 },
284 .{4295, 4295, 7264 },
285 .{4301, 4301, 7264 },
286 .{4304, 4346, 3008 },
287 .{4349, 4351, 3008 },
288 .{5024, 5103, 38864 },
291 .{7296, 7296, -6254 },
292 .{7297, 7297, -6253 },
293 .{7298, 7298, -6244 },
294 .{7299, 7299, -6242 },
295 .{7300, 7300, EvenOdd },
296 .{7301, 7301, -6243 },
297 .{7302, 7302, -6236 },
298 .{7303, 7303, -6181 },
299 .{7304, 7304, 35266 },
300 .{7312, 7354, -3008 },
301 .{7357, 7359, -3008 },
302 .{7545, 7545, 35332 },
303 .{7549, 7549, 3814 },
304 .{7566, 7566, 35384 },
305 .{7680, 7776, EvenOdd },
307 .{7778, 7829, EvenOdd },
309 .{7838, 7838, -7615 },
310 .{7840, 7935, EvenOdd },
348 .{8126, 8126, -7289 },
354 .{8154, 8155, -100 },
358 .{8170, 8171, -112 },
361 .{8184, 8185, -128 },
362 .{8186, 8187, -126 },
364 .{8486, 8486, -7549 },
365 .{8490, 8490, -8415 },
366 .{8491, 8491, -8294 },
371 .{8579, 8580, OddEven },
374 .{11264, 11310, 48 },
375 .{11312, 11358, -48 },
376 .{11360, 11361, EvenOdd },
377 .{11362, 11362, -10743 },
378 .{11363, 11363, -3814 },
379 .{11364, 11364, -10727 },
380 .{11365, 11365, -10795 },
381 .{11366, 11366, -10792 },
382 .{11367, 11372, OddEven },
383 .{11373, 11373, -10780 },
384 .{11374, 11374, -10749 },
385 .{11375, 11375, -10783 },
386 .{11376, 11376, -10782 },
387 .{11378, 11379, EvenOdd },
388 .{11381, 11382, OddEven },
389 .{11390, 11391, -10815 },
390 .{11392, 11491, EvenOdd },
391 .{11499, 11502, OddEven },
392 .{11506, 11507, EvenOdd },
393 .{11520, 11557, -7264 },
394 .{11559, 11559, -7264 },
395 .{11565, 11565, -7264 },
396 .{42560, 42570, EvenOdd },
397 .{42571, 42571, -35267 },
398 .{42572, 42605, EvenOdd },
399 .{42624, 42651, EvenOdd },
400 .{42786, 42799, EvenOdd },
401 .{42802, 42863, EvenOdd },
402 .{42873, 42876, OddEven },
403 .{42877, 42877, -35332 },
404 .{42878, 42887, EvenOdd },
405 .{42891, 42892, OddEven },
406 .{42893, 42893, -42280 },
407 .{42896, 42899, EvenOdd },
408 .{42900, 42900, 48 },
409 .{42902, 42921, EvenOdd },
410 .{42922, 42922, -42308 },
411 .{42923, 42923, -42319 },
412 .{42924, 42924, -42315 },
413 .{42925, 42925, -42305 },
414 .{42926, 42926, -42308 },
415 .{42928, 42928, -42258 },
416 .{42929, 42929, -42282 },
417 .{42930, 42930, -42261 },
418 .{42931, 42931, 928 },
419 .{42932, 42943, EvenOdd },
420 .{42946, 42947, EvenOdd },
421 .{42948, 42948, -48 },
422 .{42949, 42949, -42307 },
423 .{42950, 42950, -35384 },
424 .{42951, 42954, OddEven },
425 .{42997, 42998, OddEven },
426 .{43859, 43859, -928 },
427 .{43888, 43967, -38864 },
428 .{65313, 65338, 32 },
429 .{65345, 65370, -32 },
430 .{66560, 66599, 40 },
431 .{66600, 66639, -40 },
432 .{66736, 66771, 40 },
433 .{66776, 66811, -40 },
434 .{68736, 68786, 64 },
435 .{68800, 68850, -64 },
436 .{71840, 71871, 32 },
437 .{71872, 71903, -32 },
438 .{93760, 93791, 32 },
439 .{93792, 93823, -32 },
440 .{125184, 125217, 34 },
441 .{125218, 125251, -34 },
444// 1384 groups, 1414 pairs, 200 ranges
445unicode_tolower :: CaseFold.[
450 .{256, 302, EvenOddSkip },
451 .{306, 310, EvenOddSkip },
452 .{313, 327, OddEvenSkip },
453 .{330, 374, EvenOddSkip },
455 .{377, 381, OddEvenSkip },
458 .{386, 388, EvenOddSkip },
460 .{391, 391, OddEven },
462 .{395, 395, OddEven },
466 .{401, 401, OddEven },
471 .{408, 408, EvenOdd },
475 .{416, 420, EvenOddSkip },
477 .{423, 423, OddEven },
479 .{428, 428, EvenOdd },
481 .{431, 431, OddEven },
483 .{435, 437, OddEvenSkip },
485 .{440, 440, EvenOdd },
486 .{444, 444, EvenOdd },
488 .{453, 453, OddEven },
490 .{456, 456, EvenOdd },
492 .{459, 475, OddEvenSkip },
493 .{478, 494, EvenOddSkip },
495 .{498, 500, EvenOddSkip },
498 .{504, 542, EvenOddSkip },
500 .{546, 562, EvenOddSkip },
502 .{571, 571, OddEven },
505 .{577, 577, OddEven },
509 .{582, 590, EvenOddSkip },
511 .{880, 882, EvenOddSkip },
512 .{886, 886, EvenOdd },
520 .{962, 962, EvenOdd },
526 .{984, 1006, EvenOddSkip },
531 .{1015, 1015, OddEven },
533 .{1018, 1018, EvenOdd },
534 .{1021, 1023, -130 },
537 .{1120, 1152, EvenOddSkip },
538 .{1162, 1214, EvenOddSkip },
540 .{1217, 1229, OddEvenSkip },
541 .{1232, 1326, EvenOddSkip },
543 .{4256, 4293, 7264 },
544 .{4295, 4295, 7264 },
545 .{4301, 4301, 7264 },
547 .{7296, 7296, -6222 },
548 .{7297, 7297, -6221 },
549 .{7298, 7298, -6212 },
550 .{7299, 7300, -6210 },
551 .{7301, 7301, -6211 },
552 .{7302, 7302, -6204 },
553 .{7303, 7303, -6180 },
554 .{7304, 7304, 35267 },
555 .{7312, 7354, -3008 },
556 .{7357, 7359, -3008 },
557 .{7680, 7828, EvenOddSkip },
559 .{7838, 7838, -7615 },
560 .{7840, 7934, EvenOddSkip },
577 .{8126, 8126, -7173 },
581 .{8154, 8155, -100 },
583 .{8170, 8171, -112 },
585 .{8184, 8185, -128 },
586 .{8186, 8187, -126 },
588 .{8486, 8486, -7517 },
589 .{8490, 8490, -8383 },
590 .{8491, 8491, -8262 },
593 .{8579, 8579, OddEven },
595 .{11264, 11310, 48 },
596 .{11360, 11360, EvenOdd },
597 .{11362, 11362, -10743 },
598 .{11363, 11363, -3814 },
599 .{11364, 11364, -10727 },
600 .{11367, 11371, OddEvenSkip },
601 .{11373, 11373, -10780 },
602 .{11374, 11374, -10749 },
603 .{11375, 11375, -10783 },
604 .{11376, 11376, -10782 },
605 .{11378, 11378, EvenOdd },
606 .{11381, 11381, OddEven },
607 .{11390, 11391, -10815 },
608 .{11392, 11490, EvenOddSkip },
609 .{11499, 11501, OddEvenSkip },
610 .{11506, 11506, EvenOdd },
611 .{42560, 42604, EvenOddSkip },
612 .{42624, 42650, EvenOddSkip },
613 .{42786, 42798, EvenOddSkip },
614 .{42802, 42862, EvenOddSkip },
615 .{42873, 42875, OddEvenSkip },
616 .{42877, 42877, -35332 },
617 .{42878, 42886, EvenOddSkip },
618 .{42891, 42891, OddEven },
619 .{42893, 42893, -42280 },
620 .{42896, 42898, EvenOddSkip },
621 .{42902, 42920, EvenOddSkip },
622 .{42922, 42922, -42308 },
623 .{42923, 42923, -42319 },
624 .{42924, 42924, -42315 },
625 .{42925, 42925, -42305 },
626 .{42926, 42926, -42308 },
627 .{42928, 42928, -42258 },
628 .{42929, 42929, -42282 },
629 .{42930, 42930, -42261 },
630 .{42931, 42931, 928 },
631 .{42932, 42942, EvenOddSkip },
632 .{42946, 42946, EvenOdd },
633 .{42948, 42948, -48 },
634 .{42949, 42949, -42307 },
635 .{42950, 42950, -35384 },
636 .{42951, 42953, OddEvenSkip },
637 .{42997, 42997, OddEven },
638 .{43888, 43967, -38864 },
639 .{65313, 65338, 32 },
640 .{66560, 66599, 40 },
641 .{66736, 66771, 40 },
642 .{68736, 68786, 64 },
643 .{71840, 71871, 32 },
644 .{93760, 93791, 32 },
645 .{125184, 125217, 34 },