UnicodeCaseFold.cpp 16 KB

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