1*3b17b84bSPavel Labath //===---------- Support/UnicodeCaseFold.cpp -------------------------------===// 2*3b17b84bSPavel Labath // 3*3b17b84bSPavel Labath // This file was generated by utils/unicode-case-fold.py from the Unicode 4*3b17b84bSPavel Labath // case folding database at 5*3b17b84bSPavel Labath // http://www.unicode.org/Public/9.0.0/ucd/CaseFolding.txt 6*3b17b84bSPavel Labath // 7*3b17b84bSPavel Labath // To regenerate this file, run: 8*3b17b84bSPavel Labath // utils/unicode-case-fold.py \ 9*3b17b84bSPavel Labath // "http://www.unicode.org/Public/9.0.0/ucd/CaseFolding.txt" \ 10*3b17b84bSPavel Labath // > lib/Support/UnicodeCaseFold.cpp 11*3b17b84bSPavel Labath // 12*3b17b84bSPavel Labath //===----------------------------------------------------------------------===// 13*3b17b84bSPavel Labath 14*3b17b84bSPavel Labath #include "llvm/Support/Unicode.h" 15*3b17b84bSPavel Labath foldCharSimple(int C)16*3b17b84bSPavel Labathint llvm::sys::unicode::foldCharSimple(int C) { 17*3b17b84bSPavel Labath if (C < 0x0041) 18*3b17b84bSPavel Labath return C; 19*3b17b84bSPavel Labath // 26 characters 20*3b17b84bSPavel Labath if (C <= 0x005a) 21*3b17b84bSPavel Labath return C + 32; 22*3b17b84bSPavel Labath // MICRO SIGN 23*3b17b84bSPavel Labath if (C == 0x00b5) 24*3b17b84bSPavel Labath return 0x03bc; 25*3b17b84bSPavel Labath if (C < 0x00c0) 26*3b17b84bSPavel Labath return C; 27*3b17b84bSPavel Labath // 23 characters 28*3b17b84bSPavel Labath if (C <= 0x00d6) 29*3b17b84bSPavel Labath return C + 32; 30*3b17b84bSPavel Labath if (C < 0x00d8) 31*3b17b84bSPavel Labath return C; 32*3b17b84bSPavel Labath // 7 characters 33*3b17b84bSPavel Labath if (C <= 0x00de) 34*3b17b84bSPavel Labath return C + 32; 35*3b17b84bSPavel Labath if (C < 0x0100) 36*3b17b84bSPavel Labath return C; 37*3b17b84bSPavel Labath // 24 characters 38*3b17b84bSPavel Labath if (C <= 0x012e) 39*3b17b84bSPavel Labath return C | 1; 40*3b17b84bSPavel Labath if (C < 0x0132) 41*3b17b84bSPavel Labath return C; 42*3b17b84bSPavel Labath // 3 characters 43*3b17b84bSPavel Labath if (C <= 0x0136) 44*3b17b84bSPavel Labath return C | 1; 45*3b17b84bSPavel Labath if (C < 0x0139) 46*3b17b84bSPavel Labath return C; 47*3b17b84bSPavel Labath // 8 characters 48*3b17b84bSPavel Labath if (C <= 0x0147 && C % 2 == 1) 49*3b17b84bSPavel Labath return C + 1; 50*3b17b84bSPavel Labath if (C < 0x014a) 51*3b17b84bSPavel Labath return C; 52*3b17b84bSPavel Labath // 23 characters 53*3b17b84bSPavel Labath if (C <= 0x0176) 54*3b17b84bSPavel Labath return C | 1; 55*3b17b84bSPavel Labath // LATIN CAPITAL LETTER Y WITH DIAERESIS 56*3b17b84bSPavel Labath if (C == 0x0178) 57*3b17b84bSPavel Labath return 0x00ff; 58*3b17b84bSPavel Labath if (C < 0x0179) 59*3b17b84bSPavel Labath return C; 60*3b17b84bSPavel Labath // 3 characters 61*3b17b84bSPavel Labath if (C <= 0x017d && C % 2 == 1) 62*3b17b84bSPavel Labath return C + 1; 63*3b17b84bSPavel Labath // LATIN SMALL LETTER LONG S 64*3b17b84bSPavel Labath if (C == 0x017f) 65*3b17b84bSPavel Labath return 0x0073; 66*3b17b84bSPavel Labath // LATIN CAPITAL LETTER B WITH HOOK 67*3b17b84bSPavel Labath if (C == 0x0181) 68*3b17b84bSPavel Labath return 0x0253; 69*3b17b84bSPavel Labath if (C < 0x0182) 70*3b17b84bSPavel Labath return C; 71*3b17b84bSPavel Labath // 2 characters 72*3b17b84bSPavel Labath if (C <= 0x0184) 73*3b17b84bSPavel Labath return C | 1; 74*3b17b84bSPavel Labath // LATIN CAPITAL LETTER OPEN O 75*3b17b84bSPavel Labath if (C == 0x0186) 76*3b17b84bSPavel Labath return 0x0254; 77*3b17b84bSPavel Labath // LATIN CAPITAL LETTER C WITH HOOK 78*3b17b84bSPavel Labath if (C == 0x0187) 79*3b17b84bSPavel Labath return 0x0188; 80*3b17b84bSPavel Labath if (C < 0x0189) 81*3b17b84bSPavel Labath return C; 82*3b17b84bSPavel Labath // 2 characters 83*3b17b84bSPavel Labath if (C <= 0x018a) 84*3b17b84bSPavel Labath return C + 205; 85*3b17b84bSPavel Labath // LATIN CAPITAL LETTER D WITH TOPBAR 86*3b17b84bSPavel Labath if (C == 0x018b) 87*3b17b84bSPavel Labath return 0x018c; 88*3b17b84bSPavel Labath // LATIN CAPITAL LETTER REVERSED E 89*3b17b84bSPavel Labath if (C == 0x018e) 90*3b17b84bSPavel Labath return 0x01dd; 91*3b17b84bSPavel Labath // LATIN CAPITAL LETTER SCHWA 92*3b17b84bSPavel Labath if (C == 0x018f) 93*3b17b84bSPavel Labath return 0x0259; 94*3b17b84bSPavel Labath // LATIN CAPITAL LETTER OPEN E 95*3b17b84bSPavel Labath if (C == 0x0190) 96*3b17b84bSPavel Labath return 0x025b; 97*3b17b84bSPavel Labath // LATIN CAPITAL LETTER F WITH HOOK 98*3b17b84bSPavel Labath if (C == 0x0191) 99*3b17b84bSPavel Labath return 0x0192; 100*3b17b84bSPavel Labath // LATIN CAPITAL LETTER G WITH HOOK 101*3b17b84bSPavel Labath if (C == 0x0193) 102*3b17b84bSPavel Labath return 0x0260; 103*3b17b84bSPavel Labath // LATIN CAPITAL LETTER GAMMA 104*3b17b84bSPavel Labath if (C == 0x0194) 105*3b17b84bSPavel Labath return 0x0263; 106*3b17b84bSPavel Labath // LATIN CAPITAL LETTER IOTA 107*3b17b84bSPavel Labath if (C == 0x0196) 108*3b17b84bSPavel Labath return 0x0269; 109*3b17b84bSPavel Labath // LATIN CAPITAL LETTER I WITH STROKE 110*3b17b84bSPavel Labath if (C == 0x0197) 111*3b17b84bSPavel Labath return 0x0268; 112*3b17b84bSPavel Labath // LATIN CAPITAL LETTER K WITH HOOK 113*3b17b84bSPavel Labath if (C == 0x0198) 114*3b17b84bSPavel Labath return 0x0199; 115*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED M 116*3b17b84bSPavel Labath if (C == 0x019c) 117*3b17b84bSPavel Labath return 0x026f; 118*3b17b84bSPavel Labath // LATIN CAPITAL LETTER N WITH LEFT HOOK 119*3b17b84bSPavel Labath if (C == 0x019d) 120*3b17b84bSPavel Labath return 0x0272; 121*3b17b84bSPavel Labath // LATIN CAPITAL LETTER O WITH MIDDLE TILDE 122*3b17b84bSPavel Labath if (C == 0x019f) 123*3b17b84bSPavel Labath return 0x0275; 124*3b17b84bSPavel Labath if (C < 0x01a0) 125*3b17b84bSPavel Labath return C; 126*3b17b84bSPavel Labath // 3 characters 127*3b17b84bSPavel Labath if (C <= 0x01a4) 128*3b17b84bSPavel Labath return C | 1; 129*3b17b84bSPavel Labath // LATIN LETTER YR 130*3b17b84bSPavel Labath if (C == 0x01a6) 131*3b17b84bSPavel Labath return 0x0280; 132*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TONE TWO 133*3b17b84bSPavel Labath if (C == 0x01a7) 134*3b17b84bSPavel Labath return 0x01a8; 135*3b17b84bSPavel Labath // LATIN CAPITAL LETTER ESH 136*3b17b84bSPavel Labath if (C == 0x01a9) 137*3b17b84bSPavel Labath return 0x0283; 138*3b17b84bSPavel Labath // LATIN CAPITAL LETTER T WITH HOOK 139*3b17b84bSPavel Labath if (C == 0x01ac) 140*3b17b84bSPavel Labath return 0x01ad; 141*3b17b84bSPavel Labath // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK 142*3b17b84bSPavel Labath if (C == 0x01ae) 143*3b17b84bSPavel Labath return 0x0288; 144*3b17b84bSPavel Labath // LATIN CAPITAL LETTER U WITH HORN 145*3b17b84bSPavel Labath if (C == 0x01af) 146*3b17b84bSPavel Labath return 0x01b0; 147*3b17b84bSPavel Labath if (C < 0x01b1) 148*3b17b84bSPavel Labath return C; 149*3b17b84bSPavel Labath // 2 characters 150*3b17b84bSPavel Labath if (C <= 0x01b2) 151*3b17b84bSPavel Labath return C + 217; 152*3b17b84bSPavel Labath if (C < 0x01b3) 153*3b17b84bSPavel Labath return C; 154*3b17b84bSPavel Labath // 2 characters 155*3b17b84bSPavel Labath if (C <= 0x01b5 && C % 2 == 1) 156*3b17b84bSPavel Labath return C + 1; 157*3b17b84bSPavel Labath // LATIN CAPITAL LETTER EZH 158*3b17b84bSPavel Labath if (C == 0x01b7) 159*3b17b84bSPavel Labath return 0x0292; 160*3b17b84bSPavel Labath if (C < 0x01b8) 161*3b17b84bSPavel Labath return C; 162*3b17b84bSPavel Labath // 2 characters 163*3b17b84bSPavel Labath if (C <= 0x01bc && C % 4 == 0) 164*3b17b84bSPavel Labath return C + 1; 165*3b17b84bSPavel Labath // LATIN CAPITAL LETTER DZ WITH CARON 166*3b17b84bSPavel Labath if (C == 0x01c4) 167*3b17b84bSPavel Labath return 0x01c6; 168*3b17b84bSPavel Labath // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 169*3b17b84bSPavel Labath if (C == 0x01c5) 170*3b17b84bSPavel Labath return 0x01c6; 171*3b17b84bSPavel Labath // LATIN CAPITAL LETTER LJ 172*3b17b84bSPavel Labath if (C == 0x01c7) 173*3b17b84bSPavel Labath return 0x01c9; 174*3b17b84bSPavel Labath // LATIN CAPITAL LETTER L WITH SMALL LETTER J 175*3b17b84bSPavel Labath if (C == 0x01c8) 176*3b17b84bSPavel Labath return 0x01c9; 177*3b17b84bSPavel Labath // LATIN CAPITAL LETTER NJ 178*3b17b84bSPavel Labath if (C == 0x01ca) 179*3b17b84bSPavel Labath return 0x01cc; 180*3b17b84bSPavel Labath if (C < 0x01cb) 181*3b17b84bSPavel Labath return C; 182*3b17b84bSPavel Labath // 9 characters 183*3b17b84bSPavel Labath if (C <= 0x01db && C % 2 == 1) 184*3b17b84bSPavel Labath return C + 1; 185*3b17b84bSPavel Labath if (C < 0x01de) 186*3b17b84bSPavel Labath return C; 187*3b17b84bSPavel Labath // 9 characters 188*3b17b84bSPavel Labath if (C <= 0x01ee) 189*3b17b84bSPavel Labath return C | 1; 190*3b17b84bSPavel Labath // LATIN CAPITAL LETTER DZ 191*3b17b84bSPavel Labath if (C == 0x01f1) 192*3b17b84bSPavel Labath return 0x01f3; 193*3b17b84bSPavel Labath if (C < 0x01f2) 194*3b17b84bSPavel Labath return C; 195*3b17b84bSPavel Labath // 2 characters 196*3b17b84bSPavel Labath if (C <= 0x01f4) 197*3b17b84bSPavel Labath return C | 1; 198*3b17b84bSPavel Labath // LATIN CAPITAL LETTER HWAIR 199*3b17b84bSPavel Labath if (C == 0x01f6) 200*3b17b84bSPavel Labath return 0x0195; 201*3b17b84bSPavel Labath // LATIN CAPITAL LETTER WYNN 202*3b17b84bSPavel Labath if (C == 0x01f7) 203*3b17b84bSPavel Labath return 0x01bf; 204*3b17b84bSPavel Labath if (C < 0x01f8) 205*3b17b84bSPavel Labath return C; 206*3b17b84bSPavel Labath // 20 characters 207*3b17b84bSPavel Labath if (C <= 0x021e) 208*3b17b84bSPavel Labath return C | 1; 209*3b17b84bSPavel Labath // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG 210*3b17b84bSPavel Labath if (C == 0x0220) 211*3b17b84bSPavel Labath return 0x019e; 212*3b17b84bSPavel Labath if (C < 0x0222) 213*3b17b84bSPavel Labath return C; 214*3b17b84bSPavel Labath // 9 characters 215*3b17b84bSPavel Labath if (C <= 0x0232) 216*3b17b84bSPavel Labath return C | 1; 217*3b17b84bSPavel Labath // LATIN CAPITAL LETTER A WITH STROKE 218*3b17b84bSPavel Labath if (C == 0x023a) 219*3b17b84bSPavel Labath return 0x2c65; 220*3b17b84bSPavel Labath // LATIN CAPITAL LETTER C WITH STROKE 221*3b17b84bSPavel Labath if (C == 0x023b) 222*3b17b84bSPavel Labath return 0x023c; 223*3b17b84bSPavel Labath // LATIN CAPITAL LETTER L WITH BAR 224*3b17b84bSPavel Labath if (C == 0x023d) 225*3b17b84bSPavel Labath return 0x019a; 226*3b17b84bSPavel Labath // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE 227*3b17b84bSPavel Labath if (C == 0x023e) 228*3b17b84bSPavel Labath return 0x2c66; 229*3b17b84bSPavel Labath // LATIN CAPITAL LETTER GLOTTAL STOP 230*3b17b84bSPavel Labath if (C == 0x0241) 231*3b17b84bSPavel Labath return 0x0242; 232*3b17b84bSPavel Labath // LATIN CAPITAL LETTER B WITH STROKE 233*3b17b84bSPavel Labath if (C == 0x0243) 234*3b17b84bSPavel Labath return 0x0180; 235*3b17b84bSPavel Labath // LATIN CAPITAL LETTER U BAR 236*3b17b84bSPavel Labath if (C == 0x0244) 237*3b17b84bSPavel Labath return 0x0289; 238*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED V 239*3b17b84bSPavel Labath if (C == 0x0245) 240*3b17b84bSPavel Labath return 0x028c; 241*3b17b84bSPavel Labath if (C < 0x0246) 242*3b17b84bSPavel Labath return C; 243*3b17b84bSPavel Labath // 5 characters 244*3b17b84bSPavel Labath if (C <= 0x024e) 245*3b17b84bSPavel Labath return C | 1; 246*3b17b84bSPavel Labath // COMBINING GREEK YPOGEGRAMMENI 247*3b17b84bSPavel Labath if (C == 0x0345) 248*3b17b84bSPavel Labath return 0x03b9; 249*3b17b84bSPavel Labath if (C < 0x0370) 250*3b17b84bSPavel Labath return C; 251*3b17b84bSPavel Labath // 2 characters 252*3b17b84bSPavel Labath if (C <= 0x0372) 253*3b17b84bSPavel Labath return C | 1; 254*3b17b84bSPavel Labath // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA 255*3b17b84bSPavel Labath if (C == 0x0376) 256*3b17b84bSPavel Labath return 0x0377; 257*3b17b84bSPavel Labath // GREEK CAPITAL LETTER YOT 258*3b17b84bSPavel Labath if (C == 0x037f) 259*3b17b84bSPavel Labath return 0x03f3; 260*3b17b84bSPavel Labath // GREEK CAPITAL LETTER ALPHA WITH TONOS 261*3b17b84bSPavel Labath if (C == 0x0386) 262*3b17b84bSPavel Labath return 0x03ac; 263*3b17b84bSPavel Labath if (C < 0x0388) 264*3b17b84bSPavel Labath return C; 265*3b17b84bSPavel Labath // 3 characters 266*3b17b84bSPavel Labath if (C <= 0x038a) 267*3b17b84bSPavel Labath return C + 37; 268*3b17b84bSPavel Labath // GREEK CAPITAL LETTER OMICRON WITH TONOS 269*3b17b84bSPavel Labath if (C == 0x038c) 270*3b17b84bSPavel Labath return 0x03cc; 271*3b17b84bSPavel Labath if (C < 0x038e) 272*3b17b84bSPavel Labath return C; 273*3b17b84bSPavel Labath // 2 characters 274*3b17b84bSPavel Labath if (C <= 0x038f) 275*3b17b84bSPavel Labath return C + 63; 276*3b17b84bSPavel Labath if (C < 0x0391) 277*3b17b84bSPavel Labath return C; 278*3b17b84bSPavel Labath // 17 characters 279*3b17b84bSPavel Labath if (C <= 0x03a1) 280*3b17b84bSPavel Labath return C + 32; 281*3b17b84bSPavel Labath if (C < 0x03a3) 282*3b17b84bSPavel Labath return C; 283*3b17b84bSPavel Labath // 9 characters 284*3b17b84bSPavel Labath if (C <= 0x03ab) 285*3b17b84bSPavel Labath return C + 32; 286*3b17b84bSPavel Labath // GREEK SMALL LETTER FINAL SIGMA 287*3b17b84bSPavel Labath if (C == 0x03c2) 288*3b17b84bSPavel Labath return 0x03c3; 289*3b17b84bSPavel Labath // GREEK CAPITAL KAI SYMBOL 290*3b17b84bSPavel Labath if (C == 0x03cf) 291*3b17b84bSPavel Labath return 0x03d7; 292*3b17b84bSPavel Labath // GREEK BETA SYMBOL 293*3b17b84bSPavel Labath if (C == 0x03d0) 294*3b17b84bSPavel Labath return 0x03b2; 295*3b17b84bSPavel Labath // GREEK THETA SYMBOL 296*3b17b84bSPavel Labath if (C == 0x03d1) 297*3b17b84bSPavel Labath return 0x03b8; 298*3b17b84bSPavel Labath // GREEK PHI SYMBOL 299*3b17b84bSPavel Labath if (C == 0x03d5) 300*3b17b84bSPavel Labath return 0x03c6; 301*3b17b84bSPavel Labath // GREEK PI SYMBOL 302*3b17b84bSPavel Labath if (C == 0x03d6) 303*3b17b84bSPavel Labath return 0x03c0; 304*3b17b84bSPavel Labath if (C < 0x03d8) 305*3b17b84bSPavel Labath return C; 306*3b17b84bSPavel Labath // 12 characters 307*3b17b84bSPavel Labath if (C <= 0x03ee) 308*3b17b84bSPavel Labath return C | 1; 309*3b17b84bSPavel Labath // GREEK KAPPA SYMBOL 310*3b17b84bSPavel Labath if (C == 0x03f0) 311*3b17b84bSPavel Labath return 0x03ba; 312*3b17b84bSPavel Labath // GREEK RHO SYMBOL 313*3b17b84bSPavel Labath if (C == 0x03f1) 314*3b17b84bSPavel Labath return 0x03c1; 315*3b17b84bSPavel Labath // GREEK CAPITAL THETA SYMBOL 316*3b17b84bSPavel Labath if (C == 0x03f4) 317*3b17b84bSPavel Labath return 0x03b8; 318*3b17b84bSPavel Labath // GREEK LUNATE EPSILON SYMBOL 319*3b17b84bSPavel Labath if (C == 0x03f5) 320*3b17b84bSPavel Labath return 0x03b5; 321*3b17b84bSPavel Labath // GREEK CAPITAL LETTER SHO 322*3b17b84bSPavel Labath if (C == 0x03f7) 323*3b17b84bSPavel Labath return 0x03f8; 324*3b17b84bSPavel Labath // GREEK CAPITAL LUNATE SIGMA SYMBOL 325*3b17b84bSPavel Labath if (C == 0x03f9) 326*3b17b84bSPavel Labath return 0x03f2; 327*3b17b84bSPavel Labath // GREEK CAPITAL LETTER SAN 328*3b17b84bSPavel Labath if (C == 0x03fa) 329*3b17b84bSPavel Labath return 0x03fb; 330*3b17b84bSPavel Labath if (C < 0x03fd) 331*3b17b84bSPavel Labath return C; 332*3b17b84bSPavel Labath // 3 characters 333*3b17b84bSPavel Labath if (C <= 0x03ff) 334*3b17b84bSPavel Labath return C + -130; 335*3b17b84bSPavel Labath if (C < 0x0400) 336*3b17b84bSPavel Labath return C; 337*3b17b84bSPavel Labath // 16 characters 338*3b17b84bSPavel Labath if (C <= 0x040f) 339*3b17b84bSPavel Labath return C + 80; 340*3b17b84bSPavel Labath if (C < 0x0410) 341*3b17b84bSPavel Labath return C; 342*3b17b84bSPavel Labath // 32 characters 343*3b17b84bSPavel Labath if (C <= 0x042f) 344*3b17b84bSPavel Labath return C + 32; 345*3b17b84bSPavel Labath if (C < 0x0460) 346*3b17b84bSPavel Labath return C; 347*3b17b84bSPavel Labath // 17 characters 348*3b17b84bSPavel Labath if (C <= 0x0480) 349*3b17b84bSPavel Labath return C | 1; 350*3b17b84bSPavel Labath if (C < 0x048a) 351*3b17b84bSPavel Labath return C; 352*3b17b84bSPavel Labath // 27 characters 353*3b17b84bSPavel Labath if (C <= 0x04be) 354*3b17b84bSPavel Labath return C | 1; 355*3b17b84bSPavel Labath // CYRILLIC LETTER PALOCHKA 356*3b17b84bSPavel Labath if (C == 0x04c0) 357*3b17b84bSPavel Labath return 0x04cf; 358*3b17b84bSPavel Labath if (C < 0x04c1) 359*3b17b84bSPavel Labath return C; 360*3b17b84bSPavel Labath // 7 characters 361*3b17b84bSPavel Labath if (C <= 0x04cd && C % 2 == 1) 362*3b17b84bSPavel Labath return C + 1; 363*3b17b84bSPavel Labath if (C < 0x04d0) 364*3b17b84bSPavel Labath return C; 365*3b17b84bSPavel Labath // 48 characters 366*3b17b84bSPavel Labath if (C <= 0x052e) 367*3b17b84bSPavel Labath return C | 1; 368*3b17b84bSPavel Labath if (C < 0x0531) 369*3b17b84bSPavel Labath return C; 370*3b17b84bSPavel Labath // 38 characters 371*3b17b84bSPavel Labath if (C <= 0x0556) 372*3b17b84bSPavel Labath return C + 48; 373*3b17b84bSPavel Labath if (C < 0x10a0) 374*3b17b84bSPavel Labath return C; 375*3b17b84bSPavel Labath // 38 characters 376*3b17b84bSPavel Labath if (C <= 0x10c5) 377*3b17b84bSPavel Labath return C + 7264; 378*3b17b84bSPavel Labath if (C < 0x10c7) 379*3b17b84bSPavel Labath return C; 380*3b17b84bSPavel Labath // 2 characters 381*3b17b84bSPavel Labath if (C <= 0x10cd && C % 6 == 5) 382*3b17b84bSPavel Labath return C + 7264; 383*3b17b84bSPavel Labath if (C < 0x13f8) 384*3b17b84bSPavel Labath return C; 385*3b17b84bSPavel Labath // 6 characters 386*3b17b84bSPavel Labath if (C <= 0x13fd) 387*3b17b84bSPavel Labath return C + -8; 388*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER ROUNDED VE 389*3b17b84bSPavel Labath if (C == 0x1c80) 390*3b17b84bSPavel Labath return 0x0432; 391*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER LONG-LEGGED DE 392*3b17b84bSPavel Labath if (C == 0x1c81) 393*3b17b84bSPavel Labath return 0x0434; 394*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER NARROW O 395*3b17b84bSPavel Labath if (C == 0x1c82) 396*3b17b84bSPavel Labath return 0x043e; 397*3b17b84bSPavel Labath if (C < 0x1c83) 398*3b17b84bSPavel Labath return C; 399*3b17b84bSPavel Labath // 2 characters 400*3b17b84bSPavel Labath if (C <= 0x1c84) 401*3b17b84bSPavel Labath return C + -6210; 402*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER THREE-LEGGED TE 403*3b17b84bSPavel Labath if (C == 0x1c85) 404*3b17b84bSPavel Labath return 0x0442; 405*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER TALL HARD SIGN 406*3b17b84bSPavel Labath if (C == 0x1c86) 407*3b17b84bSPavel Labath return 0x044a; 408*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER TALL YAT 409*3b17b84bSPavel Labath if (C == 0x1c87) 410*3b17b84bSPavel Labath return 0x0463; 411*3b17b84bSPavel Labath // CYRILLIC SMALL LETTER UNBLENDED UK 412*3b17b84bSPavel Labath if (C == 0x1c88) 413*3b17b84bSPavel Labath return 0xa64b; 414*3b17b84bSPavel Labath if (C < 0x1e00) 415*3b17b84bSPavel Labath return C; 416*3b17b84bSPavel Labath // 75 characters 417*3b17b84bSPavel Labath if (C <= 0x1e94) 418*3b17b84bSPavel Labath return C | 1; 419*3b17b84bSPavel Labath // LATIN SMALL LETTER LONG S WITH DOT ABOVE 420*3b17b84bSPavel Labath if (C == 0x1e9b) 421*3b17b84bSPavel Labath return 0x1e61; 422*3b17b84bSPavel Labath // LATIN CAPITAL LETTER SHARP S 423*3b17b84bSPavel Labath if (C == 0x1e9e) 424*3b17b84bSPavel Labath return 0x00df; 425*3b17b84bSPavel Labath if (C < 0x1ea0) 426*3b17b84bSPavel Labath return C; 427*3b17b84bSPavel Labath // 48 characters 428*3b17b84bSPavel Labath if (C <= 0x1efe) 429*3b17b84bSPavel Labath return C | 1; 430*3b17b84bSPavel Labath if (C < 0x1f08) 431*3b17b84bSPavel Labath return C; 432*3b17b84bSPavel Labath // 8 characters 433*3b17b84bSPavel Labath if (C <= 0x1f0f) 434*3b17b84bSPavel Labath return C + -8; 435*3b17b84bSPavel Labath if (C < 0x1f18) 436*3b17b84bSPavel Labath return C; 437*3b17b84bSPavel Labath // 6 characters 438*3b17b84bSPavel Labath if (C <= 0x1f1d) 439*3b17b84bSPavel Labath return C + -8; 440*3b17b84bSPavel Labath if (C < 0x1f28) 441*3b17b84bSPavel Labath return C; 442*3b17b84bSPavel Labath // 8 characters 443*3b17b84bSPavel Labath if (C <= 0x1f2f) 444*3b17b84bSPavel Labath return C + -8; 445*3b17b84bSPavel Labath if (C < 0x1f38) 446*3b17b84bSPavel Labath return C; 447*3b17b84bSPavel Labath // 8 characters 448*3b17b84bSPavel Labath if (C <= 0x1f3f) 449*3b17b84bSPavel Labath return C + -8; 450*3b17b84bSPavel Labath if (C < 0x1f48) 451*3b17b84bSPavel Labath return C; 452*3b17b84bSPavel Labath // 6 characters 453*3b17b84bSPavel Labath if (C <= 0x1f4d) 454*3b17b84bSPavel Labath return C + -8; 455*3b17b84bSPavel Labath if (C < 0x1f59) 456*3b17b84bSPavel Labath return C; 457*3b17b84bSPavel Labath // 4 characters 458*3b17b84bSPavel Labath if (C <= 0x1f5f && C % 2 == 1) 459*3b17b84bSPavel Labath return C + -8; 460*3b17b84bSPavel Labath if (C < 0x1f68) 461*3b17b84bSPavel Labath return C; 462*3b17b84bSPavel Labath // 8 characters 463*3b17b84bSPavel Labath if (C <= 0x1f6f) 464*3b17b84bSPavel Labath return C + -8; 465*3b17b84bSPavel Labath if (C < 0x1f88) 466*3b17b84bSPavel Labath return C; 467*3b17b84bSPavel Labath // 8 characters 468*3b17b84bSPavel Labath if (C <= 0x1f8f) 469*3b17b84bSPavel Labath return C + -8; 470*3b17b84bSPavel Labath if (C < 0x1f98) 471*3b17b84bSPavel Labath return C; 472*3b17b84bSPavel Labath // 8 characters 473*3b17b84bSPavel Labath if (C <= 0x1f9f) 474*3b17b84bSPavel Labath return C + -8; 475*3b17b84bSPavel Labath if (C < 0x1fa8) 476*3b17b84bSPavel Labath return C; 477*3b17b84bSPavel Labath // 8 characters 478*3b17b84bSPavel Labath if (C <= 0x1faf) 479*3b17b84bSPavel Labath return C + -8; 480*3b17b84bSPavel Labath if (C < 0x1fb8) 481*3b17b84bSPavel Labath return C; 482*3b17b84bSPavel Labath // 2 characters 483*3b17b84bSPavel Labath if (C <= 0x1fb9) 484*3b17b84bSPavel Labath return C + -8; 485*3b17b84bSPavel Labath if (C < 0x1fba) 486*3b17b84bSPavel Labath return C; 487*3b17b84bSPavel Labath // 2 characters 488*3b17b84bSPavel Labath if (C <= 0x1fbb) 489*3b17b84bSPavel Labath return C + -74; 490*3b17b84bSPavel Labath // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 491*3b17b84bSPavel Labath if (C == 0x1fbc) 492*3b17b84bSPavel Labath return 0x1fb3; 493*3b17b84bSPavel Labath // GREEK PROSGEGRAMMENI 494*3b17b84bSPavel Labath if (C == 0x1fbe) 495*3b17b84bSPavel Labath return 0x03b9; 496*3b17b84bSPavel Labath if (C < 0x1fc8) 497*3b17b84bSPavel Labath return C; 498*3b17b84bSPavel Labath // 4 characters 499*3b17b84bSPavel Labath if (C <= 0x1fcb) 500*3b17b84bSPavel Labath return C + -86; 501*3b17b84bSPavel Labath // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 502*3b17b84bSPavel Labath if (C == 0x1fcc) 503*3b17b84bSPavel Labath return 0x1fc3; 504*3b17b84bSPavel Labath if (C < 0x1fd8) 505*3b17b84bSPavel Labath return C; 506*3b17b84bSPavel Labath // 2 characters 507*3b17b84bSPavel Labath if (C <= 0x1fd9) 508*3b17b84bSPavel Labath return C + -8; 509*3b17b84bSPavel Labath if (C < 0x1fda) 510*3b17b84bSPavel Labath return C; 511*3b17b84bSPavel Labath // 2 characters 512*3b17b84bSPavel Labath if (C <= 0x1fdb) 513*3b17b84bSPavel Labath return C + -100; 514*3b17b84bSPavel Labath if (C < 0x1fe8) 515*3b17b84bSPavel Labath return C; 516*3b17b84bSPavel Labath // 2 characters 517*3b17b84bSPavel Labath if (C <= 0x1fe9) 518*3b17b84bSPavel Labath return C + -8; 519*3b17b84bSPavel Labath if (C < 0x1fea) 520*3b17b84bSPavel Labath return C; 521*3b17b84bSPavel Labath // 2 characters 522*3b17b84bSPavel Labath if (C <= 0x1feb) 523*3b17b84bSPavel Labath return C + -112; 524*3b17b84bSPavel Labath // GREEK CAPITAL LETTER RHO WITH DASIA 525*3b17b84bSPavel Labath if (C == 0x1fec) 526*3b17b84bSPavel Labath return 0x1fe5; 527*3b17b84bSPavel Labath if (C < 0x1ff8) 528*3b17b84bSPavel Labath return C; 529*3b17b84bSPavel Labath // 2 characters 530*3b17b84bSPavel Labath if (C <= 0x1ff9) 531*3b17b84bSPavel Labath return C + -128; 532*3b17b84bSPavel Labath if (C < 0x1ffa) 533*3b17b84bSPavel Labath return C; 534*3b17b84bSPavel Labath // 2 characters 535*3b17b84bSPavel Labath if (C <= 0x1ffb) 536*3b17b84bSPavel Labath return C + -126; 537*3b17b84bSPavel Labath // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 538*3b17b84bSPavel Labath if (C == 0x1ffc) 539*3b17b84bSPavel Labath return 0x1ff3; 540*3b17b84bSPavel Labath // OHM SIGN 541*3b17b84bSPavel Labath if (C == 0x2126) 542*3b17b84bSPavel Labath return 0x03c9; 543*3b17b84bSPavel Labath // KELVIN SIGN 544*3b17b84bSPavel Labath if (C == 0x212a) 545*3b17b84bSPavel Labath return 0x006b; 546*3b17b84bSPavel Labath // ANGSTROM SIGN 547*3b17b84bSPavel Labath if (C == 0x212b) 548*3b17b84bSPavel Labath return 0x00e5; 549*3b17b84bSPavel Labath // TURNED CAPITAL F 550*3b17b84bSPavel Labath if (C == 0x2132) 551*3b17b84bSPavel Labath return 0x214e; 552*3b17b84bSPavel Labath if (C < 0x2160) 553*3b17b84bSPavel Labath return C; 554*3b17b84bSPavel Labath // 16 characters 555*3b17b84bSPavel Labath if (C <= 0x216f) 556*3b17b84bSPavel Labath return C + 16; 557*3b17b84bSPavel Labath // ROMAN NUMERAL REVERSED ONE HUNDRED 558*3b17b84bSPavel Labath if (C == 0x2183) 559*3b17b84bSPavel Labath return 0x2184; 560*3b17b84bSPavel Labath if (C < 0x24b6) 561*3b17b84bSPavel Labath return C; 562*3b17b84bSPavel Labath // 26 characters 563*3b17b84bSPavel Labath if (C <= 0x24cf) 564*3b17b84bSPavel Labath return C + 26; 565*3b17b84bSPavel Labath if (C < 0x2c00) 566*3b17b84bSPavel Labath return C; 567*3b17b84bSPavel Labath // 47 characters 568*3b17b84bSPavel Labath if (C <= 0x2c2e) 569*3b17b84bSPavel Labath return C + 48; 570*3b17b84bSPavel Labath // LATIN CAPITAL LETTER L WITH DOUBLE BAR 571*3b17b84bSPavel Labath if (C == 0x2c60) 572*3b17b84bSPavel Labath return 0x2c61; 573*3b17b84bSPavel Labath // LATIN CAPITAL LETTER L WITH MIDDLE TILDE 574*3b17b84bSPavel Labath if (C == 0x2c62) 575*3b17b84bSPavel Labath return 0x026b; 576*3b17b84bSPavel Labath // LATIN CAPITAL LETTER P WITH STROKE 577*3b17b84bSPavel Labath if (C == 0x2c63) 578*3b17b84bSPavel Labath return 0x1d7d; 579*3b17b84bSPavel Labath // LATIN CAPITAL LETTER R WITH TAIL 580*3b17b84bSPavel Labath if (C == 0x2c64) 581*3b17b84bSPavel Labath return 0x027d; 582*3b17b84bSPavel Labath if (C < 0x2c67) 583*3b17b84bSPavel Labath return C; 584*3b17b84bSPavel Labath // 3 characters 585*3b17b84bSPavel Labath if (C <= 0x2c6b && C % 2 == 1) 586*3b17b84bSPavel Labath return C + 1; 587*3b17b84bSPavel Labath // LATIN CAPITAL LETTER ALPHA 588*3b17b84bSPavel Labath if (C == 0x2c6d) 589*3b17b84bSPavel Labath return 0x0251; 590*3b17b84bSPavel Labath // LATIN CAPITAL LETTER M WITH HOOK 591*3b17b84bSPavel Labath if (C == 0x2c6e) 592*3b17b84bSPavel Labath return 0x0271; 593*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED A 594*3b17b84bSPavel Labath if (C == 0x2c6f) 595*3b17b84bSPavel Labath return 0x0250; 596*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED ALPHA 597*3b17b84bSPavel Labath if (C == 0x2c70) 598*3b17b84bSPavel Labath return 0x0252; 599*3b17b84bSPavel Labath if (C < 0x2c72) 600*3b17b84bSPavel Labath return C; 601*3b17b84bSPavel Labath // 2 characters 602*3b17b84bSPavel Labath if (C <= 0x2c75 && C % 3 == 2) 603*3b17b84bSPavel Labath return C + 1; 604*3b17b84bSPavel Labath if (C < 0x2c7e) 605*3b17b84bSPavel Labath return C; 606*3b17b84bSPavel Labath // 2 characters 607*3b17b84bSPavel Labath if (C <= 0x2c7f) 608*3b17b84bSPavel Labath return C + -10815; 609*3b17b84bSPavel Labath if (C < 0x2c80) 610*3b17b84bSPavel Labath return C; 611*3b17b84bSPavel Labath // 50 characters 612*3b17b84bSPavel Labath if (C <= 0x2ce2) 613*3b17b84bSPavel Labath return C | 1; 614*3b17b84bSPavel Labath if (C < 0x2ceb) 615*3b17b84bSPavel Labath return C; 616*3b17b84bSPavel Labath // 2 characters 617*3b17b84bSPavel Labath if (C <= 0x2ced && C % 2 == 1) 618*3b17b84bSPavel Labath return C + 1; 619*3b17b84bSPavel Labath if (C < 0x2cf2) 620*3b17b84bSPavel Labath return C; 621*3b17b84bSPavel Labath // 2 characters 622*3b17b84bSPavel Labath if (C <= 0xa640 && C % 31054 == 11506) 623*3b17b84bSPavel Labath return C + 1; 624*3b17b84bSPavel Labath if (C < 0xa642) 625*3b17b84bSPavel Labath return C; 626*3b17b84bSPavel Labath // 22 characters 627*3b17b84bSPavel Labath if (C <= 0xa66c) 628*3b17b84bSPavel Labath return C | 1; 629*3b17b84bSPavel Labath if (C < 0xa680) 630*3b17b84bSPavel Labath return C; 631*3b17b84bSPavel Labath // 14 characters 632*3b17b84bSPavel Labath if (C <= 0xa69a) 633*3b17b84bSPavel Labath return C | 1; 634*3b17b84bSPavel Labath if (C < 0xa722) 635*3b17b84bSPavel Labath return C; 636*3b17b84bSPavel Labath // 7 characters 637*3b17b84bSPavel Labath if (C <= 0xa72e) 638*3b17b84bSPavel Labath return C | 1; 639*3b17b84bSPavel Labath if (C < 0xa732) 640*3b17b84bSPavel Labath return C; 641*3b17b84bSPavel Labath // 31 characters 642*3b17b84bSPavel Labath if (C <= 0xa76e) 643*3b17b84bSPavel Labath return C | 1; 644*3b17b84bSPavel Labath if (C < 0xa779) 645*3b17b84bSPavel Labath return C; 646*3b17b84bSPavel Labath // 2 characters 647*3b17b84bSPavel Labath if (C <= 0xa77b && C % 2 == 1) 648*3b17b84bSPavel Labath return C + 1; 649*3b17b84bSPavel Labath // LATIN CAPITAL LETTER INSULAR G 650*3b17b84bSPavel Labath if (C == 0xa77d) 651*3b17b84bSPavel Labath return 0x1d79; 652*3b17b84bSPavel Labath if (C < 0xa77e) 653*3b17b84bSPavel Labath return C; 654*3b17b84bSPavel Labath // 5 characters 655*3b17b84bSPavel Labath if (C <= 0xa786) 656*3b17b84bSPavel Labath return C | 1; 657*3b17b84bSPavel Labath // LATIN CAPITAL LETTER SALTILLO 658*3b17b84bSPavel Labath if (C == 0xa78b) 659*3b17b84bSPavel Labath return 0xa78c; 660*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED H 661*3b17b84bSPavel Labath if (C == 0xa78d) 662*3b17b84bSPavel Labath return 0x0265; 663*3b17b84bSPavel Labath if (C < 0xa790) 664*3b17b84bSPavel Labath return C; 665*3b17b84bSPavel Labath // 2 characters 666*3b17b84bSPavel Labath if (C <= 0xa792) 667*3b17b84bSPavel Labath return C | 1; 668*3b17b84bSPavel Labath if (C < 0xa796) 669*3b17b84bSPavel Labath return C; 670*3b17b84bSPavel Labath // 10 characters 671*3b17b84bSPavel Labath if (C <= 0xa7a8) 672*3b17b84bSPavel Labath return C | 1; 673*3b17b84bSPavel Labath // LATIN CAPITAL LETTER H WITH HOOK 674*3b17b84bSPavel Labath if (C == 0xa7aa) 675*3b17b84bSPavel Labath return 0x0266; 676*3b17b84bSPavel Labath // LATIN CAPITAL LETTER REVERSED OPEN E 677*3b17b84bSPavel Labath if (C == 0xa7ab) 678*3b17b84bSPavel Labath return 0x025c; 679*3b17b84bSPavel Labath // LATIN CAPITAL LETTER SCRIPT G 680*3b17b84bSPavel Labath if (C == 0xa7ac) 681*3b17b84bSPavel Labath return 0x0261; 682*3b17b84bSPavel Labath // LATIN CAPITAL LETTER L WITH BELT 683*3b17b84bSPavel Labath if (C == 0xa7ad) 684*3b17b84bSPavel Labath return 0x026c; 685*3b17b84bSPavel Labath // LATIN CAPITAL LETTER SMALL CAPITAL I 686*3b17b84bSPavel Labath if (C == 0xa7ae) 687*3b17b84bSPavel Labath return 0x026a; 688*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED K 689*3b17b84bSPavel Labath if (C == 0xa7b0) 690*3b17b84bSPavel Labath return 0x029e; 691*3b17b84bSPavel Labath // LATIN CAPITAL LETTER TURNED T 692*3b17b84bSPavel Labath if (C == 0xa7b1) 693*3b17b84bSPavel Labath return 0x0287; 694*3b17b84bSPavel Labath // LATIN CAPITAL LETTER J WITH CROSSED-TAIL 695*3b17b84bSPavel Labath if (C == 0xa7b2) 696*3b17b84bSPavel Labath return 0x029d; 697*3b17b84bSPavel Labath // LATIN CAPITAL LETTER CHI 698*3b17b84bSPavel Labath if (C == 0xa7b3) 699*3b17b84bSPavel Labath return 0xab53; 700*3b17b84bSPavel Labath if (C < 0xa7b4) 701*3b17b84bSPavel Labath return C; 702*3b17b84bSPavel Labath // 2 characters 703*3b17b84bSPavel Labath if (C <= 0xa7b6) 704*3b17b84bSPavel Labath return C | 1; 705*3b17b84bSPavel Labath if (C < 0xab70) 706*3b17b84bSPavel Labath return C; 707*3b17b84bSPavel Labath // 80 characters 708*3b17b84bSPavel Labath if (C <= 0xabbf) 709*3b17b84bSPavel Labath return C + -38864; 710*3b17b84bSPavel Labath if (C < 0xff21) 711*3b17b84bSPavel Labath return C; 712*3b17b84bSPavel Labath // 26 characters 713*3b17b84bSPavel Labath if (C <= 0xff3a) 714*3b17b84bSPavel Labath return C + 32; 715*3b17b84bSPavel Labath if (C < 0x10400) 716*3b17b84bSPavel Labath return C; 717*3b17b84bSPavel Labath // 40 characters 718*3b17b84bSPavel Labath if (C <= 0x10427) 719*3b17b84bSPavel Labath return C + 40; 720*3b17b84bSPavel Labath if (C < 0x104b0) 721*3b17b84bSPavel Labath return C; 722*3b17b84bSPavel Labath // 36 characters 723*3b17b84bSPavel Labath if (C <= 0x104d3) 724*3b17b84bSPavel Labath return C + 40; 725*3b17b84bSPavel Labath if (C < 0x10c80) 726*3b17b84bSPavel Labath return C; 727*3b17b84bSPavel Labath // 51 characters 728*3b17b84bSPavel Labath if (C <= 0x10cb2) 729*3b17b84bSPavel Labath return C + 64; 730*3b17b84bSPavel Labath if (C < 0x118a0) 731*3b17b84bSPavel Labath return C; 732*3b17b84bSPavel Labath // 32 characters 733*3b17b84bSPavel Labath if (C <= 0x118bf) 734*3b17b84bSPavel Labath return C + 32; 735*3b17b84bSPavel Labath if (C < 0x1e900) 736*3b17b84bSPavel Labath return C; 737*3b17b84bSPavel Labath // 34 characters 738*3b17b84bSPavel Labath if (C <= 0x1e921) 739*3b17b84bSPavel Labath return C + 34; 740*3b17b84bSPavel Labath 741*3b17b84bSPavel Labath return C; 742*3b17b84bSPavel Labath } 743