UnicodeCaseFold.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  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/9.0.0/ucd/CaseFolding.txt
  6. //
  7. // To regenerate this file, run:
  8. // utils/unicode-case-fold.py \
  9. // "http://www.unicode.org/Public/9.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 < 0x1e00)
  413. return C;
  414. // 75 characters
  415. if (C <= 0x1e94)
  416. return C | 1;
  417. // LATIN SMALL LETTER LONG S WITH DOT ABOVE
  418. if (C == 0x1e9b)
  419. return 0x1e61;
  420. // LATIN CAPITAL LETTER SHARP S
  421. if (C == 0x1e9e)
  422. return 0x00df;
  423. if (C < 0x1ea0)
  424. return C;
  425. // 48 characters
  426. if (C <= 0x1efe)
  427. return C | 1;
  428. if (C < 0x1f08)
  429. return C;
  430. // 8 characters
  431. if (C <= 0x1f0f)
  432. return C + -8;
  433. if (C < 0x1f18)
  434. return C;
  435. // 6 characters
  436. if (C <= 0x1f1d)
  437. return C + -8;
  438. if (C < 0x1f28)
  439. return C;
  440. // 8 characters
  441. if (C <= 0x1f2f)
  442. return C + -8;
  443. if (C < 0x1f38)
  444. return C;
  445. // 8 characters
  446. if (C <= 0x1f3f)
  447. return C + -8;
  448. if (C < 0x1f48)
  449. return C;
  450. // 6 characters
  451. if (C <= 0x1f4d)
  452. return C + -8;
  453. if (C < 0x1f59)
  454. return C;
  455. // 4 characters
  456. if (C <= 0x1f5f && C % 2 == 1)
  457. return C + -8;
  458. if (C < 0x1f68)
  459. return C;
  460. // 8 characters
  461. if (C <= 0x1f6f)
  462. return C + -8;
  463. if (C < 0x1f88)
  464. return C;
  465. // 8 characters
  466. if (C <= 0x1f8f)
  467. return C + -8;
  468. if (C < 0x1f98)
  469. return C;
  470. // 8 characters
  471. if (C <= 0x1f9f)
  472. return C + -8;
  473. if (C < 0x1fa8)
  474. return C;
  475. // 8 characters
  476. if (C <= 0x1faf)
  477. return C + -8;
  478. if (C < 0x1fb8)
  479. return C;
  480. // 2 characters
  481. if (C <= 0x1fb9)
  482. return C + -8;
  483. if (C < 0x1fba)
  484. return C;
  485. // 2 characters
  486. if (C <= 0x1fbb)
  487. return C + -74;
  488. // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
  489. if (C == 0x1fbc)
  490. return 0x1fb3;
  491. // GREEK PROSGEGRAMMENI
  492. if (C == 0x1fbe)
  493. return 0x03b9;
  494. if (C < 0x1fc8)
  495. return C;
  496. // 4 characters
  497. if (C <= 0x1fcb)
  498. return C + -86;
  499. // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
  500. if (C == 0x1fcc)
  501. return 0x1fc3;
  502. if (C < 0x1fd8)
  503. return C;
  504. // 2 characters
  505. if (C <= 0x1fd9)
  506. return C + -8;
  507. if (C < 0x1fda)
  508. return C;
  509. // 2 characters
  510. if (C <= 0x1fdb)
  511. return C + -100;
  512. if (C < 0x1fe8)
  513. return C;
  514. // 2 characters
  515. if (C <= 0x1fe9)
  516. return C + -8;
  517. if (C < 0x1fea)
  518. return C;
  519. // 2 characters
  520. if (C <= 0x1feb)
  521. return C + -112;
  522. // GREEK CAPITAL LETTER RHO WITH DASIA
  523. if (C == 0x1fec)
  524. return 0x1fe5;
  525. if (C < 0x1ff8)
  526. return C;
  527. // 2 characters
  528. if (C <= 0x1ff9)
  529. return C + -128;
  530. if (C < 0x1ffa)
  531. return C;
  532. // 2 characters
  533. if (C <= 0x1ffb)
  534. return C + -126;
  535. // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
  536. if (C == 0x1ffc)
  537. return 0x1ff3;
  538. // OHM SIGN
  539. if (C == 0x2126)
  540. return 0x03c9;
  541. // KELVIN SIGN
  542. if (C == 0x212a)
  543. return 0x006b;
  544. // ANGSTROM SIGN
  545. if (C == 0x212b)
  546. return 0x00e5;
  547. // TURNED CAPITAL F
  548. if (C == 0x2132)
  549. return 0x214e;
  550. if (C < 0x2160)
  551. return C;
  552. // 16 characters
  553. if (C <= 0x216f)
  554. return C + 16;
  555. // ROMAN NUMERAL REVERSED ONE HUNDRED
  556. if (C == 0x2183)
  557. return 0x2184;
  558. if (C < 0x24b6)
  559. return C;
  560. // 26 characters
  561. if (C <= 0x24cf)
  562. return C + 26;
  563. if (C < 0x2c00)
  564. return C;
  565. // 47 characters
  566. if (C <= 0x2c2e)
  567. return C + 48;
  568. // LATIN CAPITAL LETTER L WITH DOUBLE BAR
  569. if (C == 0x2c60)
  570. return 0x2c61;
  571. // LATIN CAPITAL LETTER L WITH MIDDLE TILDE
  572. if (C == 0x2c62)
  573. return 0x026b;
  574. // LATIN CAPITAL LETTER P WITH STROKE
  575. if (C == 0x2c63)
  576. return 0x1d7d;
  577. // LATIN CAPITAL LETTER R WITH TAIL
  578. if (C == 0x2c64)
  579. return 0x027d;
  580. if (C < 0x2c67)
  581. return C;
  582. // 3 characters
  583. if (C <= 0x2c6b && C % 2 == 1)
  584. return C + 1;
  585. // LATIN CAPITAL LETTER ALPHA
  586. if (C == 0x2c6d)
  587. return 0x0251;
  588. // LATIN CAPITAL LETTER M WITH HOOK
  589. if (C == 0x2c6e)
  590. return 0x0271;
  591. // LATIN CAPITAL LETTER TURNED A
  592. if (C == 0x2c6f)
  593. return 0x0250;
  594. // LATIN CAPITAL LETTER TURNED ALPHA
  595. if (C == 0x2c70)
  596. return 0x0252;
  597. if (C < 0x2c72)
  598. return C;
  599. // 2 characters
  600. if (C <= 0x2c75 && C % 3 == 2)
  601. return C + 1;
  602. if (C < 0x2c7e)
  603. return C;
  604. // 2 characters
  605. if (C <= 0x2c7f)
  606. return C + -10815;
  607. if (C < 0x2c80)
  608. return C;
  609. // 50 characters
  610. if (C <= 0x2ce2)
  611. return C | 1;
  612. if (C < 0x2ceb)
  613. return C;
  614. // 2 characters
  615. if (C <= 0x2ced && C % 2 == 1)
  616. return C + 1;
  617. if (C < 0x2cf2)
  618. return C;
  619. // 2 characters
  620. if (C <= 0xa640 && C % 31054 == 11506)
  621. return C + 1;
  622. if (C < 0xa642)
  623. return C;
  624. // 22 characters
  625. if (C <= 0xa66c)
  626. return C | 1;
  627. if (C < 0xa680)
  628. return C;
  629. // 14 characters
  630. if (C <= 0xa69a)
  631. return C | 1;
  632. if (C < 0xa722)
  633. return C;
  634. // 7 characters
  635. if (C <= 0xa72e)
  636. return C | 1;
  637. if (C < 0xa732)
  638. return C;
  639. // 31 characters
  640. if (C <= 0xa76e)
  641. return C | 1;
  642. if (C < 0xa779)
  643. return C;
  644. // 2 characters
  645. if (C <= 0xa77b && C % 2 == 1)
  646. return C + 1;
  647. // LATIN CAPITAL LETTER INSULAR G
  648. if (C == 0xa77d)
  649. return 0x1d79;
  650. if (C < 0xa77e)
  651. return C;
  652. // 5 characters
  653. if (C <= 0xa786)
  654. return C | 1;
  655. // LATIN CAPITAL LETTER SALTILLO
  656. if (C == 0xa78b)
  657. return 0xa78c;
  658. // LATIN CAPITAL LETTER TURNED H
  659. if (C == 0xa78d)
  660. return 0x0265;
  661. if (C < 0xa790)
  662. return C;
  663. // 2 characters
  664. if (C <= 0xa792)
  665. return C | 1;
  666. if (C < 0xa796)
  667. return C;
  668. // 10 characters
  669. if (C <= 0xa7a8)
  670. return C | 1;
  671. // LATIN CAPITAL LETTER H WITH HOOK
  672. if (C == 0xa7aa)
  673. return 0x0266;
  674. // LATIN CAPITAL LETTER REVERSED OPEN E
  675. if (C == 0xa7ab)
  676. return 0x025c;
  677. // LATIN CAPITAL LETTER SCRIPT G
  678. if (C == 0xa7ac)
  679. return 0x0261;
  680. // LATIN CAPITAL LETTER L WITH BELT
  681. if (C == 0xa7ad)
  682. return 0x026c;
  683. // LATIN CAPITAL LETTER SMALL CAPITAL I
  684. if (C == 0xa7ae)
  685. return 0x026a;
  686. // LATIN CAPITAL LETTER TURNED K
  687. if (C == 0xa7b0)
  688. return 0x029e;
  689. // LATIN CAPITAL LETTER TURNED T
  690. if (C == 0xa7b1)
  691. return 0x0287;
  692. // LATIN CAPITAL LETTER J WITH CROSSED-TAIL
  693. if (C == 0xa7b2)
  694. return 0x029d;
  695. // LATIN CAPITAL LETTER CHI
  696. if (C == 0xa7b3)
  697. return 0xab53;
  698. if (C < 0xa7b4)
  699. return C;
  700. // 2 characters
  701. if (C <= 0xa7b6)
  702. return C | 1;
  703. if (C < 0xab70)
  704. return C;
  705. // 80 characters
  706. if (C <= 0xabbf)
  707. return C + -38864;
  708. if (C < 0xff21)
  709. return C;
  710. // 26 characters
  711. if (C <= 0xff3a)
  712. return C + 32;
  713. if (C < 0x10400)
  714. return C;
  715. // 40 characters
  716. if (C <= 0x10427)
  717. return C + 40;
  718. if (C < 0x104b0)
  719. return C;
  720. // 36 characters
  721. if (C <= 0x104d3)
  722. return C + 40;
  723. if (C < 0x10c80)
  724. return C;
  725. // 51 characters
  726. if (C <= 0x10cb2)
  727. return C + 64;
  728. if (C < 0x118a0)
  729. return C;
  730. // 32 characters
  731. if (C <= 0x118bf)
  732. return C + 32;
  733. if (C < 0x1e900)
  734. return C;
  735. // 34 characters
  736. if (C <= 0x1e921)
  737. return C + 34;
  738. return C;
  739. }