1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9
10 // WARNING, this entire header is generated by
11 // utils/generate_extended_grapheme_cluster_table.py
12 // DO NOT MODIFY!
13
14 // UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
15 //
16 // See Terms of Use <https://www.unicode.org/copyright.html>
17 // for definitions of Unicode Inc.'s Data Files and Software.
18 //
19 // NOTICE TO USER: Carefully read the following legal agreement.
20 // BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
21 // DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
22 // YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
23 // TERMS AND CONDITIONS OF THIS AGREEMENT.
24 // IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
25 // THE DATA FILES OR SOFTWARE.
26 //
27 // COPYRIGHT AND PERMISSION NOTICE
28 //
29 // Copyright (c) 1991-2022 Unicode, Inc. All rights reserved.
30 // Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
31 //
32 // Permission is hereby granted, free of charge, to any person obtaining
33 // a copy of the Unicode data files and any associated documentation
34 // (the "Data Files") or Unicode software and any associated documentation
35 // (the "Software") to deal in the Data Files or Software
36 // without restriction, including without limitation the rights to use,
37 // copy, modify, merge, publish, distribute, and/or sell copies of
38 // the Data Files or Software, and to permit persons to whom the Data Files
39 // or Software are furnished to do so, provided that either
40 // (a) this copyright and permission notice appear with all copies
41 // of the Data Files or Software, or
42 // (b) this copyright and permission notice appear in associated
43 // Documentation.
44 //
45 // THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
46 // ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
47 // WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
48 // NONINFRINGEMENT OF THIRD PARTY RIGHTS.
49 // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
50 // NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
51 // DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
52 // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
53 // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
54 // PERFORMANCE OF THE DATA FILES OR SOFTWARE.
55 //
56 // Except as contained in this notice, the name of a copyright holder
57 // shall not be used in advertising or otherwise to promote the sale,
58 // use or other dealings in these Data Files or Software without prior
59 // written authorization of the copyright holder.
60
61 #ifndef _LIBCPP___FORMAT_EXTENDED_GRAPHEME_CLUSTER_TABLE_H
62 #define _LIBCPP___FORMAT_EXTENDED_GRAPHEME_CLUSTER_TABLE_H
63
64 #include <__algorithm/ranges_upper_bound.h>
65 #include <__config>
66 #include <__iterator/access.h>
67 #include <cstddef>
68 #include <cstdint>
69
70 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
71 # pragma GCC system_header
72 #endif
73
74 _LIBCPP_BEGIN_NAMESPACE_STD
75
76 #if _LIBCPP_STD_VER >= 20
77
78 namespace __extended_grapheme_custer_property_boundary {
79
80 enum class __property : uint8_t {
81 // Values generated from the data files.
82 __CR,
83 __Control,
84 __Extend,
85 __Extended_Pictographic,
86 __L,
87 __LF,
88 __LV,
89 __LVT,
90 __Prepend,
91 __Regional_Indicator,
92 __SpacingMark,
93 __T,
94 __V,
95 __ZWJ,
96
97 // The properies below aren't stored in the "database".
98
99 // Text position properties.
100 __sot,
101 __eot,
102
103 // The code unit has none of above properties.
104 __none
105 };
106
107 /// The entries of the extended grapheme cluster bondary property table.
108 ///
109 /// The data is generated from
110 /// - https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt
111 /// - https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
112 ///
113 /// The data has 3 values
114 /// - bits [0, 3] The property. One of the values generated from the datafiles
115 /// of \ref __property
116 /// - bits [4, 10] The size of the range.
117 /// - bits [11, 31] The lower bound code point of the range. The upper bound of
118 /// the range is lower bound + size.
119 ///
120 /// The 7 bits for the size allow a maximum range of 128 elements. Some ranges
121 /// in the Unicode tables are larger. They are stored in multiple consecutive
122 /// ranges in the data table. An alternative would be to store the sizes in a
123 /// separate 16-bit value. The original MSVC STL code had such an approach, but
124 /// this approach uses less space for the data and is about 4% faster in the
125 /// following benchmark.
126 /// libcxx/benchmarks/std_format_spec_string_unicode.bench.cpp
127 // clang-format off
128 _LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[1496] = {
129 0x00000091,
130 0x00005005,
131 0x00005811,
132 0x00006800,
133 0x00007111,
134 0x0003fa01,
135 0x00054803,
136 0x00056801,
137 0x00057003,
138 0x001806f2,
139 0x00241862,
140 0x002c8ac2,
141 0x002df802,
142 0x002e0812,
143 0x002e2012,
144 0x002e3802,
145 0x00300058,
146 0x003080a2,
147 0x0030e001,
148 0x00325942,
149 0x00338002,
150 0x0036b062,
151 0x0036e808,
152 0x0036f852,
153 0x00373812,
154 0x00375032,
155 0x00387808,
156 0x00388802,
157 0x003981a2,
158 0x003d30a2,
159 0x003f5882,
160 0x003fe802,
161 0x0040b032,
162 0x0040d882,
163 0x00412822,
164 0x00414842,
165 0x0042c822,
166 0x00448018,
167 0x0044c072,
168 0x00465172,
169 0x00471008,
170 0x004719f2,
171 0x0048180a,
172 0x0049d002,
173 0x0049d80a,
174 0x0049e002,
175 0x0049f02a,
176 0x004a0872,
177 0x004a483a,
178 0x004a6802,
179 0x004a701a,
180 0x004a8862,
181 0x004b1012,
182 0x004c0802,
183 0x004c101a,
184 0x004de002,
185 0x004df002,
186 0x004df81a,
187 0x004e0832,
188 0x004e381a,
189 0x004e581a,
190 0x004e6802,
191 0x004eb802,
192 0x004f1012,
193 0x004ff002,
194 0x00500812,
195 0x0050180a,
196 0x0051e002,
197 0x0051f02a,
198 0x00520812,
199 0x00523812,
200 0x00525822,
201 0x00528802,
202 0x00538012,
203 0x0053a802,
204 0x00540812,
205 0x0054180a,
206 0x0055e002,
207 0x0055f02a,
208 0x00560842,
209 0x00563812,
210 0x0056480a,
211 0x0056581a,
212 0x00566802,
213 0x00571012,
214 0x0057d052,
215 0x00580802,
216 0x0058101a,
217 0x0059e002,
218 0x0059f012,
219 0x005a000a,
220 0x005a0832,
221 0x005a381a,
222 0x005a581a,
223 0x005a6802,
224 0x005aa822,
225 0x005b1012,
226 0x005c1002,
227 0x005df002,
228 0x005df80a,
229 0x005e0002,
230 0x005e081a,
231 0x005e302a,
232 0x005e502a,
233 0x005e6802,
234 0x005eb802,
235 0x00600002,
236 0x0060082a,
237 0x00602002,
238 0x0061e002,
239 0x0061f022,
240 0x0062083a,
241 0x00623022,
242 0x00625032,
243 0x0062a812,
244 0x00631012,
245 0x00640802,
246 0x0064101a,
247 0x0065e002,
248 0x0065f00a,
249 0x0065f802,
250 0x0066001a,
251 0x00661002,
252 0x0066181a,
253 0x00663002,
254 0x0066381a,
255 0x0066501a,
256 0x00666012,
257 0x0066a812,
258 0x00671012,
259 0x0067980a,
260 0x00680012,
261 0x0068101a,
262 0x0069d812,
263 0x0069f002,
264 0x0069f81a,
265 0x006a0832,
266 0x006a302a,
267 0x006a502a,
268 0x006a6802,
269 0x006a7008,
270 0x006ab802,
271 0x006b1012,
272 0x006c0802,
273 0x006c101a,
274 0x006e5002,
275 0x006e7802,
276 0x006e801a,
277 0x006e9022,
278 0x006eb002,
279 0x006ec06a,
280 0x006ef802,
281 0x006f901a,
282 0x00718802,
283 0x0071980a,
284 0x0071a062,
285 0x00723872,
286 0x00758802,
287 0x0075980a,
288 0x0075a082,
289 0x00764062,
290 0x0078c012,
291 0x0079a802,
292 0x0079b802,
293 0x0079c802,
294 0x0079f01a,
295 0x007b88d2,
296 0x007bf80a,
297 0x007c0042,
298 0x007c3012,
299 0x007c68a2,
300 0x007cca32,
301 0x007e3002,
302 0x00816832,
303 0x0081880a,
304 0x00819052,
305 0x0081c812,
306 0x0081d81a,
307 0x0081e812,
308 0x0082b01a,
309 0x0082c012,
310 0x0082f022,
311 0x00838832,
312 0x00841002,
313 0x0084200a,
314 0x00842812,
315 0x00846802,
316 0x0084e802,
317 0x008805f4,
318 0x008b047c,
319 0x008d457b,
320 0x009ae822,
321 0x00b89022,
322 0x00b8a80a,
323 0x00b99012,
324 0x00b9a00a,
325 0x00ba9012,
326 0x00bb9012,
327 0x00bda012,
328 0x00bdb00a,
329 0x00bdb862,
330 0x00bdf07a,
331 0x00be3002,
332 0x00be381a,
333 0x00be48a2,
334 0x00bee802,
335 0x00c05822,
336 0x00c07001,
337 0x00c07802,
338 0x00c42812,
339 0x00c54802,
340 0x00c90022,
341 0x00c9183a,
342 0x00c93812,
343 0x00c9482a,
344 0x00c9801a,
345 0x00c99002,
346 0x00c9985a,
347 0x00c9c822,
348 0x00d0b812,
349 0x00d0c81a,
350 0x00d0d802,
351 0x00d2a80a,
352 0x00d2b002,
353 0x00d2b80a,
354 0x00d2c062,
355 0x00d30002,
356 0x00d31002,
357 0x00d32872,
358 0x00d3685a,
359 0x00d39892,
360 0x00d3f802,
361 0x00d581e2,
362 0x00d80032,
363 0x00d8200a,
364 0x00d9a062,
365 0x00d9d80a,
366 0x00d9e002,
367 0x00d9e84a,
368 0x00da1002,
369 0x00da181a,
370 0x00db5882,
371 0x00dc0012,
372 0x00dc100a,
373 0x00dd080a,
374 0x00dd1032,
375 0x00dd301a,
376 0x00dd4012,
377 0x00dd500a,
378 0x00dd5822,
379 0x00df3002,
380 0x00df380a,
381 0x00df4012,
382 0x00df502a,
383 0x00df6802,
384 0x00df700a,
385 0x00df7822,
386 0x00df901a,
387 0x00e1207a,
388 0x00e16072,
389 0x00e1a01a,
390 0x00e1b012,
391 0x00e68022,
392 0x00e6a0c2,
393 0x00e7080a,
394 0x00e71062,
395 0x00e76802,
396 0x00e7a002,
397 0x00e7b80a,
398 0x00e7c012,
399 0x00ee03f2,
400 0x01005801,
401 0x01006002,
402 0x0100680d,
403 0x01007011,
404 0x01014061,
405 0x0101e003,
406 0x01024803,
407 0x010300f1,
408 0x01068202,
409 0x01091003,
410 0x0109c803,
411 0x010ca053,
412 0x010d4813,
413 0x0118d013,
414 0x01194003,
415 0x011c4003,
416 0x011e7803,
417 0x011f48a3,
418 0x011fc023,
419 0x01261003,
420 0x012d5013,
421 0x012db003,
422 0x012e0003,
423 0x012fd833,
424 0x01300053,
425 0x013038b3,
426 0x0130a713,
427 0x01348753,
428 0x013840a3,
429 0x0138a003,
430 0x0138b003,
431 0x0138e803,
432 0x01390803,
433 0x01394003,
434 0x01399813,
435 0x013a2003,
436 0x013a3803,
437 0x013a6003,
438 0x013a7003,
439 0x013a9823,
440 0x013ab803,
441 0x013b1843,
442 0x013ca823,
443 0x013d0803,
444 0x013d8003,
445 0x013df803,
446 0x0149a013,
447 0x01582823,
448 0x0158d813,
449 0x015a8003,
450 0x015aa803,
451 0x01677822,
452 0x016bf802,
453 0x016f01f2,
454 0x01815052,
455 0x01818003,
456 0x0181e803,
457 0x0184c812,
458 0x0194b803,
459 0x0194c803,
460 0x05337832,
461 0x0533a092,
462 0x0534f012,
463 0x05378012,
464 0x05401002,
465 0x05403002,
466 0x05405802,
467 0x0541181a,
468 0x05412812,
469 0x0541380a,
470 0x05416002,
471 0x0544001a,
472 0x0545a0fa,
473 0x05462012,
474 0x05470112,
475 0x0547f802,
476 0x05493072,
477 0x054a38a2,
478 0x054a901a,
479 0x054b01c4,
480 0x054c0022,
481 0x054c180a,
482 0x054d9802,
483 0x054da01a,
484 0x054db032,
485 0x054dd01a,
486 0x054de012,
487 0x054df02a,
488 0x054f2802,
489 0x05514852,
490 0x0551781a,
491 0x05518812,
492 0x0551981a,
493 0x0551a812,
494 0x05521802,
495 0x05526002,
496 0x0552680a,
497 0x0553e002,
498 0x05558002,
499 0x05559022,
500 0x0555b812,
501 0x0555f012,
502 0x05560802,
503 0x0557580a,
504 0x05576012,
505 0x0557701a,
506 0x0557a80a,
507 0x0557b002,
508 0x055f181a,
509 0x055f2802,
510 0x055f301a,
511 0x055f4002,
512 0x055f481a,
513 0x055f600a,
514 0x055f6802,
515 0x05600006,
516 0x056009a7,
517 0x0560e006,
518 0x0560e9a7,
519 0x0561c006,
520 0x0561c9a7,
521 0x0562a006,
522 0x0562a9a7,
523 0x05638006,
524 0x056389a7,
525 0x05646006,
526 0x056469a7,
527 0x05654006,
528 0x056549a7,
529 0x05662006,
530 0x056629a7,
531 0x05670006,
532 0x056709a7,
533 0x0567e006,
534 0x0567e9a7,
535 0x0568c006,
536 0x0568c9a7,
537 0x0569a006,
538 0x0569a9a7,
539 0x056a8006,
540 0x056a89a7,
541 0x056b6006,
542 0x056b69a7,
543 0x056c4006,
544 0x056c49a7,
545 0x056d2006,
546 0x056d29a7,
547 0x056e0006,
548 0x056e09a7,
549 0x056ee006,
550 0x056ee9a7,
551 0x056fc006,
552 0x056fc9a7,
553 0x0570a006,
554 0x0570a9a7,
555 0x05718006,
556 0x057189a7,
557 0x05726006,
558 0x057269a7,
559 0x05734006,
560 0x057349a7,
561 0x05742006,
562 0x057429a7,
563 0x05750006,
564 0x057509a7,
565 0x0575e006,
566 0x0575e9a7,
567 0x0576c006,
568 0x0576c9a7,
569 0x0577a006,
570 0x0577a9a7,
571 0x05788006,
572 0x057889a7,
573 0x05796006,
574 0x057969a7,
575 0x057a4006,
576 0x057a49a7,
577 0x057b2006,
578 0x057b29a7,
579 0x057c0006,
580 0x057c09a7,
581 0x057ce006,
582 0x057ce9a7,
583 0x057dc006,
584 0x057dc9a7,
585 0x057ea006,
586 0x057ea9a7,
587 0x057f8006,
588 0x057f89a7,
589 0x05806006,
590 0x058069a7,
591 0x05814006,
592 0x058149a7,
593 0x05822006,
594 0x058229a7,
595 0x05830006,
596 0x058309a7,
597 0x0583e006,
598 0x0583e9a7,
599 0x0584c006,
600 0x0584c9a7,
601 0x0585a006,
602 0x0585a9a7,
603 0x05868006,
604 0x058689a7,
605 0x05876006,
606 0x058769a7,
607 0x05884006,
608 0x058849a7,
609 0x05892006,
610 0x058929a7,
611 0x058a0006,
612 0x058a09a7,
613 0x058ae006,
614 0x058ae9a7,
615 0x058bc006,
616 0x058bc9a7,
617 0x058ca006,
618 0x058ca9a7,
619 0x058d8006,
620 0x058d89a7,
621 0x058e6006,
622 0x058e69a7,
623 0x058f4006,
624 0x058f49a7,
625 0x05902006,
626 0x059029a7,
627 0x05910006,
628 0x059109a7,
629 0x0591e006,
630 0x0591e9a7,
631 0x0592c006,
632 0x0592c9a7,
633 0x0593a006,
634 0x0593a9a7,
635 0x05948006,
636 0x059489a7,
637 0x05956006,
638 0x059569a7,
639 0x05964006,
640 0x059649a7,
641 0x05972006,
642 0x059729a7,
643 0x05980006,
644 0x059809a7,
645 0x0598e006,
646 0x0598e9a7,
647 0x0599c006,
648 0x0599c9a7,
649 0x059aa006,
650 0x059aa9a7,
651 0x059b8006,
652 0x059b89a7,
653 0x059c6006,
654 0x059c69a7,
655 0x059d4006,
656 0x059d49a7,
657 0x059e2006,
658 0x059e29a7,
659 0x059f0006,
660 0x059f09a7,
661 0x059fe006,
662 0x059fe9a7,
663 0x05a0c006,
664 0x05a0c9a7,
665 0x05a1a006,
666 0x05a1a9a7,
667 0x05a28006,
668 0x05a289a7,
669 0x05a36006,
670 0x05a369a7,
671 0x05a44006,
672 0x05a449a7,
673 0x05a52006,
674 0x05a529a7,
675 0x05a60006,
676 0x05a609a7,
677 0x05a6e006,
678 0x05a6e9a7,
679 0x05a7c006,
680 0x05a7c9a7,
681 0x05a8a006,
682 0x05a8a9a7,
683 0x05a98006,
684 0x05a989a7,
685 0x05aa6006,
686 0x05aa69a7,
687 0x05ab4006,
688 0x05ab49a7,
689 0x05ac2006,
690 0x05ac29a7,
691 0x05ad0006,
692 0x05ad09a7,
693 0x05ade006,
694 0x05ade9a7,
695 0x05aec006,
696 0x05aec9a7,
697 0x05afa006,
698 0x05afa9a7,
699 0x05b08006,
700 0x05b089a7,
701 0x05b16006,
702 0x05b169a7,
703 0x05b24006,
704 0x05b249a7,
705 0x05b32006,
706 0x05b329a7,
707 0x05b40006,
708 0x05b409a7,
709 0x05b4e006,
710 0x05b4e9a7,
711 0x05b5c006,
712 0x05b5c9a7,
713 0x05b6a006,
714 0x05b6a9a7,
715 0x05b78006,
716 0x05b789a7,
717 0x05b86006,
718 0x05b869a7,
719 0x05b94006,
720 0x05b949a7,
721 0x05ba2006,
722 0x05ba29a7,
723 0x05bb0006,
724 0x05bb09a7,
725 0x05bbe006,
726 0x05bbe9a7,
727 0x05bcc006,
728 0x05bcc9a7,
729 0x05bda006,
730 0x05bda9a7,
731 0x05be8006,
732 0x05be89a7,
733 0x05bf6006,
734 0x05bf69a7,
735 0x05c04006,
736 0x05c049a7,
737 0x05c12006,
738 0x05c129a7,
739 0x05c20006,
740 0x05c209a7,
741 0x05c2e006,
742 0x05c2e9a7,
743 0x05c3c006,
744 0x05c3c9a7,
745 0x05c4a006,
746 0x05c4a9a7,
747 0x05c58006,
748 0x05c589a7,
749 0x05c66006,
750 0x05c669a7,
751 0x05c74006,
752 0x05c749a7,
753 0x05c82006,
754 0x05c829a7,
755 0x05c90006,
756 0x05c909a7,
757 0x05c9e006,
758 0x05c9e9a7,
759 0x05cac006,
760 0x05cac9a7,
761 0x05cba006,
762 0x05cba9a7,
763 0x05cc8006,
764 0x05cc89a7,
765 0x05cd6006,
766 0x05cd69a7,
767 0x05ce4006,
768 0x05ce49a7,
769 0x05cf2006,
770 0x05cf29a7,
771 0x05d00006,
772 0x05d009a7,
773 0x05d0e006,
774 0x05d0e9a7,
775 0x05d1c006,
776 0x05d1c9a7,
777 0x05d2a006,
778 0x05d2a9a7,
779 0x05d38006,
780 0x05d389a7,
781 0x05d46006,
782 0x05d469a7,
783 0x05d54006,
784 0x05d549a7,
785 0x05d62006,
786 0x05d629a7,
787 0x05d70006,
788 0x05d709a7,
789 0x05d7e006,
790 0x05d7e9a7,
791 0x05d8c006,
792 0x05d8c9a7,
793 0x05d9a006,
794 0x05d9a9a7,
795 0x05da8006,
796 0x05da89a7,
797 0x05db6006,
798 0x05db69a7,
799 0x05dc4006,
800 0x05dc49a7,
801 0x05dd2006,
802 0x05dd29a7,
803 0x05de0006,
804 0x05de09a7,
805 0x05dee006,
806 0x05dee9a7,
807 0x05dfc006,
808 0x05dfc9a7,
809 0x05e0a006,
810 0x05e0a9a7,
811 0x05e18006,
812 0x05e189a7,
813 0x05e26006,
814 0x05e269a7,
815 0x05e34006,
816 0x05e349a7,
817 0x05e42006,
818 0x05e429a7,
819 0x05e50006,
820 0x05e509a7,
821 0x05e5e006,
822 0x05e5e9a7,
823 0x05e6c006,
824 0x05e6c9a7,
825 0x05e7a006,
826 0x05e7a9a7,
827 0x05e88006,
828 0x05e889a7,
829 0x05e96006,
830 0x05e969a7,
831 0x05ea4006,
832 0x05ea49a7,
833 0x05eb2006,
834 0x05eb29a7,
835 0x05ec0006,
836 0x05ec09a7,
837 0x05ece006,
838 0x05ece9a7,
839 0x05edc006,
840 0x05edc9a7,
841 0x05eea006,
842 0x05eea9a7,
843 0x05ef8006,
844 0x05ef89a7,
845 0x05f06006,
846 0x05f069a7,
847 0x05f14006,
848 0x05f149a7,
849 0x05f22006,
850 0x05f229a7,
851 0x05f30006,
852 0x05f309a7,
853 0x05f3e006,
854 0x05f3e9a7,
855 0x05f4c006,
856 0x05f4c9a7,
857 0x05f5a006,
858 0x05f5a9a7,
859 0x05f68006,
860 0x05f689a7,
861 0x05f76006,
862 0x05f769a7,
863 0x05f84006,
864 0x05f849a7,
865 0x05f92006,
866 0x05f929a7,
867 0x05fa0006,
868 0x05fa09a7,
869 0x05fae006,
870 0x05fae9a7,
871 0x05fbc006,
872 0x05fbc9a7,
873 0x05fca006,
874 0x05fca9a7,
875 0x05fd8006,
876 0x05fd89a7,
877 0x05fe6006,
878 0x05fe69a7,
879 0x05ff4006,
880 0x05ff49a7,
881 0x06002006,
882 0x060029a7,
883 0x06010006,
884 0x060109a7,
885 0x0601e006,
886 0x0601e9a7,
887 0x0602c006,
888 0x0602c9a7,
889 0x0603a006,
890 0x0603a9a7,
891 0x06048006,
892 0x060489a7,
893 0x06056006,
894 0x060569a7,
895 0x06064006,
896 0x060649a7,
897 0x06072006,
898 0x060729a7,
899 0x06080006,
900 0x060809a7,
901 0x0608e006,
902 0x0608e9a7,
903 0x0609c006,
904 0x0609c9a7,
905 0x060aa006,
906 0x060aa9a7,
907 0x060b8006,
908 0x060b89a7,
909 0x060c6006,
910 0x060c69a7,
911 0x060d4006,
912 0x060d49a7,
913 0x060e2006,
914 0x060e29a7,
915 0x060f0006,
916 0x060f09a7,
917 0x060fe006,
918 0x060fe9a7,
919 0x0610c006,
920 0x0610c9a7,
921 0x0611a006,
922 0x0611a9a7,
923 0x06128006,
924 0x061289a7,
925 0x06136006,
926 0x061369a7,
927 0x06144006,
928 0x061449a7,
929 0x06152006,
930 0x061529a7,
931 0x06160006,
932 0x061609a7,
933 0x0616e006,
934 0x0616e9a7,
935 0x0617c006,
936 0x0617c9a7,
937 0x0618a006,
938 0x0618a9a7,
939 0x06198006,
940 0x061989a7,
941 0x061a6006,
942 0x061a69a7,
943 0x061b4006,
944 0x061b49a7,
945 0x061c2006,
946 0x061c29a7,
947 0x061d0006,
948 0x061d09a7,
949 0x061de006,
950 0x061de9a7,
951 0x061ec006,
952 0x061ec9a7,
953 0x061fa006,
954 0x061fa9a7,
955 0x06208006,
956 0x062089a7,
957 0x06216006,
958 0x062169a7,
959 0x06224006,
960 0x062249a7,
961 0x06232006,
962 0x062329a7,
963 0x06240006,
964 0x062409a7,
965 0x0624e006,
966 0x0624e9a7,
967 0x0625c006,
968 0x0625c9a7,
969 0x0626a006,
970 0x0626a9a7,
971 0x06278006,
972 0x062789a7,
973 0x06286006,
974 0x062869a7,
975 0x06294006,
976 0x062949a7,
977 0x062a2006,
978 0x062a29a7,
979 0x062b0006,
980 0x062b09a7,
981 0x062be006,
982 0x062be9a7,
983 0x062cc006,
984 0x062cc9a7,
985 0x062da006,
986 0x062da9a7,
987 0x062e8006,
988 0x062e89a7,
989 0x062f6006,
990 0x062f69a7,
991 0x06304006,
992 0x063049a7,
993 0x06312006,
994 0x063129a7,
995 0x06320006,
996 0x063209a7,
997 0x0632e006,
998 0x0632e9a7,
999 0x0633c006,
1000 0x0633c9a7,
1001 0x0634a006,
1002 0x0634a9a7,
1003 0x06358006,
1004 0x063589a7,
1005 0x06366006,
1006 0x063669a7,
1007 0x06374006,
1008 0x063749a7,
1009 0x06382006,
1010 0x063829a7,
1011 0x06390006,
1012 0x063909a7,
1013 0x0639e006,
1014 0x0639e9a7,
1015 0x063ac006,
1016 0x063ac9a7,
1017 0x063ba006,
1018 0x063ba9a7,
1019 0x063c8006,
1020 0x063c89a7,
1021 0x063d6006,
1022 0x063d69a7,
1023 0x063e4006,
1024 0x063e49a7,
1025 0x063f2006,
1026 0x063f29a7,
1027 0x06400006,
1028 0x064009a7,
1029 0x0640e006,
1030 0x0640e9a7,
1031 0x0641c006,
1032 0x0641c9a7,
1033 0x0642a006,
1034 0x0642a9a7,
1035 0x06438006,
1036 0x064389a7,
1037 0x06446006,
1038 0x064469a7,
1039 0x06454006,
1040 0x064549a7,
1041 0x06462006,
1042 0x064629a7,
1043 0x06470006,
1044 0x064709a7,
1045 0x0647e006,
1046 0x0647e9a7,
1047 0x0648c006,
1048 0x0648c9a7,
1049 0x0649a006,
1050 0x0649a9a7,
1051 0x064a8006,
1052 0x064a89a7,
1053 0x064b6006,
1054 0x064b69a7,
1055 0x064c4006,
1056 0x064c49a7,
1057 0x064d2006,
1058 0x064d29a7,
1059 0x064e0006,
1060 0x064e09a7,
1061 0x064ee006,
1062 0x064ee9a7,
1063 0x064fc006,
1064 0x064fc9a7,
1065 0x0650a006,
1066 0x0650a9a7,
1067 0x06518006,
1068 0x065189a7,
1069 0x06526006,
1070 0x065269a7,
1071 0x06534006,
1072 0x065349a7,
1073 0x06542006,
1074 0x065429a7,
1075 0x06550006,
1076 0x065509a7,
1077 0x0655e006,
1078 0x0655e9a7,
1079 0x0656c006,
1080 0x0656c9a7,
1081 0x0657a006,
1082 0x0657a9a7,
1083 0x06588006,
1084 0x065889a7,
1085 0x06596006,
1086 0x065969a7,
1087 0x065a4006,
1088 0x065a49a7,
1089 0x065b2006,
1090 0x065b29a7,
1091 0x065c0006,
1092 0x065c09a7,
1093 0x065ce006,
1094 0x065ce9a7,
1095 0x065dc006,
1096 0x065dc9a7,
1097 0x065ea006,
1098 0x065ea9a7,
1099 0x065f8006,
1100 0x065f89a7,
1101 0x06606006,
1102 0x066069a7,
1103 0x06614006,
1104 0x066149a7,
1105 0x06622006,
1106 0x066229a7,
1107 0x06630006,
1108 0x066309a7,
1109 0x0663e006,
1110 0x0663e9a7,
1111 0x0664c006,
1112 0x0664c9a7,
1113 0x0665a006,
1114 0x0665a9a7,
1115 0x06668006,
1116 0x066689a7,
1117 0x06676006,
1118 0x066769a7,
1119 0x06684006,
1120 0x066849a7,
1121 0x06692006,
1122 0x066929a7,
1123 0x066a0006,
1124 0x066a09a7,
1125 0x066ae006,
1126 0x066ae9a7,
1127 0x066bc006,
1128 0x066bc9a7,
1129 0x066ca006,
1130 0x066ca9a7,
1131 0x066d8006,
1132 0x066d89a7,
1133 0x066e6006,
1134 0x066e69a7,
1135 0x066f4006,
1136 0x066f49a7,
1137 0x06702006,
1138 0x067029a7,
1139 0x06710006,
1140 0x067109a7,
1141 0x0671e006,
1142 0x0671e9a7,
1143 0x0672c006,
1144 0x0672c9a7,
1145 0x0673a006,
1146 0x0673a9a7,
1147 0x06748006,
1148 0x067489a7,
1149 0x06756006,
1150 0x067569a7,
1151 0x06764006,
1152 0x067649a7,
1153 0x06772006,
1154 0x067729a7,
1155 0x06780006,
1156 0x067809a7,
1157 0x0678e006,
1158 0x0678e9a7,
1159 0x0679c006,
1160 0x0679c9a7,
1161 0x067aa006,
1162 0x067aa9a7,
1163 0x067b8006,
1164 0x067b89a7,
1165 0x067c6006,
1166 0x067c69a7,
1167 0x067d4006,
1168 0x067d49a7,
1169 0x067e2006,
1170 0x067e29a7,
1171 0x067f0006,
1172 0x067f09a7,
1173 0x067fe006,
1174 0x067fe9a7,
1175 0x0680c006,
1176 0x0680c9a7,
1177 0x0681a006,
1178 0x0681a9a7,
1179 0x06828006,
1180 0x068289a7,
1181 0x06836006,
1182 0x068369a7,
1183 0x06844006,
1184 0x068449a7,
1185 0x06852006,
1186 0x068529a7,
1187 0x06860006,
1188 0x068609a7,
1189 0x0686e006,
1190 0x0686e9a7,
1191 0x0687c006,
1192 0x0687c9a7,
1193 0x0688a006,
1194 0x0688a9a7,
1195 0x06898006,
1196 0x068989a7,
1197 0x068a6006,
1198 0x068a69a7,
1199 0x068b4006,
1200 0x068b49a7,
1201 0x068c2006,
1202 0x068c29a7,
1203 0x068d0006,
1204 0x068d09a7,
1205 0x068de006,
1206 0x068de9a7,
1207 0x068ec006,
1208 0x068ec9a7,
1209 0x068fa006,
1210 0x068fa9a7,
1211 0x06908006,
1212 0x069089a7,
1213 0x06916006,
1214 0x069169a7,
1215 0x06924006,
1216 0x069249a7,
1217 0x06932006,
1218 0x069329a7,
1219 0x06940006,
1220 0x069409a7,
1221 0x0694e006,
1222 0x0694e9a7,
1223 0x0695c006,
1224 0x0695c9a7,
1225 0x0696a006,
1226 0x0696a9a7,
1227 0x06978006,
1228 0x069789a7,
1229 0x06986006,
1230 0x069869a7,
1231 0x06994006,
1232 0x069949a7,
1233 0x069a2006,
1234 0x069a29a7,
1235 0x069b0006,
1236 0x069b09a7,
1237 0x069be006,
1238 0x069be9a7,
1239 0x069cc006,
1240 0x069cc9a7,
1241 0x069da006,
1242 0x069da9a7,
1243 0x069e8006,
1244 0x069e89a7,
1245 0x069f6006,
1246 0x069f69a7,
1247 0x06a04006,
1248 0x06a049a7,
1249 0x06a12006,
1250 0x06a129a7,
1251 0x06a20006,
1252 0x06a209a7,
1253 0x06a2e006,
1254 0x06a2e9a7,
1255 0x06a3c006,
1256 0x06a3c9a7,
1257 0x06a4a006,
1258 0x06a4a9a7,
1259 0x06a58006,
1260 0x06a589a7,
1261 0x06a66006,
1262 0x06a669a7,
1263 0x06a74006,
1264 0x06a749a7,
1265 0x06a82006,
1266 0x06a829a7,
1267 0x06a90006,
1268 0x06a909a7,
1269 0x06a9e006,
1270 0x06a9e9a7,
1271 0x06aac006,
1272 0x06aac9a7,
1273 0x06aba006,
1274 0x06aba9a7,
1275 0x06ac8006,
1276 0x06ac89a7,
1277 0x06ad6006,
1278 0x06ad69a7,
1279 0x06ae4006,
1280 0x06ae49a7,
1281 0x06af2006,
1282 0x06af29a7,
1283 0x06b00006,
1284 0x06b009a7,
1285 0x06b0e006,
1286 0x06b0e9a7,
1287 0x06b1c006,
1288 0x06b1c9a7,
1289 0x06b2a006,
1290 0x06b2a9a7,
1291 0x06b38006,
1292 0x06b389a7,
1293 0x06b46006,
1294 0x06b469a7,
1295 0x06b54006,
1296 0x06b549a7,
1297 0x06b62006,
1298 0x06b629a7,
1299 0x06b70006,
1300 0x06b709a7,
1301 0x06b7e006,
1302 0x06b7e9a7,
1303 0x06b8c006,
1304 0x06b8c9a7,
1305 0x06b9a006,
1306 0x06b9a9a7,
1307 0x06ba8006,
1308 0x06ba89a7,
1309 0x06bb6006,
1310 0x06bb69a7,
1311 0x06bc4006,
1312 0x06bc49a7,
1313 0x06bd816c,
1314 0x06be5b0b,
1315 0x07d8f002,
1316 0x07f000f2,
1317 0x07f100f2,
1318 0x07f7f801,
1319 0x07fcf012,
1320 0x07ff80b1,
1321 0x080fe802,
1322 0x08170002,
1323 0x081bb042,
1324 0x08500822,
1325 0x08502812,
1326 0x08506032,
1327 0x0851c022,
1328 0x0851f802,
1329 0x08572812,
1330 0x08692032,
1331 0x08755812,
1332 0x0877e822,
1333 0x087a30a2,
1334 0x087c1032,
1335 0x0880000a,
1336 0x08800802,
1337 0x0880100a,
1338 0x0881c0e2,
1339 0x08838002,
1340 0x08839812,
1341 0x0883f822,
1342 0x0884100a,
1343 0x0885802a,
1344 0x08859832,
1345 0x0885b81a,
1346 0x0885c812,
1347 0x0885e808,
1348 0x08861002,
1349 0x08866808,
1350 0x08880022,
1351 0x08893842,
1352 0x0889600a,
1353 0x08896872,
1354 0x088a281a,
1355 0x088b9802,
1356 0x088c0012,
1357 0x088c100a,
1358 0x088d982a,
1359 0x088db082,
1360 0x088df81a,
1361 0x088e1018,
1362 0x088e4832,
1363 0x088e700a,
1364 0x088e7802,
1365 0x0891602a,
1366 0x08917822,
1367 0x0891901a,
1368 0x0891a002,
1369 0x0891a80a,
1370 0x0891b012,
1371 0x0891f002,
1372 0x08920802,
1373 0x0896f802,
1374 0x0897002a,
1375 0x08971872,
1376 0x08980012,
1377 0x0898101a,
1378 0x0899d812,
1379 0x0899f002,
1380 0x0899f80a,
1381 0x089a0002,
1382 0x089a083a,
1383 0x089a381a,
1384 0x089a582a,
1385 0x089ab802,
1386 0x089b101a,
1387 0x089b3062,
1388 0x089b8042,
1389 0x08a1a82a,
1390 0x08a1c072,
1391 0x08a2001a,
1392 0x08a21022,
1393 0x08a2280a,
1394 0x08a23002,
1395 0x08a2f002,
1396 0x08a58002,
1397 0x08a5881a,
1398 0x08a59852,
1399 0x08a5c80a,
1400 0x08a5d002,
1401 0x08a5d81a,
1402 0x08a5e802,
1403 0x08a5f00a,
1404 0x08a5f812,
1405 0x08a6080a,
1406 0x08a61012,
1407 0x08ad7802,
1408 0x08ad801a,
1409 0x08ad9032,
1410 0x08adc03a,
1411 0x08ade012,
1412 0x08adf00a,
1413 0x08adf812,
1414 0x08aee012,
1415 0x08b1802a,
1416 0x08b19872,
1417 0x08b1d81a,
1418 0x08b1e802,
1419 0x08b1f00a,
1420 0x08b1f812,
1421 0x08b55802,
1422 0x08b5600a,
1423 0x08b56802,
1424 0x08b5701a,
1425 0x08b58052,
1426 0x08b5b00a,
1427 0x08b5b802,
1428 0x08b8e822,
1429 0x08b91032,
1430 0x08b9300a,
1431 0x08b93842,
1432 0x08c1602a,
1433 0x08c17882,
1434 0x08c1c00a,
1435 0x08c1c812,
1436 0x08c98002,
1437 0x08c9884a,
1438 0x08c9b81a,
1439 0x08c9d812,
1440 0x08c9e80a,
1441 0x08c9f002,
1442 0x08c9f808,
1443 0x08ca000a,
1444 0x08ca0808,
1445 0x08ca100a,
1446 0x08ca1802,
1447 0x08ce882a,
1448 0x08cea032,
1449 0x08ced012,
1450 0x08cee03a,
1451 0x08cf0002,
1452 0x08cf200a,
1453 0x08d00892,
1454 0x08d19852,
1455 0x08d1c80a,
1456 0x08d1d008,
1457 0x08d1d832,
1458 0x08d23802,
1459 0x08d28852,
1460 0x08d2b81a,
1461 0x08d2c822,
1462 0x08d42058,
1463 0x08d450c2,
1464 0x08d4b80a,
1465 0x08d4c012,
1466 0x08e1780a,
1467 0x08e18062,
1468 0x08e1c052,
1469 0x08e1f00a,
1470 0x08e1f802,
1471 0x08e49152,
1472 0x08e5480a,
1473 0x08e55062,
1474 0x08e5880a,
1475 0x08e59012,
1476 0x08e5a00a,
1477 0x08e5a812,
1478 0x08e98852,
1479 0x08e9d002,
1480 0x08e9e012,
1481 0x08e9f862,
1482 0x08ea3008,
1483 0x08ea3802,
1484 0x08ec504a,
1485 0x08ec8012,
1486 0x08ec981a,
1487 0x08eca802,
1488 0x08ecb00a,
1489 0x08ecb802,
1490 0x08f79812,
1491 0x08f7a81a,
1492 0x08f80012,
1493 0x08f81008,
1494 0x08f8180a,
1495 0x08f9a01a,
1496 0x08f9b042,
1497 0x08f9f01a,
1498 0x08fa0002,
1499 0x08fa080a,
1500 0x08fa1002,
1501 0x09a180f1,
1502 0x09a20002,
1503 0x09a238e2,
1504 0x0b578042,
1505 0x0b598062,
1506 0x0b7a7802,
1507 0x0b7a8b6a,
1508 0x0b7c7832,
1509 0x0b7f2002,
1510 0x0b7f801a,
1511 0x0de4e812,
1512 0x0de50031,
1513 0x0e7802d2,
1514 0x0e798162,
1515 0x0e8b2802,
1516 0x0e8b300a,
1517 0x0e8b3822,
1518 0x0e8b680a,
1519 0x0e8b7042,
1520 0x0e8b9871,
1521 0x0e8bd872,
1522 0x0e8c2862,
1523 0x0e8d5032,
1524 0x0e921022,
1525 0x0ed00362,
1526 0x0ed1db12,
1527 0x0ed3a802,
1528 0x0ed42002,
1529 0x0ed4d842,
1530 0x0ed508e2,
1531 0x0f000062,
1532 0x0f004102,
1533 0x0f00d862,
1534 0x0f011812,
1535 0x0f013042,
1536 0x0f047802,
1537 0x0f098062,
1538 0x0f157002,
1539 0x0f176032,
1540 0x0f276032,
1541 0x0f468062,
1542 0x0f4a2062,
1543 0x0f8007f3,
1544 0x0f8407f3,
1545 0x0f886823,
1546 0x0f897803,
1547 0x0f8b6053,
1548 0x0f8bf013,
1549 0x0f8c7003,
1550 0x0f8c8893,
1551 0x0f8d6b83,
1552 0x0f8f3199,
1553 0x0f9008e3,
1554 0x0f90d003,
1555 0x0f917803,
1556 0x0f919083,
1557 0x0f91e033,
1558 0x0f924ff3,
1559 0x0f964ff3,
1560 0x0f9a4ff3,
1561 0x0f9e4b13,
1562 0x0f9fd842,
1563 0x0fa007f3,
1564 0x0fa407f3,
1565 0x0fa803d3,
1566 0x0faa37f3,
1567 0x0fae37f3,
1568 0x0fb23093,
1569 0x0fb407f3,
1570 0x0fbba0b3,
1571 0x0fbeaaa3,
1572 0x0fc06033,
1573 0x0fc24073,
1574 0x0fc2d053,
1575 0x0fc44073,
1576 0x0fc57513,
1577 0x0fc862e3,
1578 0x0fc9e093,
1579 0x0fca3ff3,
1580 0x0fce3ff3,
1581 0x0fd23ff3,
1582 0x0fd63b83,
1583 0x0fe007f3,
1584 0x0fe407f3,
1585 0x0fe807f3,
1586 0x0fec07f3,
1587 0x0ff007f3,
1588 0x0ff407f3,
1589 0x0ff807f3,
1590 0x0ffc07d3,
1591 0x700001f1,
1592 0x700105f2,
1593 0x700407f1,
1594 0x700807f2,
1595 0x700c06f2,
1596 0x700f87f1,
1597 0x701387f1,
1598 0x701787f1,
1599 0x701b87f1,
1600 0x701f87f1,
1601 0x702387f1,
1602 0x702787f1,
1603 0x702b87f1,
1604 0x702f87f1,
1605 0x703387f1,
1606 0x703787f1,
1607 0x703b87f1,
1608 0x703f87f1,
1609 0x704387f1,
1610 0x704787f1,
1611 0x704b87f1,
1612 0x704f87f1,
1613 0x705387f1,
1614 0x705787f1,
1615 0x705b87f1,
1616 0x705f87f1,
1617 0x706387f1,
1618 0x706787f1,
1619 0x706b87f1,
1620 0x706f87f1,
1621 0x707387f1,
1622 0x707787f1,
1623 0x707b87f1,
1624 0x707f80f1};
1625 // clang-format on
1626
1627 /// Returns the extended grapheme cluster bondary property of a code point.
__get_property(const char32_t __code_point)1628 [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __property __get_property(const char32_t __code_point) noexcept {
1629 // The algorithm searches for the upper bound of the range and, when found,
1630 // steps back one entry. This algorithm is used since the code point can be
1631 // anywhere in the range. After a lower bound is found the next step is to
1632 // compare whether the code unit is indeed in the range.
1633 //
1634 // Since the entry contains a code unit, size, and property the code point
1635 // being sought needs to be adjusted. Just shifting the code point to the
1636 // proper position doesn't work; suppose an entry has property 0, size 1,
1637 // and lower bound 3. This results in the entry 0x1810.
1638 // When searching for code point 3 it will search for 0x1800, find 0x1810
1639 // and moves to the previous entry. Thus the lower bound value will never
1640 // be found.
1641 // The simple solution is to set the bits belonging to the property and
1642 // size. Then the upper bound for code point 3 will return the entry after
1643 // 0x1810. After moving to the previous entry the algorithm arrives at the
1644 // correct entry.
1645 ptrdiff_t __i = std::ranges::upper_bound(__entries, (__code_point << 11) | 0x7ffu) - __entries;
1646 if (__i == 0)
1647 return __property::__none;
1648
1649 --__i;
1650 uint32_t __upper_bound = (__entries[__i] >> 11) + ((__entries[__i] >> 4) & 0x7f);
1651 if (__code_point <= __upper_bound)
1652 return static_cast<__property>(__entries[__i] & 0xf);
1653
1654 return __property::__none;
1655 }
1656
1657 } // namespace __extended_grapheme_custer_property_boundary
1658
1659 #endif //_LIBCPP_STD_VER >= 20
1660
1661 _LIBCPP_END_NAMESPACE_STD
1662
1663 #endif // _LIBCPP___FORMAT_EXTENDED_GRAPHEME_CLUSTER_TABLE_H
1664