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
78namespace __extended_grapheme_custer_property_boundary {
79
80enum 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
128inline 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.
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