From: Erik Schnetter Date: Sun, 29 Dec 2024 18:38:01 +0000 (-0500) Subject: Optimize table layout X-Git-Tag: archive/raspbian/2.11.3-2+rpi1^2~10^2~1^2~3^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ecd7d1b299a86ca8528506cc194d6101066cc1d0;p=utf8proc.git Optimize table layout --- diff --git a/data/data_generator.jl b/data/data_generator.jl index 0c063aa..e55657f 100644 --- a/data/data_generator.jl +++ b/data/data_generator.jl @@ -469,12 +469,24 @@ function print_c_data_tables(io, sequences, prop_page_indices, prop_pages, dedup end print(io, "};\n\n") - print(io, "static const utf8proc_uint32_t utf8proc_combinations[][2] = {\n") + print(io, "static const utf8proc_uint32_t utf8proc_combinations_second[] = {\n") for dm0 in sort!(collect(keys(comb_mapping))) + print(io, " "); + for dm1 in sort!(collect(keys(comb_mapping[dm0]))) + print(io, " ", dm1, ",") + end + print(io, "\n"); + end + print(io, "};\n\n") + + print(io, "static const utf8proc_uint32_t utf8proc_combinations_combined[] = {\n") + for dm0 in sort!(collect(keys(comb_mapping))) + print(io, " "); for dm1 in sort!(collect(keys(comb_mapping[dm0]))) code = comb_mapping[dm0][dm1] - print(io, " {", dm1, ", ", code, "},\n") + print(io, " ", code, ",") end + print(io, "\n"); end print(io, "};\n\n") end diff --git a/utf8proc.c b/utf8proc.c index 7effa92..5149e75 100644 --- a/utf8proc.c +++ b/utf8proc.c @@ -687,18 +687,18 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *b int idx = starter_property->comb_index; if (idx < 0x3FF && current_property->comb_issecond) { int len = starter_property->comb_length; - utf8proc_uint32_t max_second = utf8proc_combinations[idx + len - 1][0]; + utf8proc_uint32_t max_second = utf8proc_combinations_second[idx + len - 1]; if (current_char <= max_second) { // TODO: binary search? arithmetic search? for (int off = 0; off < len; ++off) { - utf8proc_uint32_t second = utf8proc_combinations[idx + off][0]; + utf8proc_uint32_t second = utf8proc_combinations_second[idx + off]; if (current_char < second) { /* not found */ break; } if (current_char == second) { /* found */ - utf8proc_uint32_t composition = utf8proc_combinations[idx + off][1]; + utf8proc_uint32_t composition = utf8proc_combinations_combined[idx + off]; *starter = composition; starter_property = NULL; break; diff --git a/utf8proc.h b/utf8proc.h index a21b6bb..4bab22b 100644 --- a/utf8proc.h +++ b/utf8proc.h @@ -266,10 +266,12 @@ typedef struct utf8proc_property_struct { * combining pair, and for most, there are only a handful for * possible second characters. * - * The combining table is stored as `utf8proc_uint32_t - * utf8proc_combinations[][2]`. That is, it contains a pair `(second - * combining character, combined character)` for every character - * that can be a first combining character. + * The combining table is stored as sparse matrix in the CSR + * (compressed sparse row) format. That is, it is stored as two + * arrays, `utf8proc_uint32_t utf8proc_combinations_second[]` and + * `utf8proc_uint32_t utf8proc_combinations_combined[]`. These + * contain the second combining characters and the combined + * character of every combining pair. * * - `comb_index`: Index into the combining table if this character * is the first character in a combining pair, else 0x3ff diff --git a/utf8proc_data.c b/utf8proc_data.c index d2b0a5e..469a432 100644 --- a/utf8proc_data.c +++ b/utf8proc_data.c @@ -16316,967 +16316,791 @@ static const utf8proc_property_t utf8proc_properties[] = { {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND}, }; -static const utf8proc_uint32_t utf8proc_combinations[][2] = { - {824, 8814}, - {824, 8800}, - {824, 8815}, - {768, 192}, - {769, 193}, - {770, 194}, - {771, 195}, - {772, 256}, - {774, 258}, - {775, 550}, - {776, 196}, - {777, 7842}, - {778, 197}, - {780, 461}, - {783, 512}, - {785, 514}, - {803, 7840}, - {805, 7680}, - {808, 260}, - {775, 7682}, - {803, 7684}, - {817, 7686}, - {769, 262}, - {770, 264}, - {775, 266}, - {780, 268}, - {807, 199}, - {775, 7690}, - {780, 270}, - {803, 7692}, - {807, 7696}, - {813, 7698}, - {817, 7694}, - {768, 200}, - {769, 201}, - {770, 202}, - {771, 7868}, - {772, 274}, - {774, 276}, - {775, 278}, - {776, 203}, - {777, 7866}, - {780, 282}, - {783, 516}, - {785, 518}, - {803, 7864}, - {807, 552}, - {808, 280}, - {813, 7704}, - {816, 7706}, - {775, 7710}, - {769, 500}, - {770, 284}, - {772, 7712}, - {774, 286}, - {775, 288}, - {780, 486}, - {807, 290}, - {770, 292}, - {775, 7714}, - {776, 7718}, - {780, 542}, - {803, 7716}, - {807, 7720}, - {814, 7722}, - {768, 204}, - {769, 205}, - {770, 206}, - {771, 296}, - {772, 298}, - {774, 300}, - {775, 304}, - {776, 207}, - {777, 7880}, - {780, 463}, - {783, 520}, - {785, 522}, - {803, 7882}, - {808, 302}, - {816, 7724}, - {770, 308}, - {769, 7728}, - {780, 488}, - {803, 7730}, - {807, 310}, - {817, 7732}, - {769, 313}, - {780, 317}, - {803, 7734}, - {807, 315}, - {813, 7740}, - {817, 7738}, - {769, 7742}, - {775, 7744}, - {803, 7746}, - {768, 504}, - {769, 323}, - {771, 209}, - {775, 7748}, - {780, 327}, - {803, 7750}, - {807, 325}, - {813, 7754}, - {817, 7752}, - {768, 210}, - {769, 211}, - {770, 212}, - {771, 213}, - {772, 332}, - {774, 334}, - {775, 558}, - {776, 214}, - {777, 7886}, - {779, 336}, - {780, 465}, - {783, 524}, - {785, 526}, - {795, 416}, - {803, 7884}, - {808, 490}, - {769, 7764}, - {775, 7766}, - {769, 340}, - {775, 7768}, - {780, 344}, - {783, 528}, - {785, 530}, - {803, 7770}, - {807, 342}, - {817, 7774}, - {769, 346}, - {770, 348}, - {775, 7776}, - {780, 352}, - {803, 7778}, - {806, 536}, - {807, 350}, - {775, 7786}, - {780, 356}, - {803, 7788}, - {806, 538}, - {807, 354}, - {813, 7792}, - {817, 7790}, - {768, 217}, - {769, 218}, - {770, 219}, - {771, 360}, - {772, 362}, - {774, 364}, - {776, 220}, - {777, 7910}, - {778, 366}, - {779, 368}, - {780, 467}, - {783, 532}, - {785, 534}, - {795, 431}, - {803, 7908}, - {804, 7794}, - {808, 370}, - {813, 7798}, - {816, 7796}, - {771, 7804}, - {803, 7806}, - {768, 7808}, - {769, 7810}, - {770, 372}, - {775, 7814}, - {776, 7812}, - {803, 7816}, - {775, 7818}, - {776, 7820}, - {768, 7922}, - {769, 221}, - {770, 374}, - {771, 7928}, - {772, 562}, - {775, 7822}, - {776, 376}, - {777, 7926}, - {803, 7924}, - {769, 377}, - {770, 7824}, - {775, 379}, - {780, 381}, - {803, 7826}, - {817, 7828}, - {768, 224}, - {769, 225}, - {770, 226}, - {771, 227}, - {772, 257}, - {774, 259}, - {775, 551}, - {776, 228}, - {777, 7843}, - {778, 229}, - {780, 462}, - {783, 513}, - {785, 515}, - {803, 7841}, - {805, 7681}, - {808, 261}, - {775, 7683}, - {803, 7685}, - {817, 7687}, - {769, 263}, - {770, 265}, - {775, 267}, - {780, 269}, - {807, 231}, - {775, 7691}, - {780, 271}, - {803, 7693}, - {807, 7697}, - {813, 7699}, - {817, 7695}, - {768, 232}, - {769, 233}, - {770, 234}, - {771, 7869}, - {772, 275}, - {774, 277}, - {775, 279}, - {776, 235}, - {777, 7867}, - {780, 283}, - {783, 517}, - {785, 519}, - {803, 7865}, - {807, 553}, - {808, 281}, - {813, 7705}, - {816, 7707}, - {775, 7711}, - {769, 501}, - {770, 285}, - {772, 7713}, - {774, 287}, - {775, 289}, - {780, 487}, - {807, 291}, - {770, 293}, - {775, 7715}, - {776, 7719}, - {780, 543}, - {803, 7717}, - {807, 7721}, - {814, 7723}, - {817, 7830}, - {768, 236}, - {769, 237}, - {770, 238}, - {771, 297}, - {772, 299}, - {774, 301}, - {776, 239}, - {777, 7881}, - {780, 464}, - {783, 521}, - {785, 523}, - {803, 7883}, - {808, 303}, - {816, 7725}, - {770, 309}, - {780, 496}, - {769, 7729}, - {780, 489}, - {803, 7731}, - {807, 311}, - {817, 7733}, - {769, 314}, - {780, 318}, - {803, 7735}, - {807, 316}, - {813, 7741}, - {817, 7739}, - {769, 7743}, - {775, 7745}, - {803, 7747}, - {768, 505}, - {769, 324}, - {771, 241}, - {775, 7749}, - {780, 328}, - {803, 7751}, - {807, 326}, - {813, 7755}, - {817, 7753}, - {768, 242}, - {769, 243}, - {770, 244}, - {771, 245}, - {772, 333}, - {774, 335}, - {775, 559}, - {776, 246}, - {777, 7887}, - {779, 337}, - {780, 466}, - {783, 525}, - {785, 527}, - {795, 417}, - {803, 7885}, - {808, 491}, - {769, 7765}, - {775, 7767}, - {769, 341}, - {775, 7769}, - {780, 345}, - {783, 529}, - {785, 531}, - {803, 7771}, - {807, 343}, - {817, 7775}, - {769, 347}, - {770, 349}, - {775, 7777}, - {780, 353}, - {803, 7779}, - {806, 537}, - {807, 351}, - {775, 7787}, - {776, 7831}, - {780, 357}, - {803, 7789}, - {806, 539}, - {807, 355}, - {813, 7793}, - {817, 7791}, - {768, 249}, - {769, 250}, - {770, 251}, - {771, 361}, - {772, 363}, - {774, 365}, - {776, 252}, - {777, 7911}, - {778, 367}, - {779, 369}, - {780, 468}, - {783, 533}, - {785, 535}, - {795, 432}, - {803, 7909}, - {804, 7795}, - {808, 371}, - {813, 7799}, - {816, 7797}, - {771, 7805}, - {803, 7807}, - {768, 7809}, - {769, 7811}, - {770, 373}, - {775, 7815}, - {776, 7813}, - {778, 7832}, - {803, 7817}, - {775, 7819}, - {776, 7821}, - {768, 7923}, - {769, 253}, - {770, 375}, - {771, 7929}, - {772, 563}, - {775, 7823}, - {776, 255}, - {777, 7927}, - {778, 7833}, - {803, 7925}, - {769, 378}, - {770, 7825}, - {775, 380}, - {780, 382}, - {803, 7827}, - {817, 7829}, - {768, 8173}, - {769, 901}, - {834, 8129}, - {768, 7846}, - {769, 7844}, - {771, 7850}, - {777, 7848}, - {772, 478}, - {769, 506}, - {769, 508}, - {772, 482}, - {769, 7688}, - {768, 7872}, - {769, 7870}, - {771, 7876}, - {777, 7874}, - {769, 7726}, - {768, 7890}, - {769, 7888}, - {771, 7894}, - {777, 7892}, - {769, 7756}, - {772, 556}, - {776, 7758}, - {772, 554}, - {769, 510}, - {768, 475}, - {769, 471}, - {772, 469}, - {780, 473}, - {768, 7847}, - {769, 7845}, - {771, 7851}, - {777, 7849}, - {772, 479}, - {769, 507}, - {769, 509}, - {772, 483}, - {769, 7689}, - {768, 7873}, - {769, 7871}, - {771, 7877}, - {777, 7875}, - {769, 7727}, - {768, 7891}, - {769, 7889}, - {771, 7895}, - {777, 7893}, - {769, 7757}, - {772, 557}, - {776, 7759}, - {772, 555}, - {769, 511}, - {768, 476}, - {769, 472}, - {772, 470}, - {780, 474}, - {768, 7856}, - {769, 7854}, - {771, 7860}, - {777, 7858}, - {768, 7857}, - {769, 7855}, - {771, 7861}, - {777, 7859}, - {768, 7700}, - {769, 7702}, - {768, 7701}, - {769, 7703}, - {768, 7760}, - {769, 7762}, - {768, 7761}, - {769, 7763}, - {775, 7780}, - {775, 7781}, - {775, 7782}, - {775, 7783}, - {769, 7800}, - {769, 7801}, - {776, 7802}, - {776, 7803}, - {775, 7835}, - {768, 7900}, - {769, 7898}, - {771, 7904}, - {777, 7902}, - {803, 7906}, - {768, 7901}, - {769, 7899}, - {771, 7905}, - {777, 7903}, - {803, 7907}, - {768, 7914}, - {769, 7912}, - {771, 7918}, - {777, 7916}, - {803, 7920}, - {768, 7915}, - {769, 7913}, - {771, 7919}, - {777, 7917}, - {803, 7921}, - {780, 494}, - {772, 492}, - {772, 493}, - {772, 480}, - {772, 481}, - {774, 7708}, - {774, 7709}, - {772, 560}, - {772, 561}, - {780, 495}, - {768, 8122}, - {769, 902}, - {772, 8121}, - {774, 8120}, - {787, 7944}, - {788, 7945}, - {837, 8124}, - {768, 8136}, - {769, 904}, - {787, 7960}, - {788, 7961}, - {768, 8138}, - {769, 905}, - {787, 7976}, - {788, 7977}, - {837, 8140}, - {768, 8154}, - {769, 906}, - {772, 8153}, - {774, 8152}, - {776, 938}, - {787, 7992}, - {788, 7993}, - {768, 8184}, - {769, 908}, - {787, 8008}, - {788, 8009}, - {788, 8172}, - {768, 8170}, - {769, 910}, - {772, 8169}, - {774, 8168}, - {776, 939}, - {788, 8025}, - {768, 8186}, - {769, 911}, - {787, 8040}, - {788, 8041}, - {837, 8188}, - {837, 8116}, - {837, 8132}, - {768, 8048}, - {769, 940}, - {772, 8113}, - {774, 8112}, - {787, 7936}, - {788, 7937}, - {834, 8118}, - {837, 8115}, - {768, 8050}, - {769, 941}, - {787, 7952}, - {788, 7953}, - {768, 8052}, - {769, 942}, - {787, 7968}, - {788, 7969}, - {834, 8134}, - {837, 8131}, - {768, 8054}, - {769, 943}, - {772, 8145}, - {774, 8144}, - {776, 970}, - {787, 7984}, - {788, 7985}, - {834, 8150}, - {768, 8056}, - {769, 972}, - {787, 8000}, - {788, 8001}, - {787, 8164}, - {788, 8165}, - {768, 8058}, - {769, 973}, - {772, 8161}, - {774, 8160}, - {776, 971}, - {787, 8016}, - {788, 8017}, - {834, 8166}, - {768, 8060}, - {769, 974}, - {787, 8032}, - {788, 8033}, - {834, 8182}, - {837, 8179}, - {768, 8146}, - {769, 912}, - {834, 8151}, - {768, 8162}, - {769, 944}, - {834, 8167}, - {837, 8180}, - {769, 979}, - {776, 980}, - {776, 1031}, - {774, 1232}, - {776, 1234}, - {769, 1027}, - {768, 1024}, - {774, 1238}, - {776, 1025}, - {774, 1217}, - {776, 1244}, - {776, 1246}, - {768, 1037}, - {772, 1250}, - {774, 1049}, - {776, 1252}, - {769, 1036}, - {776, 1254}, - {772, 1262}, - {774, 1038}, - {776, 1264}, - {779, 1266}, - {776, 1268}, - {776, 1272}, - {776, 1260}, - {774, 1233}, - {776, 1235}, - {769, 1107}, - {768, 1104}, - {774, 1239}, - {776, 1105}, - {774, 1218}, - {776, 1245}, - {776, 1247}, - {768, 1117}, - {772, 1251}, - {774, 1081}, - {776, 1253}, - {769, 1116}, - {776, 1255}, - {772, 1263}, - {774, 1118}, - {776, 1265}, - {779, 1267}, - {776, 1269}, - {776, 1273}, - {776, 1261}, - {776, 1111}, - {783, 1142}, - {783, 1143}, - {776, 1242}, - {776, 1243}, - {776, 1258}, - {776, 1259}, - {1619, 1570}, - {1620, 1571}, - {1621, 1573}, - {1620, 1572}, - {1620, 1574}, - {1620, 1730}, - {1620, 1747}, - {1620, 1728}, - {2364, 2345}, - {2364, 2353}, - {2364, 2356}, - {2494, 2507}, - {2519, 2508}, - {2878, 2891}, - {2902, 2888}, - {2903, 2892}, - {3031, 2964}, - {3006, 3018}, - {3031, 3020}, - {3006, 3019}, - {3158, 3144}, - {3285, 3264}, - {3266, 3274}, - {3285, 3271}, - {3286, 3272}, - {3285, 3275}, - {3390, 3402}, - {3415, 3404}, - {3390, 3403}, - {3530, 3546}, - {3535, 3548}, - {3551, 3550}, - {3530, 3549}, - {4142, 4134}, - {6965, 6918}, - {6965, 6920}, - {6965, 6922}, - {6965, 6924}, - {6965, 6926}, - {6965, 6930}, - {6965, 6971}, - {6965, 6973}, - {6965, 6976}, - {6965, 6977}, - {6965, 6979}, - {772, 7736}, - {772, 7737}, - {772, 7772}, - {772, 7773}, - {775, 7784}, - {775, 7785}, - {770, 7852}, - {774, 7862}, - {770, 7853}, - {774, 7863}, - {770, 7878}, - {770, 7879}, - {770, 7896}, - {770, 7897}, - {768, 7938}, - {769, 7940}, - {834, 7942}, - {837, 8064}, - {768, 7939}, - {769, 7941}, - {834, 7943}, - {837, 8065}, - {837, 8066}, - {837, 8067}, - {837, 8068}, - {837, 8069}, - {837, 8070}, - {837, 8071}, - {768, 7946}, - {769, 7948}, - {834, 7950}, - {837, 8072}, - {768, 7947}, - {769, 7949}, - {834, 7951}, - {837, 8073}, - {837, 8074}, - {837, 8075}, - {837, 8076}, - {837, 8077}, - {837, 8078}, - {837, 8079}, - {768, 7954}, - {769, 7956}, - {768, 7955}, - {769, 7957}, - {768, 7962}, - {769, 7964}, - {768, 7963}, - {769, 7965}, - {768, 7970}, - {769, 7972}, - {834, 7974}, - {837, 8080}, - {768, 7971}, - {769, 7973}, - {834, 7975}, - {837, 8081}, - {837, 8082}, - {837, 8083}, - {837, 8084}, - {837, 8085}, - {837, 8086}, - {837, 8087}, - {768, 7978}, - {769, 7980}, - {834, 7982}, - {837, 8088}, - {768, 7979}, - {769, 7981}, - {834, 7983}, - {837, 8089}, - {837, 8090}, - {837, 8091}, - {837, 8092}, - {837, 8093}, - {837, 8094}, - {837, 8095}, - {768, 7986}, - {769, 7988}, - {834, 7990}, - {768, 7987}, - {769, 7989}, - {834, 7991}, - {768, 7994}, - {769, 7996}, - {834, 7998}, - {768, 7995}, - {769, 7997}, - {834, 7999}, - {768, 8002}, - {769, 8004}, - {768, 8003}, - {769, 8005}, - {768, 8010}, - {769, 8012}, - {768, 8011}, - {769, 8013}, - {768, 8018}, - {769, 8020}, - {834, 8022}, - {768, 8019}, - {769, 8021}, - {834, 8023}, - {768, 8027}, - {769, 8029}, - {834, 8031}, - {768, 8034}, - {769, 8036}, - {834, 8038}, - {837, 8096}, - {768, 8035}, - {769, 8037}, - {834, 8039}, - {837, 8097}, - {837, 8098}, - {837, 8099}, - {837, 8100}, - {837, 8101}, - {837, 8102}, - {837, 8103}, - {768, 8042}, - {769, 8044}, - {834, 8046}, - {837, 8104}, - {768, 8043}, - {769, 8045}, - {834, 8047}, - {837, 8105}, - {837, 8106}, - {837, 8107}, - {837, 8108}, - {837, 8109}, - {837, 8110}, - {837, 8111}, - {837, 8114}, - {837, 8130}, - {837, 8178}, - {837, 8119}, - {768, 8141}, - {769, 8142}, - {834, 8143}, - {837, 8135}, - {837, 8183}, - {768, 8157}, - {769, 8158}, - {834, 8159}, - {824, 8602}, - {824, 8603}, - {824, 8622}, - {824, 8653}, - {824, 8655}, - {824, 8654}, - {824, 8708}, - {824, 8713}, - {824, 8716}, - {824, 8740}, - {824, 8742}, - {824, 8769}, - {824, 8772}, - {824, 8775}, - {824, 8777}, - {824, 8813}, - {824, 8802}, - {824, 8816}, - {824, 8817}, - {824, 8820}, - {824, 8821}, - {824, 8824}, - {824, 8825}, - {824, 8832}, - {824, 8833}, - {824, 8928}, - {824, 8929}, - {824, 8836}, - {824, 8837}, - {824, 8840}, - {824, 8841}, - {824, 8930}, - {824, 8931}, - {824, 8876}, - {824, 8877}, - {824, 8878}, - {824, 8879}, - {824, 8938}, - {824, 8939}, - {824, 8940}, - {824, 8941}, - {12441, 12436}, - {12441, 12364}, - {12441, 12366}, - {12441, 12368}, - {12441, 12370}, - {12441, 12372}, - {12441, 12374}, - {12441, 12376}, - {12441, 12378}, - {12441, 12380}, - {12441, 12382}, - {12441, 12384}, - {12441, 12386}, - {12441, 12389}, - {12441, 12391}, - {12441, 12393}, - {12441, 12400}, - {12442, 12401}, - {12441, 12403}, - {12442, 12404}, - {12441, 12406}, - {12442, 12407}, - {12441, 12409}, - {12442, 12410}, - {12441, 12412}, - {12442, 12413}, - {12441, 12446}, - {12441, 12532}, - {12441, 12460}, - {12441, 12462}, - {12441, 12464}, - {12441, 12466}, - {12441, 12468}, - {12441, 12470}, - {12441, 12472}, - {12441, 12474}, - {12441, 12476}, - {12441, 12478}, - {12441, 12480}, - {12441, 12482}, - {12441, 12485}, - {12441, 12487}, - {12441, 12489}, - {12441, 12496}, - {12442, 12497}, - {12441, 12499}, - {12442, 12500}, - {12441, 12502}, - {12442, 12503}, - {12441, 12505}, - {12442, 12506}, - {12441, 12508}, - {12442, 12509}, - {12441, 12535}, - {12441, 12536}, - {12441, 12537}, - {12441, 12538}, - {12441, 12542}, - {775, 67017}, - {775, 67044}, - {69818, 69786}, - {69818, 69788}, - {69818, 69803}, - {69927, 69934}, - {69927, 69935}, - {70462, 70475}, - {70487, 70476}, - {70601, 70531}, - {70587, 70533}, - {70594, 70542}, - {70601, 70545}, - {70584, 70599}, - {70594, 70597}, - {70601, 70600}, - {70832, 70844}, - {70842, 70843}, - {70845, 70846}, - {71087, 71098}, - {71087, 71099}, - {71984, 71992}, - {90398, 90401}, - {90399, 90403}, - {90400, 90405}, - {90409, 90402}, - {90399, 90406}, - {90400, 90408}, - {90399, 90407}, - {90399, 90404}, - {93543, 93545}, - {93543, 93544}, - {93543, 93546}, +static const utf8proc_uint32_t utf8proc_combinations_second[] = { + 824, + 824, + 824, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 778, 780, 783, 785, 803, 805, 808, + 775, 803, 817, + 769, 770, 775, 780, 807, + 775, 780, 803, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 807, 808, 813, 816, + 775, + 769, 770, 772, 774, 775, 780, 807, + 770, 775, 776, 780, 803, 807, 814, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 808, 816, + 770, + 769, 780, 803, 807, 817, + 769, 780, 803, 807, 813, 817, + 769, 775, 803, + 768, 769, 771, 775, 780, 803, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 779, 780, 783, 785, 795, 803, 808, + 769, 775, + 769, 775, 780, 783, 785, 803, 807, 817, + 769, 770, 775, 780, 803, 806, 807, + 775, 780, 803, 806, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 776, 777, 778, 779, 780, 783, 785, 795, 803, 804, 808, 813, 816, + 771, 803, + 768, 769, 770, 775, 776, 803, + 775, 776, + 768, 769, 770, 771, 772, 775, 776, 777, 803, + 769, 770, 775, 780, 803, 817, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 778, 780, 783, 785, 803, 805, 808, + 775, 803, 817, + 769, 770, 775, 780, 807, + 775, 780, 803, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 807, 808, 813, 816, + 775, + 769, 770, 772, 774, 775, 780, 807, + 770, 775, 776, 780, 803, 807, 814, 817, + 768, 769, 770, 771, 772, 774, 776, 777, 780, 783, 785, 803, 808, 816, + 770, 780, + 769, 780, 803, 807, 817, + 769, 780, 803, 807, 813, 817, + 769, 775, 803, + 768, 769, 771, 775, 780, 803, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 775, 776, 777, 779, 780, 783, 785, 795, 803, 808, + 769, 775, + 769, 775, 780, 783, 785, 803, 807, 817, + 769, 770, 775, 780, 803, 806, 807, + 775, 776, 780, 803, 806, 807, 813, 817, + 768, 769, 770, 771, 772, 774, 776, 777, 778, 779, 780, 783, 785, 795, 803, 804, 808, 813, 816, + 771, 803, + 768, 769, 770, 775, 776, 778, 803, + 775, 776, + 768, 769, 770, 771, 772, 775, 776, 777, 778, 803, + 769, 770, 775, 780, 803, 817, + 768, 769, 834, + 768, 769, 771, 777, + 772, + 769, + 769, 772, + 769, + 768, 769, 771, 777, + 769, + 768, 769, 771, 777, + 769, 772, 776, + 772, + 769, + 768, 769, 772, 780, + 768, 769, 771, 777, + 772, + 769, + 769, 772, + 769, + 768, 769, 771, 777, + 769, + 768, 769, 771, 777, + 769, 772, 776, + 772, + 769, + 768, 769, 772, 780, + 768, 769, 771, 777, + 768, 769, 771, 777, + 768, 769, + 768, 769, + 768, 769, + 768, 769, + 775, + 775, + 775, + 775, + 769, + 769, + 776, + 776, + 775, + 768, 769, 771, 777, 803, + 768, 769, 771, 777, 803, + 768, 769, 771, 777, 803, + 768, 769, 771, 777, 803, + 780, + 772, + 772, + 772, + 772, + 774, + 774, + 772, + 772, + 780, + 768, 769, 772, 774, 787, 788, 837, + 768, 769, 787, 788, + 768, 769, 787, 788, 837, + 768, 769, 772, 774, 776, 787, 788, + 768, 769, 787, 788, + 788, + 768, 769, 772, 774, 776, 788, + 768, 769, 787, 788, 837, + 837, + 837, + 768, 769, 772, 774, 787, 788, 834, 837, + 768, 769, 787, 788, + 768, 769, 787, 788, 834, 837, + 768, 769, 772, 774, 776, 787, 788, 834, + 768, 769, 787, 788, + 787, 788, + 768, 769, 772, 774, 776, 787, 788, 834, + 768, 769, 787, 788, 834, 837, + 768, 769, 834, + 768, 769, 834, + 837, + 769, 776, + 776, + 774, 776, + 769, + 768, 774, 776, + 774, 776, + 776, + 768, 772, 774, 776, + 769, + 776, + 772, 774, 776, 779, + 776, + 776, + 776, + 774, 776, + 769, + 768, 774, 776, + 774, 776, + 776, + 768, 772, 774, 776, + 769, + 776, + 772, 774, 776, 779, + 776, + 776, + 776, + 776, + 783, + 783, + 776, + 776, + 776, + 776, + 1619, 1620, 1621, + 1620, + 1620, + 1620, + 1620, + 1620, + 2364, + 2364, + 2364, + 2494, 2519, + 2878, 2902, 2903, + 3031, + 3006, 3031, + 3006, + 3158, + 3285, + 3266, 3285, 3286, + 3285, + 3390, 3415, + 3390, + 3530, 3535, 3551, + 3530, + 4142, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 6965, + 772, + 772, + 772, + 772, + 775, + 775, + 770, 774, + 770, 774, + 770, + 770, + 770, + 770, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, + 768, 769, + 768, 769, + 768, 769, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, 834, + 768, 769, 834, + 768, 769, 834, + 768, 769, 834, + 768, 769, + 768, 769, + 768, 769, + 768, 769, + 768, 769, 834, + 768, 769, 834, + 768, 769, 834, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, 834, 837, + 768, 769, 834, 837, + 837, + 837, + 837, + 837, + 837, + 837, + 837, + 837, + 837, + 837, + 768, 769, 834, + 837, + 837, + 768, 769, 834, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 824, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, 12442, + 12441, + 12441, + 12441, + 12441, + 12441, + 775, + 775, + 69818, + 69818, + 69818, + 69927, + 69927, + 70462, 70487, + 70601, + 70587, + 70594, + 70601, + 70584, 70594, 70601, + 70832, 70842, 70845, + 71087, + 71087, + 71984, + 90398, 90399, 90400, 90409, + 90399, 90400, + 90399, + 90399, + 93543, + 93543, + 93543, +}; + +static const utf8proc_uint32_t utf8proc_combinations_combined[] = { + 8814, + 8800, + 8815, + 192, 193, 194, 195, 256, 258, 550, 196, 7842, 197, 461, 512, 514, 7840, 7680, 260, + 7682, 7684, 7686, + 262, 264, 266, 268, 199, + 7690, 270, 7692, 7696, 7698, 7694, + 200, 201, 202, 7868, 274, 276, 278, 203, 7866, 282, 516, 518, 7864, 552, 280, 7704, 7706, + 7710, + 500, 284, 7712, 286, 288, 486, 290, + 292, 7714, 7718, 542, 7716, 7720, 7722, + 204, 205, 206, 296, 298, 300, 304, 207, 7880, 463, 520, 522, 7882, 302, 7724, + 308, + 7728, 488, 7730, 310, 7732, + 313, 317, 7734, 315, 7740, 7738, + 7742, 7744, 7746, + 504, 323, 209, 7748, 327, 7750, 325, 7754, 7752, + 210, 211, 212, 213, 332, 334, 558, 214, 7886, 336, 465, 524, 526, 416, 7884, 490, + 7764, 7766, + 340, 7768, 344, 528, 530, 7770, 342, 7774, + 346, 348, 7776, 352, 7778, 536, 350, + 7786, 356, 7788, 538, 354, 7792, 7790, + 217, 218, 219, 360, 362, 364, 220, 7910, 366, 368, 467, 532, 534, 431, 7908, 7794, 370, 7798, 7796, + 7804, 7806, + 7808, 7810, 372, 7814, 7812, 7816, + 7818, 7820, + 7922, 221, 374, 7928, 562, 7822, 376, 7926, 7924, + 377, 7824, 379, 381, 7826, 7828, + 224, 225, 226, 227, 257, 259, 551, 228, 7843, 229, 462, 513, 515, 7841, 7681, 261, + 7683, 7685, 7687, + 263, 265, 267, 269, 231, + 7691, 271, 7693, 7697, 7699, 7695, + 232, 233, 234, 7869, 275, 277, 279, 235, 7867, 283, 517, 519, 7865, 553, 281, 7705, 7707, + 7711, + 501, 285, 7713, 287, 289, 487, 291, + 293, 7715, 7719, 543, 7717, 7721, 7723, 7830, + 236, 237, 238, 297, 299, 301, 239, 7881, 464, 521, 523, 7883, 303, 7725, + 309, 496, + 7729, 489, 7731, 311, 7733, + 314, 318, 7735, 316, 7741, 7739, + 7743, 7745, 7747, + 505, 324, 241, 7749, 328, 7751, 326, 7755, 7753, + 242, 243, 244, 245, 333, 335, 559, 246, 7887, 337, 466, 525, 527, 417, 7885, 491, + 7765, 7767, + 341, 7769, 345, 529, 531, 7771, 343, 7775, + 347, 349, 7777, 353, 7779, 537, 351, + 7787, 7831, 357, 7789, 539, 355, 7793, 7791, + 249, 250, 251, 361, 363, 365, 252, 7911, 367, 369, 468, 533, 535, 432, 7909, 7795, 371, 7799, 7797, + 7805, 7807, + 7809, 7811, 373, 7815, 7813, 7832, 7817, + 7819, 7821, + 7923, 253, 375, 7929, 563, 7823, 255, 7927, 7833, 7925, + 378, 7825, 380, 382, 7827, 7829, + 8173, 901, 8129, + 7846, 7844, 7850, 7848, + 478, + 506, + 508, 482, + 7688, + 7872, 7870, 7876, 7874, + 7726, + 7890, 7888, 7894, 7892, + 7756, 556, 7758, + 554, + 510, + 475, 471, 469, 473, + 7847, 7845, 7851, 7849, + 479, + 507, + 509, 483, + 7689, + 7873, 7871, 7877, 7875, + 7727, + 7891, 7889, 7895, 7893, + 7757, 557, 7759, + 555, + 511, + 476, 472, 470, 474, + 7856, 7854, 7860, 7858, + 7857, 7855, 7861, 7859, + 7700, 7702, + 7701, 7703, + 7760, 7762, + 7761, 7763, + 7780, + 7781, + 7782, + 7783, + 7800, + 7801, + 7802, + 7803, + 7835, + 7900, 7898, 7904, 7902, 7906, + 7901, 7899, 7905, 7903, 7907, + 7914, 7912, 7918, 7916, 7920, + 7915, 7913, 7919, 7917, 7921, + 494, + 492, + 493, + 480, + 481, + 7708, + 7709, + 560, + 561, + 495, + 8122, 902, 8121, 8120, 7944, 7945, 8124, + 8136, 904, 7960, 7961, + 8138, 905, 7976, 7977, 8140, + 8154, 906, 8153, 8152, 938, 7992, 7993, + 8184, 908, 8008, 8009, + 8172, + 8170, 910, 8169, 8168, 939, 8025, + 8186, 911, 8040, 8041, 8188, + 8116, + 8132, + 8048, 940, 8113, 8112, 7936, 7937, 8118, 8115, + 8050, 941, 7952, 7953, + 8052, 942, 7968, 7969, 8134, 8131, + 8054, 943, 8145, 8144, 970, 7984, 7985, 8150, + 8056, 972, 8000, 8001, + 8164, 8165, + 8058, 973, 8161, 8160, 971, 8016, 8017, 8166, + 8060, 974, 8032, 8033, 8182, 8179, + 8146, 912, 8151, + 8162, 944, 8167, + 8180, + 979, 980, + 1031, + 1232, 1234, + 1027, + 1024, 1238, 1025, + 1217, 1244, + 1246, + 1037, 1250, 1049, 1252, + 1036, + 1254, + 1262, 1038, 1264, 1266, + 1268, + 1272, + 1260, + 1233, 1235, + 1107, + 1104, 1239, 1105, + 1218, 1245, + 1247, + 1117, 1251, 1081, 1253, + 1116, + 1255, + 1263, 1118, 1265, 1267, + 1269, + 1273, + 1261, + 1111, + 1142, + 1143, + 1242, + 1243, + 1258, + 1259, + 1570, 1571, 1573, + 1572, + 1574, + 1730, + 1747, + 1728, + 2345, + 2353, + 2356, + 2507, 2508, + 2891, 2888, 2892, + 2964, + 3018, 3020, + 3019, + 3144, + 3264, + 3274, 3271, 3272, + 3275, + 3402, 3404, + 3403, + 3546, 3548, 3550, + 3549, + 4134, + 6918, + 6920, + 6922, + 6924, + 6926, + 6930, + 6971, + 6973, + 6976, + 6977, + 6979, + 7736, + 7737, + 7772, + 7773, + 7784, + 7785, + 7852, 7862, + 7853, 7863, + 7878, + 7879, + 7896, + 7897, + 7938, 7940, 7942, 8064, + 7939, 7941, 7943, 8065, + 8066, + 8067, + 8068, + 8069, + 8070, + 8071, + 7946, 7948, 7950, 8072, + 7947, 7949, 7951, 8073, + 8074, + 8075, + 8076, + 8077, + 8078, + 8079, + 7954, 7956, + 7955, 7957, + 7962, 7964, + 7963, 7965, + 7970, 7972, 7974, 8080, + 7971, 7973, 7975, 8081, + 8082, + 8083, + 8084, + 8085, + 8086, + 8087, + 7978, 7980, 7982, 8088, + 7979, 7981, 7983, 8089, + 8090, + 8091, + 8092, + 8093, + 8094, + 8095, + 7986, 7988, 7990, + 7987, 7989, 7991, + 7994, 7996, 7998, + 7995, 7997, 7999, + 8002, 8004, + 8003, 8005, + 8010, 8012, + 8011, 8013, + 8018, 8020, 8022, + 8019, 8021, 8023, + 8027, 8029, 8031, + 8034, 8036, 8038, 8096, + 8035, 8037, 8039, 8097, + 8098, + 8099, + 8100, + 8101, + 8102, + 8103, + 8042, 8044, 8046, 8104, + 8043, 8045, 8047, 8105, + 8106, + 8107, + 8108, + 8109, + 8110, + 8111, + 8114, + 8130, + 8178, + 8119, + 8141, 8142, 8143, + 8135, + 8183, + 8157, 8158, 8159, + 8602, + 8603, + 8622, + 8653, + 8655, + 8654, + 8708, + 8713, + 8716, + 8740, + 8742, + 8769, + 8772, + 8775, + 8777, + 8813, + 8802, + 8816, + 8817, + 8820, + 8821, + 8824, + 8825, + 8832, + 8833, + 8928, + 8929, + 8836, + 8837, + 8840, + 8841, + 8930, + 8931, + 8876, + 8877, + 8878, + 8879, + 8938, + 8939, + 8940, + 8941, + 12436, + 12364, + 12366, + 12368, + 12370, + 12372, + 12374, + 12376, + 12378, + 12380, + 12382, + 12384, + 12386, + 12389, + 12391, + 12393, + 12400, 12401, + 12403, 12404, + 12406, 12407, + 12409, 12410, + 12412, 12413, + 12446, + 12532, + 12460, + 12462, + 12464, + 12466, + 12468, + 12470, + 12472, + 12474, + 12476, + 12478, + 12480, + 12482, + 12485, + 12487, + 12489, + 12496, 12497, + 12499, 12500, + 12502, 12503, + 12505, 12506, + 12508, 12509, + 12535, + 12536, + 12537, + 12538, + 12542, + 67017, + 67044, + 69786, + 69788, + 69803, + 69934, + 69935, + 70475, 70476, + 70531, + 70533, + 70542, + 70545, + 70599, 70597, 70600, + 70844, 70843, 70846, + 71098, + 71099, + 71992, + 90401, 90403, 90405, 90402, + 90406, 90408, + 90407, + 90404, + 93545, + 93544, + 93546, };