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 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