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