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