Warning: This file is not a C or C++ file. It does not have highlighting.

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

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of libcxx/include/__format/extended_grapheme_cluster_table.h