Line data Source code
1 : /* pr29.h --- Detect strings that are non-idempotent under NFKC in Unicode 3.2. 2 : Copyright (C) 2004-2020 Simon Josefsson 3 : 4 : This file is part of GNU Libidn. 5 : 6 : GNU Libidn is free software: you can redistribute it and/or 7 : modify it under the terms of either: 8 : 9 : * the GNU Lesser General Public License as published by the Free 10 : Software Foundation; either version 3 of the License, or (at 11 : your option) any later version. 12 : 13 : or 14 : 15 : * the GNU General Public License as published by the Free 16 : Software Foundation; either version 2 of the License, or (at 17 : your option) any later version. 18 : 19 : or both in parallel, as here. 20 : 21 : GNU Libidn is distributed in the hope that it will be useful, 22 : but WITHOUT ANY WARRANTY; without even the implied warranty of 23 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24 : General Public License for more details. 25 : 26 : You should have received copies of the GNU General Public License and 27 : the GNU Lesser General Public License along with this program. If 28 : not, see <http://www.gnu.org/licenses/>. */ 29 : 30 : #include <config.h> 31 : 32 : #include "pr29.h" 33 : 34 : /* Get stringprep_utf8_to_ucs4. */ 35 : #include <stringprep.h> 36 : 37 : /* 38 : * The tables used in this file was extracted by Simon Josefsson from 39 : * pr-29.html and DerivedCombiningClass-3.2.0.txt, as published by 40 : * Unicode Inc., for the GNU Libidn project. 41 : * 42 : */ 43 : 44 : /* These are the characters with non-zero combination class, extracted 45 : from DerivedCombiningClass-3.2.0.txt. */ 46 : static uint32_t nzcc[] = { 47 : /* 1 # Mn [5] COMBINING TILDE OVERLAY.. 48 : * ..COMBINING LONG SOLIDUS OVERLAY */ 49 : 0x0334, 50 : 0x0335, 51 : 0x0336, 52 : 0x0337, 53 : 0x0338, 54 : /* 1 # Mn [2] COMBINING LONG VERTICAL LINE OVERLAY.. 55 : * ..COMBINING SHORT VERTICAL LINE OVERLAY */ 56 : 0x20D2, 57 : 0x20D3, 58 : /* 1 # Mn [3] COMBINING RING OVERLAY.. 59 : * ..COMBINING ANTICLOCKWISE RING OVERLAY */ 60 : 0x20D8, 61 : 0x20D9, 62 : 0x20DA, 63 : /* 1 # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY.. 64 : * ..COMBINING DOUBLE VERTICAL STROKE OVERLAY */ 65 : 0x20E5, 66 : 0x20E6, 67 : /* 1 # Mn COMBINING LEFTWARDS ARROW OVERLAY */ 68 : 0x20EA, 69 : /* 1 # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1.. 70 : * ..MUSICAL SYMBOL COMBINING TREMOLO-3 */ 71 : 0x1D167, 72 : 0x1D168, 73 : 0x1D169, 74 : /* 7 # Mn DEVANAGARI SIGN NUKTA */ 75 : 0x093C, 76 : /* 7 # Mn BENGALI SIGN NUKTA */ 77 : 0x09BC, 78 : /* 7 # Mn GURMUKHI SIGN NUKTA */ 79 : 0x0A3C, 80 : /* 7 # Mn GUJARATI SIGN NUKTA */ 81 : 0x0ABC, 82 : /* 7 # Mn ORIYA SIGN NUKTA */ 83 : 0x0B3C, 84 : /* 7 # Mn MYANMAR SIGN DOT BELOW */ 85 : 0x1037, 86 : /* 8 # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK.. 87 : * ..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ 88 : 0x3099, 89 : 0x309A, 90 : /* 9 # Mn DEVANAGARI SIGN VIRAMA */ 91 : 0x094D, 92 : /* 9 # Mn BENGALI SIGN VIRAMA */ 93 : 0x09CD, 94 : /* 9 # Mn GURMUKHI SIGN VIRAMA */ 95 : 0x0A4D, 96 : /* 9 # Mn GUJARATI SIGN VIRAMA */ 97 : 0x0ACD, 98 : /* 9 # Mn ORIYA SIGN VIRAMA */ 99 : 0x0B4D, 100 : /* 9 # Mn TAMIL SIGN VIRAMA */ 101 : 0x0BCD, 102 : /* 9 # Mn TELUGU SIGN VIRAMA */ 103 : 0x0C4D, 104 : /* 9 # Mn KANNADA SIGN VIRAMA */ 105 : 0x0CCD, 106 : /* 9 # Mn MALAYALAM SIGN VIRAMA */ 107 : 0x0D4D, 108 : /* 9 # Mn SINHALA SIGN AL-LAKUNA */ 109 : 0x0DCA, 110 : /* 9 # Mn THAI CHARACTER PHINTHU */ 111 : 0x0E3A, 112 : /* 9 # Mn TIBETAN MARK HALANTA */ 113 : 0x0F84, 114 : /* 9 # Mn MYANMAR SIGN VIRAMA */ 115 : 0x1039, 116 : /* 9 # Mn TAGALOG SIGN VIRAMA */ 117 : 0x1714, 118 : /* 9 # Mn HANUNOO SIGN PAMUDPOD */ 119 : 0x1734, 120 : /* 9 # Mn KHMER SIGN COENG */ 121 : 0x17D2, 122 : /* 10 # Mn HEBREW POINT SHEVA */ 123 : 0x05B0, 124 : /* 11 # Mn HEBREW POINT HATAF SEGOL */ 125 : 0x05B1, 126 : /* 12 # Mn HEBREW POINT HATAF PATAH */ 127 : 0x05B2, 128 : /* 13 # Mn HEBREW POINT HATAF QAMATS */ 129 : 0x05B3, 130 : /* 14 # Mn HEBREW POINT HIRIQ */ 131 : 0x05B4, 132 : /* 15 # Mn HEBREW POINT TSERE */ 133 : 0x05B5, 134 : /* 16 # Mn HEBREW POINT SEGOL */ 135 : 0x05B6, 136 : /* 17 # Mn HEBREW POINT PATAH */ 137 : 0x05B7, 138 : /* 18 # Mn HEBREW POINT QAMATS */ 139 : 0x05B8, 140 : /* 19 # Mn HEBREW POINT HOLAM */ 141 : 0x05B9, 142 : /* 20 # Mn HEBREW POINT QUBUTS */ 143 : 0x05BB, 144 : /* 21 # Mn HEBREW POINT DAGESH OR MAPIQ */ 145 : 0x05BC, 146 : /* 22 # Mn HEBREW POINT METEG */ 147 : 0x05BD, 148 : /* 23 # Mn HEBREW POINT RAFE */ 149 : 0x05BF, 150 : /* 24 # Mn HEBREW POINT SHIN DOT */ 151 : 0x05C1, 152 : /* 25 # Mn HEBREW POINT SIN DOT */ 153 : 0x05C2, 154 : /* 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA */ 155 : 0xFB1E, 156 : /* 27 # Mn ARABIC FATHATAN */ 157 : 0x064B, 158 : /* 28 # Mn ARABIC DAMMATAN */ 159 : 0x064C, 160 : /* 29 # Mn ARABIC KASRATAN */ 161 : 0x064D, 162 : /* 30 # Mn ARABIC FATHA */ 163 : 0x064E, 164 : /* 31 # Mn ARABIC DAMMA */ 165 : 0x064F, 166 : /* 32 # Mn ARABIC KASRA */ 167 : 0x0650, 168 : /* 33 # Mn ARABIC SHADDA */ 169 : 0x0651, 170 : /* 34 # Mn ARABIC SUKUN */ 171 : 0x0652, 172 : /* 35 # Mn ARABIC LETTER SUPERSCRIPT ALEF */ 173 : 0x0670, 174 : /* 36 # Mn SYRIAC LETTER SUPERSCRIPT ALAPH */ 175 : 0x0711, 176 : /* 84 # Mn TELUGU LENGTH MARK */ 177 : 0x0C55, 178 : /* 91 # Mn TELUGU AI LENGTH MARK */ 179 : 0x0C56, 180 : /* 103 # Mn [2] THAI CHARACTER SARA U.. 181 : * ..THAI CHARACTER SARA UU */ 182 : 0x0E38, 183 : 0x0E39, 184 : /* 107 # Mn [4] THAI CHARACTER MAI EK.. 185 : * ..THAI CHARACTER MAI CHATTAWA */ 186 : 0x0E48, 187 : 0x0E49, 188 : 0x0E4A, 189 : 0x04EB, 190 : /* 118 # Mn [2] LAO VOWEL SIGN U.. 191 : * ..LAO VOWEL SIGN UU */ 192 : 0x0EB8, 193 : 0x0EB9, 194 : /* 122 # Mn [4] LAO TONE MAI EK.. 195 : * ..LAO TONE MAI CATAWA */ 196 : 0x0EC8, 197 : 0x0EC9, 198 : 0x0ECA, 199 : 0x0ECB, 200 : /* 129 # Mn TIBETAN VOWEL SIGN AA */ 201 : 0x0F71, 202 : /* 130 # Mn TIBETAN VOWEL SIGN I */ 203 : 0x0F72, 204 : /* 130 # Mn [4] TIBETAN VOWEL SIGN E.. 205 : * ..TIBETAN VOWEL SIGN OO */ 206 : 0x0F7A, 207 : 0x0F7B, 208 : 0x0F7C, 209 : 0x0F7D, 210 : /* 130 # Mn TIBETAN VOWEL SIGN REVERSED I */ 211 : 0x0F80, 212 : /* 132 # Mn TIBETAN VOWEL SIGN U */ 213 : 0x0F74, 214 : /* 202 # Mn [2] COMBINING PALATALIZED HOOK BELOW.. 215 : * ..COMBINING RETROFLEX HOOK BELOW */ 216 : 0x0321, 217 : 0x0322, 218 : /* 202 # Mn [2] COMBINING CEDILLA.. 219 : * ..COMBINING OGONEK */ 220 : 0x0327, 221 : 0x0328, 222 : /* 216 # Mn COMBINING HORN */ 223 : 0x031B, 224 : /* 216 # Mn TIBETAN MARK TSA -PHRU */ 225 : 0x0F39, 226 : /* 216 # Mc [2] MUSICAL SYMBOL COMBINING STEM.. 227 : * ..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM */ 228 : 0x1D165, 229 : 0x1D166, 230 : /* 216 # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1.. 231 : * ..MUSICAL SYMBOL COMBINING FLAG-5 */ 232 : 0x1D16E, 233 : 0x1D16F, 234 : 0x1D170, 235 : 0x1D171, 236 : 0x1D172, 237 : /* 218 # Mn IDEOGRAPHIC LEVEL TONE MARK */ 238 : 0x302A, 239 : /* 220 # Mn [4] COMBINING GRAVE ACCENT BELOW.. 240 : * ..COMBINING RIGHT TACK BELOW */ 241 : 0x0316, 242 : 0x0317, 243 : 0x0318, 244 : 0x0319, 245 : /* 220 # Mn [5] COMBINING LEFT HALF RING BELOW.. 246 : * ..COMBINING MINUS SIGN BELOW */ 247 : 0x031C, 248 : 0x031D, 249 : 0x031E, 250 : 0x031F, 251 : 0x0320, 252 : /* 220 # Mn [4] COMBINING DOT BELOW.. 253 : * ..COMBINING COMMA BELOW */ 254 : 0x0323, 255 : 0x0324, 256 : 0x0325, 257 : 0x0326, 258 : /* 220 # Mn [11] COMBINING VERTICAL LINE BELOW.. 259 : * ..COMBINING DOUBLE LOW LINE */ 260 : 0x0329, 261 : 0x032A, 262 : 0x032B, 263 : 0x032C, 264 : 0x032D, 265 : 0x032E, 266 : 0x032F, 267 : 0x0330, 268 : 0x0331, 269 : 0x0332, 270 : 0x0333, 271 : /* 220 # Mn [4] COMBINING RIGHT HALF RING BELOW.. 272 : * ..COMBINING SEAGULL BELOW */ 273 : 0x0339, 274 : 0x033A, 275 : 0x033B, 276 : 0x033C, 277 : /* 220 # Mn [3] COMBINING EQUALS SIGN BELOW.. 278 : * ..COMBINING LEFT ANGLE BELOW */ 279 : 0x0347, 280 : 0x0348, 281 : 0x0349, 282 : /* 220 # Mn [2] COMBINING LEFT RIGHT ARROW BELOW.. 283 : * ..COMBINING UPWARDS ARROW BELOW */ 284 : 0x034D, 285 : 0x034E, 286 : /* 220 # Mn HEBREW ACCENT ETNAHTA */ 287 : 0x0591, 288 : /* 220 # Mn HEBREW ACCENT TIPEHA */ 289 : 0x0596, 290 : /* 220 # Mn HEBREW ACCENT TEVIR */ 291 : 0x059B, 292 : /* 220 # Mn [5] HEBREW ACCENT MUNAH.. 293 : * ..HEBREW ACCENT DARGA */ 294 : 0x05A3, 295 : 0x05A4, 296 : 0x05A5, 297 : 0x05A6, 298 : 0x05A7, 299 : /* 220 # Mn HEBREW ACCENT YERAH BEN YOMO */ 300 : 0x05AA, 301 : /* 220 # Mn ARABIC HAMZA BELOW */ 302 : 0x0655, 303 : /* 220 # Mn ARABIC SMALL LOW SEEN */ 304 : 0x06E3, 305 : /* 220 # Mn ARABIC EMPTY CENTRE LOW STOP */ 306 : 0x06EA, 307 : /* 220 # Mn ARABIC SMALL LOW MEEM */ 308 : 0x06ED, 309 : /* 220 # Mn SYRIAC PTHAHA BELOW */ 310 : 0x0731, 311 : /* 220 # Mn SYRIAC ZQAPHA BELOW */ 312 : 0x0734, 313 : /* 220 # Mn [3] SYRIAC RBASA BELOW.. 314 : * ..SYRIAC DOTTED ZLAMA ANGULAR */ 315 : 0x0737, 316 : 0x0738, 317 : 0x0739, 318 : /* 220 # Mn [2] SYRIAC HBASA BELOW.. 319 : * ..SYRIAC HBASA-ESASA DOTTED */ 320 : 0x073B, 321 : 0x073C, 322 : /* 220 # Mn SYRIAC ESASA BELOW */ 323 : 0x073E, 324 : /* 220 # Mn SYRIAC RUKKAKHA */ 325 : 0x0742, 326 : /* 220 # Mn SYRIAC TWO VERTICAL DOTS BELOW */ 327 : 0x0744, 328 : /* 220 # Mn SYRIAC THREE DOTS BELOW */ 329 : 0x0746, 330 : /* 220 # Mn SYRIAC OBLIQUE LINE BELOW */ 331 : 0x0748, 332 : /* 220 # Mn DEVANAGARI STRESS SIGN ANUDATTA */ 333 : 0x0952, 334 : /* 220 # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA.. 335 : * ..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */ 336 : 0x0F18, 337 : 0x0F19, 338 : /* 220 # Mn TIBETAN MARK NGAS BZUNG NYI ZLA */ 339 : 0x0F35, 340 : /* 220 # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS */ 341 : 0x0F37, 342 : /* 220 # Mn TIBETAN SYMBOL PADMA GDAN */ 343 : 0x0FC6, 344 : /* 220 # Mn COMBINING TRIPLE UNDERDOT */ 345 : 0x20E8, 346 : /* 220 # Mn [8] MUSICAL SYMBOL COMBINING ACCENT.. 347 : * ..MUSICAL SYMBOL COMBINING LOURE */ 348 : 0x1D17B, 349 : 0x1D17C, 350 : 0x1D17D, 351 : 0x1D17E, 352 : 0x1D17F, 353 : 0x1D180, 354 : 0x1D181, 355 : 0x1D182, 356 : /* 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE.. 357 : * ..MUSICAL SYMBOL COMBINING TRIPLE TONGUE */ 358 : 0x1D18A, 359 : 0x1D18B, 360 : /* 222 # Mn HEBREW ACCENT YETIV */ 361 : 0x059A, 362 : /* 222 # Mn HEBREW ACCENT DEHI */ 363 : 0x05AD, 364 : /* 222 # Mn IDEOGRAPHIC ENTERING TONE MARK */ 365 : 0x302D, 366 : /* 224 # Mn [2] HANGUL SINGLE DOT TONE MARK.. 367 : * ..HANGUL DOUBLE DOT TONE MARK */ 368 : 0x302E, 369 : 0x302F, 370 : /* 226 # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT */ 371 : 0x1D16D, 372 : /* 228 # Mn HEBREW ACCENT ZINOR */ 373 : 0x05AE, 374 : /* 228 # Mn MONGOLIAN LETTER ALI GALI DAGALGA */ 375 : 0x18A9, 376 : /* 228 # Mn IDEOGRAPHIC RISING TONE MARK */ 377 : 0x302B, 378 : /* 230 # Mn [21] COMBINING GRAVE ACCENT.. 379 : * ..COMBINING REVERSED COMMA ABOVE */ 380 : 0x0300, 381 : 0x0301, 382 : 0x0302, 383 : 0x0303, 384 : 0x0304, 385 : 0x0305, 386 : 0x0306, 387 : 0x0307, 388 : 0x0308, 389 : 0x0309, 390 : 0x030A, 391 : 0x030B, 392 : 0x030C, 393 : 0x030D, 394 : 0x030E, 395 : 0x030F, 396 : 0x0310, 397 : 0x0311, 398 : 0x0312, 399 : 0x0313, 400 : 0x0314, 401 : /* 230 # Mn [8] COMBINING X ABOVE.. 402 : * ..COMBINING GREEK DIALYTIKA TONOS */ 403 : 0x033D, 404 : 0x033E, 405 : 0x033F, 406 : 0x0340, 407 : 0x0341, 408 : 0x0342, 409 : 0x0343, 410 : 0x0344, 411 : /* 230 # Mn COMBINING BRIDGE ABOVE */ 412 : 0x0346, 413 : /* 230 # Mn [3] COMBINING NOT TILDE ABOVE.. 414 : * ..COMBINING ALMOST EQUAL TO ABOVE */ 415 : 0x034A, 416 : 0x034B, 417 : 0x034C, 418 : /* 230 # Mn [13] COMBINING LATIN SMALL LETTER A.. 419 : * ..COMBINING LATIN SMALL LETTER X */ 420 : 0x0363, 421 : 0x0364, 422 : 0x0365, 423 : 0x0366, 424 : 0x0367, 425 : 0x0368, 426 : 0x0369, 427 : 0x036A, 428 : 0x036B, 429 : 0x036C, 430 : 0x036D, 431 : 0x036E, 432 : 0x036F, 433 : /* 230 # Mn [4] COMBINING CYRILLIC TITLO.. 434 : * ..COMBINING CYRILLIC PSILI PNEUMATA */ 435 : 0x0483, 436 : 0x0484, 437 : 0x0485, 438 : 0x0486, 439 : /* 230 # Mn [4] HEBREW ACCENT SEGOL.. 440 : * ..HEBREW ACCENT ZAQEF GADOL */ 441 : 0x0592, 442 : 0x0593, 443 : 0x0594, 444 : 0x0595, 445 : /* 230 # Mn [3] HEBREW ACCENT REVIA.. 446 : * ..HEBREW ACCENT PASHTA */ 447 : 0x0597, 448 : 0x0598, 449 : 0x0599, 450 : /* 230 # Mn [6] HEBREW ACCENT GERESH.. 451 : * ..HEBREW ACCENT PAZER */ 452 : 0x059C, 453 : 0x059D, 454 : 0x059E, 455 : 0x059F, 456 : 0x05A0, 457 : 0x05A1, 458 : /* 230 # Mn [2] HEBREW ACCENT QADMA.. 459 : * ..HEBREW ACCENT TELISHA QETANA */ 460 : 0x05A8, 461 : 0x05A9, 462 : /* 230 # Mn [2] HEBREW ACCENT OLE.. 463 : * ..HEBREW ACCENT ILUY */ 464 : 0x05AB, 465 : 0x05AC, 466 : /* 230 # Mn HEBREW MARK MASORA CIRCLE */ 467 : 0x05AF, 468 : /* 230 # Mn HEBREW MARK UPPER DOT */ 469 : 0x05C4, 470 : /* 230 # Mn [2] ARABIC MADDAH ABOVE.. 471 : * ..ARABIC HAMZA ABOVE */ 472 : 0x0653, 473 : 0x0654, 474 : /* 230 # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA.. 475 : * ..ARABIC SMALL HIGH SEEN */ 476 : 0x06D6, 477 : 0x06D7, 478 : 0x06D8, 479 : 0x06D9, 480 : 0x06DA, 481 : 0x06DB, 482 : 0x06DC, 483 : /* 230 # Mn [4] ARABIC SMALL HIGH ROUNDED ZERO.. 484 : * ..ARABIC SMALL HIGH MEEM ISOLATED FORM */ 485 : 0x06DF, 486 : 0x06E0, 487 : 0x06E1, 488 : 0x06E2, 489 : /* 230 # Mn ARABIC SMALL HIGH MADDA */ 490 : 0x06E4, 491 : /* 230 # Mn [2] ARABIC SMALL HIGH YEH.. 492 : * ..ARABIC SMALL HIGH NOON */ 493 : 0x06E7, 494 : 0x06E8, 495 : /* 230 # Mn [2] ARABIC EMPTY CENTRE HIGH STOP.. 496 : * ..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */ 497 : 0x06EB, 498 : 0x06EC, 499 : /* 230 # Mn SYRIAC PTHAHA ABOVE */ 500 : 0x0730, 501 : /* 230 # Mn [2] SYRIAC PTHAHA DOTTED.. 502 : * ..SYRIAC ZQAPHA ABOVE */ 503 : 0x0732, 504 : 0x0733, 505 : /* 230 # Mn [2] SYRIAC ZQAPHA DOTTED.. 506 : * ..SYRIAC RBASA ABOVE */ 507 : 0x0735, 508 : 0x0736, 509 : /* 230 # Mn SYRIAC HBASA ABOVE */ 510 : 0x073A, 511 : /* 230 # Mn SYRIAC ESASA ABOVE */ 512 : 0x073D, 513 : /* 230 # Mn [3] SYRIAC RWAHA.. 514 : * ..SYRIAC QUSHSHAYA */ 515 : 0x073F, 516 : 0x0740, 517 : 0x0741, 518 : /* 230 # Mn SYRIAC TWO VERTICAL DOTS ABOVE */ 519 : 0x0743, 520 : /* 230 # Mn SYRIAC THREE DOTS ABOVE */ 521 : 0x0745, 522 : /* 230 # Mn SYRIAC OBLIQUE LINE ABOVE */ 523 : 0x0747, 524 : /* 230 # Mn [2] SYRIAC MUSIC.. 525 : * ..SYRIAC BARREKH */ 526 : 0x0749, 527 : 0x074A, 528 : /* 230 # Mn DEVANAGARI STRESS SIGN UDATTA */ 529 : 0x0951, 530 : /* 230 # Mn [2] DEVANAGARI GRAVE ACCENT.. 531 : * ..DEVANAGARI ACUTE ACCENT */ 532 : 0x0953, 533 : 0x0954, 534 : /* 230 # Mn [2] TIBETAN SIGN NYI ZLA NAA DA.. 535 : * ..TIBETAN SIGN SNA LDAN */ 536 : 0x0F82, 537 : 0x0F83, 538 : /* 230 # Mn [2] TIBETAN SIGN LCI RTAGS.. 539 : * ..TIBETAN SIGN YANG RTAGS */ 540 : 0x0F86, 541 : 0x0F87, 542 : /* 230 # Mn [2] COMBINING LEFT HARPOON ABOVE.. 543 : * ..COMBINING RIGHT HARPOON ABOVE */ 544 : 0x20D0, 545 : 0x20D1, 546 : /* 230 # Mn [4] COMBINING ANTICLOCKWISE ARROW ABOVE.. 547 : * ..COMBINING RIGHT ARROW ABOVE */ 548 : 0x20D4, 549 : 0x20D5, 550 : 0x20D6, 551 : 0x20D7, 552 : /* 230 # Mn [2] COMBINING THREE DOTS ABOVE.. 553 : * ..COMBINING FOUR DOTS ABOVE */ 554 : 0x20DB, 555 : 0x20DC, 556 : /* 230 # Mn COMBINING LEFT RIGHT ARROW ABOVE */ 557 : 0x20E1, 558 : /* 230 # Mn COMBINING ANNUITY SYMBOL */ 559 : 0x20E7, 560 : /* 230 # Mn COMBINING WIDE BRIDGE ABOVE */ 561 : 0x20E9, 562 : /* 230 # Mn [4] COMBINING LIGATURE LEFT HALF.. 563 : * ..COMBINING DOUBLE TILDE RIGHT HALF */ 564 : 0xFE20, 565 : 0xFE21, 566 : 0xFE22, 567 : 0xFE23, 568 : /* 230 # Mn [5] MUSICAL SYMBOL COMBINING DOIT.. 569 : * ..MUSICAL SYMBOL COMBINING BEND */ 570 : 0x1D185, 571 : 0x1D186, 572 : 0x1D187, 573 : 0x1D188, 574 : 0x1D189, 575 : /* 230 # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW.. 576 : * ..MUSICAL SYMBOL COMBINING SNAP PIZZICATO */ 577 : 0x1D1AA, 578 : 0x1D1AB, 579 : 0x1D1AC, 580 : 0x1D1AD, 581 : /* 232 # Mn COMBINING COMMA ABOVE RIGHT */ 582 : 0x0315, 583 : /* 232 # Mn COMBINING LEFT ANGLE ABOVE */ 584 : 0x031A, 585 : /* 232 # Mn IDEOGRAPHIC DEPARTING TONE MARK */ 586 : 0x302C, 587 : /* 233 # Mn COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ 588 : 0x0362, 589 : /* 234 # Mn [2] COMBINING DOUBLE TILDE.. 590 : * ..COMBINING DOUBLE INVERTED BREVE */ 591 : 0x0360, 592 : 0x0361, 593 : /* 240 # Mn COMBINING GREEK YPOGEGRAMMENI */ 594 : 0x0345, 595 : 0 596 : }; 597 : 598 : /* 599 : * 09C7 BENGALI VOWEL SIGN E 09BE BENGALI VOWEL SIGN AA or 600 : * 09D7 BENGALI AU LENGTH MARK 601 : */ 602 : 603 : static const uint32_t pr29_1_1[] = { 604 : 0x09C7, 0 605 : }; 606 : 607 : static const uint32_t pr29_1_2[] = { 608 : 0x09BE, 0x09D7, 0 609 : }; 610 : 611 : /* 612 : * 0B47 ORIYA VOWEL SIGN E 0B3E ORIYA VOWEL SIGN AA or 613 : * 0B56 ORIYA AI LENGTH MARK or 614 : * 0B57 ORIYA AU LENGTH MARK 615 : */ 616 : 617 : static const uint32_t pr29_2_1[] = { 618 : 0x0B47, 0 619 : }; 620 : 621 : static const uint32_t pr29_2_2[] = { 622 : 0x0B3E, 0x0B56, 0x0B57, 0 623 : }; 624 : 625 : /* 626 : * 0BC6 TAMIL VOWEL SIGN E 0BBE TAMIL VOWEL SIGN AA or 627 : * 0BD7 TAMIL AU LENGTH MARK 628 : */ 629 : 630 : static const uint32_t pr29_3_1[] = { 631 : 0x0BC6, 0 632 : }; 633 : 634 : static const uint32_t pr29_3_2[] = { 635 : 0x0BBE, 0x0BD7, 0 636 : }; 637 : 638 : /* 639 : * 0BC7 TAMIL VOWEL SIGN EE 0BBE TAMIL VOWEL SIGN AA 640 : */ 641 : 642 : static const uint32_t pr29_4_1[] = { 643 : 0x0BC7, 0 644 : }; 645 : 646 : static const uint32_t pr29_4_2[] = { 647 : 0x0BBE, 0 648 : }; 649 : 650 : /* 651 : * 0B92 TAMIL LETTER O 0BD7 TAMIL AU LENGTH MARK 652 : */ 653 : 654 : static const uint32_t pr29_5_1[] = { 655 : 0x0B92, 0 656 : }; 657 : 658 : static const uint32_t pr29_5_2[] = { 659 : 0x0BD7, 0 660 : }; 661 : 662 : /* 663 : * 0CC6 KANNADA VOWEL SIGN E 0CC2 KANNADA VOWEL SIGN UU or 664 : * 0CD5 KANNADA LENGTH MARK or 665 : * 0CD6 KANNADA AI LENGTH MARK 666 : */ 667 : 668 : static const uint32_t pr29_6_1[] = { 669 : 0x0CC6, 0 670 : }; 671 : 672 : static const uint32_t pr29_6_2[] = { 673 : 0x0CC2, 0xCD5, 0xCD6, 0 674 : }; 675 : 676 : /* 677 : * 0CBF KANNADA VOWEL SIGN I or 678 : * 0CCA KANNADA VOWEL SIGN O 0CD5 KANNADA LENGTH MARK 679 : */ 680 : 681 : static const uint32_t pr29_7_1[] = { 682 : 0x0CBF, 0xCCA, 0 683 : }; 684 : 685 : static const uint32_t pr29_7_2[] = { 686 : 0x0CD5, 0 687 : }; 688 : 689 : /* 690 : * 0D47 MALAYALAM VOWEL SIGN EE 0D3E MALAYALAM VOWEL SIGN AA 691 : */ 692 : 693 : static const uint32_t pr29_8_1[] = { 694 : 0x0D47, 0 695 : }; 696 : 697 : static const uint32_t pr29_8_2[] = { 698 : 0x0D3E, 0 699 : }; 700 : 701 : /* 702 : * 0D46 MALAYALAM VOWEL SIGN E 0D3E MALAYALAM VOWEL SIGN AA or 703 : * 0D57 MALAYALAM AU LENGTH MARK 704 : */ 705 : 706 : static const uint32_t pr29_9_1[] = { 707 : 0x0D46, 0 708 : }; 709 : 710 : static const uint32_t pr29_9_2[] = { 711 : 0x0D3E, 0x0D57, 0 712 : }; 713 : 714 : /* 715 : * 1025 MYANMAR LETTER U 102E MYANMAR VOWEL SIGN II 716 : */ 717 : 718 : static const uint32_t pr29_10_1[] = { 719 : 0x1025, 0 720 : }; 721 : 722 : static const uint32_t pr29_10_2[] = { 723 : 0x102E, 0 724 : }; 725 : 726 : /* 727 : * 0DD9 SINHALA VOWEL SIGN KOMBUVA 0DCF SINHALA VOWEL SIGN AELA-PILLA or 728 : * 0DDF SINHALA VOWEL SIGN GAYANUKITTA 729 : */ 730 : 731 : static const uint32_t pr29_11_1[] = { 732 : 0x0DD9, 0 733 : }; 734 : 735 : static const uint32_t pr29_11_2[] = { 736 : 0x0DCF, 0x0DDF, 0 737 : }; 738 : 739 : /* 740 : * 1100..1112 HANGUL CHOSEONG KIYEOK..HIEUH [19 instances] 741 : * 1161..1175 HANGUL JUNGSEONG A..I [21 instances] 742 : */ 743 : 744 : static const uint32_t pr29_12_1[] = { 745 : 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1105, 0x1106, 0x1107, 746 : 0x1108, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F, 747 : 0x1110, 0x1111, 0x1112, 0 748 : }; 749 : 750 : static const uint32_t pr29_12_2[] = { 751 : 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 752 : 0x1169, 0x116A, 0x116B, 0x116C, 0x116D, 0x116E, 0x116F, 0x1170, 753 : 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0 754 : }; 755 : 756 : 757 : /* 758 : * [:HangulSyllableType=LV:] 759 : * 11A8..11C2 HANGUL JONGSEONG KIYEOK..HIEUH [27 instances] 760 : */ 761 : 762 : static const uint32_t pr29_13_1[] = { 763 : 0xAC00, /* LV # Lo HANGUL SYLLABLE GA */ 764 : 0xAC1C, /* LV # Lo HANGUL SYLLABLE GAE */ 765 : 0xAC38, /* LV # Lo HANGUL SYLLABLE GYA */ 766 : 0xAC54, /* LV # Lo HANGUL SYLLABLE GYAE */ 767 : 0xAC70, /* LV # Lo HANGUL SYLLABLE GEO */ 768 : 0xAC8C, /* LV # Lo HANGUL SYLLABLE GE */ 769 : 0xACA8, /* LV # Lo HANGUL SYLLABLE GYEO */ 770 : 0xACC4, /* LV # Lo HANGUL SYLLABLE GYE */ 771 : 0xACE0, /* LV # Lo HANGUL SYLLABLE GO */ 772 : 0xACFC, /* LV # Lo HANGUL SYLLABLE GWA */ 773 : 0xAD18, /* LV # Lo HANGUL SYLLABLE GWAE */ 774 : 0xAD34, /* LV # Lo HANGUL SYLLABLE GOE */ 775 : 0xAD50, /* LV # Lo HANGUL SYLLABLE GYO */ 776 : 0xAD6C, /* LV # Lo HANGUL SYLLABLE GU */ 777 : 0xAD88, /* LV # Lo HANGUL SYLLABLE GWEO */ 778 : 0xADA4, /* LV # Lo HANGUL SYLLABLE GWE */ 779 : 0xADC0, /* LV # Lo HANGUL SYLLABLE GWI */ 780 : 0xADDC, /* LV # Lo HANGUL SYLLABLE GYU */ 781 : 0xADF8, /* LV # Lo HANGUL SYLLABLE GEU */ 782 : 0xAE14, /* LV # Lo HANGUL SYLLABLE GYI */ 783 : 0xAE30, /* LV # Lo HANGUL SYLLABLE GI */ 784 : 0xAE4C, /* LV # Lo HANGUL SYLLABLE GGA */ 785 : 0xAE68, /* LV # Lo HANGUL SYLLABLE GGAE */ 786 : 0xAE84, /* LV # Lo HANGUL SYLLABLE GGYA */ 787 : 0xAEA0, /* LV # Lo HANGUL SYLLABLE GGYAE */ 788 : 0xAEBC, /* LV # Lo HANGUL SYLLABLE GGEO */ 789 : 0xAED8, /* LV # Lo HANGUL SYLLABLE GGE */ 790 : 0xAEF4, /* LV # Lo HANGUL SYLLABLE GGYEO */ 791 : 0xAF10, /* LV # Lo HANGUL SYLLABLE GGYE */ 792 : 0xAF2C, /* LV # Lo HANGUL SYLLABLE GGO */ 793 : 0xAF48, /* LV # Lo HANGUL SYLLABLE GGWA */ 794 : 0xAF64, /* LV # Lo HANGUL SYLLABLE GGWAE */ 795 : 0xAF80, /* LV # Lo HANGUL SYLLABLE GGOE */ 796 : 0xAF9C, /* LV # Lo HANGUL SYLLABLE GGYO */ 797 : 0xAFB8, /* LV # Lo HANGUL SYLLABLE GGU */ 798 : 0xAFD4, /* LV # Lo HANGUL SYLLABLE GGWEO */ 799 : 0xAFF0, /* LV # Lo HANGUL SYLLABLE GGWE */ 800 : 0xB00C, /* LV # Lo HANGUL SYLLABLE GGWI */ 801 : 0xB028, /* LV # Lo HANGUL SYLLABLE GGYU */ 802 : 0xB044, /* LV # Lo HANGUL SYLLABLE GGEU */ 803 : 0xB060, /* LV # Lo HANGUL SYLLABLE GGYI */ 804 : 0xB07C, /* LV # Lo HANGUL SYLLABLE GGI */ 805 : 0xB098, /* LV # Lo HANGUL SYLLABLE NA */ 806 : 0xB0B4, /* LV # Lo HANGUL SYLLABLE NAE */ 807 : 0xB0D0, /* LV # Lo HANGUL SYLLABLE NYA */ 808 : 0xB0EC, /* LV # Lo HANGUL SYLLABLE NYAE */ 809 : 0xB108, /* LV # Lo HANGUL SYLLABLE NEO */ 810 : 0xB124, /* LV # Lo HANGUL SYLLABLE NE */ 811 : 0xB140, /* LV # Lo HANGUL SYLLABLE NYEO */ 812 : 0xB15C, /* LV # Lo HANGUL SYLLABLE NYE */ 813 : 0xB178, /* LV # Lo HANGUL SYLLABLE NO */ 814 : 0xB194, /* LV # Lo HANGUL SYLLABLE NWA */ 815 : 0xB1B0, /* LV # Lo HANGUL SYLLABLE NWAE */ 816 : 0xB1CC, /* LV # Lo HANGUL SYLLABLE NOE */ 817 : 0xB1E8, /* LV # Lo HANGUL SYLLABLE NYO */ 818 : 0xB204, /* LV # Lo HANGUL SYLLABLE NU */ 819 : 0xB220, /* LV # Lo HANGUL SYLLABLE NWEO */ 820 : 0xB23C, /* LV # Lo HANGUL SYLLABLE NWE */ 821 : 0xB258, /* LV # Lo HANGUL SYLLABLE NWI */ 822 : 0xB274, /* LV # Lo HANGUL SYLLABLE NYU */ 823 : 0xB290, /* LV # Lo HANGUL SYLLABLE NEU */ 824 : 0xB2AC, /* LV # Lo HANGUL SYLLABLE NYI */ 825 : 0xB2C8, /* LV # Lo HANGUL SYLLABLE NI */ 826 : 0xB2E4, /* LV # Lo HANGUL SYLLABLE DA */ 827 : 0xB300, /* LV # Lo HANGUL SYLLABLE DAE */ 828 : 0xB31C, /* LV # Lo HANGUL SYLLABLE DYA */ 829 : 0xB338, /* LV # Lo HANGUL SYLLABLE DYAE */ 830 : 0xB354, /* LV # Lo HANGUL SYLLABLE DEO */ 831 : 0xB370, /* LV # Lo HANGUL SYLLABLE DE */ 832 : 0xB38C, /* LV # Lo HANGUL SYLLABLE DYEO */ 833 : 0xB3A8, /* LV # Lo HANGUL SYLLABLE DYE */ 834 : 0xB3C4, /* LV # Lo HANGUL SYLLABLE DO */ 835 : 0xB3E0, /* LV # Lo HANGUL SYLLABLE DWA */ 836 : 0xB3FC, /* LV # Lo HANGUL SYLLABLE DWAE */ 837 : 0xB418, /* LV # Lo HANGUL SYLLABLE DOE */ 838 : 0xB434, /* LV # Lo HANGUL SYLLABLE DYO */ 839 : 0xB450, /* LV # Lo HANGUL SYLLABLE DU */ 840 : 0xB46C, /* LV # Lo HANGUL SYLLABLE DWEO */ 841 : 0xB488, /* LV # Lo HANGUL SYLLABLE DWE */ 842 : 0xB4A4, /* LV # Lo HANGUL SYLLABLE DWI */ 843 : 0xB4C0, /* LV # Lo HANGUL SYLLABLE DYU */ 844 : 0xB4DC, /* LV # Lo HANGUL SYLLABLE DEU */ 845 : 0xB4F8, /* LV # Lo HANGUL SYLLABLE DYI */ 846 : 0xB514, /* LV # Lo HANGUL SYLLABLE DI */ 847 : 0xB530, /* LV # Lo HANGUL SYLLABLE DDA */ 848 : 0xB54C, /* LV # Lo HANGUL SYLLABLE DDAE */ 849 : 0xB568, /* LV # Lo HANGUL SYLLABLE DDYA */ 850 : 0xB584, /* LV # Lo HANGUL SYLLABLE DDYAE */ 851 : 0xB5A0, /* LV # Lo HANGUL SYLLABLE DDEO */ 852 : 0xB5BC, /* LV # Lo HANGUL SYLLABLE DDE */ 853 : 0xB5D8, /* LV # Lo HANGUL SYLLABLE DDYEO */ 854 : 0xB5F4, /* LV # Lo HANGUL SYLLABLE DDYE */ 855 : 0xB610, /* LV # Lo HANGUL SYLLABLE DDO */ 856 : 0xB62C, /* LV # Lo HANGUL SYLLABLE DDWA */ 857 : 0xB648, /* LV # Lo HANGUL SYLLABLE DDWAE */ 858 : 0xB664, /* LV # Lo HANGUL SYLLABLE DDOE */ 859 : 0xB680, /* LV # Lo HANGUL SYLLABLE DDYO */ 860 : 0xB69C, /* LV # Lo HANGUL SYLLABLE DDU */ 861 : 0xB6B8, /* LV # Lo HANGUL SYLLABLE DDWEO */ 862 : 0xB6D4, /* LV # Lo HANGUL SYLLABLE DDWE */ 863 : 0xB6F0, /* LV # Lo HANGUL SYLLABLE DDWI */ 864 : 0xB70C, /* LV # Lo HANGUL SYLLABLE DDYU */ 865 : 0xB728, /* LV # Lo HANGUL SYLLABLE DDEU */ 866 : 0xB744, /* LV # Lo HANGUL SYLLABLE DDYI */ 867 : 0xB760, /* LV # Lo HANGUL SYLLABLE DDI */ 868 : 0xB77C, /* LV # Lo HANGUL SYLLABLE RA */ 869 : 0xB798, /* LV # Lo HANGUL SYLLABLE RAE */ 870 : 0xB7B4, /* LV # Lo HANGUL SYLLABLE RYA */ 871 : 0xB7D0, /* LV # Lo HANGUL SYLLABLE RYAE */ 872 : 0xB7EC, /* LV # Lo HANGUL SYLLABLE REO */ 873 : 0xB808, /* LV # Lo HANGUL SYLLABLE RE */ 874 : 0xB824, /* LV # Lo HANGUL SYLLABLE RYEO */ 875 : 0xB840, /* LV # Lo HANGUL SYLLABLE RYE */ 876 : 0xB85C, /* LV # Lo HANGUL SYLLABLE RO */ 877 : 0xB878, /* LV # Lo HANGUL SYLLABLE RWA */ 878 : 0xB894, /* LV # Lo HANGUL SYLLABLE RWAE */ 879 : 0xB8B0, /* LV # Lo HANGUL SYLLABLE ROE */ 880 : 0xB8CC, /* LV # Lo HANGUL SYLLABLE RYO */ 881 : 0xB8E8, /* LV # Lo HANGUL SYLLABLE RU */ 882 : 0xB904, /* LV # Lo HANGUL SYLLABLE RWEO */ 883 : 0xB920, /* LV # Lo HANGUL SYLLABLE RWE */ 884 : 0xB93C, /* LV # Lo HANGUL SYLLABLE RWI */ 885 : 0xB958, /* LV # Lo HANGUL SYLLABLE RYU */ 886 : 0xB974, /* LV # Lo HANGUL SYLLABLE REU */ 887 : 0xB990, /* LV # Lo HANGUL SYLLABLE RYI */ 888 : 0xB9AC, /* LV # Lo HANGUL SYLLABLE RI */ 889 : 0xB9C8, /* LV # Lo HANGUL SYLLABLE MA */ 890 : 0xB9E4, /* LV # Lo HANGUL SYLLABLE MAE */ 891 : 0xBA00, /* LV # Lo HANGUL SYLLABLE MYA */ 892 : 0xBA1C, /* LV # Lo HANGUL SYLLABLE MYAE */ 893 : 0xBA38, /* LV # Lo HANGUL SYLLABLE MEO */ 894 : 0xBA54, /* LV # Lo HANGUL SYLLABLE ME */ 895 : 0xBA70, /* LV # Lo HANGUL SYLLABLE MYEO */ 896 : 0xBA8C, /* LV # Lo HANGUL SYLLABLE MYE */ 897 : 0xBAA8, /* LV # Lo HANGUL SYLLABLE MO */ 898 : 0xBAC4, /* LV # Lo HANGUL SYLLABLE MWA */ 899 : 0xBAE0, /* LV # Lo HANGUL SYLLABLE MWAE */ 900 : 0xBAFC, /* LV # Lo HANGUL SYLLABLE MOE */ 901 : 0xBB18, /* LV # Lo HANGUL SYLLABLE MYO */ 902 : 0xBB34, /* LV # Lo HANGUL SYLLABLE MU */ 903 : 0xBB50, /* LV # Lo HANGUL SYLLABLE MWEO */ 904 : 0xBB6C, /* LV # Lo HANGUL SYLLABLE MWE */ 905 : 0xBB88, /* LV # Lo HANGUL SYLLABLE MWI */ 906 : 0xBBA4, /* LV # Lo HANGUL SYLLABLE MYU */ 907 : 0xBBC0, /* LV # Lo HANGUL SYLLABLE MEU */ 908 : 0xBBDC, /* LV # Lo HANGUL SYLLABLE MYI */ 909 : 0xBBF8, /* LV # Lo HANGUL SYLLABLE MI */ 910 : 0xBC14, /* LV # Lo HANGUL SYLLABLE BA */ 911 : 0xBC30, /* LV # Lo HANGUL SYLLABLE BAE */ 912 : 0xBC4C, /* LV # Lo HANGUL SYLLABLE BYA */ 913 : 0xBC68, /* LV # Lo HANGUL SYLLABLE BYAE */ 914 : 0xBC84, /* LV # Lo HANGUL SYLLABLE BEO */ 915 : 0xBCA0, /* LV # Lo HANGUL SYLLABLE BE */ 916 : 0xBCBC, /* LV # Lo HANGUL SYLLABLE BYEO */ 917 : 0xBCD8, /* LV # Lo HANGUL SYLLABLE BYE */ 918 : 0xBCF4, /* LV # Lo HANGUL SYLLABLE BO */ 919 : 0xBD10, /* LV # Lo HANGUL SYLLABLE BWA */ 920 : 0xBD2C, /* LV # Lo HANGUL SYLLABLE BWAE */ 921 : 0xBD48, /* LV # Lo HANGUL SYLLABLE BOE */ 922 : 0xBD64, /* LV # Lo HANGUL SYLLABLE BYO */ 923 : 0xBD80, /* LV # Lo HANGUL SYLLABLE BU */ 924 : 0xBD9C, /* LV # Lo HANGUL SYLLABLE BWEO */ 925 : 0xBDB8, /* LV # Lo HANGUL SYLLABLE BWE */ 926 : 0xBDD4, /* LV # Lo HANGUL SYLLABLE BWI */ 927 : 0xBDF0, /* LV # Lo HANGUL SYLLABLE BYU */ 928 : 0xBE0C, /* LV # Lo HANGUL SYLLABLE BEU */ 929 : 0xBE28, /* LV # Lo HANGUL SYLLABLE BYI */ 930 : 0xBE44, /* LV # Lo HANGUL SYLLABLE BI */ 931 : 0xBE60, /* LV # Lo HANGUL SYLLABLE BBA */ 932 : 0xBE7C, /* LV # Lo HANGUL SYLLABLE BBAE */ 933 : 0xBE98, /* LV # Lo HANGUL SYLLABLE BBYA */ 934 : 0xBEB4, /* LV # Lo HANGUL SYLLABLE BBYAE */ 935 : 0xBED0, /* LV # Lo HANGUL SYLLABLE BBEO */ 936 : 0xBEEC, /* LV # Lo HANGUL SYLLABLE BBE */ 937 : 0xBF08, /* LV # Lo HANGUL SYLLABLE BBYEO */ 938 : 0xBF24, /* LV # Lo HANGUL SYLLABLE BBYE */ 939 : 0xBF40, /* LV # Lo HANGUL SYLLABLE BBO */ 940 : 0xBF5C, /* LV # Lo HANGUL SYLLABLE BBWA */ 941 : 0xBF78, /* LV # Lo HANGUL SYLLABLE BBWAE */ 942 : 0xBF94, /* LV # Lo HANGUL SYLLABLE BBOE */ 943 : 0xBFB0, /* LV # Lo HANGUL SYLLABLE BBYO */ 944 : 0xBFCC, /* LV # Lo HANGUL SYLLABLE BBU */ 945 : 0xBFE8, /* LV # Lo HANGUL SYLLABLE BBWEO */ 946 : 0xC004, /* LV # Lo HANGUL SYLLABLE BBWE */ 947 : 0xC020, /* LV # Lo HANGUL SYLLABLE BBWI */ 948 : 0xC03C, /* LV # Lo HANGUL SYLLABLE BBYU */ 949 : 0xC058, /* LV # Lo HANGUL SYLLABLE BBEU */ 950 : 0xC074, /* LV # Lo HANGUL SYLLABLE BBYI */ 951 : 0xC090, /* LV # Lo HANGUL SYLLABLE BBI */ 952 : 0xC0AC, /* LV # Lo HANGUL SYLLABLE SA */ 953 : 0xC0C8, /* LV # Lo HANGUL SYLLABLE SAE */ 954 : 0xC0E4, /* LV # Lo HANGUL SYLLABLE SYA */ 955 : 0xC100, /* LV # Lo HANGUL SYLLABLE SYAE */ 956 : 0xC11C, /* LV # Lo HANGUL SYLLABLE SEO */ 957 : 0xC138, /* LV # Lo HANGUL SYLLABLE SE */ 958 : 0xC154, /* LV # Lo HANGUL SYLLABLE SYEO */ 959 : 0xC170, /* LV # Lo HANGUL SYLLABLE SYE */ 960 : 0xC18C, /* LV # Lo HANGUL SYLLABLE SO */ 961 : 0xC1A8, /* LV # Lo HANGUL SYLLABLE SWA */ 962 : 0xC1C4, /* LV # Lo HANGUL SYLLABLE SWAE */ 963 : 0xC1E0, /* LV # Lo HANGUL SYLLABLE SOE */ 964 : 0xC1FC, /* LV # Lo HANGUL SYLLABLE SYO */ 965 : 0xC218, /* LV # Lo HANGUL SYLLABLE SU */ 966 : 0xC234, /* LV # Lo HANGUL SYLLABLE SWEO */ 967 : 0xC250, /* LV # Lo HANGUL SYLLABLE SWE */ 968 : 0xC26C, /* LV # Lo HANGUL SYLLABLE SWI */ 969 : 0xC288, /* LV # Lo HANGUL SYLLABLE SYU */ 970 : 0xC2A4, /* LV # Lo HANGUL SYLLABLE SEU */ 971 : 0xC2C0, /* LV # Lo HANGUL SYLLABLE SYI */ 972 : 0xC2DC, /* LV # Lo HANGUL SYLLABLE SI */ 973 : 0xC2F8, /* LV # Lo HANGUL SYLLABLE SSA */ 974 : 0xC314, /* LV # Lo HANGUL SYLLABLE SSAE */ 975 : 0xC330, /* LV # Lo HANGUL SYLLABLE SSYA */ 976 : 0xC34C, /* LV # Lo HANGUL SYLLABLE SSYAE */ 977 : 0xC368, /* LV # Lo HANGUL SYLLABLE SSEO */ 978 : 0xC384, /* LV # Lo HANGUL SYLLABLE SSE */ 979 : 0xC3A0, /* LV # Lo HANGUL SYLLABLE SSYEO */ 980 : 0xC3BC, /* LV # Lo HANGUL SYLLABLE SSYE */ 981 : 0xC3D8, /* LV # Lo HANGUL SYLLABLE SSO */ 982 : 0xC3F4, /* LV # Lo HANGUL SYLLABLE SSWA */ 983 : 0xC410, /* LV # Lo HANGUL SYLLABLE SSWAE */ 984 : 0xC42C, /* LV # Lo HANGUL SYLLABLE SSOE */ 985 : 0xC448, /* LV # Lo HANGUL SYLLABLE SSYO */ 986 : 0xC464, /* LV # Lo HANGUL SYLLABLE SSU */ 987 : 0xC480, /* LV # Lo HANGUL SYLLABLE SSWEO */ 988 : 0xC49C, /* LV # Lo HANGUL SYLLABLE SSWE */ 989 : 0xC4B8, /* LV # Lo HANGUL SYLLABLE SSWI */ 990 : 0xC4D4, /* LV # Lo HANGUL SYLLABLE SSYU */ 991 : 0xC4F0, /* LV # Lo HANGUL SYLLABLE SSEU */ 992 : 0xC50C, /* LV # Lo HANGUL SYLLABLE SSYI */ 993 : 0xC528, /* LV # Lo HANGUL SYLLABLE SSI */ 994 : 0xC544, /* LV # Lo HANGUL SYLLABLE A */ 995 : 0xC560, /* LV # Lo HANGUL SYLLABLE AE */ 996 : 0xC57C, /* LV # Lo HANGUL SYLLABLE YA */ 997 : 0xC598, /* LV # Lo HANGUL SYLLABLE YAE */ 998 : 0xC5B4, /* LV # Lo HANGUL SYLLABLE EO */ 999 : 0xC5D0, /* LV # Lo HANGUL SYLLABLE E */ 1000 : 0xC5EC, /* LV # Lo HANGUL SYLLABLE YEO */ 1001 : 0xC608, /* LV # Lo HANGUL SYLLABLE YE */ 1002 : 0xC624, /* LV # Lo HANGUL SYLLABLE O */ 1003 : 0xC640, /* LV # Lo HANGUL SYLLABLE WA */ 1004 : 0xC65C, /* LV # Lo HANGUL SYLLABLE WAE */ 1005 : 0xC678, /* LV # Lo HANGUL SYLLABLE OE */ 1006 : 0xC694, /* LV # Lo HANGUL SYLLABLE YO */ 1007 : 0xC6B0, /* LV # Lo HANGUL SYLLABLE U */ 1008 : 0xC6CC, /* LV # Lo HANGUL SYLLABLE WEO */ 1009 : 0xC6E8, /* LV # Lo HANGUL SYLLABLE WE */ 1010 : 0xC704, /* LV # Lo HANGUL SYLLABLE WI */ 1011 : 0xC720, /* LV # Lo HANGUL SYLLABLE YU */ 1012 : 0xC73C, /* LV # Lo HANGUL SYLLABLE EU */ 1013 : 0xC758, /* LV # Lo HANGUL SYLLABLE YI */ 1014 : 0xC774, /* LV # Lo HANGUL SYLLABLE I */ 1015 : 0xC790, /* LV # Lo HANGUL SYLLABLE JA */ 1016 : 0xC7AC, /* LV # Lo HANGUL SYLLABLE JAE */ 1017 : 0xC7C8, /* LV # Lo HANGUL SYLLABLE JYA */ 1018 : 0xC7E4, /* LV # Lo HANGUL SYLLABLE JYAE */ 1019 : 0xC800, /* LV # Lo HANGUL SYLLABLE JEO */ 1020 : 0xC81C, /* LV # Lo HANGUL SYLLABLE JE */ 1021 : 0xC838, /* LV # Lo HANGUL SYLLABLE JYEO */ 1022 : 0xC854, /* LV # Lo HANGUL SYLLABLE JYE */ 1023 : 0xC870, /* LV # Lo HANGUL SYLLABLE JO */ 1024 : 0xC88C, /* LV # Lo HANGUL SYLLABLE JWA */ 1025 : 0xC8A8, /* LV # Lo HANGUL SYLLABLE JWAE */ 1026 : 0xC8C4, /* LV # Lo HANGUL SYLLABLE JOE */ 1027 : 0xC8E0, /* LV # Lo HANGUL SYLLABLE JYO */ 1028 : 0xC8FC, /* LV # Lo HANGUL SYLLABLE JU */ 1029 : 0xC918, /* LV # Lo HANGUL SYLLABLE JWEO */ 1030 : 0xC934, /* LV # Lo HANGUL SYLLABLE JWE */ 1031 : 0xC950, /* LV # Lo HANGUL SYLLABLE JWI */ 1032 : 0xC96C, /* LV # Lo HANGUL SYLLABLE JYU */ 1033 : 0xC988, /* LV # Lo HANGUL SYLLABLE JEU */ 1034 : 0xC9A4, /* LV # Lo HANGUL SYLLABLE JYI */ 1035 : 0xC9C0, /* LV # Lo HANGUL SYLLABLE JI */ 1036 : 0xC9DC, /* LV # Lo HANGUL SYLLABLE JJA */ 1037 : 0xC9F8, /* LV # Lo HANGUL SYLLABLE JJAE */ 1038 : 0xCA14, /* LV # Lo HANGUL SYLLABLE JJYA */ 1039 : 0xCA30, /* LV # Lo HANGUL SYLLABLE JJYAE */ 1040 : 0xCA4C, /* LV # Lo HANGUL SYLLABLE JJEO */ 1041 : 0xCA68, /* LV # Lo HANGUL SYLLABLE JJE */ 1042 : 0xCA84, /* LV # Lo HANGUL SYLLABLE JJYEO */ 1043 : 0xCAA0, /* LV # Lo HANGUL SYLLABLE JJYE */ 1044 : 0xCABC, /* LV # Lo HANGUL SYLLABLE JJO */ 1045 : 0xCAD8, /* LV # Lo HANGUL SYLLABLE JJWA */ 1046 : 0xCAF4, /* LV # Lo HANGUL SYLLABLE JJWAE */ 1047 : 0xCB10, /* LV # Lo HANGUL SYLLABLE JJOE */ 1048 : 0xCB2C, /* LV # Lo HANGUL SYLLABLE JJYO */ 1049 : 0xCB48, /* LV # Lo HANGUL SYLLABLE JJU */ 1050 : 0xCB64, /* LV # Lo HANGUL SYLLABLE JJWEO */ 1051 : 0xCB80, /* LV # Lo HANGUL SYLLABLE JJWE */ 1052 : 0xCB9C, /* LV # Lo HANGUL SYLLABLE JJWI */ 1053 : 0xCBB8, /* LV # Lo HANGUL SYLLABLE JJYU */ 1054 : 0xCBD4, /* LV # Lo HANGUL SYLLABLE JJEU */ 1055 : 0xCBF0, /* LV # Lo HANGUL SYLLABLE JJYI */ 1056 : 0xCC0C, /* LV # Lo HANGUL SYLLABLE JJI */ 1057 : 0xCC28, /* LV # Lo HANGUL SYLLABLE CA */ 1058 : 0xCC44, /* LV # Lo HANGUL SYLLABLE CAE */ 1059 : 0xCC60, /* LV # Lo HANGUL SYLLABLE CYA */ 1060 : 0xCC7C, /* LV # Lo HANGUL SYLLABLE CYAE */ 1061 : 0xCC98, /* LV # Lo HANGUL SYLLABLE CEO */ 1062 : 0xCCB4, /* LV # Lo HANGUL SYLLABLE CE */ 1063 : 0xCCD0, /* LV # Lo HANGUL SYLLABLE CYEO */ 1064 : 0xCCEC, /* LV # Lo HANGUL SYLLABLE CYE */ 1065 : 0xCD08, /* LV # Lo HANGUL SYLLABLE CO */ 1066 : 0xCD24, /* LV # Lo HANGUL SYLLABLE CWA */ 1067 : 0xCD40, /* LV # Lo HANGUL SYLLABLE CWAE */ 1068 : 0xCD5C, /* LV # Lo HANGUL SYLLABLE COE */ 1069 : 0xCD78, /* LV # Lo HANGUL SYLLABLE CYO */ 1070 : 0xCD94, /* LV # Lo HANGUL SYLLABLE CU */ 1071 : 0xCDB0, /* LV # Lo HANGUL SYLLABLE CWEO */ 1072 : 0xCDCC, /* LV # Lo HANGUL SYLLABLE CWE */ 1073 : 0xCDE8, /* LV # Lo HANGUL SYLLABLE CWI */ 1074 : 0xCE04, /* LV # Lo HANGUL SYLLABLE CYU */ 1075 : 0xCE20, /* LV # Lo HANGUL SYLLABLE CEU */ 1076 : 0xCE3C, /* LV # Lo HANGUL SYLLABLE CYI */ 1077 : 0xCE58, /* LV # Lo HANGUL SYLLABLE CI */ 1078 : 0xCE74, /* LV # Lo HANGUL SYLLABLE KA */ 1079 : 0xCE90, /* LV # Lo HANGUL SYLLABLE KAE */ 1080 : 0xCEAC, /* LV # Lo HANGUL SYLLABLE KYA */ 1081 : 0xCEC8, /* LV # Lo HANGUL SYLLABLE KYAE */ 1082 : 0xCEE4, /* LV # Lo HANGUL SYLLABLE KEO */ 1083 : 0xCF00, /* LV # Lo HANGUL SYLLABLE KE */ 1084 : 0xCF1C, /* LV # Lo HANGUL SYLLABLE KYEO */ 1085 : 0xCF38, /* LV # Lo HANGUL SYLLABLE KYE */ 1086 : 0xCF54, /* LV # Lo HANGUL SYLLABLE KO */ 1087 : 0xCF70, /* LV # Lo HANGUL SYLLABLE KWA */ 1088 : 0xCF8C, /* LV # Lo HANGUL SYLLABLE KWAE */ 1089 : 0xCFA8, /* LV # Lo HANGUL SYLLABLE KOE */ 1090 : 0xCFC4, /* LV # Lo HANGUL SYLLABLE KYO */ 1091 : 0xCFE0, /* LV # Lo HANGUL SYLLABLE KU */ 1092 : 0xCFFC, /* LV # Lo HANGUL SYLLABLE KWEO */ 1093 : 0xD018, /* LV # Lo HANGUL SYLLABLE KWE */ 1094 : 0xD034, /* LV # Lo HANGUL SYLLABLE KWI */ 1095 : 0xD050, /* LV # Lo HANGUL SYLLABLE KYU */ 1096 : 0xD06C, /* LV # Lo HANGUL SYLLABLE KEU */ 1097 : 0xD088, /* LV # Lo HANGUL SYLLABLE KYI */ 1098 : 0xD0A4, /* LV # Lo HANGUL SYLLABLE KI */ 1099 : 0xD0C0, /* LV # Lo HANGUL SYLLABLE TA */ 1100 : 0xD0DC, /* LV # Lo HANGUL SYLLABLE TAE */ 1101 : 0xD0F8, /* LV # Lo HANGUL SYLLABLE TYA */ 1102 : 0xD114, /* LV # Lo HANGUL SYLLABLE TYAE */ 1103 : 0xD130, /* LV # Lo HANGUL SYLLABLE TEO */ 1104 : 0xD14C, /* LV # Lo HANGUL SYLLABLE TE */ 1105 : 0xD168, /* LV # Lo HANGUL SYLLABLE TYEO */ 1106 : 0xD184, /* LV # Lo HANGUL SYLLABLE TYE */ 1107 : 0xD1A0, /* LV # Lo HANGUL SYLLABLE TO */ 1108 : 0xD1BC, /* LV # Lo HANGUL SYLLABLE TWA */ 1109 : 0xD1D8, /* LV # Lo HANGUL SYLLABLE TWAE */ 1110 : 0xD1F4, /* LV # Lo HANGUL SYLLABLE TOE */ 1111 : 0xD210, /* LV # Lo HANGUL SYLLABLE TYO */ 1112 : 0xD22C, /* LV # Lo HANGUL SYLLABLE TU */ 1113 : 0xD248, /* LV # Lo HANGUL SYLLABLE TWEO */ 1114 : 0xD264, /* LV # Lo HANGUL SYLLABLE TWE */ 1115 : 0xD280, /* LV # Lo HANGUL SYLLABLE TWI */ 1116 : 0xD29C, /* LV # Lo HANGUL SYLLABLE TYU */ 1117 : 0xD2B8, /* LV # Lo HANGUL SYLLABLE TEU */ 1118 : 0xD2D4, /* LV # Lo HANGUL SYLLABLE TYI */ 1119 : 0xD2F0, /* LV # Lo HANGUL SYLLABLE TI */ 1120 : 0xD30C, /* LV # Lo HANGUL SYLLABLE PA */ 1121 : 0xD328, /* LV # Lo HANGUL SYLLABLE PAE */ 1122 : 0xD344, /* LV # Lo HANGUL SYLLABLE PYA */ 1123 : 0xD360, /* LV # Lo HANGUL SYLLABLE PYAE */ 1124 : 0xD37C, /* LV # Lo HANGUL SYLLABLE PEO */ 1125 : 0xD398, /* LV # Lo HANGUL SYLLABLE PE */ 1126 : 0xD3B4, /* LV # Lo HANGUL SYLLABLE PYEO */ 1127 : 0xD3D0, /* LV # Lo HANGUL SYLLABLE PYE */ 1128 : 0xD3EC, /* LV # Lo HANGUL SYLLABLE PO */ 1129 : 0xD408, /* LV # Lo HANGUL SYLLABLE PWA */ 1130 : 0xD424, /* LV # Lo HANGUL SYLLABLE PWAE */ 1131 : 0xD440, /* LV # Lo HANGUL SYLLABLE POE */ 1132 : 0xD45C, /* LV # Lo HANGUL SYLLABLE PYO */ 1133 : 0xD478, /* LV # Lo HANGUL SYLLABLE PU */ 1134 : 0xD494, /* LV # Lo HANGUL SYLLABLE PWEO */ 1135 : 0xD4B0, /* LV # Lo HANGUL SYLLABLE PWE */ 1136 : 0xD4CC, /* LV # Lo HANGUL SYLLABLE PWI */ 1137 : 0xD4E8, /* LV # Lo HANGUL SYLLABLE PYU */ 1138 : 0xD504, /* LV # Lo HANGUL SYLLABLE PEU */ 1139 : 0xD520, /* LV # Lo HANGUL SYLLABLE PYI */ 1140 : 0xD53C, /* LV # Lo HANGUL SYLLABLE PI */ 1141 : 0xD558, /* LV # Lo HANGUL SYLLABLE HA */ 1142 : 0xD574, /* LV # Lo HANGUL SYLLABLE HAE */ 1143 : 0xD590, /* LV # Lo HANGUL SYLLABLE HYA */ 1144 : 0xD5AC, /* LV # Lo HANGUL SYLLABLE HYAE */ 1145 : 0xD5C8, /* LV # Lo HANGUL SYLLABLE HEO */ 1146 : 0xD5E4, /* LV # Lo HANGUL SYLLABLE HE */ 1147 : 0xD600, /* LV # Lo HANGUL SYLLABLE HYEO */ 1148 : 0xD61C, /* LV # Lo HANGUL SYLLABLE HYE */ 1149 : 0xD638, /* LV # Lo HANGUL SYLLABLE HO */ 1150 : 0xD654, /* LV # Lo HANGUL SYLLABLE HWA */ 1151 : 0xD670, /* LV # Lo HANGUL SYLLABLE HWAE */ 1152 : 0xD68C, /* LV # Lo HANGUL SYLLABLE HOE */ 1153 : 0xD6A8, /* LV # Lo HANGUL SYLLABLE HYO */ 1154 : 0xD6C4, /* LV # Lo HANGUL SYLLABLE HU */ 1155 : 0xD6E0, /* LV # Lo HANGUL SYLLABLE HWEO */ 1156 : 0xD6FC, /* LV # Lo HANGUL SYLLABLE HWE */ 1157 : 0xD718, /* LV # Lo HANGUL SYLLABLE HWI */ 1158 : 0xD734, /* LV # Lo HANGUL SYLLABLE HYU */ 1159 : 0xD750, /* LV # Lo HANGUL SYLLABLE HEU */ 1160 : 0xD76C, /* LV # Lo HANGUL SYLLABLE HYI */ 1161 : 0xD788, /* LV # Lo HANGUL SYLLABLE HI */ 1162 : 0 1163 : }; 1164 : 1165 : static const uint32_t pr29_13_2[] = { 1166 : 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD, 0x11AE, 0x11AF, 1167 : 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x11B6, 0x11B7, 1168 : 0x11B8, 0x11B9, 0x11BA, 0x11BB, 0x11BC, 0x11BD, 0x11BE, 0x11BF, 1169 : 0x11C0, 0x11C1, 0x11C2, 0 1170 : }; 1171 : 1172 : typedef struct 1173 : { 1174 : const uint32_t *first; 1175 : const uint32_t *last; 1176 : } Pr29; 1177 : 1178 : static const Pr29 pr29[] = { 1179 : {&pr29_1_1[0], &pr29_1_2[0]}, 1180 : {&pr29_2_1[0], &pr29_2_2[0]}, 1181 : {&pr29_3_1[0], &pr29_3_2[0]}, 1182 : {&pr29_4_1[0], &pr29_4_2[0]}, 1183 : {&pr29_5_1[0], &pr29_5_2[0]}, 1184 : {&pr29_6_1[0], &pr29_6_2[0]}, 1185 : {&pr29_7_1[0], &pr29_7_2[0]}, 1186 : {&pr29_8_1[0], &pr29_8_2[0]}, 1187 : {&pr29_9_1[0], &pr29_9_2[0]}, 1188 : {&pr29_10_1[0], &pr29_10_2[0]}, 1189 : {&pr29_11_1[0], &pr29_11_2[0]}, 1190 : {&pr29_12_1[0], &pr29_12_2[0]}, 1191 : {&pr29_13_1[0], &pr29_13_2[0]}, 1192 : {NULL, NULL} 1193 : }; 1194 : 1195 : static size_t 1196 19710 : first_column (uint32_t c) 1197 : { 1198 : size_t i, j; 1199 : 1200 275475 : for (i = 0; pr29[i].first; i++) 1201 8686276 : for (j = 0; pr29[i].first[j]; j++) 1202 8430511 : if (c == pr29[i].first[j]) 1203 389 : return i + 1; 1204 : 1205 19321 : return 0; 1206 : } 1207 : 1208 : static int 1209 59873 : in_last_column_row (uint32_t c, size_t row) 1210 : { 1211 : size_t i; 1212 : 1213 1676056 : for (i = 0; pr29[row - 1].last[i]; i++) 1214 1616193 : if (c == pr29[row - 1].last[i]) 1215 10 : return 1; 1216 : 1217 59863 : return 0; 1218 : } 1219 : 1220 : static size_t 1221 46986 : combinationclass (uint32_t c) 1222 : { 1223 : size_t i; 1224 : 1225 15283186 : for (i = 0; nzcc[i]; i++) 1226 15236914 : if (c == nzcc[i]) 1227 714 : return i + 1; 1228 : 1229 46272 : return 0; 1230 : } 1231 : 1232 : /** 1233 : * pr29_4: 1234 : * @in: input array with unicode code points. 1235 : * @len: length of input array with unicode code points. 1236 : * 1237 : * Check the input to see if it may be normalized into different 1238 : * strings by different NFKC implementations, due to an anomaly in the 1239 : * NFKC specifications. 1240 : * 1241 : * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, 1242 : * and %PR29_PROBLEM if the input sequence is a "problem sequence" 1243 : * (i.e., may be normalized into different strings by different 1244 : * implementations). 1245 : **/ 1246 : int 1247 301 : pr29_4 (const uint32_t * in, size_t len) 1248 : { 1249 : size_t i, j, k, row; 1250 : 1251 : /* 1252 : * The problem sequence are of the form: 1253 : * 1254 : * first_character intervening_character+ last_character 1255 : * 1256 : * where the first_character and last_character come from the same 1257 : * row in the following table, and there is at least one 1258 : * intervening_character with non-zero Canonical Combining 1259 : * Class. (The '+' above means one or more occurrences.) 1260 : * 1261 : */ 1262 : 1263 20001 : for (i = 0; i < len; i++) 1264 19710 : if ((row = first_column (in[i])) > 0) 1265 47365 : for (j = i + 1; j < len; j++) 1266 46986 : if (combinationclass (in[j])) 1267 60577 : for (k = j + 1; k < len; k++) 1268 59873 : if (in_last_column_row (in[k], row)) 1269 10 : return PR29_PROBLEM; 1270 : 1271 291 : return PR29_SUCCESS; 1272 : } 1273 : 1274 : /** 1275 : * pr29_4z: 1276 : * @in: zero terminated array of Unicode code points. 1277 : * 1278 : * Check the input to see if it may be normalized into different 1279 : * strings by different NFKC implementations, due to an anomaly in the 1280 : * NFKC specifications. 1281 : * 1282 : * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, 1283 : * and %PR29_PROBLEM if the input sequence is a "problem sequence" 1284 : * (i.e., may be normalized into different strings by different 1285 : * implementations). 1286 : **/ 1287 : int 1288 292 : pr29_4z (const uint32_t * in) 1289 : { 1290 : size_t len; 1291 : 1292 20016 : for (len = 0; in[len]; len++) 1293 : ; 1294 : 1295 292 : return pr29_4 (in, len); 1296 : } 1297 : 1298 : /** 1299 : * pr29_8z: 1300 : * @in: zero terminated input UTF-8 string. 1301 : * 1302 : * Check the input to see if it may be normalized into different 1303 : * strings by different NFKC implementations, due to an anomaly in the 1304 : * NFKC specifications. 1305 : * 1306 : * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, 1307 : * and %PR29_PROBLEM if the input sequence is a "problem sequence" 1308 : * (i.e., may be normalized into different strings by different 1309 : * implementations), or %PR29_STRINGPREP_ERROR if there was a 1310 : * problem converting the string from UTF-8 to UCS-4. 1311 : **/ 1312 : int 1313 373 : pr29_8z (const char *in) 1314 : { 1315 : uint32_t *p; 1316 : int rc; 1317 : 1318 373 : p = stringprep_utf8_to_ucs4 (in, -1, NULL); 1319 373 : if (!p) 1320 90 : return PR29_STRINGPREP_ERROR; 1321 : 1322 283 : rc = pr29_4z (p); 1323 : 1324 283 : free (p); 1325 : 1326 283 : return rc; 1327 : } 1328 : 1329 : /** 1330 : * Pr29_rc: 1331 : * @PR29_SUCCESS: Successful operation. This value is guaranteed to 1332 : * always be zero, the remaining ones are only guaranteed to hold 1333 : * non-zero values, for logical comparison purposes. 1334 : * @PR29_PROBLEM: A problem sequence was encountered. 1335 : * @PR29_STRINGPREP_ERROR: The character set conversion failed (only 1336 : * for pr29_8z()). 1337 : * 1338 : * Enumerated return codes for pr29_4(), pr29_4z(), pr29_8z(). The 1339 : * value 0 is guaranteed to always correspond to success. 1340 : */