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