|
libidn
1.25
|
00001 /* pr29.h --- Detect strings that are non-idempotent under NFKC in Unicode 3.2. 00002 Copyright (C) 2004-2012 Simon Josefsson 00003 00004 This file is part of GNU Libidn. 00005 00006 GNU Libidn is free software: you can redistribute it and/or 00007 modify it under the terms of either: 00008 00009 * the GNU Lesser General Public License as published by the Free 00010 Software Foundation; either version 3 of the License, or (at 00011 your option) any later version. 00012 00013 or 00014 00015 * the GNU General Public License as published by the Free 00016 Software Foundation; either version 2 of the License, or (at 00017 your option) any later version. 00018 00019 or both in parallel, as here. 00020 00021 GNU Libidn is distributed in the hope that it will be useful, 00022 but WITHOUT ANY WARRANTY; without even the implied warranty of 00023 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00024 General Public License for more details. 00025 00026 You should have received copies of the GNU General Public License and 00027 the GNU Lesser General Public License along with this program. If 00028 not, see <http://www.gnu.org/licenses/>. */ 00029 00030 #include <config.h> 00031 00032 #include "pr29.h" 00033 00034 /* Get stringprep_utf8_to_ucs4. */ 00035 #include <stringprep.h> 00036 00037 /* 00038 * The tables used in this file was extracted by Simon Josefsson from 00039 * pr-29.html and DerivedCombiningClass-3.2.0.txt, as published by 00040 * Unicode Inc., for the GNU Libidn project. 00041 * 00042 */ 00043 00044 /* These are the characters with non-zero combination class, extracted 00045 from DerivedCombiningClass-3.2.0.txt. */ 00046 static uint32_t nzcc[] = { 00047 /* 1 # Mn [5] COMBINING TILDE OVERLAY.. 00048 * ..COMBINING LONG SOLIDUS OVERLAY */ 00049 0x0334, 00050 0x0335, 00051 0x0336, 00052 0x0337, 00053 0x0338, 00054 /* 1 # Mn [2] COMBINING LONG VERTICAL LINE OVERLAY.. 00055 * ..COMBINING SHORT VERTICAL LINE OVERLAY */ 00056 0x20D2, 00057 0x20D3, 00058 /* 1 # Mn [3] COMBINING RING OVERLAY.. 00059 * ..COMBINING ANTICLOCKWISE RING OVERLAY */ 00060 0x20D8, 00061 0x20D9, 00062 0x20DA, 00063 /* 1 # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY.. 00064 * ..COMBINING DOUBLE VERTICAL STROKE OVERLAY */ 00065 0x20E5, 00066 0x20E6, 00067 /* 1 # Mn COMBINING LEFTWARDS ARROW OVERLAY */ 00068 0x20EA, 00069 /* 1 # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1.. 00070 * ..MUSICAL SYMBOL COMBINING TREMOLO-3 */ 00071 0x1D167, 00072 0x1D168, 00073 0x1D169, 00074 /* 7 # Mn DEVANAGARI SIGN NUKTA */ 00075 0x093C, 00076 /* 7 # Mn BENGALI SIGN NUKTA */ 00077 0x09BC, 00078 /* 7 # Mn GURMUKHI SIGN NUKTA */ 00079 0x0A3C, 00080 /* 7 # Mn GUJARATI SIGN NUKTA */ 00081 0x0ABC, 00082 /* 7 # Mn ORIYA SIGN NUKTA */ 00083 0x0B3C, 00084 /* 7 # Mn MYANMAR SIGN DOT BELOW */ 00085 0x1037, 00086 /* 8 # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK.. 00087 * ..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ 00088 0x3099, 00089 0x309A, 00090 /* 9 # Mn DEVANAGARI SIGN VIRAMA */ 00091 0x094D, 00092 /* 9 # Mn BENGALI SIGN VIRAMA */ 00093 0x09CD, 00094 /* 9 # Mn GURMUKHI SIGN VIRAMA */ 00095 0x0A4D, 00096 /* 9 # Mn GUJARATI SIGN VIRAMA */ 00097 0x0ACD, 00098 /* 9 # Mn ORIYA SIGN VIRAMA */ 00099 0x0B4D, 00100 /* 9 # Mn TAMIL SIGN VIRAMA */ 00101 0x0BCD, 00102 /* 9 # Mn TELUGU SIGN VIRAMA */ 00103 0x0C4D, 00104 /* 9 # Mn KANNADA SIGN VIRAMA */ 00105 0x0CCD, 00106 /* 9 # Mn MALAYALAM SIGN VIRAMA */ 00107 0x0D4D, 00108 /* 9 # Mn SINHALA SIGN AL-LAKUNA */ 00109 0x0DCA, 00110 /* 9 # Mn THAI CHARACTER PHINTHU */ 00111 0x0E3A, 00112 /* 9 # Mn TIBETAN MARK HALANTA */ 00113 0x0F84, 00114 /* 9 # Mn MYANMAR SIGN VIRAMA */ 00115 0x1039, 00116 /* 9 # Mn TAGALOG SIGN VIRAMA */ 00117 0x1714, 00118 /* 9 # Mn HANUNOO SIGN PAMUDPOD */ 00119 0x1734, 00120 /* 9 # Mn KHMER SIGN COENG */ 00121 0x17D2, 00122 /* 10 # Mn HEBREW POINT SHEVA */ 00123 0x05B0, 00124 /* 11 # Mn HEBREW POINT HATAF SEGOL */ 00125 0x05B1, 00126 /* 12 # Mn HEBREW POINT HATAF PATAH */ 00127 0x05B2, 00128 /* 13 # Mn HEBREW POINT HATAF QAMATS */ 00129 0x05B3, 00130 /* 14 # Mn HEBREW POINT HIRIQ */ 00131 0x05B4, 00132 /* 15 # Mn HEBREW POINT TSERE */ 00133 0x05B5, 00134 /* 16 # Mn HEBREW POINT SEGOL */ 00135 0x05B6, 00136 /* 17 # Mn HEBREW POINT PATAH */ 00137 0x05B7, 00138 /* 18 # Mn HEBREW POINT QAMATS */ 00139 0x05B8, 00140 /* 19 # Mn HEBREW POINT HOLAM */ 00141 0x05B9, 00142 /* 20 # Mn HEBREW POINT QUBUTS */ 00143 0x05BB, 00144 /* 21 # Mn HEBREW POINT DAGESH OR MAPIQ */ 00145 0x05BC, 00146 /* 22 # Mn HEBREW POINT METEG */ 00147 0x05BD, 00148 /* 23 # Mn HEBREW POINT RAFE */ 00149 0x05BF, 00150 /* 24 # Mn HEBREW POINT SHIN DOT */ 00151 0x05C1, 00152 /* 25 # Mn HEBREW POINT SIN DOT */ 00153 0x05C2, 00154 /* 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA */ 00155 0xFB1E, 00156 /* 27 # Mn ARABIC FATHATAN */ 00157 0x064B, 00158 /* 28 # Mn ARABIC DAMMATAN */ 00159 0x064C, 00160 /* 29 # Mn ARABIC KASRATAN */ 00161 0x064D, 00162 /* 30 # Mn ARABIC FATHA */ 00163 0x064E, 00164 /* 31 # Mn ARABIC DAMMA */ 00165 0x064F, 00166 /* 32 # Mn ARABIC KASRA */ 00167 0x0650, 00168 /* 33 # Mn ARABIC SHADDA */ 00169 0x0651, 00170 /* 34 # Mn ARABIC SUKUN */ 00171 0x0652, 00172 /* 35 # Mn ARABIC LETTER SUPERSCRIPT ALEF */ 00173 0x0670, 00174 /* 36 # Mn SYRIAC LETTER SUPERSCRIPT ALAPH */ 00175 0x0711, 00176 /* 84 # Mn TELUGU LENGTH MARK */ 00177 0x0C55, 00178 /* 91 # Mn TELUGU AI LENGTH MARK */ 00179 0x0C56, 00180 /* 103 # Mn [2] THAI CHARACTER SARA U.. 00181 * ..THAI CHARACTER SARA UU */ 00182 0x0E38, 00183 0x0E39, 00184 /* 107 # Mn [4] THAI CHARACTER MAI EK.. 00185 * ..THAI CHARACTER MAI CHATTAWA */ 00186 0x0E48, 00187 0x0E49, 00188 0x0E4A, 00189 0x04EB, 00190 /* 118 # Mn [2] LAO VOWEL SIGN U.. 00191 * ..LAO VOWEL SIGN UU */ 00192 0x0EB8, 00193 0x0EB9, 00194 /* 122 # Mn [4] LAO TONE MAI EK.. 00195 * ..LAO TONE MAI CATAWA */ 00196 0x0EC8, 00197 0x0EC9, 00198 0x0ECA, 00199 0x0ECB, 00200 /* 129 # Mn TIBETAN VOWEL SIGN AA */ 00201 0x0F71, 00202 /* 130 # Mn TIBETAN VOWEL SIGN I */ 00203 0x0F72, 00204 /* 130 # Mn [4] TIBETAN VOWEL SIGN E.. 00205 * ..TIBETAN VOWEL SIGN OO */ 00206 0x0F7A, 00207 0x0F7B, 00208 0x0F7C, 00209 0x0F7D, 00210 /* 130 # Mn TIBETAN VOWEL SIGN REVERSED I */ 00211 0x0F80, 00212 /* 132 # Mn TIBETAN VOWEL SIGN U */ 00213 0x0F74, 00214 /* 202 # Mn [2] COMBINING PALATALIZED HOOK BELOW.. 00215 * ..COMBINING RETROFLEX HOOK BELOW */ 00216 0x0321, 00217 0x0322, 00218 /* 202 # Mn [2] COMBINING CEDILLA.. 00219 * ..COMBINING OGONEK */ 00220 0x0327, 00221 0x0328, 00222 /* 216 # Mn COMBINING HORN */ 00223 0x031B, 00224 /* 216 # Mn TIBETAN MARK TSA -PHRU */ 00225 0x0F39, 00226 /* 216 # Mc [2] MUSICAL SYMBOL COMBINING STEM.. 00227 * ..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM */ 00228 0x1D165, 00229 0x1D166, 00230 /* 216 # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1.. 00231 * ..MUSICAL SYMBOL COMBINING FLAG-5 */ 00232 0x1D16E, 00233 0x1D16F, 00234 0x1D170, 00235 0x1D171, 00236 0x1D172, 00237 /* 218 # Mn IDEOGRAPHIC LEVEL TONE MARK */ 00238 0x302A, 00239 /* 220 # Mn [4] COMBINING GRAVE ACCENT BELOW.. 00240 * ..COMBINING RIGHT TACK BELOW */ 00241 0x0316, 00242 0x0317, 00243 0x0318, 00244 0x0319, 00245 /* 220 # Mn [5] COMBINING LEFT HALF RING BELOW.. 00246 * ..COMBINING MINUS SIGN BELOW */ 00247 0x031C, 00248 0x031D, 00249 0x031E, 00250 0x031F, 00251 0x0320, 00252 /* 220 # Mn [4] COMBINING DOT BELOW.. 00253 * ..COMBINING COMMA BELOW */ 00254 0x0323, 00255 0x0324, 00256 0x0325, 00257 0x0326, 00258 /* 220 # Mn [11] COMBINING VERTICAL LINE BELOW.. 00259 * ..COMBINING DOUBLE LOW LINE */ 00260 0x0329, 00261 0x032A, 00262 0x032B, 00263 0x032C, 00264 0x032D, 00265 0x032E, 00266 0x032F, 00267 0x0330, 00268 0x0331, 00269 0x0332, 00270 0x0333, 00271 /* 220 # Mn [4] COMBINING RIGHT HALF RING BELOW.. 00272 * ..COMBINING SEAGULL BELOW */ 00273 0x0339, 00274 0x033A, 00275 0x033B, 00276 0x033C, 00277 /* 220 # Mn [3] COMBINING EQUALS SIGN BELOW.. 00278 * ..COMBINING LEFT ANGLE BELOW */ 00279 0x0347, 00280 0x0348, 00281 0x0349, 00282 /* 220 # Mn [2] COMBINING LEFT RIGHT ARROW BELOW.. 00283 * ..COMBINING UPWARDS ARROW BELOW */ 00284 0x034D, 00285 0x034E, 00286 /* 220 # Mn HEBREW ACCENT ETNAHTA */ 00287 0x0591, 00288 /* 220 # Mn HEBREW ACCENT TIPEHA */ 00289 0x0596, 00290 /* 220 # Mn HEBREW ACCENT TEVIR */ 00291 0x059B, 00292 /* 220 # Mn [5] HEBREW ACCENT MUNAH.. 00293 * ..HEBREW ACCENT DARGA */ 00294 0x05A3, 00295 0x05A4, 00296 0x05A5, 00297 0x05A6, 00298 0x05A7, 00299 /* 220 # Mn HEBREW ACCENT YERAH BEN YOMO */ 00300 0x05AA, 00301 /* 220 # Mn ARABIC HAMZA BELOW */ 00302 0x0655, 00303 /* 220 # Mn ARABIC SMALL LOW SEEN */ 00304 0x06E3, 00305 /* 220 # Mn ARABIC EMPTY CENTRE LOW STOP */ 00306 0x06EA, 00307 /* 220 # Mn ARABIC SMALL LOW MEEM */ 00308 0x06ED, 00309 /* 220 # Mn SYRIAC PTHAHA BELOW */ 00310 0x0731, 00311 /* 220 # Mn SYRIAC ZQAPHA BELOW */ 00312 0x0734, 00313 /* 220 # Mn [3] SYRIAC RBASA BELOW.. 00314 * ..SYRIAC DOTTED ZLAMA ANGULAR */ 00315 0x0737, 00316 0x0738, 00317 0x0739, 00318 /* 220 # Mn [2] SYRIAC HBASA BELOW.. 00319 * ..SYRIAC HBASA-ESASA DOTTED */ 00320 0x073B, 00321 0x073C, 00322 /* 220 # Mn SYRIAC ESASA BELOW */ 00323 0x073E, 00324 /* 220 # Mn SYRIAC RUKKAKHA */ 00325 0x0742, 00326 /* 220 # Mn SYRIAC TWO VERTICAL DOTS BELOW */ 00327 0x0744, 00328 /* 220 # Mn SYRIAC THREE DOTS BELOW */ 00329 0x0746, 00330 /* 220 # Mn SYRIAC OBLIQUE LINE BELOW */ 00331 0x0748, 00332 /* 220 # Mn DEVANAGARI STRESS SIGN ANUDATTA */ 00333 0x0952, 00334 /* 220 # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA.. 00335 * ..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */ 00336 0x0F18, 00337 0x0F19, 00338 /* 220 # Mn TIBETAN MARK NGAS BZUNG NYI ZLA */ 00339 0x0F35, 00340 /* 220 # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS */ 00341 0x0F37, 00342 /* 220 # Mn TIBETAN SYMBOL PADMA GDAN */ 00343 0x0FC6, 00344 /* 220 # Mn COMBINING TRIPLE UNDERDOT */ 00345 0x20E8, 00346 /* 220 # Mn [8] MUSICAL SYMBOL COMBINING ACCENT.. 00347 * ..MUSICAL SYMBOL COMBINING LOURE */ 00348 0x1D17B, 00349 0x1D17C, 00350 0x1D17D, 00351 0x1D17E, 00352 0x1D17F, 00353 0x1D180, 00354 0x1D181, 00355 0x1D182, 00356 /* 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE.. 00357 * ..MUSICAL SYMBOL COMBINING TRIPLE TONGUE */ 00358 0x1D18A, 00359 0x1D18B, 00360 /* 222 # Mn HEBREW ACCENT YETIV */ 00361 0x059A, 00362 /* 222 # Mn HEBREW ACCENT DEHI */ 00363 0x05AD, 00364 /* 222 # Mn IDEOGRAPHIC ENTERING TONE MARK */ 00365 0x302D, 00366 /* 224 # Mn [2] HANGUL SINGLE DOT TONE MARK.. 00367 * ..HANGUL DOUBLE DOT TONE MARK */ 00368 0x302E, 00369 0x302F, 00370 /* 226 # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT */ 00371 0x1D16D, 00372 /* 228 # Mn HEBREW ACCENT ZINOR */ 00373 0x05AE, 00374 /* 228 # Mn MONGOLIAN LETTER ALI GALI DAGALGA */ 00375 0x18A9, 00376 /* 228 # Mn IDEOGRAPHIC RISING TONE MARK */ 00377 0x302B, 00378 /* 230 # Mn [21] COMBINING GRAVE ACCENT.. 00379 * ..COMBINING REVERSED COMMA ABOVE */ 00380 0x0300, 00381 0x0301, 00382 0x0302, 00383 0x0303, 00384 0x0304, 00385 0x0305, 00386 0x0306, 00387 0x0307, 00388 0x0308, 00389 0x0309, 00390 0x030A, 00391 0x030B, 00392 0x030C, 00393 0x030D, 00394 0x030E, 00395 0x030F, 00396 0x0310, 00397 0x0311, 00398 0x0312, 00399 0x0313, 00400 0x0314, 00401 /* 230 # Mn [8] COMBINING X ABOVE.. 00402 * ..COMBINING GREEK DIALYTIKA TONOS */ 00403 0x033D, 00404 0x033E, 00405 0x033F, 00406 0x0340, 00407 0x0341, 00408 0x0342, 00409 0x0343, 00410 0x0344, 00411 /* 230 # Mn COMBINING BRIDGE ABOVE */ 00412 0x0346, 00413 /* 230 # Mn [3] COMBINING NOT TILDE ABOVE.. 00414 * ..COMBINING ALMOST EQUAL TO ABOVE */ 00415 0x034A, 00416 0x034B, 00417 0x034C, 00418 /* 230 # Mn [13] COMBINING LATIN SMALL LETTER A.. 00419 * ..COMBINING LATIN SMALL LETTER X */ 00420 0x0363, 00421 0x0364, 00422 0x0365, 00423 0x0366, 00424 0x0367, 00425 0x0368, 00426 0x0369, 00427 0x036A, 00428 0x036B, 00429 0x036C, 00430 0x036D, 00431 0x036E, 00432 0x036F, 00433 /* 230 # Mn [4] COMBINING CYRILLIC TITLO.. 00434 * ..COMBINING CYRILLIC PSILI PNEUMATA */ 00435 0x0483, 00436 0x0484, 00437 0x0485, 00438 0x0486, 00439 /* 230 # Mn [4] HEBREW ACCENT SEGOL.. 00440 * ..HEBREW ACCENT ZAQEF GADOL */ 00441 0x0592, 00442 0x0593, 00443 0x0594, 00444 0x0595, 00445 /* 230 # Mn [3] HEBREW ACCENT REVIA.. 00446 * ..HEBREW ACCENT PASHTA */ 00447 0x0597, 00448 0x0598, 00449 0x0599, 00450 /* 230 # Mn [6] HEBREW ACCENT GERESH.. 00451 * ..HEBREW ACCENT PAZER */ 00452 0x059C, 00453 0x059D, 00454 0x059E, 00455 0x059F, 00456 0x05A0, 00457 0x05A1, 00458 /* 230 # Mn [2] HEBREW ACCENT QADMA.. 00459 * ..HEBREW ACCENT TELISHA QETANA */ 00460 0x05A8, 00461 0x05A9, 00462 /* 230 # Mn [2] HEBREW ACCENT OLE.. 00463 * ..HEBREW ACCENT ILUY */ 00464 0x05AB, 00465 0x05AC, 00466 /* 230 # Mn HEBREW MARK MASORA CIRCLE */ 00467 0x05AF, 00468 /* 230 # Mn HEBREW MARK UPPER DOT */ 00469 0x05C4, 00470 /* 230 # Mn [2] ARABIC MADDAH ABOVE.. 00471 * ..ARABIC HAMZA ABOVE */ 00472 0x0653, 00473 0x0654, 00474 /* 230 # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA.. 00475 * ..ARABIC SMALL HIGH SEEN */ 00476 0x06D6, 00477 0x06D7, 00478 0x06D8, 00479 0x06D9, 00480 0x06DA, 00481 0x06DB, 00482 0x06DC, 00483 /* 230 # Mn [4] ARABIC SMALL HIGH ROUNDED ZERO.. 00484 * ..ARABIC SMALL HIGH MEEM ISOLATED FORM */ 00485 0x06DF, 00486 0x06E0, 00487 0x06E1, 00488 0x06E2, 00489 /* 230 # Mn ARABIC SMALL HIGH MADDA */ 00490 0x06E4, 00491 /* 230 # Mn [2] ARABIC SMALL HIGH YEH.. 00492 * ..ARABIC SMALL HIGH NOON */ 00493 0x06E7, 00494 0x06E8, 00495 /* 230 # Mn [2] ARABIC EMPTY CENTRE HIGH STOP.. 00496 * ..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */ 00497 0x06EB, 00498 0x06EC, 00499 /* 230 # Mn SYRIAC PTHAHA ABOVE */ 00500 0x0730, 00501 /* 230 # Mn [2] SYRIAC PTHAHA DOTTED.. 00502 * ..SYRIAC ZQAPHA ABOVE */ 00503 0x0732, 00504 0x0733, 00505 /* 230 # Mn [2] SYRIAC ZQAPHA DOTTED.. 00506 * ..SYRIAC RBASA ABOVE */ 00507 0x0735, 00508 0x0736, 00509 /* 230 # Mn SYRIAC HBASA ABOVE */ 00510 0x073A, 00511 /* 230 # Mn SYRIAC ESASA ABOVE */ 00512 0x073D, 00513 /* 230 # Mn [3] SYRIAC RWAHA.. 00514 * ..SYRIAC QUSHSHAYA */ 00515 0x073F, 00516 0x0740, 00517 0x0741, 00518 /* 230 # Mn SYRIAC TWO VERTICAL DOTS ABOVE */ 00519 0x0743, 00520 /* 230 # Mn SYRIAC THREE DOTS ABOVE */ 00521 0x0745, 00522 /* 230 # Mn SYRIAC OBLIQUE LINE ABOVE */ 00523 0x0747, 00524 /* 230 # Mn [2] SYRIAC MUSIC.. 00525 * ..SYRIAC BARREKH */ 00526 0x0749, 00527 0x074A, 00528 /* 230 # Mn DEVANAGARI STRESS SIGN UDATTA */ 00529 0x0951, 00530 /* 230 # Mn [2] DEVANAGARI GRAVE ACCENT.. 00531 * ..DEVANAGARI ACUTE ACCENT */ 00532 0x0953, 00533 0x0954, 00534 /* 230 # Mn [2] TIBETAN SIGN NYI ZLA NAA DA.. 00535 * ..TIBETAN SIGN SNA LDAN */ 00536 0x0F82, 00537 0x0F83, 00538 /* 230 # Mn [2] TIBETAN SIGN LCI RTAGS.. 00539 * ..TIBETAN SIGN YANG RTAGS */ 00540 0x0F86, 00541 0x0F87, 00542 /* 230 # Mn [2] COMBINING LEFT HARPOON ABOVE.. 00543 * ..COMBINING RIGHT HARPOON ABOVE */ 00544 0x20D0, 00545 0x20D1, 00546 /* 230 # Mn [4] COMBINING ANTICLOCKWISE ARROW ABOVE.. 00547 * ..COMBINING RIGHT ARROW ABOVE */ 00548 0x20D4, 00549 0x20D5, 00550 0x20D6, 00551 0x20D7, 00552 /* 230 # Mn [2] COMBINING THREE DOTS ABOVE.. 00553 * ..COMBINING FOUR DOTS ABOVE */ 00554 0x20DB, 00555 0x20DC, 00556 /* 230 # Mn COMBINING LEFT RIGHT ARROW ABOVE */ 00557 0x20E1, 00558 /* 230 # Mn COMBINING ANNUITY SYMBOL */ 00559 0x20E7, 00560 /* 230 # Mn COMBINING WIDE BRIDGE ABOVE */ 00561 0x20E9, 00562 /* 230 # Mn [4] COMBINING LIGATURE LEFT HALF.. 00563 * ..COMBINING DOUBLE TILDE RIGHT HALF */ 00564 0xFE20, 00565 0xFE21, 00566 0xFE22, 00567 0xFE23, 00568 /* 230 # Mn [5] MUSICAL SYMBOL COMBINING DOIT.. 00569 * ..MUSICAL SYMBOL COMBINING BEND */ 00570 0x1D185, 00571 0x1D186, 00572 0x1D187, 00573 0x1D188, 00574 0x1D189, 00575 /* 230 # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW.. 00576 * ..MUSICAL SYMBOL COMBINING SNAP PIZZICATO */ 00577 0x1D1AA, 00578 0x1D1AB, 00579 0x1D1AC, 00580 0x1D1AD, 00581 /* 232 # Mn COMBINING COMMA ABOVE RIGHT */ 00582 0x0315, 00583 /* 232 # Mn COMBINING LEFT ANGLE ABOVE */ 00584 0x031A, 00585 /* 232 # Mn IDEOGRAPHIC DEPARTING TONE MARK */ 00586 0x302C, 00587 /* 233 # Mn COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ 00588 0x0362, 00589 /* 234 # Mn [2] COMBINING DOUBLE TILDE.. 00590 * ..COMBINING DOUBLE INVERTED BREVE */ 00591 0x0360, 00592 0x0361, 00593 /* 240 # Mn COMBINING GREEK YPOGEGRAMMENI */ 00594 0x0345, 00595 0 00596 }; 00597 00598 /* 00599 * 09C7 BENGALI VOWEL SIGN E 09BE BENGALI VOWEL SIGN AA or 00600 * 09D7 BENGALI AU LENGTH MARK 00601 */ 00602 00603 static const uint32_t pr29_1_1[] = { 00604 0x09C7, 0 00605 }; 00606 00607 static const uint32_t pr29_1_2[] = { 00608 0x09BE, 0x09D7, 0 00609 }; 00610 00611 /* 00612 * 0B47 ORIYA VOWEL SIGN E 0B3E ORIYA VOWEL SIGN AA or 00613 * 0B56 ORIYA AI LENGTH MARK or 00614 * 0B57 ORIYA AU LENGTH MARK 00615 */ 00616 00617 static const uint32_t pr29_2_1[] = { 00618 0x0B47, 0 00619 }; 00620 00621 static const uint32_t pr29_2_2[] = { 00622 0x0B3E, 0x0B56, 0x0B57, 0 00623 }; 00624 00625 /* 00626 * 0BC6 TAMIL VOWEL SIGN E 0BBE TAMIL VOWEL SIGN AA or 00627 * 0BD7 TAMIL AU LENGTH MARK 00628 */ 00629 00630 static const uint32_t pr29_3_1[] = { 00631 0x0BC6, 0 00632 }; 00633 00634 static const uint32_t pr29_3_2[] = { 00635 0x0BBE, 0x0BD7, 0 00636 }; 00637 00638 /* 00639 * 0BC7 TAMIL VOWEL SIGN EE 0BBE TAMIL VOWEL SIGN AA 00640 */ 00641 00642 static const uint32_t pr29_4_1[] = { 00643 0x0BC7, 0 00644 }; 00645 00646 static const uint32_t pr29_4_2[] = { 00647 0x0BBE, 0 00648 }; 00649 00650 /* 00651 * 0B92 TAMIL LETTER O 0BD7 TAMIL AU LENGTH MARK 00652 */ 00653 00654 static const uint32_t pr29_5_1[] = { 00655 0x0B92, 0 00656 }; 00657 00658 static const uint32_t pr29_5_2[] = { 00659 0x0BD7, 0 00660 }; 00661 00662 /* 00663 * 0CC6 KANNADA VOWEL SIGN E 0CC2 KANNADA VOWEL SIGN UU or 00664 * 0CD5 KANNADA LENGTH MARK or 00665 * 0CD6 KANNADA AI LENGTH MARK 00666 */ 00667 00668 static const uint32_t pr29_6_1[] = { 00669 0x0CC6, 0 00670 }; 00671 00672 static const uint32_t pr29_6_2[] = { 00673 0x0CC2, 0xCD5, 0xCD6, 0 00674 }; 00675 00676 /* 00677 * 0CBF KANNADA VOWEL SIGN I or 00678 * 0CCA KANNADA VOWEL SIGN O 0CD5 KANNADA LENGTH MARK 00679 */ 00680 00681 static const uint32_t pr29_7_1[] = { 00682 0x0CBF, 0xCCA, 0 00683 }; 00684 00685 static const uint32_t pr29_7_2[] = { 00686 0x0CD5, 0 00687 }; 00688 00689 /* 00690 * 0D47 MALAYALAM VOWEL SIGN EE 0D3E MALAYALAM VOWEL SIGN AA 00691 */ 00692 00693 static const uint32_t pr29_8_1[] = { 00694 0x0D47, 0 00695 }; 00696 00697 static const uint32_t pr29_8_2[] = { 00698 0x0D3E, 0 00699 }; 00700 00701 /* 00702 * 0D46 MALAYALAM VOWEL SIGN E 0D3E MALAYALAM VOWEL SIGN AA or 00703 * 0D57 MALAYALAM AU LENGTH MARK 00704 */ 00705 00706 static const uint32_t pr29_9_1[] = { 00707 0x0D46, 0 00708 }; 00709 00710 static const uint32_t pr29_9_2[] = { 00711 0x0D3E, 0x0D57, 0 00712 }; 00713 00714 /* 00715 * 1025 MYANMAR LETTER U 102E MYANMAR VOWEL SIGN II 00716 */ 00717 00718 static const uint32_t pr29_10_1[] = { 00719 0x1025, 0 00720 }; 00721 00722 static const uint32_t pr29_10_2[] = { 00723 0x102E, 0 00724 }; 00725 00726 /* 00727 * 0DD9 SINHALA VOWEL SIGN KOMBUVA 0DCF SINHALA VOWEL SIGN AELA-PILLA or 00728 * 0DDF SINHALA VOWEL SIGN GAYANUKITTA 00729 */ 00730 00731 static const uint32_t pr29_11_1[] = { 00732 0x0DD9, 0 00733 }; 00734 00735 static const uint32_t pr29_11_2[] = { 00736 0x0DCF, 0x0DDF, 0 00737 }; 00738 00739 /* 00740 * 1100..1112 HANGUL CHOSEONG KIYEOK..HIEUH [19 instances] 00741 * 1161..1175 HANGUL JUNGSEONG A..I [21 instances] 00742 */ 00743 00744 static const uint32_t pr29_12_1[] = { 00745 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1105, 0x1106, 0x1107, 00746 0x1108, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F, 00747 0x1110, 0x1111, 0x1112, 0 00748 }; 00749 00750 static const uint32_t pr29_12_2[] = { 00751 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 00752 0x1169, 0x116A, 0x116B, 0x116C, 0x116D, 0x116E, 0x116F, 0x1170, 00753 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0 00754 }; 00755 00756 00757 /* 00758 * [:HangulSyllableType=LV:] 00759 * 11A8..11C2 HANGUL JONGSEONG KIYEOK..HIEUH [27 instances] 00760 */ 00761 00762 static const uint32_t pr29_13_1[] = { 00763 0xAC00, /* LV # Lo HANGUL SYLLABLE GA */ 00764 0xAC1C, /* LV # Lo HANGUL SYLLABLE GAE */ 00765 0xAC38, /* LV # Lo HANGUL SYLLABLE GYA */ 00766 0xAC54, /* LV # Lo HANGUL SYLLABLE GYAE */ 00767 0xAC70, /* LV # Lo HANGUL SYLLABLE GEO */ 00768 0xAC8C, /* LV # Lo HANGUL SYLLABLE GE */ 00769 0xACA8, /* LV # Lo HANGUL SYLLABLE GYEO */ 00770 0xACC4, /* LV # Lo HANGUL SYLLABLE GYE */ 00771 0xACE0, /* LV # Lo HANGUL SYLLABLE GO */ 00772 0xACFC, /* LV # Lo HANGUL SYLLABLE GWA */ 00773 0xAD18, /* LV # Lo HANGUL SYLLABLE GWAE */ 00774 0xAD34, /* LV # Lo HANGUL SYLLABLE GOE */ 00775 0xAD50, /* LV # Lo HANGUL SYLLABLE GYO */ 00776 0xAD6C, /* LV # Lo HANGUL SYLLABLE GU */ 00777 0xAD88, /* LV # Lo HANGUL SYLLABLE GWEO */ 00778 0xADA4, /* LV # Lo HANGUL SYLLABLE GWE */ 00779 0xADC0, /* LV # Lo HANGUL SYLLABLE GWI */ 00780 0xADDC, /* LV # Lo HANGUL SYLLABLE GYU */ 00781 0xADF8, /* LV # Lo HANGUL SYLLABLE GEU */ 00782 0xAE14, /* LV # Lo HANGUL SYLLABLE GYI */ 00783 0xAE30, /* LV # Lo HANGUL SYLLABLE GI */ 00784 0xAE4C, /* LV # Lo HANGUL SYLLABLE GGA */ 00785 0xAE68, /* LV # Lo HANGUL SYLLABLE GGAE */ 00786 0xAE84, /* LV # Lo HANGUL SYLLABLE GGYA */ 00787 0xAEA0, /* LV # Lo HANGUL SYLLABLE GGYAE */ 00788 0xAEBC, /* LV # Lo HANGUL SYLLABLE GGEO */ 00789 0xAED8, /* LV # Lo HANGUL SYLLABLE GGE */ 00790 0xAEF4, /* LV # Lo HANGUL SYLLABLE GGYEO */ 00791 0xAF10, /* LV # Lo HANGUL SYLLABLE GGYE */ 00792 0xAF2C, /* LV # Lo HANGUL SYLLABLE GGO */ 00793 0xAF48, /* LV # Lo HANGUL SYLLABLE GGWA */ 00794 0xAF64, /* LV # Lo HANGUL SYLLABLE GGWAE */ 00795 0xAF80, /* LV # Lo HANGUL SYLLABLE GGOE */ 00796 0xAF9C, /* LV # Lo HANGUL SYLLABLE GGYO */ 00797 0xAFB8, /* LV # Lo HANGUL SYLLABLE GGU */ 00798 0xAFD4, /* LV # Lo HANGUL SYLLABLE GGWEO */ 00799 0xAFF0, /* LV # Lo HANGUL SYLLABLE GGWE */ 00800 0xB00C, /* LV # Lo HANGUL SYLLABLE GGWI */ 00801 0xB028, /* LV # Lo HANGUL SYLLABLE GGYU */ 00802 0xB044, /* LV # Lo HANGUL SYLLABLE GGEU */ 00803 0xB060, /* LV # Lo HANGUL SYLLABLE GGYI */ 00804 0xB07C, /* LV # Lo HANGUL SYLLABLE GGI */ 00805 0xB098, /* LV # Lo HANGUL SYLLABLE NA */ 00806 0xB0B4, /* LV # Lo HANGUL SYLLABLE NAE */ 00807 0xB0D0, /* LV # Lo HANGUL SYLLABLE NYA */ 00808 0xB0EC, /* LV # Lo HANGUL SYLLABLE NYAE */ 00809 0xB108, /* LV # Lo HANGUL SYLLABLE NEO */ 00810 0xB124, /* LV # Lo HANGUL SYLLABLE NE */ 00811 0xB140, /* LV # Lo HANGUL SYLLABLE NYEO */ 00812 0xB15C, /* LV # Lo HANGUL SYLLABLE NYE */ 00813 0xB178, /* LV # Lo HANGUL SYLLABLE NO */ 00814 0xB194, /* LV # Lo HANGUL SYLLABLE NWA */ 00815 0xB1B0, /* LV # Lo HANGUL SYLLABLE NWAE */ 00816 0xB1CC, /* LV # Lo HANGUL SYLLABLE NOE */ 00817 0xB1E8, /* LV # Lo HANGUL SYLLABLE NYO */ 00818 0xB204, /* LV # Lo HANGUL SYLLABLE NU */ 00819 0xB220, /* LV # Lo HANGUL SYLLABLE NWEO */ 00820 0xB23C, /* LV # Lo HANGUL SYLLABLE NWE */ 00821 0xB258, /* LV # Lo HANGUL SYLLABLE NWI */ 00822 0xB274, /* LV # Lo HANGUL SYLLABLE NYU */ 00823 0xB290, /* LV # Lo HANGUL SYLLABLE NEU */ 00824 0xB2AC, /* LV # Lo HANGUL SYLLABLE NYI */ 00825 0xB2C8, /* LV # Lo HANGUL SYLLABLE NI */ 00826 0xB2E4, /* LV # Lo HANGUL SYLLABLE DA */ 00827 0xB300, /* LV # Lo HANGUL SYLLABLE DAE */ 00828 0xB31C, /* LV # Lo HANGUL SYLLABLE DYA */ 00829 0xB338, /* LV # Lo HANGUL SYLLABLE DYAE */ 00830 0xB354, /* LV # Lo HANGUL SYLLABLE DEO */ 00831 0xB370, /* LV # Lo HANGUL SYLLABLE DE */ 00832 0xB38C, /* LV # Lo HANGUL SYLLABLE DYEO */ 00833 0xB3A8, /* LV # Lo HANGUL SYLLABLE DYE */ 00834 0xB3C4, /* LV # Lo HANGUL SYLLABLE DO */ 00835 0xB3E0, /* LV # Lo HANGUL SYLLABLE DWA */ 00836 0xB3FC, /* LV # Lo HANGUL SYLLABLE DWAE */ 00837 0xB418, /* LV # Lo HANGUL SYLLABLE DOE */ 00838 0xB434, /* LV # Lo HANGUL SYLLABLE DYO */ 00839 0xB450, /* LV # Lo HANGUL SYLLABLE DU */ 00840 0xB46C, /* LV # Lo HANGUL SYLLABLE DWEO */ 00841 0xB488, /* LV # Lo HANGUL SYLLABLE DWE */ 00842 0xB4A4, /* LV # Lo HANGUL SYLLABLE DWI */ 00843 0xB4C0, /* LV # Lo HANGUL SYLLABLE DYU */ 00844 0xB4DC, /* LV # Lo HANGUL SYLLABLE DEU */ 00845 0xB4F8, /* LV # Lo HANGUL SYLLABLE DYI */ 00846 0xB514, /* LV # Lo HANGUL SYLLABLE DI */ 00847 0xB530, /* LV # Lo HANGUL SYLLABLE DDA */ 00848 0xB54C, /* LV # Lo HANGUL SYLLABLE DDAE */ 00849 0xB568, /* LV # Lo HANGUL SYLLABLE DDYA */ 00850 0xB584, /* LV # Lo HANGUL SYLLABLE DDYAE */ 00851 0xB5A0, /* LV # Lo HANGUL SYLLABLE DDEO */ 00852 0xB5BC, /* LV # Lo HANGUL SYLLABLE DDE */ 00853 0xB5D8, /* LV # Lo HANGUL SYLLABLE DDYEO */ 00854 0xB5F4, /* LV # Lo HANGUL SYLLABLE DDYE */ 00855 0xB610, /* LV # Lo HANGUL SYLLABLE DDO */ 00856 0xB62C, /* LV # Lo HANGUL SYLLABLE DDWA */ 00857 0xB648, /* LV # Lo HANGUL SYLLABLE DDWAE */ 00858 0xB664, /* LV # Lo HANGUL SYLLABLE DDOE */ 00859 0xB680, /* LV # Lo HANGUL SYLLABLE DDYO */ 00860 0xB69C, /* LV # Lo HANGUL SYLLABLE DDU */ 00861 0xB6B8, /* LV # Lo HANGUL SYLLABLE DDWEO */ 00862 0xB6D4, /* LV # Lo HANGUL SYLLABLE DDWE */ 00863 0xB6F0, /* LV # Lo HANGUL SYLLABLE DDWI */ 00864 0xB70C, /* LV # Lo HANGUL SYLLABLE DDYU */ 00865 0xB728, /* LV # Lo HANGUL SYLLABLE DDEU */ 00866 0xB744, /* LV # Lo HANGUL SYLLABLE DDYI */ 00867 0xB760, /* LV # Lo HANGUL SYLLABLE DDI */ 00868 0xB77C, /* LV # Lo HANGUL SYLLABLE RA */ 00869 0xB798, /* LV # Lo HANGUL SYLLABLE RAE */ 00870 0xB7B4, /* LV # Lo HANGUL SYLLABLE RYA */ 00871 0xB7D0, /* LV # Lo HANGUL SYLLABLE RYAE */ 00872 0xB7EC, /* LV # Lo HANGUL SYLLABLE REO */ 00873 0xB808, /* LV # Lo HANGUL SYLLABLE RE */ 00874 0xB824, /* LV # Lo HANGUL SYLLABLE RYEO */ 00875 0xB840, /* LV # Lo HANGUL SYLLABLE RYE */ 00876 0xB85C, /* LV # Lo HANGUL SYLLABLE RO */ 00877 0xB878, /* LV # Lo HANGUL SYLLABLE RWA */ 00878 0xB894, /* LV # Lo HANGUL SYLLABLE RWAE */ 00879 0xB8B0, /* LV # Lo HANGUL SYLLABLE ROE */ 00880 0xB8CC, /* LV # Lo HANGUL SYLLABLE RYO */ 00881 0xB8E8, /* LV # Lo HANGUL SYLLABLE RU */ 00882 0xB904, /* LV # Lo HANGUL SYLLABLE RWEO */ 00883 0xB920, /* LV # Lo HANGUL SYLLABLE RWE */ 00884 0xB93C, /* LV # Lo HANGUL SYLLABLE RWI */ 00885 0xB958, /* LV # Lo HANGUL SYLLABLE RYU */ 00886 0xB974, /* LV # Lo HANGUL SYLLABLE REU */ 00887 0xB990, /* LV # Lo HANGUL SYLLABLE RYI */ 00888 0xB9AC, /* LV # Lo HANGUL SYLLABLE RI */ 00889 0xB9C8, /* LV # Lo HANGUL SYLLABLE MA */ 00890 0xB9E4, /* LV # Lo HANGUL SYLLABLE MAE */ 00891 0xBA00, /* LV # Lo HANGUL SYLLABLE MYA */ 00892 0xBA1C, /* LV # Lo HANGUL SYLLABLE MYAE */ 00893 0xBA38, /* LV # Lo HANGUL SYLLABLE MEO */ 00894 0xBA54, /* LV # Lo HANGUL SYLLABLE ME */ 00895 0xBA70, /* LV # Lo HANGUL SYLLABLE MYEO */ 00896 0xBA8C, /* LV # Lo HANGUL SYLLABLE MYE */ 00897 0xBAA8, /* LV # Lo HANGUL SYLLABLE MO */ 00898 0xBAC4, /* LV # Lo HANGUL SYLLABLE MWA */ 00899 0xBAE0, /* LV # Lo HANGUL SYLLABLE MWAE */ 00900 0xBAFC, /* LV # Lo HANGUL SYLLABLE MOE */ 00901 0xBB18, /* LV # Lo HANGUL SYLLABLE MYO */ 00902 0xBB34, /* LV # Lo HANGUL SYLLABLE MU */ 00903 0xBB50, /* LV # Lo HANGUL SYLLABLE MWEO */ 00904 0xBB6C, /* LV # Lo HANGUL SYLLABLE MWE */ 00905 0xBB88, /* LV # Lo HANGUL SYLLABLE MWI */ 00906 0xBBA4, /* LV # Lo HANGUL SYLLABLE MYU */ 00907 0xBBC0, /* LV # Lo HANGUL SYLLABLE MEU */ 00908 0xBBDC, /* LV # Lo HANGUL SYLLABLE MYI */ 00909 0xBBF8, /* LV # Lo HANGUL SYLLABLE MI */ 00910 0xBC14, /* LV # Lo HANGUL SYLLABLE BA */ 00911 0xBC30, /* LV # Lo HANGUL SYLLABLE BAE */ 00912 0xBC4C, /* LV # Lo HANGUL SYLLABLE BYA */ 00913 0xBC68, /* LV # Lo HANGUL SYLLABLE BYAE */ 00914 0xBC84, /* LV # Lo HANGUL SYLLABLE BEO */ 00915 0xBCA0, /* LV # Lo HANGUL SYLLABLE BE */ 00916 0xBCBC, /* LV # Lo HANGUL SYLLABLE BYEO */ 00917 0xBCD8, /* LV # Lo HANGUL SYLLABLE BYE */ 00918 0xBCF4, /* LV # Lo HANGUL SYLLABLE BO */ 00919 0xBD10, /* LV # Lo HANGUL SYLLABLE BWA */ 00920 0xBD2C, /* LV # Lo HANGUL SYLLABLE BWAE */ 00921 0xBD48, /* LV # Lo HANGUL SYLLABLE BOE */ 00922 0xBD64, /* LV # Lo HANGUL SYLLABLE BYO */ 00923 0xBD80, /* LV # Lo HANGUL SYLLABLE BU */ 00924 0xBD9C, /* LV # Lo HANGUL SYLLABLE BWEO */ 00925 0xBDB8, /* LV # Lo HANGUL SYLLABLE BWE */ 00926 0xBDD4, /* LV # Lo HANGUL SYLLABLE BWI */ 00927 0xBDF0, /* LV # Lo HANGUL SYLLABLE BYU */ 00928 0xBE0C, /* LV # Lo HANGUL SYLLABLE BEU */ 00929 0xBE28, /* LV # Lo HANGUL SYLLABLE BYI */ 00930 0xBE44, /* LV # Lo HANGUL SYLLABLE BI */ 00931 0xBE60, /* LV # Lo HANGUL SYLLABLE BBA */ 00932 0xBE7C, /* LV # Lo HANGUL SYLLABLE BBAE */ 00933 0xBE98, /* LV # Lo HANGUL SYLLABLE BBYA */ 00934 0xBEB4, /* LV # Lo HANGUL SYLLABLE BBYAE */ 00935 0xBED0, /* LV # Lo HANGUL SYLLABLE BBEO */ 00936 0xBEEC, /* LV # Lo HANGUL SYLLABLE BBE */ 00937 0xBF08, /* LV # Lo HANGUL SYLLABLE BBYEO */ 00938 0xBF24, /* LV # Lo HANGUL SYLLABLE BBYE */ 00939 0xBF40, /* LV # Lo HANGUL SYLLABLE BBO */ 00940 0xBF5C, /* LV # Lo HANGUL SYLLABLE BBWA */ 00941 0xBF78, /* LV # Lo HANGUL SYLLABLE BBWAE */ 00942 0xBF94, /* LV # Lo HANGUL SYLLABLE BBOE */ 00943 0xBFB0, /* LV # Lo HANGUL SYLLABLE BBYO */ 00944 0xBFCC, /* LV # Lo HANGUL SYLLABLE BBU */ 00945 0xBFE8, /* LV # Lo HANGUL SYLLABLE BBWEO */ 00946 0xC004, /* LV # Lo HANGUL SYLLABLE BBWE */ 00947 0xC020, /* LV # Lo HANGUL SYLLABLE BBWI */ 00948 0xC03C, /* LV # Lo HANGUL SYLLABLE BBYU */ 00949 0xC058, /* LV # Lo HANGUL SYLLABLE BBEU */ 00950 0xC074, /* LV # Lo HANGUL SYLLABLE BBYI */ 00951 0xC090, /* LV # Lo HANGUL SYLLABLE BBI */ 00952 0xC0AC, /* LV # Lo HANGUL SYLLABLE SA */ 00953 0xC0C8, /* LV # Lo HANGUL SYLLABLE SAE */ 00954 0xC0E4, /* LV # Lo HANGUL SYLLABLE SYA */ 00955 0xC100, /* LV # Lo HANGUL SYLLABLE SYAE */ 00956 0xC11C, /* LV # Lo HANGUL SYLLABLE SEO */ 00957 0xC138, /* LV # Lo HANGUL SYLLABLE SE */ 00958 0xC154, /* LV # Lo HANGUL SYLLABLE SYEO */ 00959 0xC170, /* LV # Lo HANGUL SYLLABLE SYE */ 00960 0xC18C, /* LV # Lo HANGUL SYLLABLE SO */ 00961 0xC1A8, /* LV # Lo HANGUL SYLLABLE SWA */ 00962 0xC1C4, /* LV # Lo HANGUL SYLLABLE SWAE */ 00963 0xC1E0, /* LV # Lo HANGUL SYLLABLE SOE */ 00964 0xC1FC, /* LV # Lo HANGUL SYLLABLE SYO */ 00965 0xC218, /* LV # Lo HANGUL SYLLABLE SU */ 00966 0xC234, /* LV # Lo HANGUL SYLLABLE SWEO */ 00967 0xC250, /* LV # Lo HANGUL SYLLABLE SWE */ 00968 0xC26C, /* LV # Lo HANGUL SYLLABLE SWI */ 00969 0xC288, /* LV # Lo HANGUL SYLLABLE SYU */ 00970 0xC2A4, /* LV # Lo HANGUL SYLLABLE SEU */ 00971 0xC2C0, /* LV # Lo HANGUL SYLLABLE SYI */ 00972 0xC2DC, /* LV # Lo HANGUL SYLLABLE SI */ 00973 0xC2F8, /* LV # Lo HANGUL SYLLABLE SSA */ 00974 0xC314, /* LV # Lo HANGUL SYLLABLE SSAE */ 00975 0xC330, /* LV # Lo HANGUL SYLLABLE SSYA */ 00976 0xC34C, /* LV # Lo HANGUL SYLLABLE SSYAE */ 00977 0xC368, /* LV # Lo HANGUL SYLLABLE SSEO */ 00978 0xC384, /* LV # Lo HANGUL SYLLABLE SSE */ 00979 0xC3A0, /* LV # Lo HANGUL SYLLABLE SSYEO */ 00980 0xC3BC, /* LV # Lo HANGUL SYLLABLE SSYE */ 00981 0xC3D8, /* LV # Lo HANGUL SYLLABLE SSO */ 00982 0xC3F4, /* LV # Lo HANGUL SYLLABLE SSWA */ 00983 0xC410, /* LV # Lo HANGUL SYLLABLE SSWAE */ 00984 0xC42C, /* LV # Lo HANGUL SYLLABLE SSOE */ 00985 0xC448, /* LV # Lo HANGUL SYLLABLE SSYO */ 00986 0xC464, /* LV # Lo HANGUL SYLLABLE SSU */ 00987 0xC480, /* LV # Lo HANGUL SYLLABLE SSWEO */ 00988 0xC49C, /* LV # Lo HANGUL SYLLABLE SSWE */ 00989 0xC4B8, /* LV # Lo HANGUL SYLLABLE SSWI */ 00990 0xC4D4, /* LV # Lo HANGUL SYLLABLE SSYU */ 00991 0xC4F0, /* LV # Lo HANGUL SYLLABLE SSEU */ 00992 0xC50C, /* LV # Lo HANGUL SYLLABLE SSYI */ 00993 0xC528, /* LV # Lo HANGUL SYLLABLE SSI */ 00994 0xC544, /* LV # Lo HANGUL SYLLABLE A */ 00995 0xC560, /* LV # Lo HANGUL SYLLABLE AE */ 00996 0xC57C, /* LV # Lo HANGUL SYLLABLE YA */ 00997 0xC598, /* LV # Lo HANGUL SYLLABLE YAE */ 00998 0xC5B4, /* LV # Lo HANGUL SYLLABLE EO */ 00999 0xC5D0, /* LV # Lo HANGUL SYLLABLE E */ 01000 0xC5EC, /* LV # Lo HANGUL SYLLABLE YEO */ 01001 0xC608, /* LV # Lo HANGUL SYLLABLE YE */ 01002 0xC624, /* LV # Lo HANGUL SYLLABLE O */ 01003 0xC640, /* LV # Lo HANGUL SYLLABLE WA */ 01004 0xC65C, /* LV # Lo HANGUL SYLLABLE WAE */ 01005 0xC678, /* LV # Lo HANGUL SYLLABLE OE */ 01006 0xC694, /* LV # Lo HANGUL SYLLABLE YO */ 01007 0xC6B0, /* LV # Lo HANGUL SYLLABLE U */ 01008 0xC6CC, /* LV # Lo HANGUL SYLLABLE WEO */ 01009 0xC6E8, /* LV # Lo HANGUL SYLLABLE WE */ 01010 0xC704, /* LV # Lo HANGUL SYLLABLE WI */ 01011 0xC720, /* LV # Lo HANGUL SYLLABLE YU */ 01012 0xC73C, /* LV # Lo HANGUL SYLLABLE EU */ 01013 0xC758, /* LV # Lo HANGUL SYLLABLE YI */ 01014 0xC774, /* LV # Lo HANGUL SYLLABLE I */ 01015 0xC790, /* LV # Lo HANGUL SYLLABLE JA */ 01016 0xC7AC, /* LV # Lo HANGUL SYLLABLE JAE */ 01017 0xC7C8, /* LV # Lo HANGUL SYLLABLE JYA */ 01018 0xC7E4, /* LV # Lo HANGUL SYLLABLE JYAE */ 01019 0xC800, /* LV # Lo HANGUL SYLLABLE JEO */ 01020 0xC81C, /* LV # Lo HANGUL SYLLABLE JE */ 01021 0xC838, /* LV # Lo HANGUL SYLLABLE JYEO */ 01022 0xC854, /* LV # Lo HANGUL SYLLABLE JYE */ 01023 0xC870, /* LV # Lo HANGUL SYLLABLE JO */ 01024 0xC88C, /* LV # Lo HANGUL SYLLABLE JWA */ 01025 0xC8A8, /* LV # Lo HANGUL SYLLABLE JWAE */ 01026 0xC8C4, /* LV # Lo HANGUL SYLLABLE JOE */ 01027 0xC8E0, /* LV # Lo HANGUL SYLLABLE JYO */ 01028 0xC8FC, /* LV # Lo HANGUL SYLLABLE JU */ 01029 0xC918, /* LV # Lo HANGUL SYLLABLE JWEO */ 01030 0xC934, /* LV # Lo HANGUL SYLLABLE JWE */ 01031 0xC950, /* LV # Lo HANGUL SYLLABLE JWI */ 01032 0xC96C, /* LV # Lo HANGUL SYLLABLE JYU */ 01033 0xC988, /* LV # Lo HANGUL SYLLABLE JEU */ 01034 0xC9A4, /* LV # Lo HANGUL SYLLABLE JYI */ 01035 0xC9C0, /* LV # Lo HANGUL SYLLABLE JI */ 01036 0xC9DC, /* LV # Lo HANGUL SYLLABLE JJA */ 01037 0xC9F8, /* LV # Lo HANGUL SYLLABLE JJAE */ 01038 0xCA14, /* LV # Lo HANGUL SYLLABLE JJYA */ 01039 0xCA30, /* LV # Lo HANGUL SYLLABLE JJYAE */ 01040 0xCA4C, /* LV # Lo HANGUL SYLLABLE JJEO */ 01041 0xCA68, /* LV # Lo HANGUL SYLLABLE JJE */ 01042 0xCA84, /* LV # Lo HANGUL SYLLABLE JJYEO */ 01043 0xCAA0, /* LV # Lo HANGUL SYLLABLE JJYE */ 01044 0xCABC, /* LV # Lo HANGUL SYLLABLE JJO */ 01045 0xCAD8, /* LV # Lo HANGUL SYLLABLE JJWA */ 01046 0xCAF4, /* LV # Lo HANGUL SYLLABLE JJWAE */ 01047 0xCB10, /* LV # Lo HANGUL SYLLABLE JJOE */ 01048 0xCB2C, /* LV # Lo HANGUL SYLLABLE JJYO */ 01049 0xCB48, /* LV # Lo HANGUL SYLLABLE JJU */ 01050 0xCB64, /* LV # Lo HANGUL SYLLABLE JJWEO */ 01051 0xCB80, /* LV # Lo HANGUL SYLLABLE JJWE */ 01052 0xCB9C, /* LV # Lo HANGUL SYLLABLE JJWI */ 01053 0xCBB8, /* LV # Lo HANGUL SYLLABLE JJYU */ 01054 0xCBD4, /* LV # Lo HANGUL SYLLABLE JJEU */ 01055 0xCBF0, /* LV # Lo HANGUL SYLLABLE JJYI */ 01056 0xCC0C, /* LV # Lo HANGUL SYLLABLE JJI */ 01057 0xCC28, /* LV # Lo HANGUL SYLLABLE CA */ 01058 0xCC44, /* LV # Lo HANGUL SYLLABLE CAE */ 01059 0xCC60, /* LV # Lo HANGUL SYLLABLE CYA */ 01060 0xCC7C, /* LV # Lo HANGUL SYLLABLE CYAE */ 01061 0xCC98, /* LV # Lo HANGUL SYLLABLE CEO */ 01062 0xCCB4, /* LV # Lo HANGUL SYLLABLE CE */ 01063 0xCCD0, /* LV # Lo HANGUL SYLLABLE CYEO */ 01064 0xCCEC, /* LV # Lo HANGUL SYLLABLE CYE */ 01065 0xCD08, /* LV # Lo HANGUL SYLLABLE CO */ 01066 0xCD24, /* LV # Lo HANGUL SYLLABLE CWA */ 01067 0xCD40, /* LV # Lo HANGUL SYLLABLE CWAE */ 01068 0xCD5C, /* LV # Lo HANGUL SYLLABLE COE */ 01069 0xCD78, /* LV # Lo HANGUL SYLLABLE CYO */ 01070 0xCD94, /* LV # Lo HANGUL SYLLABLE CU */ 01071 0xCDB0, /* LV # Lo HANGUL SYLLABLE CWEO */ 01072 0xCDCC, /* LV # Lo HANGUL SYLLABLE CWE */ 01073 0xCDE8, /* LV # Lo HANGUL SYLLABLE CWI */ 01074 0xCE04, /* LV # Lo HANGUL SYLLABLE CYU */ 01075 0xCE20, /* LV # Lo HANGUL SYLLABLE CEU */ 01076 0xCE3C, /* LV # Lo HANGUL SYLLABLE CYI */ 01077 0xCE58, /* LV # Lo HANGUL SYLLABLE CI */ 01078 0xCE74, /* LV # Lo HANGUL SYLLABLE KA */ 01079 0xCE90, /* LV # Lo HANGUL SYLLABLE KAE */ 01080 0xCEAC, /* LV # Lo HANGUL SYLLABLE KYA */ 01081 0xCEC8, /* LV # Lo HANGUL SYLLABLE KYAE */ 01082 0xCEE4, /* LV # Lo HANGUL SYLLABLE KEO */ 01083 0xCF00, /* LV # Lo HANGUL SYLLABLE KE */ 01084 0xCF1C, /* LV # Lo HANGUL SYLLABLE KYEO */ 01085 0xCF38, /* LV # Lo HANGUL SYLLABLE KYE */ 01086 0xCF54, /* LV # Lo HANGUL SYLLABLE KO */ 01087 0xCF70, /* LV # Lo HANGUL SYLLABLE KWA */ 01088 0xCF8C, /* LV # Lo HANGUL SYLLABLE KWAE */ 01089 0xCFA8, /* LV # Lo HANGUL SYLLABLE KOE */ 01090 0xCFC4, /* LV # Lo HANGUL SYLLABLE KYO */ 01091 0xCFE0, /* LV # Lo HANGUL SYLLABLE KU */ 01092 0xCFFC, /* LV # Lo HANGUL SYLLABLE KWEO */ 01093 0xD018, /* LV # Lo HANGUL SYLLABLE KWE */ 01094 0xD034, /* LV # Lo HANGUL SYLLABLE KWI */ 01095 0xD050, /* LV # Lo HANGUL SYLLABLE KYU */ 01096 0xD06C, /* LV # Lo HANGUL SYLLABLE KEU */ 01097 0xD088, /* LV # Lo HANGUL SYLLABLE KYI */ 01098 0xD0A4, /* LV # Lo HANGUL SYLLABLE KI */ 01099 0xD0C0, /* LV # Lo HANGUL SYLLABLE TA */ 01100 0xD0DC, /* LV # Lo HANGUL SYLLABLE TAE */ 01101 0xD0F8, /* LV # Lo HANGUL SYLLABLE TYA */ 01102 0xD114, /* LV # Lo HANGUL SYLLABLE TYAE */ 01103 0xD130, /* LV # Lo HANGUL SYLLABLE TEO */ 01104 0xD14C, /* LV # Lo HANGUL SYLLABLE TE */ 01105 0xD168, /* LV # Lo HANGUL SYLLABLE TYEO */ 01106 0xD184, /* LV # Lo HANGUL SYLLABLE TYE */ 01107 0xD1A0, /* LV # Lo HANGUL SYLLABLE TO */ 01108 0xD1BC, /* LV # Lo HANGUL SYLLABLE TWA */ 01109 0xD1D8, /* LV # Lo HANGUL SYLLABLE TWAE */ 01110 0xD1F4, /* LV # Lo HANGUL SYLLABLE TOE */ 01111 0xD210, /* LV # Lo HANGUL SYLLABLE TYO */ 01112 0xD22C, /* LV # Lo HANGUL SYLLABLE TU */ 01113 0xD248, /* LV # Lo HANGUL SYLLABLE TWEO */ 01114 0xD264, /* LV # Lo HANGUL SYLLABLE TWE */ 01115 0xD280, /* LV # Lo HANGUL SYLLABLE TWI */ 01116 0xD29C, /* LV # Lo HANGUL SYLLABLE TYU */ 01117 0xD2B8, /* LV # Lo HANGUL SYLLABLE TEU */ 01118 0xD2D4, /* LV # Lo HANGUL SYLLABLE TYI */ 01119 0xD2F0, /* LV # Lo HANGUL SYLLABLE TI */ 01120 0xD30C, /* LV # Lo HANGUL SYLLABLE PA */ 01121 0xD328, /* LV # Lo HANGUL SYLLABLE PAE */ 01122 0xD344, /* LV # Lo HANGUL SYLLABLE PYA */ 01123 0xD360, /* LV # Lo HANGUL SYLLABLE PYAE */ 01124 0xD37C, /* LV # Lo HANGUL SYLLABLE PEO */ 01125 0xD398, /* LV # Lo HANGUL SYLLABLE PE */ 01126 0xD3B4, /* LV # Lo HANGUL SYLLABLE PYEO */ 01127 0xD3D0, /* LV # Lo HANGUL SYLLABLE PYE */ 01128 0xD3EC, /* LV # Lo HANGUL SYLLABLE PO */ 01129 0xD408, /* LV # Lo HANGUL SYLLABLE PWA */ 01130 0xD424, /* LV # Lo HANGUL SYLLABLE PWAE */ 01131 0xD440, /* LV # Lo HANGUL SYLLABLE POE */ 01132 0xD45C, /* LV # Lo HANGUL SYLLABLE PYO */ 01133 0xD478, /* LV # Lo HANGUL SYLLABLE PU */ 01134 0xD494, /* LV # Lo HANGUL SYLLABLE PWEO */ 01135 0xD4B0, /* LV # Lo HANGUL SYLLABLE PWE */ 01136 0xD4CC, /* LV # Lo HANGUL SYLLABLE PWI */ 01137 0xD4E8, /* LV # Lo HANGUL SYLLABLE PYU */ 01138 0xD504, /* LV # Lo HANGUL SYLLABLE PEU */ 01139 0xD520, /* LV # Lo HANGUL SYLLABLE PYI */ 01140 0xD53C, /* LV # Lo HANGUL SYLLABLE PI */ 01141 0xD558, /* LV # Lo HANGUL SYLLABLE HA */ 01142 0xD574, /* LV # Lo HANGUL SYLLABLE HAE */ 01143 0xD590, /* LV # Lo HANGUL SYLLABLE HYA */ 01144 0xD5AC, /* LV # Lo HANGUL SYLLABLE HYAE */ 01145 0xD5C8, /* LV # Lo HANGUL SYLLABLE HEO */ 01146 0xD5E4, /* LV # Lo HANGUL SYLLABLE HE */ 01147 0xD600, /* LV # Lo HANGUL SYLLABLE HYEO */ 01148 0xD61C, /* LV # Lo HANGUL SYLLABLE HYE */ 01149 0xD638, /* LV # Lo HANGUL SYLLABLE HO */ 01150 0xD654, /* LV # Lo HANGUL SYLLABLE HWA */ 01151 0xD670, /* LV # Lo HANGUL SYLLABLE HWAE */ 01152 0xD68C, /* LV # Lo HANGUL SYLLABLE HOE */ 01153 0xD6A8, /* LV # Lo HANGUL SYLLABLE HYO */ 01154 0xD6C4, /* LV # Lo HANGUL SYLLABLE HU */ 01155 0xD6E0, /* LV # Lo HANGUL SYLLABLE HWEO */ 01156 0xD6FC, /* LV # Lo HANGUL SYLLABLE HWE */ 01157 0xD718, /* LV # Lo HANGUL SYLLABLE HWI */ 01158 0xD734, /* LV # Lo HANGUL SYLLABLE HYU */ 01159 0xD750, /* LV # Lo HANGUL SYLLABLE HEU */ 01160 0xD76C, /* LV # Lo HANGUL SYLLABLE HYI */ 01161 0xD788, /* LV # Lo HANGUL SYLLABLE HI */ 01162 0 01163 }; 01164 01165 static const uint32_t pr29_13_2[] = { 01166 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD, 0x11AE, 0x11AF, 01167 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x11B6, 0x11B7, 01168 0x11B8, 0x11B9, 0x11BA, 0x11BB, 0x11BC, 0x11BD, 0x11BE, 0x11BF, 01169 0x11C0, 0x11C1, 0x11C2, 0 01170 }; 01171 01172 typedef struct 01173 { 01174 const uint32_t *first; 01175 const uint32_t *last; 01176 } Pr29; 01177 01178 static const Pr29 pr29[] = { 01179 {&pr29_1_1[0], &pr29_1_2[0]}, 01180 {&pr29_2_1[0], &pr29_2_2[0]}, 01181 {&pr29_3_1[0], &pr29_3_2[0]}, 01182 {&pr29_4_1[0], &pr29_4_2[0]}, 01183 {&pr29_5_1[0], &pr29_5_2[0]}, 01184 {&pr29_6_1[0], &pr29_6_2[0]}, 01185 {&pr29_7_1[0], &pr29_7_2[0]}, 01186 {&pr29_8_1[0], &pr29_8_2[0]}, 01187 {&pr29_9_1[0], &pr29_9_2[0]}, 01188 {&pr29_10_1[0], &pr29_10_2[0]}, 01189 {&pr29_11_1[0], &pr29_11_2[0]}, 01190 {&pr29_12_1[0], &pr29_12_2[0]}, 01191 {&pr29_13_1[0], &pr29_13_2[0]}, 01192 {NULL, NULL} 01193 }; 01194 01195 static size_t 01196 first_column (uint32_t c) 01197 { 01198 size_t i, j; 01199 01200 for (i = 0; pr29[i].first; i++) 01201 for (j = 0; pr29[i].first[j]; j++) 01202 if (c == pr29[i].first[j]) 01203 return i + 1; 01204 01205 return 0; 01206 } 01207 01208 static int 01209 in_last_column_row (uint32_t c, size_t row) 01210 { 01211 size_t i; 01212 01213 for (i = 0; pr29[row - 1].last[i]; i++) 01214 if (c == pr29[row - 1].last[i]) 01215 return 1; 01216 01217 return 0; 01218 } 01219 01220 static size_t 01221 combinationclass (uint32_t c) 01222 { 01223 size_t i; 01224 01225 for (i = 0; nzcc[i]; i++) 01226 if (c == nzcc[i]) 01227 return i + 1; 01228 01229 return 0; 01230 } 01231 01246 int 01247 pr29_4 (const uint32_t * in, size_t len) 01248 { 01249 size_t i, j, k, row; 01250 01251 /* 01252 * The problem sequence are of the form: 01253 * 01254 * first_character intervening_character+ last_character 01255 * 01256 * where the first_character and last_character come from the same 01257 * row in the following table, and there is at least one 01258 * intervening_character with non-zero Canonical Combining 01259 * Class. (The '+' above means one or more occurrences.) 01260 * 01261 */ 01262 01263 for (i = 0; i < len; i++) 01264 if ((row = first_column (in[i])) > 0) 01265 for (j = i + 1; j < len; j++) 01266 if (combinationclass (in[j])) 01267 for (k = j + 1; k < len; k++) 01268 if (in_last_column_row (in[k], row)) 01269 return PR29_PROBLEM; 01270 01271 return PR29_SUCCESS; 01272 } 01273 01287 int 01288 pr29_4z (const uint32_t * in) 01289 { 01290 size_t len; 01291 01292 for (len = 0; in[len]; len++) 01293 ; 01294 01295 return pr29_4 (in, len); 01296 } 01297 01312 int 01313 pr29_8z (const char *in) 01314 { 01315 uint32_t *p; 01316 int rc; 01317 01318 p = stringprep_utf8_to_ucs4 (in, -1, NULL); 01319 if (!p) 01320 return PR29_STRINGPREP_ERROR; 01321 01322 rc = pr29_4z (p); 01323 01324 free (p); 01325 01326 return rc; 01327 } 01328
1.7.6.1