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