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