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