summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-03-22 19:02:06 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-03-22 19:02:06 (GMT)
commita4ecbee86766b35d25d41d1a178806e1688485df (patch)
tree0cb08f45ced6dd4ed97188972c5a718c94219d46
parentfa1897b1889f7bf74de68f1ac99cf3be343a7551 (diff)
downloadDoxygen-a4ecbee86766b35d25d41d1a178806e1688485df.zip
Doxygen-a4ecbee86766b35d25d41d1a178806e1688485df.tar.gz
Doxygen-a4ecbee86766b35d25d41d1a178806e1688485df.tar.bz2
issue #8375: Lowercase search does not find non-ASCII uppercase pages and vice versa
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/caseconvert.h2903
-rw-r--r--src/caseconvert.py56
-rw-r--r--src/clangparser.cpp15
-rw-r--r--src/definition.cpp22
-rw-r--r--src/htmlgen.cpp3
-rw-r--r--src/index.cpp39
-rw-r--r--src/latexgen.cpp18
-rw-r--r--src/mangen.cpp3
-rw-r--r--src/markdown.cpp19
-rw-r--r--src/rtfgen.cpp3
-rw-r--r--src/searchindex.cpp68
-rw-r--r--src/template.cpp6
-rw-r--r--src/utf8.cpp208
-rw-r--r--src/utf8.h71
-rw-r--r--src/util.cpp81
-rw-r--r--src/util.h17
-rw-r--r--src/xmlgen.cpp3
-rw-r--r--templates/html/search.js6
19 files changed, 3334 insertions, 208 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aaf1978..12efd52 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -301,6 +301,7 @@ add_library(doxymain STATIC
template.cpp
textdocvisitor.cpp
tooltip.cpp
+ utf8.cpp
util.cpp
vhdldocgen.cpp
vhdljjparser.cpp
diff --git a/src/caseconvert.h b/src/caseconvert.h
new file mode 100644
index 0000000..e2159bc
--- /dev/null
+++ b/src/caseconvert.h
@@ -0,0 +1,2903 @@
+/** This file is generated by python3 caseconvert.py. DO NOT EDIT! */
+
+#ifndef CASECONVERT_H
+#define CASECONVERT_H
+
+#include <cstdint>
+#include <string>
+
+inline const char *convertUnicodeToUpper(uint32_t code)
+{
+ switch(code)
+ {
+ case 0x61 /* a */: return u8"A" /* 0x41 */;
+ case 0x62 /* b */: return u8"B" /* 0x42 */;
+ case 0x63 /* c */: return u8"C" /* 0x43 */;
+ case 0x64 /* d */: return u8"D" /* 0x44 */;
+ case 0x65 /* e */: return u8"E" /* 0x45 */;
+ case 0x66 /* f */: return u8"F" /* 0x46 */;
+ case 0x67 /* g */: return u8"G" /* 0x47 */;
+ case 0x68 /* h */: return u8"H" /* 0x48 */;
+ case 0x69 /* i */: return u8"I" /* 0x49 */;
+ case 0x6a /* j */: return u8"J" /* 0x4a */;
+ case 0x6b /* k */: return u8"K" /* 0x4b */;
+ case 0x6c /* l */: return u8"L" /* 0x4c */;
+ case 0x6d /* m */: return u8"M" /* 0x4d */;
+ case 0x6e /* n */: return u8"N" /* 0x4e */;
+ case 0x6f /* o */: return u8"O" /* 0x4f */;
+ case 0x70 /* p */: return u8"P" /* 0x50 */;
+ case 0x71 /* q */: return u8"Q" /* 0x51 */;
+ case 0x72 /* r */: return u8"R" /* 0x52 */;
+ case 0x73 /* s */: return u8"S" /* 0x53 */;
+ case 0x74 /* t */: return u8"T" /* 0x54 */;
+ case 0x75 /* u */: return u8"U" /* 0x55 */;
+ case 0x76 /* v */: return u8"V" /* 0x56 */;
+ case 0x77 /* w */: return u8"W" /* 0x57 */;
+ case 0x78 /* x */: return u8"X" /* 0x58 */;
+ case 0x79 /* y */: return u8"Y" /* 0x59 */;
+ case 0x7a /* z */: return u8"Z" /* 0x5a */;
+ case 0xb5 /* µ */: return u8"Μ" /* 0x39c */;
+ case 0xdf /* ß */: return u8"SS" /* 0x53,0x53 */;
+ case 0xe0 /* à */: return u8"À" /* 0xc0 */;
+ case 0xe1 /* á */: return u8"Á" /* 0xc1 */;
+ case 0xe2 /* â */: return u8"Â" /* 0xc2 */;
+ case 0xe3 /* ã */: return u8"Ã" /* 0xc3 */;
+ case 0xe4 /* ä */: return u8"Ä" /* 0xc4 */;
+ case 0xe5 /* å */: return u8"Å" /* 0xc5 */;
+ case 0xe6 /* æ */: return u8"Æ" /* 0xc6 */;
+ case 0xe7 /* ç */: return u8"Ç" /* 0xc7 */;
+ case 0xe8 /* è */: return u8"È" /* 0xc8 */;
+ case 0xe9 /* é */: return u8"É" /* 0xc9 */;
+ case 0xea /* ê */: return u8"Ê" /* 0xca */;
+ case 0xeb /* ë */: return u8"Ë" /* 0xcb */;
+ case 0xec /* ì */: return u8"Ì" /* 0xcc */;
+ case 0xed /* í */: return u8"Í" /* 0xcd */;
+ case 0xee /* î */: return u8"Î" /* 0xce */;
+ case 0xef /* ï */: return u8"Ï" /* 0xcf */;
+ case 0xf0 /* ð */: return u8"Ð" /* 0xd0 */;
+ case 0xf1 /* ñ */: return u8"Ñ" /* 0xd1 */;
+ case 0xf2 /* ò */: return u8"Ò" /* 0xd2 */;
+ case 0xf3 /* ó */: return u8"Ó" /* 0xd3 */;
+ case 0xf4 /* ô */: return u8"Ô" /* 0xd4 */;
+ case 0xf5 /* õ */: return u8"Õ" /* 0xd5 */;
+ case 0xf6 /* ö */: return u8"Ö" /* 0xd6 */;
+ case 0xf8 /* ø */: return u8"Ø" /* 0xd8 */;
+ case 0xf9 /* ù */: return u8"Ù" /* 0xd9 */;
+ case 0xfa /* ú */: return u8"Ú" /* 0xda */;
+ case 0xfb /* û */: return u8"Û" /* 0xdb */;
+ case 0xfc /* ü */: return u8"Ü" /* 0xdc */;
+ case 0xfd /* ý */: return u8"Ý" /* 0xdd */;
+ case 0xfe /* þ */: return u8"Þ" /* 0xde */;
+ case 0xff /* ÿ */: return u8"Ÿ" /* 0x178 */;
+ case 0x101 /* ā */: return u8"Ā" /* 0x100 */;
+ case 0x103 /* ă */: return u8"Ă" /* 0x102 */;
+ case 0x105 /* ą */: return u8"Ą" /* 0x104 */;
+ case 0x107 /* ć */: return u8"Ć" /* 0x106 */;
+ case 0x109 /* ĉ */: return u8"Ĉ" /* 0x108 */;
+ case 0x10b /* ċ */: return u8"Ċ" /* 0x10a */;
+ case 0x10d /* č */: return u8"Č" /* 0x10c */;
+ case 0x10f /* ď */: return u8"Ď" /* 0x10e */;
+ case 0x111 /* đ */: return u8"Đ" /* 0x110 */;
+ case 0x113 /* ē */: return u8"Ē" /* 0x112 */;
+ case 0x115 /* ĕ */: return u8"Ĕ" /* 0x114 */;
+ case 0x117 /* ė */: return u8"Ė" /* 0x116 */;
+ case 0x119 /* ę */: return u8"Ę" /* 0x118 */;
+ case 0x11b /* ě */: return u8"Ě" /* 0x11a */;
+ case 0x11d /* ĝ */: return u8"Ĝ" /* 0x11c */;
+ case 0x11f /* ğ */: return u8"Ğ" /* 0x11e */;
+ case 0x121 /* ġ */: return u8"Ġ" /* 0x120 */;
+ case 0x123 /* ģ */: return u8"Ģ" /* 0x122 */;
+ case 0x125 /* ĥ */: return u8"Ĥ" /* 0x124 */;
+ case 0x127 /* ħ */: return u8"Ħ" /* 0x126 */;
+ case 0x129 /* ĩ */: return u8"Ĩ" /* 0x128 */;
+ case 0x12b /* ī */: return u8"Ī" /* 0x12a */;
+ case 0x12d /* ĭ */: return u8"Ĭ" /* 0x12c */;
+ case 0x12f /* į */: return u8"Į" /* 0x12e */;
+ case 0x131 /* ı */: return u8"I" /* 0x49 */;
+ case 0x133 /* ij */: return u8"IJ" /* 0x132 */;
+ case 0x135 /* ĵ */: return u8"Ĵ" /* 0x134 */;
+ case 0x137 /* ķ */: return u8"Ķ" /* 0x136 */;
+ case 0x13a /* ĺ */: return u8"Ĺ" /* 0x139 */;
+ case 0x13c /* ļ */: return u8"Ļ" /* 0x13b */;
+ case 0x13e /* ľ */: return u8"Ľ" /* 0x13d */;
+ case 0x140 /* ŀ */: return u8"Ŀ" /* 0x13f */;
+ case 0x142 /* ł */: return u8"Ł" /* 0x141 */;
+ case 0x144 /* ń */: return u8"Ń" /* 0x143 */;
+ case 0x146 /* ņ */: return u8"Ņ" /* 0x145 */;
+ case 0x148 /* ň */: return u8"Ň" /* 0x147 */;
+ case 0x149 /* ʼn */: return u8"ʼN" /* 0x2bc,0x4e */;
+ case 0x14b /* ŋ */: return u8"Ŋ" /* 0x14a */;
+ case 0x14d /* ō */: return u8"Ō" /* 0x14c */;
+ case 0x14f /* ŏ */: return u8"Ŏ" /* 0x14e */;
+ case 0x151 /* ő */: return u8"Ő" /* 0x150 */;
+ case 0x153 /* œ */: return u8"Œ" /* 0x152 */;
+ case 0x155 /* ŕ */: return u8"Ŕ" /* 0x154 */;
+ case 0x157 /* ŗ */: return u8"Ŗ" /* 0x156 */;
+ case 0x159 /* ř */: return u8"Ř" /* 0x158 */;
+ case 0x15b /* ś */: return u8"Ś" /* 0x15a */;
+ case 0x15d /* ŝ */: return u8"Ŝ" /* 0x15c */;
+ case 0x15f /* ş */: return u8"Ş" /* 0x15e */;
+ case 0x161 /* š */: return u8"Š" /* 0x160 */;
+ case 0x163 /* ţ */: return u8"Ţ" /* 0x162 */;
+ case 0x165 /* ť */: return u8"Ť" /* 0x164 */;
+ case 0x167 /* ŧ */: return u8"Ŧ" /* 0x166 */;
+ case 0x169 /* ũ */: return u8"Ũ" /* 0x168 */;
+ case 0x16b /* ū */: return u8"Ū" /* 0x16a */;
+ case 0x16d /* ŭ */: return u8"Ŭ" /* 0x16c */;
+ case 0x16f /* ů */: return u8"Ů" /* 0x16e */;
+ case 0x171 /* ű */: return u8"Ű" /* 0x170 */;
+ case 0x173 /* ų */: return u8"Ų" /* 0x172 */;
+ case 0x175 /* ŵ */: return u8"Ŵ" /* 0x174 */;
+ case 0x177 /* ŷ */: return u8"Ŷ" /* 0x176 */;
+ case 0x17a /* ź */: return u8"Ź" /* 0x179 */;
+ case 0x17c /* ż */: return u8"Ż" /* 0x17b */;
+ case 0x17e /* ž */: return u8"Ž" /* 0x17d */;
+ case 0x17f /* ſ */: return u8"S" /* 0x53 */;
+ case 0x180 /* ƀ */: return u8"Ƀ" /* 0x243 */;
+ case 0x183 /* ƃ */: return u8"Ƃ" /* 0x182 */;
+ case 0x185 /* ƅ */: return u8"Ƅ" /* 0x184 */;
+ case 0x188 /* ƈ */: return u8"Ƈ" /* 0x187 */;
+ case 0x18c /* ƌ */: return u8"Ƌ" /* 0x18b */;
+ case 0x192 /* ƒ */: return u8"Ƒ" /* 0x191 */;
+ case 0x195 /* ƕ */: return u8"Ƕ" /* 0x1f6 */;
+ case 0x199 /* ƙ */: return u8"Ƙ" /* 0x198 */;
+ case 0x19a /* ƚ */: return u8"Ƚ" /* 0x23d */;
+ case 0x19e /* ƞ */: return u8"Ƞ" /* 0x220 */;
+ case 0x1a1 /* ơ */: return u8"Ơ" /* 0x1a0 */;
+ case 0x1a3 /* ƣ */: return u8"Ƣ" /* 0x1a2 */;
+ case 0x1a5 /* ƥ */: return u8"Ƥ" /* 0x1a4 */;
+ case 0x1a8 /* ƨ */: return u8"Ƨ" /* 0x1a7 */;
+ case 0x1ad /* ƭ */: return u8"Ƭ" /* 0x1ac */;
+ case 0x1b0 /* ư */: return u8"Ư" /* 0x1af */;
+ case 0x1b4 /* ƴ */: return u8"Ƴ" /* 0x1b3 */;
+ case 0x1b6 /* ƶ */: return u8"Ƶ" /* 0x1b5 */;
+ case 0x1b9 /* ƹ */: return u8"Ƹ" /* 0x1b8 */;
+ case 0x1bd /* ƽ */: return u8"Ƽ" /* 0x1bc */;
+ case 0x1bf /* ƿ */: return u8"Ƿ" /* 0x1f7 */;
+ case 0x1c5 /* Dž */: return u8"DŽ" /* 0x1c4 */;
+ case 0x1c6 /* dž */: return u8"DŽ" /* 0x1c4 */;
+ case 0x1c8 /* Lj */: return u8"LJ" /* 0x1c7 */;
+ case 0x1c9 /* lj */: return u8"LJ" /* 0x1c7 */;
+ case 0x1cb /* Nj */: return u8"NJ" /* 0x1ca */;
+ case 0x1cc /* nj */: return u8"NJ" /* 0x1ca */;
+ case 0x1ce /* ǎ */: return u8"Ǎ" /* 0x1cd */;
+ case 0x1d0 /* ǐ */: return u8"Ǐ" /* 0x1cf */;
+ case 0x1d2 /* ǒ */: return u8"Ǒ" /* 0x1d1 */;
+ case 0x1d4 /* ǔ */: return u8"Ǔ" /* 0x1d3 */;
+ case 0x1d6 /* ǖ */: return u8"Ǖ" /* 0x1d5 */;
+ case 0x1d8 /* ǘ */: return u8"Ǘ" /* 0x1d7 */;
+ case 0x1da /* ǚ */: return u8"Ǚ" /* 0x1d9 */;
+ case 0x1dc /* ǜ */: return u8"Ǜ" /* 0x1db */;
+ case 0x1dd /* ǝ */: return u8"Ǝ" /* 0x18e */;
+ case 0x1df /* ǟ */: return u8"Ǟ" /* 0x1de */;
+ case 0x1e1 /* ǡ */: return u8"Ǡ" /* 0x1e0 */;
+ case 0x1e3 /* ǣ */: return u8"Ǣ" /* 0x1e2 */;
+ case 0x1e5 /* ǥ */: return u8"Ǥ" /* 0x1e4 */;
+ case 0x1e7 /* ǧ */: return u8"Ǧ" /* 0x1e6 */;
+ case 0x1e9 /* ǩ */: return u8"Ǩ" /* 0x1e8 */;
+ case 0x1eb /* ǫ */: return u8"Ǫ" /* 0x1ea */;
+ case 0x1ed /* ǭ */: return u8"Ǭ" /* 0x1ec */;
+ case 0x1ef /* ǯ */: return u8"Ǯ" /* 0x1ee */;
+ case 0x1f0 /* ǰ */: return u8"J̌" /* 0x4a,0x30c */;
+ case 0x1f2 /* Dz */: return u8"DZ" /* 0x1f1 */;
+ case 0x1f3 /* dz */: return u8"DZ" /* 0x1f1 */;
+ case 0x1f5 /* ǵ */: return u8"Ǵ" /* 0x1f4 */;
+ case 0x1f9 /* ǹ */: return u8"Ǹ" /* 0x1f8 */;
+ case 0x1fb /* ǻ */: return u8"Ǻ" /* 0x1fa */;
+ case 0x1fd /* ǽ */: return u8"Ǽ" /* 0x1fc */;
+ case 0x1ff /* ǿ */: return u8"Ǿ" /* 0x1fe */;
+ case 0x201 /* ȁ */: return u8"Ȁ" /* 0x200 */;
+ case 0x203 /* ȃ */: return u8"Ȃ" /* 0x202 */;
+ case 0x205 /* ȅ */: return u8"Ȅ" /* 0x204 */;
+ case 0x207 /* ȇ */: return u8"Ȇ" /* 0x206 */;
+ case 0x209 /* ȉ */: return u8"Ȉ" /* 0x208 */;
+ case 0x20b /* ȋ */: return u8"Ȋ" /* 0x20a */;
+ case 0x20d /* ȍ */: return u8"Ȍ" /* 0x20c */;
+ case 0x20f /* ȏ */: return u8"Ȏ" /* 0x20e */;
+ case 0x211 /* ȑ */: return u8"Ȑ" /* 0x210 */;
+ case 0x213 /* ȓ */: return u8"Ȓ" /* 0x212 */;
+ case 0x215 /* ȕ */: return u8"Ȕ" /* 0x214 */;
+ case 0x217 /* ȗ */: return u8"Ȗ" /* 0x216 */;
+ case 0x219 /* ș */: return u8"Ș" /* 0x218 */;
+ case 0x21b /* ț */: return u8"Ț" /* 0x21a */;
+ case 0x21d /* ȝ */: return u8"Ȝ" /* 0x21c */;
+ case 0x21f /* ȟ */: return u8"Ȟ" /* 0x21e */;
+ case 0x223 /* ȣ */: return u8"Ȣ" /* 0x222 */;
+ case 0x225 /* ȥ */: return u8"Ȥ" /* 0x224 */;
+ case 0x227 /* ȧ */: return u8"Ȧ" /* 0x226 */;
+ case 0x229 /* ȩ */: return u8"Ȩ" /* 0x228 */;
+ case 0x22b /* ȫ */: return u8"Ȫ" /* 0x22a */;
+ case 0x22d /* ȭ */: return u8"Ȭ" /* 0x22c */;
+ case 0x22f /* ȯ */: return u8"Ȯ" /* 0x22e */;
+ case 0x231 /* ȱ */: return u8"Ȱ" /* 0x230 */;
+ case 0x233 /* ȳ */: return u8"Ȳ" /* 0x232 */;
+ case 0x23c /* ȼ */: return u8"Ȼ" /* 0x23b */;
+ case 0x23f /* ȿ */: return u8"Ȿ" /* 0x2c7e */;
+ case 0x240 /* ɀ */: return u8"Ɀ" /* 0x2c7f */;
+ case 0x242 /* ɂ */: return u8"Ɂ" /* 0x241 */;
+ case 0x247 /* ɇ */: return u8"Ɇ" /* 0x246 */;
+ case 0x249 /* ɉ */: return u8"Ɉ" /* 0x248 */;
+ case 0x24b /* ɋ */: return u8"Ɋ" /* 0x24a */;
+ case 0x24d /* ɍ */: return u8"Ɍ" /* 0x24c */;
+ case 0x24f /* ɏ */: return u8"Ɏ" /* 0x24e */;
+ case 0x250 /* ɐ */: return u8"Ɐ" /* 0x2c6f */;
+ case 0x251 /* ɑ */: return u8"Ɑ" /* 0x2c6d */;
+ case 0x252 /* ɒ */: return u8"Ɒ" /* 0x2c70 */;
+ case 0x253 /* ɓ */: return u8"Ɓ" /* 0x181 */;
+ case 0x254 /* ɔ */: return u8"Ɔ" /* 0x186 */;
+ case 0x256 /* ɖ */: return u8"Ɖ" /* 0x189 */;
+ case 0x257 /* ɗ */: return u8"Ɗ" /* 0x18a */;
+ case 0x259 /* ə */: return u8"Ə" /* 0x18f */;
+ case 0x25b /* ɛ */: return u8"Ɛ" /* 0x190 */;
+ case 0x25c /* ɜ */: return u8"Ɜ" /* 0xa7ab */;
+ case 0x260 /* ɠ */: return u8"Ɠ" /* 0x193 */;
+ case 0x261 /* ɡ */: return u8"Ɡ" /* 0xa7ac */;
+ case 0x263 /* ɣ */: return u8"Ɣ" /* 0x194 */;
+ case 0x265 /* ɥ */: return u8"Ɥ" /* 0xa78d */;
+ case 0x266 /* ɦ */: return u8"Ɦ" /* 0xa7aa */;
+ case 0x268 /* ɨ */: return u8"Ɨ" /* 0x197 */;
+ case 0x269 /* ɩ */: return u8"Ɩ" /* 0x196 */;
+ case 0x26a /* ɪ */: return u8"Ɪ" /* 0xa7ae */;
+ case 0x26b /* ɫ */: return u8"Ɫ" /* 0x2c62 */;
+ case 0x26c /* ɬ */: return u8"Ɬ" /* 0xa7ad */;
+ case 0x26f /* ɯ */: return u8"Ɯ" /* 0x19c */;
+ case 0x271 /* ɱ */: return u8"Ɱ" /* 0x2c6e */;
+ case 0x272 /* ɲ */: return u8"Ɲ" /* 0x19d */;
+ case 0x275 /* ɵ */: return u8"Ɵ" /* 0x19f */;
+ case 0x27d /* ɽ */: return u8"Ɽ" /* 0x2c64 */;
+ case 0x280 /* ʀ */: return u8"Ʀ" /* 0x1a6 */;
+ case 0x282 /* ʂ */: return u8"Ʂ" /* 0xa7c5 */;
+ case 0x283 /* ʃ */: return u8"Ʃ" /* 0x1a9 */;
+ case 0x287 /* ʇ */: return u8"Ʇ" /* 0xa7b1 */;
+ case 0x288 /* ʈ */: return u8"Ʈ" /* 0x1ae */;
+ case 0x289 /* ʉ */: return u8"Ʉ" /* 0x244 */;
+ case 0x28a /* ʊ */: return u8"Ʊ" /* 0x1b1 */;
+ case 0x28b /* ʋ */: return u8"Ʋ" /* 0x1b2 */;
+ case 0x28c /* ʌ */: return u8"Ʌ" /* 0x245 */;
+ case 0x292 /* ʒ */: return u8"Ʒ" /* 0x1b7 */;
+ case 0x29d /* ʝ */: return u8"Ʝ" /* 0xa7b2 */;
+ case 0x29e /* ʞ */: return u8"Ʞ" /* 0xa7b0 */;
+ case 0x345 /* ͅ */: return u8"Ι" /* 0x399 */;
+ case 0x371 /* ͱ */: return u8"Ͱ" /* 0x370 */;
+ case 0x373 /* ͳ */: return u8"Ͳ" /* 0x372 */;
+ case 0x377 /* ͷ */: return u8"Ͷ" /* 0x376 */;
+ case 0x37b /* ͻ */: return u8"Ͻ" /* 0x3fd */;
+ case 0x37c /* ͼ */: return u8"Ͼ" /* 0x3fe */;
+ case 0x37d /* ͽ */: return u8"Ͽ" /* 0x3ff */;
+ case 0x390 /* ΐ */: return u8"Ϊ́" /* 0x399,0x308,0x301 */;
+ case 0x3ac /* ά */: return u8"Ά" /* 0x386 */;
+ case 0x3ad /* έ */: return u8"Έ" /* 0x388 */;
+ case 0x3ae /* ή */: return u8"Ή" /* 0x389 */;
+ case 0x3af /* ί */: return u8"Ί" /* 0x38a */;
+ case 0x3b0 /* ΰ */: return u8"Ϋ́" /* 0x3a5,0x308,0x301 */;
+ case 0x3b1 /* α */: return u8"Α" /* 0x391 */;
+ case 0x3b2 /* β */: return u8"Β" /* 0x392 */;
+ case 0x3b3 /* γ */: return u8"Γ" /* 0x393 */;
+ case 0x3b4 /* δ */: return u8"Δ" /* 0x394 */;
+ case 0x3b5 /* ε */: return u8"Ε" /* 0x395 */;
+ case 0x3b6 /* ζ */: return u8"Ζ" /* 0x396 */;
+ case 0x3b7 /* η */: return u8"Η" /* 0x397 */;
+ case 0x3b8 /* θ */: return u8"Θ" /* 0x398 */;
+ case 0x3b9 /* ι */: return u8"Ι" /* 0x399 */;
+ case 0x3ba /* κ */: return u8"Κ" /* 0x39a */;
+ case 0x3bb /* λ */: return u8"Λ" /* 0x39b */;
+ case 0x3bc /* μ */: return u8"Μ" /* 0x39c */;
+ case 0x3bd /* ν */: return u8"Ν" /* 0x39d */;
+ case 0x3be /* ξ */: return u8"Ξ" /* 0x39e */;
+ case 0x3bf /* ο */: return u8"Ο" /* 0x39f */;
+ case 0x3c0 /* π */: return u8"Π" /* 0x3a0 */;
+ case 0x3c1 /* ρ */: return u8"Ρ" /* 0x3a1 */;
+ case 0x3c2 /* ς */: return u8"Σ" /* 0x3a3 */;
+ case 0x3c3 /* σ */: return u8"Σ" /* 0x3a3 */;
+ case 0x3c4 /* τ */: return u8"Τ" /* 0x3a4 */;
+ case 0x3c5 /* υ */: return u8"Υ" /* 0x3a5 */;
+ case 0x3c6 /* φ */: return u8"Φ" /* 0x3a6 */;
+ case 0x3c7 /* χ */: return u8"Χ" /* 0x3a7 */;
+ case 0x3c8 /* ψ */: return u8"Ψ" /* 0x3a8 */;
+ case 0x3c9 /* ω */: return u8"Ω" /* 0x3a9 */;
+ case 0x3ca /* ϊ */: return u8"Ϊ" /* 0x3aa */;
+ case 0x3cb /* ϋ */: return u8"Ϋ" /* 0x3ab */;
+ case 0x3cc /* ό */: return u8"Ό" /* 0x38c */;
+ case 0x3cd /* ύ */: return u8"Ύ" /* 0x38e */;
+ case 0x3ce /* ώ */: return u8"Ώ" /* 0x38f */;
+ case 0x3d0 /* ϐ */: return u8"Β" /* 0x392 */;
+ case 0x3d1 /* ϑ */: return u8"Θ" /* 0x398 */;
+ case 0x3d5 /* ϕ */: return u8"Φ" /* 0x3a6 */;
+ case 0x3d6 /* ϖ */: return u8"Π" /* 0x3a0 */;
+ case 0x3d7 /* ϗ */: return u8"Ϗ" /* 0x3cf */;
+ case 0x3d9 /* ϙ */: return u8"Ϙ" /* 0x3d8 */;
+ case 0x3db /* ϛ */: return u8"Ϛ" /* 0x3da */;
+ case 0x3dd /* ϝ */: return u8"Ϝ" /* 0x3dc */;
+ case 0x3df /* ϟ */: return u8"Ϟ" /* 0x3de */;
+ case 0x3e1 /* ϡ */: return u8"Ϡ" /* 0x3e0 */;
+ case 0x3e3 /* ϣ */: return u8"Ϣ" /* 0x3e2 */;
+ case 0x3e5 /* ϥ */: return u8"Ϥ" /* 0x3e4 */;
+ case 0x3e7 /* ϧ */: return u8"Ϧ" /* 0x3e6 */;
+ case 0x3e9 /* ϩ */: return u8"Ϩ" /* 0x3e8 */;
+ case 0x3eb /* ϫ */: return u8"Ϫ" /* 0x3ea */;
+ case 0x3ed /* ϭ */: return u8"Ϭ" /* 0x3ec */;
+ case 0x3ef /* ϯ */: return u8"Ϯ" /* 0x3ee */;
+ case 0x3f0 /* ϰ */: return u8"Κ" /* 0x39a */;
+ case 0x3f1 /* ϱ */: return u8"Ρ" /* 0x3a1 */;
+ case 0x3f2 /* ϲ */: return u8"Ϲ" /* 0x3f9 */;
+ case 0x3f3 /* ϳ */: return u8"Ϳ" /* 0x37f */;
+ case 0x3f5 /* ϵ */: return u8"Ε" /* 0x395 */;
+ case 0x3f8 /* ϸ */: return u8"Ϸ" /* 0x3f7 */;
+ case 0x3fb /* ϻ */: return u8"Ϻ" /* 0x3fa */;
+ case 0x430 /* а */: return u8"А" /* 0x410 */;
+ case 0x431 /* б */: return u8"Б" /* 0x411 */;
+ case 0x432 /* в */: return u8"В" /* 0x412 */;
+ case 0x433 /* г */: return u8"Г" /* 0x413 */;
+ case 0x434 /* д */: return u8"Д" /* 0x414 */;
+ case 0x435 /* е */: return u8"Е" /* 0x415 */;
+ case 0x436 /* ж */: return u8"Ж" /* 0x416 */;
+ case 0x437 /* з */: return u8"З" /* 0x417 */;
+ case 0x438 /* и */: return u8"И" /* 0x418 */;
+ case 0x439 /* й */: return u8"Й" /* 0x419 */;
+ case 0x43a /* к */: return u8"К" /* 0x41a */;
+ case 0x43b /* л */: return u8"Л" /* 0x41b */;
+ case 0x43c /* м */: return u8"М" /* 0x41c */;
+ case 0x43d /* н */: return u8"Н" /* 0x41d */;
+ case 0x43e /* о */: return u8"О" /* 0x41e */;
+ case 0x43f /* п */: return u8"П" /* 0x41f */;
+ case 0x440 /* р */: return u8"Р" /* 0x420 */;
+ case 0x441 /* с */: return u8"С" /* 0x421 */;
+ case 0x442 /* т */: return u8"Т" /* 0x422 */;
+ case 0x443 /* у */: return u8"У" /* 0x423 */;
+ case 0x444 /* ф */: return u8"Ф" /* 0x424 */;
+ case 0x445 /* х */: return u8"Х" /* 0x425 */;
+ case 0x446 /* ц */: return u8"Ц" /* 0x426 */;
+ case 0x447 /* ч */: return u8"Ч" /* 0x427 */;
+ case 0x448 /* ш */: return u8"Ш" /* 0x428 */;
+ case 0x449 /* щ */: return u8"Щ" /* 0x429 */;
+ case 0x44a /* ъ */: return u8"Ъ" /* 0x42a */;
+ case 0x44b /* ы */: return u8"Ы" /* 0x42b */;
+ case 0x44c /* ь */: return u8"Ь" /* 0x42c */;
+ case 0x44d /* э */: return u8"Э" /* 0x42d */;
+ case 0x44e /* ю */: return u8"Ю" /* 0x42e */;
+ case 0x44f /* я */: return u8"Я" /* 0x42f */;
+ case 0x450 /* ѐ */: return u8"Ѐ" /* 0x400 */;
+ case 0x451 /* ё */: return u8"Ё" /* 0x401 */;
+ case 0x452 /* ђ */: return u8"Ђ" /* 0x402 */;
+ case 0x453 /* ѓ */: return u8"Ѓ" /* 0x403 */;
+ case 0x454 /* є */: return u8"Є" /* 0x404 */;
+ case 0x455 /* ѕ */: return u8"Ѕ" /* 0x405 */;
+ case 0x456 /* і */: return u8"І" /* 0x406 */;
+ case 0x457 /* ї */: return u8"Ї" /* 0x407 */;
+ case 0x458 /* ј */: return u8"Ј" /* 0x408 */;
+ case 0x459 /* љ */: return u8"Љ" /* 0x409 */;
+ case 0x45a /* њ */: return u8"Њ" /* 0x40a */;
+ case 0x45b /* ћ */: return u8"Ћ" /* 0x40b */;
+ case 0x45c /* ќ */: return u8"Ќ" /* 0x40c */;
+ case 0x45d /* ѝ */: return u8"Ѝ" /* 0x40d */;
+ case 0x45e /* ў */: return u8"Ў" /* 0x40e */;
+ case 0x45f /* џ */: return u8"Џ" /* 0x40f */;
+ case 0x461 /* ѡ */: return u8"Ѡ" /* 0x460 */;
+ case 0x463 /* ѣ */: return u8"Ѣ" /* 0x462 */;
+ case 0x465 /* ѥ */: return u8"Ѥ" /* 0x464 */;
+ case 0x467 /* ѧ */: return u8"Ѧ" /* 0x466 */;
+ case 0x469 /* ѩ */: return u8"Ѩ" /* 0x468 */;
+ case 0x46b /* ѫ */: return u8"Ѫ" /* 0x46a */;
+ case 0x46d /* ѭ */: return u8"Ѭ" /* 0x46c */;
+ case 0x46f /* ѯ */: return u8"Ѯ" /* 0x46e */;
+ case 0x471 /* ѱ */: return u8"Ѱ" /* 0x470 */;
+ case 0x473 /* ѳ */: return u8"Ѳ" /* 0x472 */;
+ case 0x475 /* ѵ */: return u8"Ѵ" /* 0x474 */;
+ case 0x477 /* ѷ */: return u8"Ѷ" /* 0x476 */;
+ case 0x479 /* ѹ */: return u8"Ѹ" /* 0x478 */;
+ case 0x47b /* ѻ */: return u8"Ѻ" /* 0x47a */;
+ case 0x47d /* ѽ */: return u8"Ѽ" /* 0x47c */;
+ case 0x47f /* ѿ */: return u8"Ѿ" /* 0x47e */;
+ case 0x481 /* ҁ */: return u8"Ҁ" /* 0x480 */;
+ case 0x48b /* ҋ */: return u8"Ҋ" /* 0x48a */;
+ case 0x48d /* ҍ */: return u8"Ҍ" /* 0x48c */;
+ case 0x48f /* ҏ */: return u8"Ҏ" /* 0x48e */;
+ case 0x491 /* ґ */: return u8"Ґ" /* 0x490 */;
+ case 0x493 /* ғ */: return u8"Ғ" /* 0x492 */;
+ case 0x495 /* ҕ */: return u8"Ҕ" /* 0x494 */;
+ case 0x497 /* җ */: return u8"Җ" /* 0x496 */;
+ case 0x499 /* ҙ */: return u8"Ҙ" /* 0x498 */;
+ case 0x49b /* қ */: return u8"Қ" /* 0x49a */;
+ case 0x49d /* ҝ */: return u8"Ҝ" /* 0x49c */;
+ case 0x49f /* ҟ */: return u8"Ҟ" /* 0x49e */;
+ case 0x4a1 /* ҡ */: return u8"Ҡ" /* 0x4a0 */;
+ case 0x4a3 /* ң */: return u8"Ң" /* 0x4a2 */;
+ case 0x4a5 /* ҥ */: return u8"Ҥ" /* 0x4a4 */;
+ case 0x4a7 /* ҧ */: return u8"Ҧ" /* 0x4a6 */;
+ case 0x4a9 /* ҩ */: return u8"Ҩ" /* 0x4a8 */;
+ case 0x4ab /* ҫ */: return u8"Ҫ" /* 0x4aa */;
+ case 0x4ad /* ҭ */: return u8"Ҭ" /* 0x4ac */;
+ case 0x4af /* ү */: return u8"Ү" /* 0x4ae */;
+ case 0x4b1 /* ұ */: return u8"Ұ" /* 0x4b0 */;
+ case 0x4b3 /* ҳ */: return u8"Ҳ" /* 0x4b2 */;
+ case 0x4b5 /* ҵ */: return u8"Ҵ" /* 0x4b4 */;
+ case 0x4b7 /* ҷ */: return u8"Ҷ" /* 0x4b6 */;
+ case 0x4b9 /* ҹ */: return u8"Ҹ" /* 0x4b8 */;
+ case 0x4bb /* һ */: return u8"Һ" /* 0x4ba */;
+ case 0x4bd /* ҽ */: return u8"Ҽ" /* 0x4bc */;
+ case 0x4bf /* ҿ */: return u8"Ҿ" /* 0x4be */;
+ case 0x4c2 /* ӂ */: return u8"Ӂ" /* 0x4c1 */;
+ case 0x4c4 /* ӄ */: return u8"Ӄ" /* 0x4c3 */;
+ case 0x4c6 /* ӆ */: return u8"Ӆ" /* 0x4c5 */;
+ case 0x4c8 /* ӈ */: return u8"Ӈ" /* 0x4c7 */;
+ case 0x4ca /* ӊ */: return u8"Ӊ" /* 0x4c9 */;
+ case 0x4cc /* ӌ */: return u8"Ӌ" /* 0x4cb */;
+ case 0x4ce /* ӎ */: return u8"Ӎ" /* 0x4cd */;
+ case 0x4cf /* ӏ */: return u8"Ӏ" /* 0x4c0 */;
+ case 0x4d1 /* ӑ */: return u8"Ӑ" /* 0x4d0 */;
+ case 0x4d3 /* ӓ */: return u8"Ӓ" /* 0x4d2 */;
+ case 0x4d5 /* ӕ */: return u8"Ӕ" /* 0x4d4 */;
+ case 0x4d7 /* ӗ */: return u8"Ӗ" /* 0x4d6 */;
+ case 0x4d9 /* ә */: return u8"Ә" /* 0x4d8 */;
+ case 0x4db /* ӛ */: return u8"Ӛ" /* 0x4da */;
+ case 0x4dd /* ӝ */: return u8"Ӝ" /* 0x4dc */;
+ case 0x4df /* ӟ */: return u8"Ӟ" /* 0x4de */;
+ case 0x4e1 /* ӡ */: return u8"Ӡ" /* 0x4e0 */;
+ case 0x4e3 /* ӣ */: return u8"Ӣ" /* 0x4e2 */;
+ case 0x4e5 /* ӥ */: return u8"Ӥ" /* 0x4e4 */;
+ case 0x4e7 /* ӧ */: return u8"Ӧ" /* 0x4e6 */;
+ case 0x4e9 /* ө */: return u8"Ө" /* 0x4e8 */;
+ case 0x4eb /* ӫ */: return u8"Ӫ" /* 0x4ea */;
+ case 0x4ed /* ӭ */: return u8"Ӭ" /* 0x4ec */;
+ case 0x4ef /* ӯ */: return u8"Ӯ" /* 0x4ee */;
+ case 0x4f1 /* ӱ */: return u8"Ӱ" /* 0x4f0 */;
+ case 0x4f3 /* ӳ */: return u8"Ӳ" /* 0x4f2 */;
+ case 0x4f5 /* ӵ */: return u8"Ӵ" /* 0x4f4 */;
+ case 0x4f7 /* ӷ */: return u8"Ӷ" /* 0x4f6 */;
+ case 0x4f9 /* ӹ */: return u8"Ӹ" /* 0x4f8 */;
+ case 0x4fb /* ӻ */: return u8"Ӻ" /* 0x4fa */;
+ case 0x4fd /* ӽ */: return u8"Ӽ" /* 0x4fc */;
+ case 0x4ff /* ӿ */: return u8"Ӿ" /* 0x4fe */;
+ case 0x501 /* ԁ */: return u8"Ԁ" /* 0x500 */;
+ case 0x503 /* ԃ */: return u8"Ԃ" /* 0x502 */;
+ case 0x505 /* ԅ */: return u8"Ԅ" /* 0x504 */;
+ case 0x507 /* ԇ */: return u8"Ԇ" /* 0x506 */;
+ case 0x509 /* ԉ */: return u8"Ԉ" /* 0x508 */;
+ case 0x50b /* ԋ */: return u8"Ԋ" /* 0x50a */;
+ case 0x50d /* ԍ */: return u8"Ԍ" /* 0x50c */;
+ case 0x50f /* ԏ */: return u8"Ԏ" /* 0x50e */;
+ case 0x511 /* ԑ */: return u8"Ԑ" /* 0x510 */;
+ case 0x513 /* ԓ */: return u8"Ԓ" /* 0x512 */;
+ case 0x515 /* ԕ */: return u8"Ԕ" /* 0x514 */;
+ case 0x517 /* ԗ */: return u8"Ԗ" /* 0x516 */;
+ case 0x519 /* ԙ */: return u8"Ԙ" /* 0x518 */;
+ case 0x51b /* ԛ */: return u8"Ԛ" /* 0x51a */;
+ case 0x51d /* ԝ */: return u8"Ԝ" /* 0x51c */;
+ case 0x51f /* ԟ */: return u8"Ԟ" /* 0x51e */;
+ case 0x521 /* ԡ */: return u8"Ԡ" /* 0x520 */;
+ case 0x523 /* ԣ */: return u8"Ԣ" /* 0x522 */;
+ case 0x525 /* ԥ */: return u8"Ԥ" /* 0x524 */;
+ case 0x527 /* ԧ */: return u8"Ԧ" /* 0x526 */;
+ case 0x529 /* ԩ */: return u8"Ԩ" /* 0x528 */;
+ case 0x52b /* ԫ */: return u8"Ԫ" /* 0x52a */;
+ case 0x52d /* ԭ */: return u8"Ԭ" /* 0x52c */;
+ case 0x52f /* ԯ */: return u8"Ԯ" /* 0x52e */;
+ case 0x561 /* ա */: return u8"Ա" /* 0x531 */;
+ case 0x562 /* բ */: return u8"Բ" /* 0x532 */;
+ case 0x563 /* գ */: return u8"Գ" /* 0x533 */;
+ case 0x564 /* դ */: return u8"Դ" /* 0x534 */;
+ case 0x565 /* ե */: return u8"Ե" /* 0x535 */;
+ case 0x566 /* զ */: return u8"Զ" /* 0x536 */;
+ case 0x567 /* է */: return u8"Է" /* 0x537 */;
+ case 0x568 /* ը */: return u8"Ը" /* 0x538 */;
+ case 0x569 /* թ */: return u8"Թ" /* 0x539 */;
+ case 0x56a /* ժ */: return u8"Ժ" /* 0x53a */;
+ case 0x56b /* ի */: return u8"Ի" /* 0x53b */;
+ case 0x56c /* լ */: return u8"Լ" /* 0x53c */;
+ case 0x56d /* խ */: return u8"Խ" /* 0x53d */;
+ case 0x56e /* ծ */: return u8"Ծ" /* 0x53e */;
+ case 0x56f /* կ */: return u8"Կ" /* 0x53f */;
+ case 0x570 /* հ */: return u8"Հ" /* 0x540 */;
+ case 0x571 /* ձ */: return u8"Ձ" /* 0x541 */;
+ case 0x572 /* ղ */: return u8"Ղ" /* 0x542 */;
+ case 0x573 /* ճ */: return u8"Ճ" /* 0x543 */;
+ case 0x574 /* մ */: return u8"Մ" /* 0x544 */;
+ case 0x575 /* յ */: return u8"Յ" /* 0x545 */;
+ case 0x576 /* ն */: return u8"Ն" /* 0x546 */;
+ case 0x577 /* շ */: return u8"Շ" /* 0x547 */;
+ case 0x578 /* ո */: return u8"Ո" /* 0x548 */;
+ case 0x579 /* չ */: return u8"Չ" /* 0x549 */;
+ case 0x57a /* պ */: return u8"Պ" /* 0x54a */;
+ case 0x57b /* ջ */: return u8"Ջ" /* 0x54b */;
+ case 0x57c /* ռ */: return u8"Ռ" /* 0x54c */;
+ case 0x57d /* ս */: return u8"Ս" /* 0x54d */;
+ case 0x57e /* վ */: return u8"Վ" /* 0x54e */;
+ case 0x57f /* տ */: return u8"Տ" /* 0x54f */;
+ case 0x580 /* ր */: return u8"Ր" /* 0x550 */;
+ case 0x581 /* ց */: return u8"Ց" /* 0x551 */;
+ case 0x582 /* ւ */: return u8"Ւ" /* 0x552 */;
+ case 0x583 /* փ */: return u8"Փ" /* 0x553 */;
+ case 0x584 /* ք */: return u8"Ք" /* 0x554 */;
+ case 0x585 /* օ */: return u8"Օ" /* 0x555 */;
+ case 0x586 /* ֆ */: return u8"Ֆ" /* 0x556 */;
+ case 0x587 /* և */: return u8"ԵՒ" /* 0x535,0x552 */;
+ case 0x10d0 /* ა */: return u8"Ა" /* 0x1c90 */;
+ case 0x10d1 /* ბ */: return u8"Ბ" /* 0x1c91 */;
+ case 0x10d2 /* გ */: return u8"Გ" /* 0x1c92 */;
+ case 0x10d3 /* დ */: return u8"Დ" /* 0x1c93 */;
+ case 0x10d4 /* ე */: return u8"Ე" /* 0x1c94 */;
+ case 0x10d5 /* ვ */: return u8"Ვ" /* 0x1c95 */;
+ case 0x10d6 /* ზ */: return u8"Ზ" /* 0x1c96 */;
+ case 0x10d7 /* თ */: return u8"Თ" /* 0x1c97 */;
+ case 0x10d8 /* ი */: return u8"Ი" /* 0x1c98 */;
+ case 0x10d9 /* კ */: return u8"Კ" /* 0x1c99 */;
+ case 0x10da /* ლ */: return u8"Ლ" /* 0x1c9a */;
+ case 0x10db /* მ */: return u8"Მ" /* 0x1c9b */;
+ case 0x10dc /* ნ */: return u8"Ნ" /* 0x1c9c */;
+ case 0x10dd /* ო */: return u8"Ო" /* 0x1c9d */;
+ case 0x10de /* პ */: return u8"Პ" /* 0x1c9e */;
+ case 0x10df /* ჟ */: return u8"Ჟ" /* 0x1c9f */;
+ case 0x10e0 /* რ */: return u8"Რ" /* 0x1ca0 */;
+ case 0x10e1 /* ს */: return u8"Ს" /* 0x1ca1 */;
+ case 0x10e2 /* ტ */: return u8"Ტ" /* 0x1ca2 */;
+ case 0x10e3 /* უ */: return u8"Უ" /* 0x1ca3 */;
+ case 0x10e4 /* ფ */: return u8"Ფ" /* 0x1ca4 */;
+ case 0x10e5 /* ქ */: return u8"Ქ" /* 0x1ca5 */;
+ case 0x10e6 /* ღ */: return u8"Ღ" /* 0x1ca6 */;
+ case 0x10e7 /* ყ */: return u8"Ყ" /* 0x1ca7 */;
+ case 0x10e8 /* შ */: return u8"Შ" /* 0x1ca8 */;
+ case 0x10e9 /* ჩ */: return u8"Ჩ" /* 0x1ca9 */;
+ case 0x10ea /* ც */: return u8"Ც" /* 0x1caa */;
+ case 0x10eb /* ძ */: return u8"Ძ" /* 0x1cab */;
+ case 0x10ec /* წ */: return u8"Წ" /* 0x1cac */;
+ case 0x10ed /* ჭ */: return u8"Ჭ" /* 0x1cad */;
+ case 0x10ee /* ხ */: return u8"Ხ" /* 0x1cae */;
+ case 0x10ef /* ჯ */: return u8"Ჯ" /* 0x1caf */;
+ case 0x10f0 /* ჰ */: return u8"Ჰ" /* 0x1cb0 */;
+ case 0x10f1 /* ჱ */: return u8"Ჱ" /* 0x1cb1 */;
+ case 0x10f2 /* ჲ */: return u8"Ჲ" /* 0x1cb2 */;
+ case 0x10f3 /* ჳ */: return u8"Ჳ" /* 0x1cb3 */;
+ case 0x10f4 /* ჴ */: return u8"Ჴ" /* 0x1cb4 */;
+ case 0x10f5 /* ჵ */: return u8"Ჵ" /* 0x1cb5 */;
+ case 0x10f6 /* ჶ */: return u8"Ჶ" /* 0x1cb6 */;
+ case 0x10f7 /* ჷ */: return u8"Ჷ" /* 0x1cb7 */;
+ case 0x10f8 /* ჸ */: return u8"Ჸ" /* 0x1cb8 */;
+ case 0x10f9 /* ჹ */: return u8"Ჹ" /* 0x1cb9 */;
+ case 0x10fa /* ჺ */: return u8"Ჺ" /* 0x1cba */;
+ case 0x10fd /* ჽ */: return u8"Ჽ" /* 0x1cbd */;
+ case 0x10fe /* ჾ */: return u8"Ჾ" /* 0x1cbe */;
+ case 0x10ff /* ჿ */: return u8"Ჿ" /* 0x1cbf */;
+ case 0x13f8 /* ᏸ */: return u8"Ᏸ" /* 0x13f0 */;
+ case 0x13f9 /* ᏹ */: return u8"Ᏹ" /* 0x13f1 */;
+ case 0x13fa /* ᏺ */: return u8"Ᏺ" /* 0x13f2 */;
+ case 0x13fb /* ᏻ */: return u8"Ᏻ" /* 0x13f3 */;
+ case 0x13fc /* ᏼ */: return u8"Ᏼ" /* 0x13f4 */;
+ case 0x13fd /* ᏽ */: return u8"Ᏽ" /* 0x13f5 */;
+ case 0x1c80 /* ᲀ */: return u8"В" /* 0x412 */;
+ case 0x1c81 /* ᲁ */: return u8"Д" /* 0x414 */;
+ case 0x1c82 /* ᲂ */: return u8"О" /* 0x41e */;
+ case 0x1c83 /* ᲃ */: return u8"С" /* 0x421 */;
+ case 0x1c84 /* ᲄ */: return u8"Т" /* 0x422 */;
+ case 0x1c85 /* ᲅ */: return u8"Т" /* 0x422 */;
+ case 0x1c86 /* ᲆ */: return u8"Ъ" /* 0x42a */;
+ case 0x1c87 /* ᲇ */: return u8"Ѣ" /* 0x462 */;
+ case 0x1c88 /* ᲈ */: return u8"Ꙋ" /* 0xa64a */;
+ case 0x1d79 /* ᵹ */: return u8"Ᵹ" /* 0xa77d */;
+ case 0x1d7d /* ᵽ */: return u8"Ᵽ" /* 0x2c63 */;
+ case 0x1d8e /* ᶎ */: return u8"Ᶎ" /* 0xa7c6 */;
+ case 0x1e01 /* ḁ */: return u8"Ḁ" /* 0x1e00 */;
+ case 0x1e03 /* ḃ */: return u8"Ḃ" /* 0x1e02 */;
+ case 0x1e05 /* ḅ */: return u8"Ḅ" /* 0x1e04 */;
+ case 0x1e07 /* ḇ */: return u8"Ḇ" /* 0x1e06 */;
+ case 0x1e09 /* ḉ */: return u8"Ḉ" /* 0x1e08 */;
+ case 0x1e0b /* ḋ */: return u8"Ḋ" /* 0x1e0a */;
+ case 0x1e0d /* ḍ */: return u8"Ḍ" /* 0x1e0c */;
+ case 0x1e0f /* ḏ */: return u8"Ḏ" /* 0x1e0e */;
+ case 0x1e11 /* ḑ */: return u8"Ḑ" /* 0x1e10 */;
+ case 0x1e13 /* ḓ */: return u8"Ḓ" /* 0x1e12 */;
+ case 0x1e15 /* ḕ */: return u8"Ḕ" /* 0x1e14 */;
+ case 0x1e17 /* ḗ */: return u8"Ḗ" /* 0x1e16 */;
+ case 0x1e19 /* ḙ */: return u8"Ḙ" /* 0x1e18 */;
+ case 0x1e1b /* ḛ */: return u8"Ḛ" /* 0x1e1a */;
+ case 0x1e1d /* ḝ */: return u8"Ḝ" /* 0x1e1c */;
+ case 0x1e1f /* ḟ */: return u8"Ḟ" /* 0x1e1e */;
+ case 0x1e21 /* ḡ */: return u8"Ḡ" /* 0x1e20 */;
+ case 0x1e23 /* ḣ */: return u8"Ḣ" /* 0x1e22 */;
+ case 0x1e25 /* ḥ */: return u8"Ḥ" /* 0x1e24 */;
+ case 0x1e27 /* ḧ */: return u8"Ḧ" /* 0x1e26 */;
+ case 0x1e29 /* ḩ */: return u8"Ḩ" /* 0x1e28 */;
+ case 0x1e2b /* ḫ */: return u8"Ḫ" /* 0x1e2a */;
+ case 0x1e2d /* ḭ */: return u8"Ḭ" /* 0x1e2c */;
+ case 0x1e2f /* ḯ */: return u8"Ḯ" /* 0x1e2e */;
+ case 0x1e31 /* ḱ */: return u8"Ḱ" /* 0x1e30 */;
+ case 0x1e33 /* ḳ */: return u8"Ḳ" /* 0x1e32 */;
+ case 0x1e35 /* ḵ */: return u8"Ḵ" /* 0x1e34 */;
+ case 0x1e37 /* ḷ */: return u8"Ḷ" /* 0x1e36 */;
+ case 0x1e39 /* ḹ */: return u8"Ḹ" /* 0x1e38 */;
+ case 0x1e3b /* ḻ */: return u8"Ḻ" /* 0x1e3a */;
+ case 0x1e3d /* ḽ */: return u8"Ḽ" /* 0x1e3c */;
+ case 0x1e3f /* ḿ */: return u8"Ḿ" /* 0x1e3e */;
+ case 0x1e41 /* ṁ */: return u8"Ṁ" /* 0x1e40 */;
+ case 0x1e43 /* ṃ */: return u8"Ṃ" /* 0x1e42 */;
+ case 0x1e45 /* ṅ */: return u8"Ṅ" /* 0x1e44 */;
+ case 0x1e47 /* ṇ */: return u8"Ṇ" /* 0x1e46 */;
+ case 0x1e49 /* ṉ */: return u8"Ṉ" /* 0x1e48 */;
+ case 0x1e4b /* ṋ */: return u8"Ṋ" /* 0x1e4a */;
+ case 0x1e4d /* ṍ */: return u8"Ṍ" /* 0x1e4c */;
+ case 0x1e4f /* ṏ */: return u8"Ṏ" /* 0x1e4e */;
+ case 0x1e51 /* ṑ */: return u8"Ṑ" /* 0x1e50 */;
+ case 0x1e53 /* ṓ */: return u8"Ṓ" /* 0x1e52 */;
+ case 0x1e55 /* ṕ */: return u8"Ṕ" /* 0x1e54 */;
+ case 0x1e57 /* ṗ */: return u8"Ṗ" /* 0x1e56 */;
+ case 0x1e59 /* ṙ */: return u8"Ṙ" /* 0x1e58 */;
+ case 0x1e5b /* ṛ */: return u8"Ṛ" /* 0x1e5a */;
+ case 0x1e5d /* ṝ */: return u8"Ṝ" /* 0x1e5c */;
+ case 0x1e5f /* ṟ */: return u8"Ṟ" /* 0x1e5e */;
+ case 0x1e61 /* ṡ */: return u8"Ṡ" /* 0x1e60 */;
+ case 0x1e63 /* ṣ */: return u8"Ṣ" /* 0x1e62 */;
+ case 0x1e65 /* ṥ */: return u8"Ṥ" /* 0x1e64 */;
+ case 0x1e67 /* ṧ */: return u8"Ṧ" /* 0x1e66 */;
+ case 0x1e69 /* ṩ */: return u8"Ṩ" /* 0x1e68 */;
+ case 0x1e6b /* ṫ */: return u8"Ṫ" /* 0x1e6a */;
+ case 0x1e6d /* ṭ */: return u8"Ṭ" /* 0x1e6c */;
+ case 0x1e6f /* ṯ */: return u8"Ṯ" /* 0x1e6e */;
+ case 0x1e71 /* ṱ */: return u8"Ṱ" /* 0x1e70 */;
+ case 0x1e73 /* ṳ */: return u8"Ṳ" /* 0x1e72 */;
+ case 0x1e75 /* ṵ */: return u8"Ṵ" /* 0x1e74 */;
+ case 0x1e77 /* ṷ */: return u8"Ṷ" /* 0x1e76 */;
+ case 0x1e79 /* ṹ */: return u8"Ṹ" /* 0x1e78 */;
+ case 0x1e7b /* ṻ */: return u8"Ṻ" /* 0x1e7a */;
+ case 0x1e7d /* ṽ */: return u8"Ṽ" /* 0x1e7c */;
+ case 0x1e7f /* ṿ */: return u8"Ṿ" /* 0x1e7e */;
+ case 0x1e81 /* ẁ */: return u8"Ẁ" /* 0x1e80 */;
+ case 0x1e83 /* ẃ */: return u8"Ẃ" /* 0x1e82 */;
+ case 0x1e85 /* ẅ */: return u8"Ẅ" /* 0x1e84 */;
+ case 0x1e87 /* ẇ */: return u8"Ẇ" /* 0x1e86 */;
+ case 0x1e89 /* ẉ */: return u8"Ẉ" /* 0x1e88 */;
+ case 0x1e8b /* ẋ */: return u8"Ẋ" /* 0x1e8a */;
+ case 0x1e8d /* ẍ */: return u8"Ẍ" /* 0x1e8c */;
+ case 0x1e8f /* ẏ */: return u8"Ẏ" /* 0x1e8e */;
+ case 0x1e91 /* ẑ */: return u8"Ẑ" /* 0x1e90 */;
+ case 0x1e93 /* ẓ */: return u8"Ẓ" /* 0x1e92 */;
+ case 0x1e95 /* ẕ */: return u8"Ẕ" /* 0x1e94 */;
+ case 0x1e96 /* ẖ */: return u8"H̱" /* 0x48,0x331 */;
+ case 0x1e97 /* ẗ */: return u8"T̈" /* 0x54,0x308 */;
+ case 0x1e98 /* ẘ */: return u8"W̊" /* 0x57,0x30a */;
+ case 0x1e99 /* ẙ */: return u8"Y̊" /* 0x59,0x30a */;
+ case 0x1e9a /* ẚ */: return u8"Aʾ" /* 0x41,0x2be */;
+ case 0x1e9b /* ẛ */: return u8"Ṡ" /* 0x1e60 */;
+ case 0x1ea1 /* ạ */: return u8"Ạ" /* 0x1ea0 */;
+ case 0x1ea3 /* ả */: return u8"Ả" /* 0x1ea2 */;
+ case 0x1ea5 /* ấ */: return u8"Ấ" /* 0x1ea4 */;
+ case 0x1ea7 /* ầ */: return u8"Ầ" /* 0x1ea6 */;
+ case 0x1ea9 /* ẩ */: return u8"Ẩ" /* 0x1ea8 */;
+ case 0x1eab /* ẫ */: return u8"Ẫ" /* 0x1eaa */;
+ case 0x1ead /* ậ */: return u8"Ậ" /* 0x1eac */;
+ case 0x1eaf /* ắ */: return u8"Ắ" /* 0x1eae */;
+ case 0x1eb1 /* ằ */: return u8"Ằ" /* 0x1eb0 */;
+ case 0x1eb3 /* ẳ */: return u8"Ẳ" /* 0x1eb2 */;
+ case 0x1eb5 /* ẵ */: return u8"Ẵ" /* 0x1eb4 */;
+ case 0x1eb7 /* ặ */: return u8"Ặ" /* 0x1eb6 */;
+ case 0x1eb9 /* ẹ */: return u8"Ẹ" /* 0x1eb8 */;
+ case 0x1ebb /* ẻ */: return u8"Ẻ" /* 0x1eba */;
+ case 0x1ebd /* ẽ */: return u8"Ẽ" /* 0x1ebc */;
+ case 0x1ebf /* ế */: return u8"Ế" /* 0x1ebe */;
+ case 0x1ec1 /* ề */: return u8"Ề" /* 0x1ec0 */;
+ case 0x1ec3 /* ể */: return u8"Ể" /* 0x1ec2 */;
+ case 0x1ec5 /* ễ */: return u8"Ễ" /* 0x1ec4 */;
+ case 0x1ec7 /* ệ */: return u8"Ệ" /* 0x1ec6 */;
+ case 0x1ec9 /* ỉ */: return u8"Ỉ" /* 0x1ec8 */;
+ case 0x1ecb /* ị */: return u8"Ị" /* 0x1eca */;
+ case 0x1ecd /* ọ */: return u8"Ọ" /* 0x1ecc */;
+ case 0x1ecf /* ỏ */: return u8"Ỏ" /* 0x1ece */;
+ case 0x1ed1 /* ố */: return u8"Ố" /* 0x1ed0 */;
+ case 0x1ed3 /* ồ */: return u8"Ồ" /* 0x1ed2 */;
+ case 0x1ed5 /* ổ */: return u8"Ổ" /* 0x1ed4 */;
+ case 0x1ed7 /* ỗ */: return u8"Ỗ" /* 0x1ed6 */;
+ case 0x1ed9 /* ộ */: return u8"Ộ" /* 0x1ed8 */;
+ case 0x1edb /* ớ */: return u8"Ớ" /* 0x1eda */;
+ case 0x1edd /* ờ */: return u8"Ờ" /* 0x1edc */;
+ case 0x1edf /* ở */: return u8"Ở" /* 0x1ede */;
+ case 0x1ee1 /* ỡ */: return u8"Ỡ" /* 0x1ee0 */;
+ case 0x1ee3 /* ợ */: return u8"Ợ" /* 0x1ee2 */;
+ case 0x1ee5 /* ụ */: return u8"Ụ" /* 0x1ee4 */;
+ case 0x1ee7 /* ủ */: return u8"Ủ" /* 0x1ee6 */;
+ case 0x1ee9 /* ứ */: return u8"Ứ" /* 0x1ee8 */;
+ case 0x1eeb /* ừ */: return u8"Ừ" /* 0x1eea */;
+ case 0x1eed /* ử */: return u8"Ử" /* 0x1eec */;
+ case 0x1eef /* ữ */: return u8"Ữ" /* 0x1eee */;
+ case 0x1ef1 /* ự */: return u8"Ự" /* 0x1ef0 */;
+ case 0x1ef3 /* ỳ */: return u8"Ỳ" /* 0x1ef2 */;
+ case 0x1ef5 /* ỵ */: return u8"Ỵ" /* 0x1ef4 */;
+ case 0x1ef7 /* ỷ */: return u8"Ỷ" /* 0x1ef6 */;
+ case 0x1ef9 /* ỹ */: return u8"Ỹ" /* 0x1ef8 */;
+ case 0x1efb /* ỻ */: return u8"Ỻ" /* 0x1efa */;
+ case 0x1efd /* ỽ */: return u8"Ỽ" /* 0x1efc */;
+ case 0x1eff /* ỿ */: return u8"Ỿ" /* 0x1efe */;
+ case 0x1f00 /* ἀ */: return u8"Ἀ" /* 0x1f08 */;
+ case 0x1f01 /* ἁ */: return u8"Ἁ" /* 0x1f09 */;
+ case 0x1f02 /* ἂ */: return u8"Ἂ" /* 0x1f0a */;
+ case 0x1f03 /* ἃ */: return u8"Ἃ" /* 0x1f0b */;
+ case 0x1f04 /* ἄ */: return u8"Ἄ" /* 0x1f0c */;
+ case 0x1f05 /* ἅ */: return u8"Ἅ" /* 0x1f0d */;
+ case 0x1f06 /* ἆ */: return u8"Ἆ" /* 0x1f0e */;
+ case 0x1f07 /* ἇ */: return u8"Ἇ" /* 0x1f0f */;
+ case 0x1f10 /* ἐ */: return u8"Ἐ" /* 0x1f18 */;
+ case 0x1f11 /* ἑ */: return u8"Ἑ" /* 0x1f19 */;
+ case 0x1f12 /* ἒ */: return u8"Ἒ" /* 0x1f1a */;
+ case 0x1f13 /* ἓ */: return u8"Ἓ" /* 0x1f1b */;
+ case 0x1f14 /* ἔ */: return u8"Ἔ" /* 0x1f1c */;
+ case 0x1f15 /* ἕ */: return u8"Ἕ" /* 0x1f1d */;
+ case 0x1f20 /* ἠ */: return u8"Ἠ" /* 0x1f28 */;
+ case 0x1f21 /* ἡ */: return u8"Ἡ" /* 0x1f29 */;
+ case 0x1f22 /* ἢ */: return u8"Ἢ" /* 0x1f2a */;
+ case 0x1f23 /* ἣ */: return u8"Ἣ" /* 0x1f2b */;
+ case 0x1f24 /* ἤ */: return u8"Ἤ" /* 0x1f2c */;
+ case 0x1f25 /* ἥ */: return u8"Ἥ" /* 0x1f2d */;
+ case 0x1f26 /* ἦ */: return u8"Ἦ" /* 0x1f2e */;
+ case 0x1f27 /* ἧ */: return u8"Ἧ" /* 0x1f2f */;
+ case 0x1f30 /* ἰ */: return u8"Ἰ" /* 0x1f38 */;
+ case 0x1f31 /* ἱ */: return u8"Ἱ" /* 0x1f39 */;
+ case 0x1f32 /* ἲ */: return u8"Ἲ" /* 0x1f3a */;
+ case 0x1f33 /* ἳ */: return u8"Ἳ" /* 0x1f3b */;
+ case 0x1f34 /* ἴ */: return u8"Ἴ" /* 0x1f3c */;
+ case 0x1f35 /* ἵ */: return u8"Ἵ" /* 0x1f3d */;
+ case 0x1f36 /* ἶ */: return u8"Ἶ" /* 0x1f3e */;
+ case 0x1f37 /* ἷ */: return u8"Ἷ" /* 0x1f3f */;
+ case 0x1f40 /* ὀ */: return u8"Ὀ" /* 0x1f48 */;
+ case 0x1f41 /* ὁ */: return u8"Ὁ" /* 0x1f49 */;
+ case 0x1f42 /* ὂ */: return u8"Ὂ" /* 0x1f4a */;
+ case 0x1f43 /* ὃ */: return u8"Ὃ" /* 0x1f4b */;
+ case 0x1f44 /* ὄ */: return u8"Ὄ" /* 0x1f4c */;
+ case 0x1f45 /* ὅ */: return u8"Ὅ" /* 0x1f4d */;
+ case 0x1f50 /* ὐ */: return u8"Υ̓" /* 0x3a5,0x313 */;
+ case 0x1f51 /* ὑ */: return u8"Ὑ" /* 0x1f59 */;
+ case 0x1f52 /* ὒ */: return u8"Υ̓̀" /* 0x3a5,0x313,0x300 */;
+ case 0x1f53 /* ὓ */: return u8"Ὓ" /* 0x1f5b */;
+ case 0x1f54 /* ὔ */: return u8"Υ̓́" /* 0x3a5,0x313,0x301 */;
+ case 0x1f55 /* ὕ */: return u8"Ὕ" /* 0x1f5d */;
+ case 0x1f56 /* ὖ */: return u8"Υ̓͂" /* 0x3a5,0x313,0x342 */;
+ case 0x1f57 /* ὗ */: return u8"Ὗ" /* 0x1f5f */;
+ case 0x1f60 /* ὠ */: return u8"Ὠ" /* 0x1f68 */;
+ case 0x1f61 /* ὡ */: return u8"Ὡ" /* 0x1f69 */;
+ case 0x1f62 /* ὢ */: return u8"Ὢ" /* 0x1f6a */;
+ case 0x1f63 /* ὣ */: return u8"Ὣ" /* 0x1f6b */;
+ case 0x1f64 /* ὤ */: return u8"Ὤ" /* 0x1f6c */;
+ case 0x1f65 /* ὥ */: return u8"Ὥ" /* 0x1f6d */;
+ case 0x1f66 /* ὦ */: return u8"Ὦ" /* 0x1f6e */;
+ case 0x1f67 /* ὧ */: return u8"Ὧ" /* 0x1f6f */;
+ case 0x1f70 /* ὰ */: return u8"Ὰ" /* 0x1fba */;
+ case 0x1f71 /* ά */: return u8"Ά" /* 0x1fbb */;
+ case 0x1f72 /* ὲ */: return u8"Ὲ" /* 0x1fc8 */;
+ case 0x1f73 /* έ */: return u8"Έ" /* 0x1fc9 */;
+ case 0x1f74 /* ὴ */: return u8"Ὴ" /* 0x1fca */;
+ case 0x1f75 /* ή */: return u8"Ή" /* 0x1fcb */;
+ case 0x1f76 /* ὶ */: return u8"Ὶ" /* 0x1fda */;
+ case 0x1f77 /* ί */: return u8"Ί" /* 0x1fdb */;
+ case 0x1f78 /* ὸ */: return u8"Ὸ" /* 0x1ff8 */;
+ case 0x1f79 /* ό */: return u8"Ό" /* 0x1ff9 */;
+ case 0x1f7a /* ὺ */: return u8"Ὺ" /* 0x1fea */;
+ case 0x1f7b /* ύ */: return u8"Ύ" /* 0x1feb */;
+ case 0x1f7c /* ὼ */: return u8"Ὼ" /* 0x1ffa */;
+ case 0x1f7d /* ώ */: return u8"Ώ" /* 0x1ffb */;
+ case 0x1f80 /* ᾀ */: return u8"ἈΙ" /* 0x1f08,0x399 */;
+ case 0x1f81 /* ᾁ */: return u8"ἉΙ" /* 0x1f09,0x399 */;
+ case 0x1f82 /* ᾂ */: return u8"ἊΙ" /* 0x1f0a,0x399 */;
+ case 0x1f83 /* ᾃ */: return u8"ἋΙ" /* 0x1f0b,0x399 */;
+ case 0x1f84 /* ᾄ */: return u8"ἌΙ" /* 0x1f0c,0x399 */;
+ case 0x1f85 /* ᾅ */: return u8"ἍΙ" /* 0x1f0d,0x399 */;
+ case 0x1f86 /* ᾆ */: return u8"ἎΙ" /* 0x1f0e,0x399 */;
+ case 0x1f87 /* ᾇ */: return u8"ἏΙ" /* 0x1f0f,0x399 */;
+ case 0x1f88 /* ᾈ */: return u8"ἈΙ" /* 0x1f08,0x399 */;
+ case 0x1f89 /* ᾉ */: return u8"ἉΙ" /* 0x1f09,0x399 */;
+ case 0x1f8a /* ᾊ */: return u8"ἊΙ" /* 0x1f0a,0x399 */;
+ case 0x1f8b /* ᾋ */: return u8"ἋΙ" /* 0x1f0b,0x399 */;
+ case 0x1f8c /* ᾌ */: return u8"ἌΙ" /* 0x1f0c,0x399 */;
+ case 0x1f8d /* ᾍ */: return u8"ἍΙ" /* 0x1f0d,0x399 */;
+ case 0x1f8e /* ᾎ */: return u8"ἎΙ" /* 0x1f0e,0x399 */;
+ case 0x1f8f /* ᾏ */: return u8"ἏΙ" /* 0x1f0f,0x399 */;
+ case 0x1f90 /* ᾐ */: return u8"ἨΙ" /* 0x1f28,0x399 */;
+ case 0x1f91 /* ᾑ */: return u8"ἩΙ" /* 0x1f29,0x399 */;
+ case 0x1f92 /* ᾒ */: return u8"ἪΙ" /* 0x1f2a,0x399 */;
+ case 0x1f93 /* ᾓ */: return u8"ἫΙ" /* 0x1f2b,0x399 */;
+ case 0x1f94 /* ᾔ */: return u8"ἬΙ" /* 0x1f2c,0x399 */;
+ case 0x1f95 /* ᾕ */: return u8"ἭΙ" /* 0x1f2d,0x399 */;
+ case 0x1f96 /* ᾖ */: return u8"ἮΙ" /* 0x1f2e,0x399 */;
+ case 0x1f97 /* ᾗ */: return u8"ἯΙ" /* 0x1f2f,0x399 */;
+ case 0x1f98 /* ᾘ */: return u8"ἨΙ" /* 0x1f28,0x399 */;
+ case 0x1f99 /* ᾙ */: return u8"ἩΙ" /* 0x1f29,0x399 */;
+ case 0x1f9a /* ᾚ */: return u8"ἪΙ" /* 0x1f2a,0x399 */;
+ case 0x1f9b /* ᾛ */: return u8"ἫΙ" /* 0x1f2b,0x399 */;
+ case 0x1f9c /* ᾜ */: return u8"ἬΙ" /* 0x1f2c,0x399 */;
+ case 0x1f9d /* ᾝ */: return u8"ἭΙ" /* 0x1f2d,0x399 */;
+ case 0x1f9e /* ᾞ */: return u8"ἮΙ" /* 0x1f2e,0x399 */;
+ case 0x1f9f /* ᾟ */: return u8"ἯΙ" /* 0x1f2f,0x399 */;
+ case 0x1fa0 /* ᾠ */: return u8"ὨΙ" /* 0x1f68,0x399 */;
+ case 0x1fa1 /* ᾡ */: return u8"ὩΙ" /* 0x1f69,0x399 */;
+ case 0x1fa2 /* ᾢ */: return u8"ὪΙ" /* 0x1f6a,0x399 */;
+ case 0x1fa3 /* ᾣ */: return u8"ὫΙ" /* 0x1f6b,0x399 */;
+ case 0x1fa4 /* ᾤ */: return u8"ὬΙ" /* 0x1f6c,0x399 */;
+ case 0x1fa5 /* ᾥ */: return u8"ὭΙ" /* 0x1f6d,0x399 */;
+ case 0x1fa6 /* ᾦ */: return u8"ὮΙ" /* 0x1f6e,0x399 */;
+ case 0x1fa7 /* ᾧ */: return u8"ὯΙ" /* 0x1f6f,0x399 */;
+ case 0x1fa8 /* ᾨ */: return u8"ὨΙ" /* 0x1f68,0x399 */;
+ case 0x1fa9 /* ᾩ */: return u8"ὩΙ" /* 0x1f69,0x399 */;
+ case 0x1faa /* ᾪ */: return u8"ὪΙ" /* 0x1f6a,0x399 */;
+ case 0x1fab /* ᾫ */: return u8"ὫΙ" /* 0x1f6b,0x399 */;
+ case 0x1fac /* ᾬ */: return u8"ὬΙ" /* 0x1f6c,0x399 */;
+ case 0x1fad /* ᾭ */: return u8"ὭΙ" /* 0x1f6d,0x399 */;
+ case 0x1fae /* ᾮ */: return u8"ὮΙ" /* 0x1f6e,0x399 */;
+ case 0x1faf /* ᾯ */: return u8"ὯΙ" /* 0x1f6f,0x399 */;
+ case 0x1fb0 /* ᾰ */: return u8"Ᾰ" /* 0x1fb8 */;
+ case 0x1fb1 /* ᾱ */: return u8"Ᾱ" /* 0x1fb9 */;
+ case 0x1fb2 /* ᾲ */: return u8"ᾺΙ" /* 0x1fba,0x399 */;
+ case 0x1fb3 /* ᾳ */: return u8"ΑΙ" /* 0x391,0x399 */;
+ case 0x1fb4 /* ᾴ */: return u8"ΆΙ" /* 0x386,0x399 */;
+ case 0x1fb6 /* ᾶ */: return u8"Α͂" /* 0x391,0x342 */;
+ case 0x1fb7 /* ᾷ */: return u8"Α͂Ι" /* 0x391,0x342,0x399 */;
+ case 0x1fbc /* ᾼ */: return u8"ΑΙ" /* 0x391,0x399 */;
+ case 0x1fbe /* ι */: return u8"Ι" /* 0x399 */;
+ case 0x1fc2 /* ῂ */: return u8"ῊΙ" /* 0x1fca,0x399 */;
+ case 0x1fc3 /* ῃ */: return u8"ΗΙ" /* 0x397,0x399 */;
+ case 0x1fc4 /* ῄ */: return u8"ΉΙ" /* 0x389,0x399 */;
+ case 0x1fc6 /* ῆ */: return u8"Η͂" /* 0x397,0x342 */;
+ case 0x1fc7 /* ῇ */: return u8"Η͂Ι" /* 0x397,0x342,0x399 */;
+ case 0x1fcc /* ῌ */: return u8"ΗΙ" /* 0x397,0x399 */;
+ case 0x1fd0 /* ῐ */: return u8"Ῐ" /* 0x1fd8 */;
+ case 0x1fd1 /* ῑ */: return u8"Ῑ" /* 0x1fd9 */;
+ case 0x1fd2 /* ῒ */: return u8"Ϊ̀" /* 0x399,0x308,0x300 */;
+ case 0x1fd3 /* ΐ */: return u8"Ϊ́" /* 0x399,0x308,0x301 */;
+ case 0x1fd6 /* ῖ */: return u8"Ι͂" /* 0x399,0x342 */;
+ case 0x1fd7 /* ῗ */: return u8"Ϊ͂" /* 0x399,0x308,0x342 */;
+ case 0x1fe0 /* ῠ */: return u8"Ῠ" /* 0x1fe8 */;
+ case 0x1fe1 /* ῡ */: return u8"Ῡ" /* 0x1fe9 */;
+ case 0x1fe2 /* ῢ */: return u8"Ϋ̀" /* 0x3a5,0x308,0x300 */;
+ case 0x1fe3 /* ΰ */: return u8"Ϋ́" /* 0x3a5,0x308,0x301 */;
+ case 0x1fe4 /* ῤ */: return u8"Ρ̓" /* 0x3a1,0x313 */;
+ case 0x1fe5 /* ῥ */: return u8"Ῥ" /* 0x1fec */;
+ case 0x1fe6 /* ῦ */: return u8"Υ͂" /* 0x3a5,0x342 */;
+ case 0x1fe7 /* ῧ */: return u8"Ϋ͂" /* 0x3a5,0x308,0x342 */;
+ case 0x1ff2 /* ῲ */: return u8"ῺΙ" /* 0x1ffa,0x399 */;
+ case 0x1ff3 /* ῳ */: return u8"ΩΙ" /* 0x3a9,0x399 */;
+ case 0x1ff4 /* ῴ */: return u8"ΏΙ" /* 0x38f,0x399 */;
+ case 0x1ff6 /* ῶ */: return u8"Ω͂" /* 0x3a9,0x342 */;
+ case 0x1ff7 /* ῷ */: return u8"Ω͂Ι" /* 0x3a9,0x342,0x399 */;
+ case 0x1ffc /* ῼ */: return u8"ΩΙ" /* 0x3a9,0x399 */;
+ case 0x214e /* ⅎ */: return u8"Ⅎ" /* 0x2132 */;
+ case 0x2170 /* ⅰ */: return u8"Ⅰ" /* 0x2160 */;
+ case 0x2171 /* ⅱ */: return u8"Ⅱ" /* 0x2161 */;
+ case 0x2172 /* ⅲ */: return u8"Ⅲ" /* 0x2162 */;
+ case 0x2173 /* ⅳ */: return u8"Ⅳ" /* 0x2163 */;
+ case 0x2174 /* ⅴ */: return u8"Ⅴ" /* 0x2164 */;
+ case 0x2175 /* ⅵ */: return u8"Ⅵ" /* 0x2165 */;
+ case 0x2176 /* ⅶ */: return u8"Ⅶ" /* 0x2166 */;
+ case 0x2177 /* ⅷ */: return u8"Ⅷ" /* 0x2167 */;
+ case 0x2178 /* ⅸ */: return u8"Ⅸ" /* 0x2168 */;
+ case 0x2179 /* ⅹ */: return u8"Ⅹ" /* 0x2169 */;
+ case 0x217a /* ⅺ */: return u8"Ⅺ" /* 0x216a */;
+ case 0x217b /* ⅻ */: return u8"Ⅻ" /* 0x216b */;
+ case 0x217c /* ⅼ */: return u8"Ⅼ" /* 0x216c */;
+ case 0x217d /* ⅽ */: return u8"Ⅽ" /* 0x216d */;
+ case 0x217e /* ⅾ */: return u8"Ⅾ" /* 0x216e */;
+ case 0x217f /* ⅿ */: return u8"Ⅿ" /* 0x216f */;
+ case 0x2184 /* ↄ */: return u8"Ↄ" /* 0x2183 */;
+ case 0x24d0 /* ⓐ */: return u8"Ⓐ" /* 0x24b6 */;
+ case 0x24d1 /* ⓑ */: return u8"Ⓑ" /* 0x24b7 */;
+ case 0x24d2 /* ⓒ */: return u8"Ⓒ" /* 0x24b8 */;
+ case 0x24d3 /* ⓓ */: return u8"Ⓓ" /* 0x24b9 */;
+ case 0x24d4 /* ⓔ */: return u8"Ⓔ" /* 0x24ba */;
+ case 0x24d5 /* ⓕ */: return u8"Ⓕ" /* 0x24bb */;
+ case 0x24d6 /* ⓖ */: return u8"Ⓖ" /* 0x24bc */;
+ case 0x24d7 /* ⓗ */: return u8"Ⓗ" /* 0x24bd */;
+ case 0x24d8 /* ⓘ */: return u8"Ⓘ" /* 0x24be */;
+ case 0x24d9 /* ⓙ */: return u8"Ⓙ" /* 0x24bf */;
+ case 0x24da /* ⓚ */: return u8"Ⓚ" /* 0x24c0 */;
+ case 0x24db /* ⓛ */: return u8"Ⓛ" /* 0x24c1 */;
+ case 0x24dc /* ⓜ */: return u8"Ⓜ" /* 0x24c2 */;
+ case 0x24dd /* ⓝ */: return u8"Ⓝ" /* 0x24c3 */;
+ case 0x24de /* ⓞ */: return u8"Ⓞ" /* 0x24c4 */;
+ case 0x24df /* ⓟ */: return u8"Ⓟ" /* 0x24c5 */;
+ case 0x24e0 /* ⓠ */: return u8"Ⓠ" /* 0x24c6 */;
+ case 0x24e1 /* ⓡ */: return u8"Ⓡ" /* 0x24c7 */;
+ case 0x24e2 /* ⓢ */: return u8"Ⓢ" /* 0x24c8 */;
+ case 0x24e3 /* ⓣ */: return u8"Ⓣ" /* 0x24c9 */;
+ case 0x24e4 /* ⓤ */: return u8"Ⓤ" /* 0x24ca */;
+ case 0x24e5 /* ⓥ */: return u8"Ⓥ" /* 0x24cb */;
+ case 0x24e6 /* ⓦ */: return u8"Ⓦ" /* 0x24cc */;
+ case 0x24e7 /* ⓧ */: return u8"Ⓧ" /* 0x24cd */;
+ case 0x24e8 /* ⓨ */: return u8"Ⓨ" /* 0x24ce */;
+ case 0x24e9 /* ⓩ */: return u8"Ⓩ" /* 0x24cf */;
+ case 0x2c30 /* ⰰ */: return u8"Ⰰ" /* 0x2c00 */;
+ case 0x2c31 /* ⰱ */: return u8"Ⰱ" /* 0x2c01 */;
+ case 0x2c32 /* ⰲ */: return u8"Ⰲ" /* 0x2c02 */;
+ case 0x2c33 /* ⰳ */: return u8"Ⰳ" /* 0x2c03 */;
+ case 0x2c34 /* ⰴ */: return u8"Ⰴ" /* 0x2c04 */;
+ case 0x2c35 /* ⰵ */: return u8"Ⰵ" /* 0x2c05 */;
+ case 0x2c36 /* ⰶ */: return u8"Ⰶ" /* 0x2c06 */;
+ case 0x2c37 /* ⰷ */: return u8"Ⰷ" /* 0x2c07 */;
+ case 0x2c38 /* ⰸ */: return u8"Ⰸ" /* 0x2c08 */;
+ case 0x2c39 /* ⰹ */: return u8"Ⰹ" /* 0x2c09 */;
+ case 0x2c3a /* ⰺ */: return u8"Ⰺ" /* 0x2c0a */;
+ case 0x2c3b /* ⰻ */: return u8"Ⰻ" /* 0x2c0b */;
+ case 0x2c3c /* ⰼ */: return u8"Ⰼ" /* 0x2c0c */;
+ case 0x2c3d /* ⰽ */: return u8"Ⰽ" /* 0x2c0d */;
+ case 0x2c3e /* ⰾ */: return u8"Ⰾ" /* 0x2c0e */;
+ case 0x2c3f /* ⰿ */: return u8"Ⰿ" /* 0x2c0f */;
+ case 0x2c40 /* ⱀ */: return u8"Ⱀ" /* 0x2c10 */;
+ case 0x2c41 /* ⱁ */: return u8"Ⱁ" /* 0x2c11 */;
+ case 0x2c42 /* ⱂ */: return u8"Ⱂ" /* 0x2c12 */;
+ case 0x2c43 /* ⱃ */: return u8"Ⱃ" /* 0x2c13 */;
+ case 0x2c44 /* ⱄ */: return u8"Ⱄ" /* 0x2c14 */;
+ case 0x2c45 /* ⱅ */: return u8"Ⱅ" /* 0x2c15 */;
+ case 0x2c46 /* ⱆ */: return u8"Ⱆ" /* 0x2c16 */;
+ case 0x2c47 /* ⱇ */: return u8"Ⱇ" /* 0x2c17 */;
+ case 0x2c48 /* ⱈ */: return u8"Ⱈ" /* 0x2c18 */;
+ case 0x2c49 /* ⱉ */: return u8"Ⱉ" /* 0x2c19 */;
+ case 0x2c4a /* ⱊ */: return u8"Ⱊ" /* 0x2c1a */;
+ case 0x2c4b /* ⱋ */: return u8"Ⱋ" /* 0x2c1b */;
+ case 0x2c4c /* ⱌ */: return u8"Ⱌ" /* 0x2c1c */;
+ case 0x2c4d /* ⱍ */: return u8"Ⱍ" /* 0x2c1d */;
+ case 0x2c4e /* ⱎ */: return u8"Ⱎ" /* 0x2c1e */;
+ case 0x2c4f /* ⱏ */: return u8"Ⱏ" /* 0x2c1f */;
+ case 0x2c50 /* ⱐ */: return u8"Ⱐ" /* 0x2c20 */;
+ case 0x2c51 /* ⱑ */: return u8"Ⱑ" /* 0x2c21 */;
+ case 0x2c52 /* ⱒ */: return u8"Ⱒ" /* 0x2c22 */;
+ case 0x2c53 /* ⱓ */: return u8"Ⱓ" /* 0x2c23 */;
+ case 0x2c54 /* ⱔ */: return u8"Ⱔ" /* 0x2c24 */;
+ case 0x2c55 /* ⱕ */: return u8"Ⱕ" /* 0x2c25 */;
+ case 0x2c56 /* ⱖ */: return u8"Ⱖ" /* 0x2c26 */;
+ case 0x2c57 /* ⱗ */: return u8"Ⱗ" /* 0x2c27 */;
+ case 0x2c58 /* ⱘ */: return u8"Ⱘ" /* 0x2c28 */;
+ case 0x2c59 /* ⱙ */: return u8"Ⱙ" /* 0x2c29 */;
+ case 0x2c5a /* ⱚ */: return u8"Ⱚ" /* 0x2c2a */;
+ case 0x2c5b /* ⱛ */: return u8"Ⱛ" /* 0x2c2b */;
+ case 0x2c5c /* ⱜ */: return u8"Ⱜ" /* 0x2c2c */;
+ case 0x2c5d /* ⱝ */: return u8"Ⱝ" /* 0x2c2d */;
+ case 0x2c5e /* ⱞ */: return u8"Ⱞ" /* 0x2c2e */;
+ case 0x2c61 /* ⱡ */: return u8"Ⱡ" /* 0x2c60 */;
+ case 0x2c65 /* ⱥ */: return u8"Ⱥ" /* 0x23a */;
+ case 0x2c66 /* ⱦ */: return u8"Ⱦ" /* 0x23e */;
+ case 0x2c68 /* ⱨ */: return u8"Ⱨ" /* 0x2c67 */;
+ case 0x2c6a /* ⱪ */: return u8"Ⱪ" /* 0x2c69 */;
+ case 0x2c6c /* ⱬ */: return u8"Ⱬ" /* 0x2c6b */;
+ case 0x2c73 /* ⱳ */: return u8"Ⱳ" /* 0x2c72 */;
+ case 0x2c76 /* ⱶ */: return u8"Ⱶ" /* 0x2c75 */;
+ case 0x2c81 /* ⲁ */: return u8"Ⲁ" /* 0x2c80 */;
+ case 0x2c83 /* ⲃ */: return u8"Ⲃ" /* 0x2c82 */;
+ case 0x2c85 /* ⲅ */: return u8"Ⲅ" /* 0x2c84 */;
+ case 0x2c87 /* ⲇ */: return u8"Ⲇ" /* 0x2c86 */;
+ case 0x2c89 /* ⲉ */: return u8"Ⲉ" /* 0x2c88 */;
+ case 0x2c8b /* ⲋ */: return u8"Ⲋ" /* 0x2c8a */;
+ case 0x2c8d /* ⲍ */: return u8"Ⲍ" /* 0x2c8c */;
+ case 0x2c8f /* ⲏ */: return u8"Ⲏ" /* 0x2c8e */;
+ case 0x2c91 /* ⲑ */: return u8"Ⲑ" /* 0x2c90 */;
+ case 0x2c93 /* ⲓ */: return u8"Ⲓ" /* 0x2c92 */;
+ case 0x2c95 /* ⲕ */: return u8"Ⲕ" /* 0x2c94 */;
+ case 0x2c97 /* ⲗ */: return u8"Ⲗ" /* 0x2c96 */;
+ case 0x2c99 /* ⲙ */: return u8"Ⲙ" /* 0x2c98 */;
+ case 0x2c9b /* ⲛ */: return u8"Ⲛ" /* 0x2c9a */;
+ case 0x2c9d /* ⲝ */: return u8"Ⲝ" /* 0x2c9c */;
+ case 0x2c9f /* ⲟ */: return u8"Ⲟ" /* 0x2c9e */;
+ case 0x2ca1 /* ⲡ */: return u8"Ⲡ" /* 0x2ca0 */;
+ case 0x2ca3 /* ⲣ */: return u8"Ⲣ" /* 0x2ca2 */;
+ case 0x2ca5 /* ⲥ */: return u8"Ⲥ" /* 0x2ca4 */;
+ case 0x2ca7 /* ⲧ */: return u8"Ⲧ" /* 0x2ca6 */;
+ case 0x2ca9 /* ⲩ */: return u8"Ⲩ" /* 0x2ca8 */;
+ case 0x2cab /* ⲫ */: return u8"Ⲫ" /* 0x2caa */;
+ case 0x2cad /* ⲭ */: return u8"Ⲭ" /* 0x2cac */;
+ case 0x2caf /* ⲯ */: return u8"Ⲯ" /* 0x2cae */;
+ case 0x2cb1 /* ⲱ */: return u8"Ⲱ" /* 0x2cb0 */;
+ case 0x2cb3 /* ⲳ */: return u8"Ⲳ" /* 0x2cb2 */;
+ case 0x2cb5 /* ⲵ */: return u8"Ⲵ" /* 0x2cb4 */;
+ case 0x2cb7 /* ⲷ */: return u8"Ⲷ" /* 0x2cb6 */;
+ case 0x2cb9 /* ⲹ */: return u8"Ⲹ" /* 0x2cb8 */;
+ case 0x2cbb /* ⲻ */: return u8"Ⲻ" /* 0x2cba */;
+ case 0x2cbd /* ⲽ */: return u8"Ⲽ" /* 0x2cbc */;
+ case 0x2cbf /* ⲿ */: return u8"Ⲿ" /* 0x2cbe */;
+ case 0x2cc1 /* ⳁ */: return u8"Ⳁ" /* 0x2cc0 */;
+ case 0x2cc3 /* ⳃ */: return u8"Ⳃ" /* 0x2cc2 */;
+ case 0x2cc5 /* ⳅ */: return u8"Ⳅ" /* 0x2cc4 */;
+ case 0x2cc7 /* ⳇ */: return u8"Ⳇ" /* 0x2cc6 */;
+ case 0x2cc9 /* ⳉ */: return u8"Ⳉ" /* 0x2cc8 */;
+ case 0x2ccb /* ⳋ */: return u8"Ⳋ" /* 0x2cca */;
+ case 0x2ccd /* ⳍ */: return u8"Ⳍ" /* 0x2ccc */;
+ case 0x2ccf /* ⳏ */: return u8"Ⳏ" /* 0x2cce */;
+ case 0x2cd1 /* ⳑ */: return u8"Ⳑ" /* 0x2cd0 */;
+ case 0x2cd3 /* ⳓ */: return u8"Ⳓ" /* 0x2cd2 */;
+ case 0x2cd5 /* ⳕ */: return u8"Ⳕ" /* 0x2cd4 */;
+ case 0x2cd7 /* ⳗ */: return u8"Ⳗ" /* 0x2cd6 */;
+ case 0x2cd9 /* ⳙ */: return u8"Ⳙ" /* 0x2cd8 */;
+ case 0x2cdb /* ⳛ */: return u8"Ⳛ" /* 0x2cda */;
+ case 0x2cdd /* ⳝ */: return u8"Ⳝ" /* 0x2cdc */;
+ case 0x2cdf /* ⳟ */: return u8"Ⳟ" /* 0x2cde */;
+ case 0x2ce1 /* ⳡ */: return u8"Ⳡ" /* 0x2ce0 */;
+ case 0x2ce3 /* ⳣ */: return u8"Ⳣ" /* 0x2ce2 */;
+ case 0x2cec /* ⳬ */: return u8"Ⳬ" /* 0x2ceb */;
+ case 0x2cee /* ⳮ */: return u8"Ⳮ" /* 0x2ced */;
+ case 0x2cf3 /* ⳳ */: return u8"Ⳳ" /* 0x2cf2 */;
+ case 0x2d00 /* ⴀ */: return u8"Ⴀ" /* 0x10a0 */;
+ case 0x2d01 /* ⴁ */: return u8"Ⴁ" /* 0x10a1 */;
+ case 0x2d02 /* ⴂ */: return u8"Ⴂ" /* 0x10a2 */;
+ case 0x2d03 /* ⴃ */: return u8"Ⴃ" /* 0x10a3 */;
+ case 0x2d04 /* ⴄ */: return u8"Ⴄ" /* 0x10a4 */;
+ case 0x2d05 /* ⴅ */: return u8"Ⴅ" /* 0x10a5 */;
+ case 0x2d06 /* ⴆ */: return u8"Ⴆ" /* 0x10a6 */;
+ case 0x2d07 /* ⴇ */: return u8"Ⴇ" /* 0x10a7 */;
+ case 0x2d08 /* ⴈ */: return u8"Ⴈ" /* 0x10a8 */;
+ case 0x2d09 /* ⴉ */: return u8"Ⴉ" /* 0x10a9 */;
+ case 0x2d0a /* ⴊ */: return u8"Ⴊ" /* 0x10aa */;
+ case 0x2d0b /* ⴋ */: return u8"Ⴋ" /* 0x10ab */;
+ case 0x2d0c /* ⴌ */: return u8"Ⴌ" /* 0x10ac */;
+ case 0x2d0d /* ⴍ */: return u8"Ⴍ" /* 0x10ad */;
+ case 0x2d0e /* ⴎ */: return u8"Ⴎ" /* 0x10ae */;
+ case 0x2d0f /* ⴏ */: return u8"Ⴏ" /* 0x10af */;
+ case 0x2d10 /* ⴐ */: return u8"Ⴐ" /* 0x10b0 */;
+ case 0x2d11 /* ⴑ */: return u8"Ⴑ" /* 0x10b1 */;
+ case 0x2d12 /* ⴒ */: return u8"Ⴒ" /* 0x10b2 */;
+ case 0x2d13 /* ⴓ */: return u8"Ⴓ" /* 0x10b3 */;
+ case 0x2d14 /* ⴔ */: return u8"Ⴔ" /* 0x10b4 */;
+ case 0x2d15 /* ⴕ */: return u8"Ⴕ" /* 0x10b5 */;
+ case 0x2d16 /* ⴖ */: return u8"Ⴖ" /* 0x10b6 */;
+ case 0x2d17 /* ⴗ */: return u8"Ⴗ" /* 0x10b7 */;
+ case 0x2d18 /* ⴘ */: return u8"Ⴘ" /* 0x10b8 */;
+ case 0x2d19 /* ⴙ */: return u8"Ⴙ" /* 0x10b9 */;
+ case 0x2d1a /* ⴚ */: return u8"Ⴚ" /* 0x10ba */;
+ case 0x2d1b /* ⴛ */: return u8"Ⴛ" /* 0x10bb */;
+ case 0x2d1c /* ⴜ */: return u8"Ⴜ" /* 0x10bc */;
+ case 0x2d1d /* ⴝ */: return u8"Ⴝ" /* 0x10bd */;
+ case 0x2d1e /* ⴞ */: return u8"Ⴞ" /* 0x10be */;
+ case 0x2d1f /* ⴟ */: return u8"Ⴟ" /* 0x10bf */;
+ case 0x2d20 /* ⴠ */: return u8"Ⴠ" /* 0x10c0 */;
+ case 0x2d21 /* ⴡ */: return u8"Ⴡ" /* 0x10c1 */;
+ case 0x2d22 /* ⴢ */: return u8"Ⴢ" /* 0x10c2 */;
+ case 0x2d23 /* ⴣ */: return u8"Ⴣ" /* 0x10c3 */;
+ case 0x2d24 /* ⴤ */: return u8"Ⴤ" /* 0x10c4 */;
+ case 0x2d25 /* ⴥ */: return u8"Ⴥ" /* 0x10c5 */;
+ case 0x2d27 /* ⴧ */: return u8"Ⴧ" /* 0x10c7 */;
+ case 0x2d2d /* ⴭ */: return u8"Ⴭ" /* 0x10cd */;
+ case 0xa641 /* ꙁ */: return u8"Ꙁ" /* 0xa640 */;
+ case 0xa643 /* ꙃ */: return u8"Ꙃ" /* 0xa642 */;
+ case 0xa645 /* ꙅ */: return u8"Ꙅ" /* 0xa644 */;
+ case 0xa647 /* ꙇ */: return u8"Ꙇ" /* 0xa646 */;
+ case 0xa649 /* ꙉ */: return u8"Ꙉ" /* 0xa648 */;
+ case 0xa64b /* ꙋ */: return u8"Ꙋ" /* 0xa64a */;
+ case 0xa64d /* ꙍ */: return u8"Ꙍ" /* 0xa64c */;
+ case 0xa64f /* ꙏ */: return u8"Ꙏ" /* 0xa64e */;
+ case 0xa651 /* ꙑ */: return u8"Ꙑ" /* 0xa650 */;
+ case 0xa653 /* ꙓ */: return u8"Ꙓ" /* 0xa652 */;
+ case 0xa655 /* ꙕ */: return u8"Ꙕ" /* 0xa654 */;
+ case 0xa657 /* ꙗ */: return u8"Ꙗ" /* 0xa656 */;
+ case 0xa659 /* ꙙ */: return u8"Ꙙ" /* 0xa658 */;
+ case 0xa65b /* ꙛ */: return u8"Ꙛ" /* 0xa65a */;
+ case 0xa65d /* ꙝ */: return u8"Ꙝ" /* 0xa65c */;
+ case 0xa65f /* ꙟ */: return u8"Ꙟ" /* 0xa65e */;
+ case 0xa661 /* ꙡ */: return u8"Ꙡ" /* 0xa660 */;
+ case 0xa663 /* ꙣ */: return u8"Ꙣ" /* 0xa662 */;
+ case 0xa665 /* ꙥ */: return u8"Ꙥ" /* 0xa664 */;
+ case 0xa667 /* ꙧ */: return u8"Ꙧ" /* 0xa666 */;
+ case 0xa669 /* ꙩ */: return u8"Ꙩ" /* 0xa668 */;
+ case 0xa66b /* ꙫ */: return u8"Ꙫ" /* 0xa66a */;
+ case 0xa66d /* ꙭ */: return u8"Ꙭ" /* 0xa66c */;
+ case 0xa681 /* ꚁ */: return u8"Ꚁ" /* 0xa680 */;
+ case 0xa683 /* ꚃ */: return u8"Ꚃ" /* 0xa682 */;
+ case 0xa685 /* ꚅ */: return u8"Ꚅ" /* 0xa684 */;
+ case 0xa687 /* ꚇ */: return u8"Ꚇ" /* 0xa686 */;
+ case 0xa689 /* ꚉ */: return u8"Ꚉ" /* 0xa688 */;
+ case 0xa68b /* ꚋ */: return u8"Ꚋ" /* 0xa68a */;
+ case 0xa68d /* ꚍ */: return u8"Ꚍ" /* 0xa68c */;
+ case 0xa68f /* ꚏ */: return u8"Ꚏ" /* 0xa68e */;
+ case 0xa691 /* ꚑ */: return u8"Ꚑ" /* 0xa690 */;
+ case 0xa693 /* ꚓ */: return u8"Ꚓ" /* 0xa692 */;
+ case 0xa695 /* ꚕ */: return u8"Ꚕ" /* 0xa694 */;
+ case 0xa697 /* ꚗ */: return u8"Ꚗ" /* 0xa696 */;
+ case 0xa699 /* ꚙ */: return u8"Ꚙ" /* 0xa698 */;
+ case 0xa69b /* ꚛ */: return u8"Ꚛ" /* 0xa69a */;
+ case 0xa723 /* ꜣ */: return u8"Ꜣ" /* 0xa722 */;
+ case 0xa725 /* ꜥ */: return u8"Ꜥ" /* 0xa724 */;
+ case 0xa727 /* ꜧ */: return u8"Ꜧ" /* 0xa726 */;
+ case 0xa729 /* ꜩ */: return u8"Ꜩ" /* 0xa728 */;
+ case 0xa72b /* ꜫ */: return u8"Ꜫ" /* 0xa72a */;
+ case 0xa72d /* ꜭ */: return u8"Ꜭ" /* 0xa72c */;
+ case 0xa72f /* ꜯ */: return u8"Ꜯ" /* 0xa72e */;
+ case 0xa733 /* ꜳ */: return u8"Ꜳ" /* 0xa732 */;
+ case 0xa735 /* ꜵ */: return u8"Ꜵ" /* 0xa734 */;
+ case 0xa737 /* ꜷ */: return u8"Ꜷ" /* 0xa736 */;
+ case 0xa739 /* ꜹ */: return u8"Ꜹ" /* 0xa738 */;
+ case 0xa73b /* ꜻ */: return u8"Ꜻ" /* 0xa73a */;
+ case 0xa73d /* ꜽ */: return u8"Ꜽ" /* 0xa73c */;
+ case 0xa73f /* ꜿ */: return u8"Ꜿ" /* 0xa73e */;
+ case 0xa741 /* ꝁ */: return u8"Ꝁ" /* 0xa740 */;
+ case 0xa743 /* ꝃ */: return u8"Ꝃ" /* 0xa742 */;
+ case 0xa745 /* ꝅ */: return u8"Ꝅ" /* 0xa744 */;
+ case 0xa747 /* ꝇ */: return u8"Ꝇ" /* 0xa746 */;
+ case 0xa749 /* ꝉ */: return u8"Ꝉ" /* 0xa748 */;
+ case 0xa74b /* ꝋ */: return u8"Ꝋ" /* 0xa74a */;
+ case 0xa74d /* ꝍ */: return u8"Ꝍ" /* 0xa74c */;
+ case 0xa74f /* ꝏ */: return u8"Ꝏ" /* 0xa74e */;
+ case 0xa751 /* ꝑ */: return u8"Ꝑ" /* 0xa750 */;
+ case 0xa753 /* ꝓ */: return u8"Ꝓ" /* 0xa752 */;
+ case 0xa755 /* ꝕ */: return u8"Ꝕ" /* 0xa754 */;
+ case 0xa757 /* ꝗ */: return u8"Ꝗ" /* 0xa756 */;
+ case 0xa759 /* ꝙ */: return u8"Ꝙ" /* 0xa758 */;
+ case 0xa75b /* ꝛ */: return u8"Ꝛ" /* 0xa75a */;
+ case 0xa75d /* ꝝ */: return u8"Ꝝ" /* 0xa75c */;
+ case 0xa75f /* ꝟ */: return u8"Ꝟ" /* 0xa75e */;
+ case 0xa761 /* ꝡ */: return u8"Ꝡ" /* 0xa760 */;
+ case 0xa763 /* ꝣ */: return u8"Ꝣ" /* 0xa762 */;
+ case 0xa765 /* ꝥ */: return u8"Ꝥ" /* 0xa764 */;
+ case 0xa767 /* ꝧ */: return u8"Ꝧ" /* 0xa766 */;
+ case 0xa769 /* ꝩ */: return u8"Ꝩ" /* 0xa768 */;
+ case 0xa76b /* ꝫ */: return u8"Ꝫ" /* 0xa76a */;
+ case 0xa76d /* ꝭ */: return u8"Ꝭ" /* 0xa76c */;
+ case 0xa76f /* ꝯ */: return u8"Ꝯ" /* 0xa76e */;
+ case 0xa77a /* ꝺ */: return u8"Ꝺ" /* 0xa779 */;
+ case 0xa77c /* ꝼ */: return u8"Ꝼ" /* 0xa77b */;
+ case 0xa77f /* ꝿ */: return u8"Ꝿ" /* 0xa77e */;
+ case 0xa781 /* ꞁ */: return u8"Ꞁ" /* 0xa780 */;
+ case 0xa783 /* ꞃ */: return u8"Ꞃ" /* 0xa782 */;
+ case 0xa785 /* ꞅ */: return u8"Ꞅ" /* 0xa784 */;
+ case 0xa787 /* ꞇ */: return u8"Ꞇ" /* 0xa786 */;
+ case 0xa78c /* ꞌ */: return u8"Ꞌ" /* 0xa78b */;
+ case 0xa791 /* ꞑ */: return u8"Ꞑ" /* 0xa790 */;
+ case 0xa793 /* ꞓ */: return u8"Ꞓ" /* 0xa792 */;
+ case 0xa794 /* ꞔ */: return u8"Ꞔ" /* 0xa7c4 */;
+ case 0xa797 /* ꞗ */: return u8"Ꞗ" /* 0xa796 */;
+ case 0xa799 /* ꞙ */: return u8"Ꞙ" /* 0xa798 */;
+ case 0xa79b /* ꞛ */: return u8"Ꞛ" /* 0xa79a */;
+ case 0xa79d /* ꞝ */: return u8"Ꞝ" /* 0xa79c */;
+ case 0xa79f /* ꞟ */: return u8"Ꞟ" /* 0xa79e */;
+ case 0xa7a1 /* ꞡ */: return u8"Ꞡ" /* 0xa7a0 */;
+ case 0xa7a3 /* ꞣ */: return u8"Ꞣ" /* 0xa7a2 */;
+ case 0xa7a5 /* ꞥ */: return u8"Ꞥ" /* 0xa7a4 */;
+ case 0xa7a7 /* ꞧ */: return u8"Ꞧ" /* 0xa7a6 */;
+ case 0xa7a9 /* ꞩ */: return u8"Ꞩ" /* 0xa7a8 */;
+ case 0xa7b5 /* ꞵ */: return u8"Ꞵ" /* 0xa7b4 */;
+ case 0xa7b7 /* ꞷ */: return u8"Ꞷ" /* 0xa7b6 */;
+ case 0xa7b9 /* ꞹ */: return u8"Ꞹ" /* 0xa7b8 */;
+ case 0xa7bb /* ꞻ */: return u8"Ꞻ" /* 0xa7ba */;
+ case 0xa7bd /* ꞽ */: return u8"Ꞽ" /* 0xa7bc */;
+ case 0xa7bf /* ꞿ */: return u8"Ꞿ" /* 0xa7be */;
+ case 0xa7c3 /* ꟃ */: return u8"Ꟃ" /* 0xa7c2 */;
+ case 0xa7c8 /* ꟈ */: return u8"Ꟈ" /* 0xa7c7 */;
+ case 0xa7ca /* ꟊ */: return u8"Ꟊ" /* 0xa7c9 */;
+ case 0xa7f6 /* ꟶ */: return u8"Ꟶ" /* 0xa7f5 */;
+ case 0xab53 /* ꭓ */: return u8"Ꭓ" /* 0xa7b3 */;
+ case 0xab70 /* ꭰ */: return u8"Ꭰ" /* 0x13a0 */;
+ case 0xab71 /* ꭱ */: return u8"Ꭱ" /* 0x13a1 */;
+ case 0xab72 /* ꭲ */: return u8"Ꭲ" /* 0x13a2 */;
+ case 0xab73 /* ꭳ */: return u8"Ꭳ" /* 0x13a3 */;
+ case 0xab74 /* ꭴ */: return u8"Ꭴ" /* 0x13a4 */;
+ case 0xab75 /* ꭵ */: return u8"Ꭵ" /* 0x13a5 */;
+ case 0xab76 /* ꭶ */: return u8"Ꭶ" /* 0x13a6 */;
+ case 0xab77 /* ꭷ */: return u8"Ꭷ" /* 0x13a7 */;
+ case 0xab78 /* ꭸ */: return u8"Ꭸ" /* 0x13a8 */;
+ case 0xab79 /* ꭹ */: return u8"Ꭹ" /* 0x13a9 */;
+ case 0xab7a /* ꭺ */: return u8"Ꭺ" /* 0x13aa */;
+ case 0xab7b /* ꭻ */: return u8"Ꭻ" /* 0x13ab */;
+ case 0xab7c /* ꭼ */: return u8"Ꭼ" /* 0x13ac */;
+ case 0xab7d /* ꭽ */: return u8"Ꭽ" /* 0x13ad */;
+ case 0xab7e /* ꭾ */: return u8"Ꭾ" /* 0x13ae */;
+ case 0xab7f /* ꭿ */: return u8"Ꭿ" /* 0x13af */;
+ case 0xab80 /* ꮀ */: return u8"Ꮀ" /* 0x13b0 */;
+ case 0xab81 /* ꮁ */: return u8"Ꮁ" /* 0x13b1 */;
+ case 0xab82 /* ꮂ */: return u8"Ꮂ" /* 0x13b2 */;
+ case 0xab83 /* ꮃ */: return u8"Ꮃ" /* 0x13b3 */;
+ case 0xab84 /* ꮄ */: return u8"Ꮄ" /* 0x13b4 */;
+ case 0xab85 /* ꮅ */: return u8"Ꮅ" /* 0x13b5 */;
+ case 0xab86 /* ꮆ */: return u8"Ꮆ" /* 0x13b6 */;
+ case 0xab87 /* ꮇ */: return u8"Ꮇ" /* 0x13b7 */;
+ case 0xab88 /* ꮈ */: return u8"Ꮈ" /* 0x13b8 */;
+ case 0xab89 /* ꮉ */: return u8"Ꮉ" /* 0x13b9 */;
+ case 0xab8a /* ꮊ */: return u8"Ꮊ" /* 0x13ba */;
+ case 0xab8b /* ꮋ */: return u8"Ꮋ" /* 0x13bb */;
+ case 0xab8c /* ꮌ */: return u8"Ꮌ" /* 0x13bc */;
+ case 0xab8d /* ꮍ */: return u8"Ꮍ" /* 0x13bd */;
+ case 0xab8e /* ꮎ */: return u8"Ꮎ" /* 0x13be */;
+ case 0xab8f /* ꮏ */: return u8"Ꮏ" /* 0x13bf */;
+ case 0xab90 /* ꮐ */: return u8"Ꮐ" /* 0x13c0 */;
+ case 0xab91 /* ꮑ */: return u8"Ꮑ" /* 0x13c1 */;
+ case 0xab92 /* ꮒ */: return u8"Ꮒ" /* 0x13c2 */;
+ case 0xab93 /* ꮓ */: return u8"Ꮓ" /* 0x13c3 */;
+ case 0xab94 /* ꮔ */: return u8"Ꮔ" /* 0x13c4 */;
+ case 0xab95 /* ꮕ */: return u8"Ꮕ" /* 0x13c5 */;
+ case 0xab96 /* ꮖ */: return u8"Ꮖ" /* 0x13c6 */;
+ case 0xab97 /* ꮗ */: return u8"Ꮗ" /* 0x13c7 */;
+ case 0xab98 /* ꮘ */: return u8"Ꮘ" /* 0x13c8 */;
+ case 0xab99 /* ꮙ */: return u8"Ꮙ" /* 0x13c9 */;
+ case 0xab9a /* ꮚ */: return u8"Ꮚ" /* 0x13ca */;
+ case 0xab9b /* ꮛ */: return u8"Ꮛ" /* 0x13cb */;
+ case 0xab9c /* ꮜ */: return u8"Ꮜ" /* 0x13cc */;
+ case 0xab9d /* ꮝ */: return u8"Ꮝ" /* 0x13cd */;
+ case 0xab9e /* ꮞ */: return u8"Ꮞ" /* 0x13ce */;
+ case 0xab9f /* ꮟ */: return u8"Ꮟ" /* 0x13cf */;
+ case 0xaba0 /* ꮠ */: return u8"Ꮠ" /* 0x13d0 */;
+ case 0xaba1 /* ꮡ */: return u8"Ꮡ" /* 0x13d1 */;
+ case 0xaba2 /* ꮢ */: return u8"Ꮢ" /* 0x13d2 */;
+ case 0xaba3 /* ꮣ */: return u8"Ꮣ" /* 0x13d3 */;
+ case 0xaba4 /* ꮤ */: return u8"Ꮤ" /* 0x13d4 */;
+ case 0xaba5 /* ꮥ */: return u8"Ꮥ" /* 0x13d5 */;
+ case 0xaba6 /* ꮦ */: return u8"Ꮦ" /* 0x13d6 */;
+ case 0xaba7 /* ꮧ */: return u8"Ꮧ" /* 0x13d7 */;
+ case 0xaba8 /* ꮨ */: return u8"Ꮨ" /* 0x13d8 */;
+ case 0xaba9 /* ꮩ */: return u8"Ꮩ" /* 0x13d9 */;
+ case 0xabaa /* ꮪ */: return u8"Ꮪ" /* 0x13da */;
+ case 0xabab /* ꮫ */: return u8"Ꮫ" /* 0x13db */;
+ case 0xabac /* ꮬ */: return u8"Ꮬ" /* 0x13dc */;
+ case 0xabad /* ꮭ */: return u8"Ꮭ" /* 0x13dd */;
+ case 0xabae /* ꮮ */: return u8"Ꮮ" /* 0x13de */;
+ case 0xabaf /* ꮯ */: return u8"Ꮯ" /* 0x13df */;
+ case 0xabb0 /* ꮰ */: return u8"Ꮰ" /* 0x13e0 */;
+ case 0xabb1 /* ꮱ */: return u8"Ꮱ" /* 0x13e1 */;
+ case 0xabb2 /* ꮲ */: return u8"Ꮲ" /* 0x13e2 */;
+ case 0xabb3 /* ꮳ */: return u8"Ꮳ" /* 0x13e3 */;
+ case 0xabb4 /* ꮴ */: return u8"Ꮴ" /* 0x13e4 */;
+ case 0xabb5 /* ꮵ */: return u8"Ꮵ" /* 0x13e5 */;
+ case 0xabb6 /* ꮶ */: return u8"Ꮶ" /* 0x13e6 */;
+ case 0xabb7 /* ꮷ */: return u8"Ꮷ" /* 0x13e7 */;
+ case 0xabb8 /* ꮸ */: return u8"Ꮸ" /* 0x13e8 */;
+ case 0xabb9 /* ꮹ */: return u8"Ꮹ" /* 0x13e9 */;
+ case 0xabba /* ꮺ */: return u8"Ꮺ" /* 0x13ea */;
+ case 0xabbb /* ꮻ */: return u8"Ꮻ" /* 0x13eb */;
+ case 0xabbc /* ꮼ */: return u8"Ꮼ" /* 0x13ec */;
+ case 0xabbd /* ꮽ */: return u8"Ꮽ" /* 0x13ed */;
+ case 0xabbe /* ꮾ */: return u8"Ꮾ" /* 0x13ee */;
+ case 0xabbf /* ꮿ */: return u8"Ꮿ" /* 0x13ef */;
+ case 0xfb00 /* ff */: return u8"FF" /* 0x46,0x46 */;
+ case 0xfb01 /* fi */: return u8"FI" /* 0x46,0x49 */;
+ case 0xfb02 /* fl */: return u8"FL" /* 0x46,0x4c */;
+ case 0xfb03 /* ffi */: return u8"FFI" /* 0x46,0x46,0x49 */;
+ case 0xfb04 /* ffl */: return u8"FFL" /* 0x46,0x46,0x4c */;
+ case 0xfb05 /* ſt */: return u8"ST" /* 0x53,0x54 */;
+ case 0xfb06 /* st */: return u8"ST" /* 0x53,0x54 */;
+ case 0xfb13 /* ﬓ */: return u8"ՄՆ" /* 0x544,0x546 */;
+ case 0xfb14 /* ﬔ */: return u8"ՄԵ" /* 0x544,0x535 */;
+ case 0xfb15 /* ﬕ */: return u8"ՄԻ" /* 0x544,0x53b */;
+ case 0xfb16 /* ﬖ */: return u8"ՎՆ" /* 0x54e,0x546 */;
+ case 0xfb17 /* ﬗ */: return u8"ՄԽ" /* 0x544,0x53d */;
+ case 0xff41 /* a */: return u8"A" /* 0xff21 */;
+ case 0xff42 /* b */: return u8"B" /* 0xff22 */;
+ case 0xff43 /* c */: return u8"C" /* 0xff23 */;
+ case 0xff44 /* d */: return u8"D" /* 0xff24 */;
+ case 0xff45 /* e */: return u8"E" /* 0xff25 */;
+ case 0xff46 /* f */: return u8"F" /* 0xff26 */;
+ case 0xff47 /* g */: return u8"G" /* 0xff27 */;
+ case 0xff48 /* h */: return u8"H" /* 0xff28 */;
+ case 0xff49 /* i */: return u8"I" /* 0xff29 */;
+ case 0xff4a /* j */: return u8"J" /* 0xff2a */;
+ case 0xff4b /* k */: return u8"K" /* 0xff2b */;
+ case 0xff4c /* l */: return u8"L" /* 0xff2c */;
+ case 0xff4d /* m */: return u8"M" /* 0xff2d */;
+ case 0xff4e /* n */: return u8"N" /* 0xff2e */;
+ case 0xff4f /* o */: return u8"O" /* 0xff2f */;
+ case 0xff50 /* p */: return u8"P" /* 0xff30 */;
+ case 0xff51 /* q */: return u8"Q" /* 0xff31 */;
+ case 0xff52 /* r */: return u8"R" /* 0xff32 */;
+ case 0xff53 /* s */: return u8"S" /* 0xff33 */;
+ case 0xff54 /* t */: return u8"T" /* 0xff34 */;
+ case 0xff55 /* u */: return u8"U" /* 0xff35 */;
+ case 0xff56 /* v */: return u8"V" /* 0xff36 */;
+ case 0xff57 /* w */: return u8"W" /* 0xff37 */;
+ case 0xff58 /* x */: return u8"X" /* 0xff38 */;
+ case 0xff59 /* y */: return u8"Y" /* 0xff39 */;
+ case 0xff5a /* z */: return u8"Z" /* 0xff3a */;
+ case 0x10428 /* 𐐨 */: return u8"𐐀" /* 0x10400 */;
+ case 0x10429 /* 𐐩 */: return u8"𐐁" /* 0x10401 */;
+ case 0x1042a /* 𐐪 */: return u8"𐐂" /* 0x10402 */;
+ case 0x1042b /* 𐐫 */: return u8"𐐃" /* 0x10403 */;
+ case 0x1042c /* 𐐬 */: return u8"𐐄" /* 0x10404 */;
+ case 0x1042d /* 𐐭 */: return u8"𐐅" /* 0x10405 */;
+ case 0x1042e /* 𐐮 */: return u8"𐐆" /* 0x10406 */;
+ case 0x1042f /* 𐐯 */: return u8"𐐇" /* 0x10407 */;
+ case 0x10430 /* 𐐰 */: return u8"𐐈" /* 0x10408 */;
+ case 0x10431 /* 𐐱 */: return u8"𐐉" /* 0x10409 */;
+ case 0x10432 /* 𐐲 */: return u8"𐐊" /* 0x1040a */;
+ case 0x10433 /* 𐐳 */: return u8"𐐋" /* 0x1040b */;
+ case 0x10434 /* 𐐴 */: return u8"𐐌" /* 0x1040c */;
+ case 0x10435 /* 𐐵 */: return u8"𐐍" /* 0x1040d */;
+ case 0x10436 /* 𐐶 */: return u8"𐐎" /* 0x1040e */;
+ case 0x10437 /* 𐐷 */: return u8"𐐏" /* 0x1040f */;
+ case 0x10438 /* 𐐸 */: return u8"𐐐" /* 0x10410 */;
+ case 0x10439 /* 𐐹 */: return u8"𐐑" /* 0x10411 */;
+ case 0x1043a /* 𐐺 */: return u8"𐐒" /* 0x10412 */;
+ case 0x1043b /* 𐐻 */: return u8"𐐓" /* 0x10413 */;
+ case 0x1043c /* 𐐼 */: return u8"𐐔" /* 0x10414 */;
+ case 0x1043d /* 𐐽 */: return u8"𐐕" /* 0x10415 */;
+ case 0x1043e /* 𐐾 */: return u8"𐐖" /* 0x10416 */;
+ case 0x1043f /* 𐐿 */: return u8"𐐗" /* 0x10417 */;
+ case 0x10440 /* 𐑀 */: return u8"𐐘" /* 0x10418 */;
+ case 0x10441 /* 𐑁 */: return u8"𐐙" /* 0x10419 */;
+ case 0x10442 /* 𐑂 */: return u8"𐐚" /* 0x1041a */;
+ case 0x10443 /* 𐑃 */: return u8"𐐛" /* 0x1041b */;
+ case 0x10444 /* 𐑄 */: return u8"𐐜" /* 0x1041c */;
+ case 0x10445 /* 𐑅 */: return u8"𐐝" /* 0x1041d */;
+ case 0x10446 /* 𐑆 */: return u8"𐐞" /* 0x1041e */;
+ case 0x10447 /* 𐑇 */: return u8"𐐟" /* 0x1041f */;
+ case 0x10448 /* 𐑈 */: return u8"𐐠" /* 0x10420 */;
+ case 0x10449 /* 𐑉 */: return u8"𐐡" /* 0x10421 */;
+ case 0x1044a /* 𐑊 */: return u8"𐐢" /* 0x10422 */;
+ case 0x1044b /* 𐑋 */: return u8"𐐣" /* 0x10423 */;
+ case 0x1044c /* 𐑌 */: return u8"𐐤" /* 0x10424 */;
+ case 0x1044d /* 𐑍 */: return u8"𐐥" /* 0x10425 */;
+ case 0x1044e /* 𐑎 */: return u8"𐐦" /* 0x10426 */;
+ case 0x1044f /* 𐑏 */: return u8"𐐧" /* 0x10427 */;
+ case 0x104d8 /* 𐓘 */: return u8"𐒰" /* 0x104b0 */;
+ case 0x104d9 /* 𐓙 */: return u8"𐒱" /* 0x104b1 */;
+ case 0x104da /* 𐓚 */: return u8"𐒲" /* 0x104b2 */;
+ case 0x104db /* 𐓛 */: return u8"𐒳" /* 0x104b3 */;
+ case 0x104dc /* 𐓜 */: return u8"𐒴" /* 0x104b4 */;
+ case 0x104dd /* 𐓝 */: return u8"𐒵" /* 0x104b5 */;
+ case 0x104de /* 𐓞 */: return u8"𐒶" /* 0x104b6 */;
+ case 0x104df /* 𐓟 */: return u8"𐒷" /* 0x104b7 */;
+ case 0x104e0 /* 𐓠 */: return u8"𐒸" /* 0x104b8 */;
+ case 0x104e1 /* 𐓡 */: return u8"𐒹" /* 0x104b9 */;
+ case 0x104e2 /* 𐓢 */: return u8"𐒺" /* 0x104ba */;
+ case 0x104e3 /* 𐓣 */: return u8"𐒻" /* 0x104bb */;
+ case 0x104e4 /* 𐓤 */: return u8"𐒼" /* 0x104bc */;
+ case 0x104e5 /* 𐓥 */: return u8"𐒽" /* 0x104bd */;
+ case 0x104e6 /* 𐓦 */: return u8"𐒾" /* 0x104be */;
+ case 0x104e7 /* 𐓧 */: return u8"𐒿" /* 0x104bf */;
+ case 0x104e8 /* 𐓨 */: return u8"𐓀" /* 0x104c0 */;
+ case 0x104e9 /* 𐓩 */: return u8"𐓁" /* 0x104c1 */;
+ case 0x104ea /* 𐓪 */: return u8"𐓂" /* 0x104c2 */;
+ case 0x104eb /* 𐓫 */: return u8"𐓃" /* 0x104c3 */;
+ case 0x104ec /* 𐓬 */: return u8"𐓄" /* 0x104c4 */;
+ case 0x104ed /* 𐓭 */: return u8"𐓅" /* 0x104c5 */;
+ case 0x104ee /* 𐓮 */: return u8"𐓆" /* 0x104c6 */;
+ case 0x104ef /* 𐓯 */: return u8"𐓇" /* 0x104c7 */;
+ case 0x104f0 /* 𐓰 */: return u8"𐓈" /* 0x104c8 */;
+ case 0x104f1 /* 𐓱 */: return u8"𐓉" /* 0x104c9 */;
+ case 0x104f2 /* 𐓲 */: return u8"𐓊" /* 0x104ca */;
+ case 0x104f3 /* 𐓳 */: return u8"𐓋" /* 0x104cb */;
+ case 0x104f4 /* 𐓴 */: return u8"𐓌" /* 0x104cc */;
+ case 0x104f5 /* 𐓵 */: return u8"𐓍" /* 0x104cd */;
+ case 0x104f6 /* 𐓶 */: return u8"𐓎" /* 0x104ce */;
+ case 0x104f7 /* 𐓷 */: return u8"𐓏" /* 0x104cf */;
+ case 0x104f8 /* 𐓸 */: return u8"𐓐" /* 0x104d0 */;
+ case 0x104f9 /* 𐓹 */: return u8"𐓑" /* 0x104d1 */;
+ case 0x104fa /* 𐓺 */: return u8"𐓒" /* 0x104d2 */;
+ case 0x104fb /* 𐓻 */: return u8"𐓓" /* 0x104d3 */;
+ case 0x10cc0 /* 𐳀 */: return u8"𐲀" /* 0x10c80 */;
+ case 0x10cc1 /* 𐳁 */: return u8"𐲁" /* 0x10c81 */;
+ case 0x10cc2 /* 𐳂 */: return u8"𐲂" /* 0x10c82 */;
+ case 0x10cc3 /* 𐳃 */: return u8"𐲃" /* 0x10c83 */;
+ case 0x10cc4 /* 𐳄 */: return u8"𐲄" /* 0x10c84 */;
+ case 0x10cc5 /* 𐳅 */: return u8"𐲅" /* 0x10c85 */;
+ case 0x10cc6 /* 𐳆 */: return u8"𐲆" /* 0x10c86 */;
+ case 0x10cc7 /* 𐳇 */: return u8"𐲇" /* 0x10c87 */;
+ case 0x10cc8 /* 𐳈 */: return u8"𐲈" /* 0x10c88 */;
+ case 0x10cc9 /* 𐳉 */: return u8"𐲉" /* 0x10c89 */;
+ case 0x10cca /* 𐳊 */: return u8"𐲊" /* 0x10c8a */;
+ case 0x10ccb /* 𐳋 */: return u8"𐲋" /* 0x10c8b */;
+ case 0x10ccc /* 𐳌 */: return u8"𐲌" /* 0x10c8c */;
+ case 0x10ccd /* 𐳍 */: return u8"𐲍" /* 0x10c8d */;
+ case 0x10cce /* 𐳎 */: return u8"𐲎" /* 0x10c8e */;
+ case 0x10ccf /* 𐳏 */: return u8"𐲏" /* 0x10c8f */;
+ case 0x10cd0 /* 𐳐 */: return u8"𐲐" /* 0x10c90 */;
+ case 0x10cd1 /* 𐳑 */: return u8"𐲑" /* 0x10c91 */;
+ case 0x10cd2 /* 𐳒 */: return u8"𐲒" /* 0x10c92 */;
+ case 0x10cd3 /* 𐳓 */: return u8"𐲓" /* 0x10c93 */;
+ case 0x10cd4 /* 𐳔 */: return u8"𐲔" /* 0x10c94 */;
+ case 0x10cd5 /* 𐳕 */: return u8"𐲕" /* 0x10c95 */;
+ case 0x10cd6 /* 𐳖 */: return u8"𐲖" /* 0x10c96 */;
+ case 0x10cd7 /* 𐳗 */: return u8"𐲗" /* 0x10c97 */;
+ case 0x10cd8 /* 𐳘 */: return u8"𐲘" /* 0x10c98 */;
+ case 0x10cd9 /* 𐳙 */: return u8"𐲙" /* 0x10c99 */;
+ case 0x10cda /* 𐳚 */: return u8"𐲚" /* 0x10c9a */;
+ case 0x10cdb /* 𐳛 */: return u8"𐲛" /* 0x10c9b */;
+ case 0x10cdc /* 𐳜 */: return u8"𐲜" /* 0x10c9c */;
+ case 0x10cdd /* 𐳝 */: return u8"𐲝" /* 0x10c9d */;
+ case 0x10cde /* 𐳞 */: return u8"𐲞" /* 0x10c9e */;
+ case 0x10cdf /* 𐳟 */: return u8"𐲟" /* 0x10c9f */;
+ case 0x10ce0 /* 𐳠 */: return u8"𐲠" /* 0x10ca0 */;
+ case 0x10ce1 /* 𐳡 */: return u8"𐲡" /* 0x10ca1 */;
+ case 0x10ce2 /* 𐳢 */: return u8"𐲢" /* 0x10ca2 */;
+ case 0x10ce3 /* 𐳣 */: return u8"𐲣" /* 0x10ca3 */;
+ case 0x10ce4 /* 𐳤 */: return u8"𐲤" /* 0x10ca4 */;
+ case 0x10ce5 /* 𐳥 */: return u8"𐲥" /* 0x10ca5 */;
+ case 0x10ce6 /* 𐳦 */: return u8"𐲦" /* 0x10ca6 */;
+ case 0x10ce7 /* 𐳧 */: return u8"𐲧" /* 0x10ca7 */;
+ case 0x10ce8 /* 𐳨 */: return u8"𐲨" /* 0x10ca8 */;
+ case 0x10ce9 /* 𐳩 */: return u8"𐲩" /* 0x10ca9 */;
+ case 0x10cea /* 𐳪 */: return u8"𐲪" /* 0x10caa */;
+ case 0x10ceb /* 𐳫 */: return u8"𐲫" /* 0x10cab */;
+ case 0x10cec /* 𐳬 */: return u8"𐲬" /* 0x10cac */;
+ case 0x10ced /* 𐳭 */: return u8"𐲭" /* 0x10cad */;
+ case 0x10cee /* 𐳮 */: return u8"𐲮" /* 0x10cae */;
+ case 0x10cef /* 𐳯 */: return u8"𐲯" /* 0x10caf */;
+ case 0x10cf0 /* 𐳰 */: return u8"𐲰" /* 0x10cb0 */;
+ case 0x10cf1 /* 𐳱 */: return u8"𐲱" /* 0x10cb1 */;
+ case 0x10cf2 /* 𐳲 */: return u8"𐲲" /* 0x10cb2 */;
+ case 0x118c0 /* 𑣀 */: return u8"𑢠" /* 0x118a0 */;
+ case 0x118c1 /* 𑣁 */: return u8"𑢡" /* 0x118a1 */;
+ case 0x118c2 /* 𑣂 */: return u8"𑢢" /* 0x118a2 */;
+ case 0x118c3 /* 𑣃 */: return u8"𑢣" /* 0x118a3 */;
+ case 0x118c4 /* 𑣄 */: return u8"𑢤" /* 0x118a4 */;
+ case 0x118c5 /* 𑣅 */: return u8"𑢥" /* 0x118a5 */;
+ case 0x118c6 /* 𑣆 */: return u8"𑢦" /* 0x118a6 */;
+ case 0x118c7 /* 𑣇 */: return u8"𑢧" /* 0x118a7 */;
+ case 0x118c8 /* 𑣈 */: return u8"𑢨" /* 0x118a8 */;
+ case 0x118c9 /* 𑣉 */: return u8"𑢩" /* 0x118a9 */;
+ case 0x118ca /* 𑣊 */: return u8"𑢪" /* 0x118aa */;
+ case 0x118cb /* 𑣋 */: return u8"𑢫" /* 0x118ab */;
+ case 0x118cc /* 𑣌 */: return u8"𑢬" /* 0x118ac */;
+ case 0x118cd /* 𑣍 */: return u8"𑢭" /* 0x118ad */;
+ case 0x118ce /* 𑣎 */: return u8"𑢮" /* 0x118ae */;
+ case 0x118cf /* 𑣏 */: return u8"𑢯" /* 0x118af */;
+ case 0x118d0 /* 𑣐 */: return u8"𑢰" /* 0x118b0 */;
+ case 0x118d1 /* 𑣑 */: return u8"𑢱" /* 0x118b1 */;
+ case 0x118d2 /* 𑣒 */: return u8"𑢲" /* 0x118b2 */;
+ case 0x118d3 /* 𑣓 */: return u8"𑢳" /* 0x118b3 */;
+ case 0x118d4 /* 𑣔 */: return u8"𑢴" /* 0x118b4 */;
+ case 0x118d5 /* 𑣕 */: return u8"𑢵" /* 0x118b5 */;
+ case 0x118d6 /* 𑣖 */: return u8"𑢶" /* 0x118b6 */;
+ case 0x118d7 /* 𑣗 */: return u8"𑢷" /* 0x118b7 */;
+ case 0x118d8 /* 𑣘 */: return u8"𑢸" /* 0x118b8 */;
+ case 0x118d9 /* 𑣙 */: return u8"𑢹" /* 0x118b9 */;
+ case 0x118da /* 𑣚 */: return u8"𑢺" /* 0x118ba */;
+ case 0x118db /* 𑣛 */: return u8"𑢻" /* 0x118bb */;
+ case 0x118dc /* 𑣜 */: return u8"𑢼" /* 0x118bc */;
+ case 0x118dd /* 𑣝 */: return u8"𑢽" /* 0x118bd */;
+ case 0x118de /* 𑣞 */: return u8"𑢾" /* 0x118be */;
+ case 0x118df /* 𑣟 */: return u8"𑢿" /* 0x118bf */;
+ case 0x16e60 /* 𖹠 */: return u8"𖹀" /* 0x16e40 */;
+ case 0x16e61 /* 𖹡 */: return u8"𖹁" /* 0x16e41 */;
+ case 0x16e62 /* 𖹢 */: return u8"𖹂" /* 0x16e42 */;
+ case 0x16e63 /* 𖹣 */: return u8"𖹃" /* 0x16e43 */;
+ case 0x16e64 /* 𖹤 */: return u8"𖹄" /* 0x16e44 */;
+ case 0x16e65 /* 𖹥 */: return u8"𖹅" /* 0x16e45 */;
+ case 0x16e66 /* 𖹦 */: return u8"𖹆" /* 0x16e46 */;
+ case 0x16e67 /* 𖹧 */: return u8"𖹇" /* 0x16e47 */;
+ case 0x16e68 /* 𖹨 */: return u8"𖹈" /* 0x16e48 */;
+ case 0x16e69 /* 𖹩 */: return u8"𖹉" /* 0x16e49 */;
+ case 0x16e6a /* 𖹪 */: return u8"𖹊" /* 0x16e4a */;
+ case 0x16e6b /* 𖹫 */: return u8"𖹋" /* 0x16e4b */;
+ case 0x16e6c /* 𖹬 */: return u8"𖹌" /* 0x16e4c */;
+ case 0x16e6d /* 𖹭 */: return u8"𖹍" /* 0x16e4d */;
+ case 0x16e6e /* 𖹮 */: return u8"𖹎" /* 0x16e4e */;
+ case 0x16e6f /* 𖹯 */: return u8"𖹏" /* 0x16e4f */;
+ case 0x16e70 /* 𖹰 */: return u8"𖹐" /* 0x16e50 */;
+ case 0x16e71 /* 𖹱 */: return u8"𖹑" /* 0x16e51 */;
+ case 0x16e72 /* 𖹲 */: return u8"𖹒" /* 0x16e52 */;
+ case 0x16e73 /* 𖹳 */: return u8"𖹓" /* 0x16e53 */;
+ case 0x16e74 /* 𖹴 */: return u8"𖹔" /* 0x16e54 */;
+ case 0x16e75 /* 𖹵 */: return u8"𖹕" /* 0x16e55 */;
+ case 0x16e76 /* 𖹶 */: return u8"𖹖" /* 0x16e56 */;
+ case 0x16e77 /* 𖹷 */: return u8"𖹗" /* 0x16e57 */;
+ case 0x16e78 /* 𖹸 */: return u8"𖹘" /* 0x16e58 */;
+ case 0x16e79 /* 𖹹 */: return u8"𖹙" /* 0x16e59 */;
+ case 0x16e7a /* 𖹺 */: return u8"𖹚" /* 0x16e5a */;
+ case 0x16e7b /* 𖹻 */: return u8"𖹛" /* 0x16e5b */;
+ case 0x16e7c /* 𖹼 */: return u8"𖹜" /* 0x16e5c */;
+ case 0x16e7d /* 𖹽 */: return u8"𖹝" /* 0x16e5d */;
+ case 0x16e7e /* 𖹾 */: return u8"𖹞" /* 0x16e5e */;
+ case 0x16e7f /* 𖹿 */: return u8"𖹟" /* 0x16e5f */;
+ case 0x1e922 /* 𞤢 */: return u8"𞤀" /* 0x1e900 */;
+ case 0x1e923 /* 𞤣 */: return u8"𞤁" /* 0x1e901 */;
+ case 0x1e924 /* 𞤤 */: return u8"𞤂" /* 0x1e902 */;
+ case 0x1e925 /* 𞤥 */: return u8"𞤃" /* 0x1e903 */;
+ case 0x1e926 /* 𞤦 */: return u8"𞤄" /* 0x1e904 */;
+ case 0x1e927 /* 𞤧 */: return u8"𞤅" /* 0x1e905 */;
+ case 0x1e928 /* 𞤨 */: return u8"𞤆" /* 0x1e906 */;
+ case 0x1e929 /* 𞤩 */: return u8"𞤇" /* 0x1e907 */;
+ case 0x1e92a /* 𞤪 */: return u8"𞤈" /* 0x1e908 */;
+ case 0x1e92b /* 𞤫 */: return u8"𞤉" /* 0x1e909 */;
+ case 0x1e92c /* 𞤬 */: return u8"𞤊" /* 0x1e90a */;
+ case 0x1e92d /* 𞤭 */: return u8"𞤋" /* 0x1e90b */;
+ case 0x1e92e /* 𞤮 */: return u8"𞤌" /* 0x1e90c */;
+ case 0x1e92f /* 𞤯 */: return u8"𞤍" /* 0x1e90d */;
+ case 0x1e930 /* 𞤰 */: return u8"𞤎" /* 0x1e90e */;
+ case 0x1e931 /* 𞤱 */: return u8"𞤏" /* 0x1e90f */;
+ case 0x1e932 /* 𞤲 */: return u8"𞤐" /* 0x1e910 */;
+ case 0x1e933 /* 𞤳 */: return u8"𞤑" /* 0x1e911 */;
+ case 0x1e934 /* 𞤴 */: return u8"𞤒" /* 0x1e912 */;
+ case 0x1e935 /* 𞤵 */: return u8"𞤓" /* 0x1e913 */;
+ case 0x1e936 /* 𞤶 */: return u8"𞤔" /* 0x1e914 */;
+ case 0x1e937 /* 𞤷 */: return u8"𞤕" /* 0x1e915 */;
+ case 0x1e938 /* 𞤸 */: return u8"𞤖" /* 0x1e916 */;
+ case 0x1e939 /* 𞤹 */: return u8"𞤗" /* 0x1e917 */;
+ case 0x1e93a /* 𞤺 */: return u8"𞤘" /* 0x1e918 */;
+ case 0x1e93b /* 𞤻 */: return u8"𞤙" /* 0x1e919 */;
+ case 0x1e93c /* 𞤼 */: return u8"𞤚" /* 0x1e91a */;
+ case 0x1e93d /* 𞤽 */: return u8"𞤛" /* 0x1e91b */;
+ case 0x1e93e /* 𞤾 */: return u8"𞤜" /* 0x1e91c */;
+ case 0x1e93f /* 𞤿 */: return u8"𞤝" /* 0x1e91d */;
+ case 0x1e940 /* 𞥀 */: return u8"𞤞" /* 0x1e91e */;
+ case 0x1e941 /* 𞥁 */: return u8"𞤟" /* 0x1e91f */;
+ case 0x1e942 /* 𞥂 */: return u8"𞤠" /* 0x1e920 */;
+ case 0x1e943 /* 𞥃 */: return u8"𞤡" /* 0x1e921 */;
+ default: return nullptr;
+ }
+}
+
+inline const char *convertUnicodeToLower(uint32_t code)
+{
+ switch(code)
+ {
+ case 0x41 /* A */: return u8"a" /* 0x61 */;
+ case 0x42 /* B */: return u8"b" /* 0x62 */;
+ case 0x43 /* C */: return u8"c" /* 0x63 */;
+ case 0x44 /* D */: return u8"d" /* 0x64 */;
+ case 0x45 /* E */: return u8"e" /* 0x65 */;
+ case 0x46 /* F */: return u8"f" /* 0x66 */;
+ case 0x47 /* G */: return u8"g" /* 0x67 */;
+ case 0x48 /* H */: return u8"h" /* 0x68 */;
+ case 0x49 /* I */: return u8"i" /* 0x69 */;
+ case 0x4a /* J */: return u8"j" /* 0x6a */;
+ case 0x4b /* K */: return u8"k" /* 0x6b */;
+ case 0x4c /* L */: return u8"l" /* 0x6c */;
+ case 0x4d /* M */: return u8"m" /* 0x6d */;
+ case 0x4e /* N */: return u8"n" /* 0x6e */;
+ case 0x4f /* O */: return u8"o" /* 0x6f */;
+ case 0x50 /* P */: return u8"p" /* 0x70 */;
+ case 0x51 /* Q */: return u8"q" /* 0x71 */;
+ case 0x52 /* R */: return u8"r" /* 0x72 */;
+ case 0x53 /* S */: return u8"s" /* 0x73 */;
+ case 0x54 /* T */: return u8"t" /* 0x74 */;
+ case 0x55 /* U */: return u8"u" /* 0x75 */;
+ case 0x56 /* V */: return u8"v" /* 0x76 */;
+ case 0x57 /* W */: return u8"w" /* 0x77 */;
+ case 0x58 /* X */: return u8"x" /* 0x78 */;
+ case 0x59 /* Y */: return u8"y" /* 0x79 */;
+ case 0x5a /* Z */: return u8"z" /* 0x7a */;
+ case 0xc0 /* À */: return u8"à" /* 0xe0 */;
+ case 0xc1 /* Á */: return u8"á" /* 0xe1 */;
+ case 0xc2 /* Â */: return u8"â" /* 0xe2 */;
+ case 0xc3 /* Ã */: return u8"ã" /* 0xe3 */;
+ case 0xc4 /* Ä */: return u8"ä" /* 0xe4 */;
+ case 0xc5 /* Å */: return u8"å" /* 0xe5 */;
+ case 0xc6 /* Æ */: return u8"æ" /* 0xe6 */;
+ case 0xc7 /* Ç */: return u8"ç" /* 0xe7 */;
+ case 0xc8 /* È */: return u8"è" /* 0xe8 */;
+ case 0xc9 /* É */: return u8"é" /* 0xe9 */;
+ case 0xca /* Ê */: return u8"ê" /* 0xea */;
+ case 0xcb /* Ë */: return u8"ë" /* 0xeb */;
+ case 0xcc /* Ì */: return u8"ì" /* 0xec */;
+ case 0xcd /* Í */: return u8"í" /* 0xed */;
+ case 0xce /* Î */: return u8"î" /* 0xee */;
+ case 0xcf /* Ï */: return u8"ï" /* 0xef */;
+ case 0xd0 /* Ð */: return u8"ð" /* 0xf0 */;
+ case 0xd1 /* Ñ */: return u8"ñ" /* 0xf1 */;
+ case 0xd2 /* Ò */: return u8"ò" /* 0xf2 */;
+ case 0xd3 /* Ó */: return u8"ó" /* 0xf3 */;
+ case 0xd4 /* Ô */: return u8"ô" /* 0xf4 */;
+ case 0xd5 /* Õ */: return u8"õ" /* 0xf5 */;
+ case 0xd6 /* Ö */: return u8"ö" /* 0xf6 */;
+ case 0xd8 /* Ø */: return u8"ø" /* 0xf8 */;
+ case 0xd9 /* Ù */: return u8"ù" /* 0xf9 */;
+ case 0xda /* Ú */: return u8"ú" /* 0xfa */;
+ case 0xdb /* Û */: return u8"û" /* 0xfb */;
+ case 0xdc /* Ü */: return u8"ü" /* 0xfc */;
+ case 0xdd /* Ý */: return u8"ý" /* 0xfd */;
+ case 0xde /* Þ */: return u8"þ" /* 0xfe */;
+ case 0x100 /* Ā */: return u8"ā" /* 0x101 */;
+ case 0x102 /* Ă */: return u8"ă" /* 0x103 */;
+ case 0x104 /* Ą */: return u8"ą" /* 0x105 */;
+ case 0x106 /* Ć */: return u8"ć" /* 0x107 */;
+ case 0x108 /* Ĉ */: return u8"ĉ" /* 0x109 */;
+ case 0x10a /* Ċ */: return u8"ċ" /* 0x10b */;
+ case 0x10c /* Č */: return u8"č" /* 0x10d */;
+ case 0x10e /* Ď */: return u8"ď" /* 0x10f */;
+ case 0x110 /* Đ */: return u8"đ" /* 0x111 */;
+ case 0x112 /* Ē */: return u8"ē" /* 0x113 */;
+ case 0x114 /* Ĕ */: return u8"ĕ" /* 0x115 */;
+ case 0x116 /* Ė */: return u8"ė" /* 0x117 */;
+ case 0x118 /* Ę */: return u8"ę" /* 0x119 */;
+ case 0x11a /* Ě */: return u8"ě" /* 0x11b */;
+ case 0x11c /* Ĝ */: return u8"ĝ" /* 0x11d */;
+ case 0x11e /* Ğ */: return u8"ğ" /* 0x11f */;
+ case 0x120 /* Ġ */: return u8"ġ" /* 0x121 */;
+ case 0x122 /* Ģ */: return u8"ģ" /* 0x123 */;
+ case 0x124 /* Ĥ */: return u8"ĥ" /* 0x125 */;
+ case 0x126 /* Ħ */: return u8"ħ" /* 0x127 */;
+ case 0x128 /* Ĩ */: return u8"ĩ" /* 0x129 */;
+ case 0x12a /* Ī */: return u8"ī" /* 0x12b */;
+ case 0x12c /* Ĭ */: return u8"ĭ" /* 0x12d */;
+ case 0x12e /* Į */: return u8"į" /* 0x12f */;
+ case 0x130 /* İ */: return u8"i̇" /* 0x69,0x307 */;
+ case 0x132 /* IJ */: return u8"ij" /* 0x133 */;
+ case 0x134 /* Ĵ */: return u8"ĵ" /* 0x135 */;
+ case 0x136 /* Ķ */: return u8"ķ" /* 0x137 */;
+ case 0x139 /* Ĺ */: return u8"ĺ" /* 0x13a */;
+ case 0x13b /* Ļ */: return u8"ļ" /* 0x13c */;
+ case 0x13d /* Ľ */: return u8"ľ" /* 0x13e */;
+ case 0x13f /* Ŀ */: return u8"ŀ" /* 0x140 */;
+ case 0x141 /* Ł */: return u8"ł" /* 0x142 */;
+ case 0x143 /* Ń */: return u8"ń" /* 0x144 */;
+ case 0x145 /* Ņ */: return u8"ņ" /* 0x146 */;
+ case 0x147 /* Ň */: return u8"ň" /* 0x148 */;
+ case 0x14a /* Ŋ */: return u8"ŋ" /* 0x14b */;
+ case 0x14c /* Ō */: return u8"ō" /* 0x14d */;
+ case 0x14e /* Ŏ */: return u8"ŏ" /* 0x14f */;
+ case 0x150 /* Ő */: return u8"ő" /* 0x151 */;
+ case 0x152 /* Œ */: return u8"œ" /* 0x153 */;
+ case 0x154 /* Ŕ */: return u8"ŕ" /* 0x155 */;
+ case 0x156 /* Ŗ */: return u8"ŗ" /* 0x157 */;
+ case 0x158 /* Ř */: return u8"ř" /* 0x159 */;
+ case 0x15a /* Ś */: return u8"ś" /* 0x15b */;
+ case 0x15c /* Ŝ */: return u8"ŝ" /* 0x15d */;
+ case 0x15e /* Ş */: return u8"ş" /* 0x15f */;
+ case 0x160 /* Š */: return u8"š" /* 0x161 */;
+ case 0x162 /* Ţ */: return u8"ţ" /* 0x163 */;
+ case 0x164 /* Ť */: return u8"ť" /* 0x165 */;
+ case 0x166 /* Ŧ */: return u8"ŧ" /* 0x167 */;
+ case 0x168 /* Ũ */: return u8"ũ" /* 0x169 */;
+ case 0x16a /* Ū */: return u8"ū" /* 0x16b */;
+ case 0x16c /* Ŭ */: return u8"ŭ" /* 0x16d */;
+ case 0x16e /* Ů */: return u8"ů" /* 0x16f */;
+ case 0x170 /* Ű */: return u8"ű" /* 0x171 */;
+ case 0x172 /* Ų */: return u8"ų" /* 0x173 */;
+ case 0x174 /* Ŵ */: return u8"ŵ" /* 0x175 */;
+ case 0x176 /* Ŷ */: return u8"ŷ" /* 0x177 */;
+ case 0x178 /* Ÿ */: return u8"ÿ" /* 0xff */;
+ case 0x179 /* Ź */: return u8"ź" /* 0x17a */;
+ case 0x17b /* Ż */: return u8"ż" /* 0x17c */;
+ case 0x17d /* Ž */: return u8"ž" /* 0x17e */;
+ case 0x181 /* Ɓ */: return u8"ɓ" /* 0x253 */;
+ case 0x182 /* Ƃ */: return u8"ƃ" /* 0x183 */;
+ case 0x184 /* Ƅ */: return u8"ƅ" /* 0x185 */;
+ case 0x186 /* Ɔ */: return u8"ɔ" /* 0x254 */;
+ case 0x187 /* Ƈ */: return u8"ƈ" /* 0x188 */;
+ case 0x189 /* Ɖ */: return u8"ɖ" /* 0x256 */;
+ case 0x18a /* Ɗ */: return u8"ɗ" /* 0x257 */;
+ case 0x18b /* Ƌ */: return u8"ƌ" /* 0x18c */;
+ case 0x18e /* Ǝ */: return u8"ǝ" /* 0x1dd */;
+ case 0x18f /* Ə */: return u8"ə" /* 0x259 */;
+ case 0x190 /* Ɛ */: return u8"ɛ" /* 0x25b */;
+ case 0x191 /* Ƒ */: return u8"ƒ" /* 0x192 */;
+ case 0x193 /* Ɠ */: return u8"ɠ" /* 0x260 */;
+ case 0x194 /* Ɣ */: return u8"ɣ" /* 0x263 */;
+ case 0x196 /* Ɩ */: return u8"ɩ" /* 0x269 */;
+ case 0x197 /* Ɨ */: return u8"ɨ" /* 0x268 */;
+ case 0x198 /* Ƙ */: return u8"ƙ" /* 0x199 */;
+ case 0x19c /* Ɯ */: return u8"ɯ" /* 0x26f */;
+ case 0x19d /* Ɲ */: return u8"ɲ" /* 0x272 */;
+ case 0x19f /* Ɵ */: return u8"ɵ" /* 0x275 */;
+ case 0x1a0 /* Ơ */: return u8"ơ" /* 0x1a1 */;
+ case 0x1a2 /* Ƣ */: return u8"ƣ" /* 0x1a3 */;
+ case 0x1a4 /* Ƥ */: return u8"ƥ" /* 0x1a5 */;
+ case 0x1a6 /* Ʀ */: return u8"ʀ" /* 0x280 */;
+ case 0x1a7 /* Ƨ */: return u8"ƨ" /* 0x1a8 */;
+ case 0x1a9 /* Ʃ */: return u8"ʃ" /* 0x283 */;
+ case 0x1ac /* Ƭ */: return u8"ƭ" /* 0x1ad */;
+ case 0x1ae /* Ʈ */: return u8"ʈ" /* 0x288 */;
+ case 0x1af /* Ư */: return u8"ư" /* 0x1b0 */;
+ case 0x1b1 /* Ʊ */: return u8"ʊ" /* 0x28a */;
+ case 0x1b2 /* Ʋ */: return u8"ʋ" /* 0x28b */;
+ case 0x1b3 /* Ƴ */: return u8"ƴ" /* 0x1b4 */;
+ case 0x1b5 /* Ƶ */: return u8"ƶ" /* 0x1b6 */;
+ case 0x1b7 /* Ʒ */: return u8"ʒ" /* 0x292 */;
+ case 0x1b8 /* Ƹ */: return u8"ƹ" /* 0x1b9 */;
+ case 0x1bc /* Ƽ */: return u8"ƽ" /* 0x1bd */;
+ case 0x1c4 /* DŽ */: return u8"dž" /* 0x1c6 */;
+ case 0x1c5 /* Dž */: return u8"dž" /* 0x1c6 */;
+ case 0x1c7 /* LJ */: return u8"lj" /* 0x1c9 */;
+ case 0x1c8 /* Lj */: return u8"lj" /* 0x1c9 */;
+ case 0x1ca /* NJ */: return u8"nj" /* 0x1cc */;
+ case 0x1cb /* Nj */: return u8"nj" /* 0x1cc */;
+ case 0x1cd /* Ǎ */: return u8"ǎ" /* 0x1ce */;
+ case 0x1cf /* Ǐ */: return u8"ǐ" /* 0x1d0 */;
+ case 0x1d1 /* Ǒ */: return u8"ǒ" /* 0x1d2 */;
+ case 0x1d3 /* Ǔ */: return u8"ǔ" /* 0x1d4 */;
+ case 0x1d5 /* Ǖ */: return u8"ǖ" /* 0x1d6 */;
+ case 0x1d7 /* Ǘ */: return u8"ǘ" /* 0x1d8 */;
+ case 0x1d9 /* Ǚ */: return u8"ǚ" /* 0x1da */;
+ case 0x1db /* Ǜ */: return u8"ǜ" /* 0x1dc */;
+ case 0x1de /* Ǟ */: return u8"ǟ" /* 0x1df */;
+ case 0x1e0 /* Ǡ */: return u8"ǡ" /* 0x1e1 */;
+ case 0x1e2 /* Ǣ */: return u8"ǣ" /* 0x1e3 */;
+ case 0x1e4 /* Ǥ */: return u8"ǥ" /* 0x1e5 */;
+ case 0x1e6 /* Ǧ */: return u8"ǧ" /* 0x1e7 */;
+ case 0x1e8 /* Ǩ */: return u8"ǩ" /* 0x1e9 */;
+ case 0x1ea /* Ǫ */: return u8"ǫ" /* 0x1eb */;
+ case 0x1ec /* Ǭ */: return u8"ǭ" /* 0x1ed */;
+ case 0x1ee /* Ǯ */: return u8"ǯ" /* 0x1ef */;
+ case 0x1f1 /* DZ */: return u8"dz" /* 0x1f3 */;
+ case 0x1f2 /* Dz */: return u8"dz" /* 0x1f3 */;
+ case 0x1f4 /* Ǵ */: return u8"ǵ" /* 0x1f5 */;
+ case 0x1f6 /* Ƕ */: return u8"ƕ" /* 0x195 */;
+ case 0x1f7 /* Ƿ */: return u8"ƿ" /* 0x1bf */;
+ case 0x1f8 /* Ǹ */: return u8"ǹ" /* 0x1f9 */;
+ case 0x1fa /* Ǻ */: return u8"ǻ" /* 0x1fb */;
+ case 0x1fc /* Ǽ */: return u8"ǽ" /* 0x1fd */;
+ case 0x1fe /* Ǿ */: return u8"ǿ" /* 0x1ff */;
+ case 0x200 /* Ȁ */: return u8"ȁ" /* 0x201 */;
+ case 0x202 /* Ȃ */: return u8"ȃ" /* 0x203 */;
+ case 0x204 /* Ȅ */: return u8"ȅ" /* 0x205 */;
+ case 0x206 /* Ȇ */: return u8"ȇ" /* 0x207 */;
+ case 0x208 /* Ȉ */: return u8"ȉ" /* 0x209 */;
+ case 0x20a /* Ȋ */: return u8"ȋ" /* 0x20b */;
+ case 0x20c /* Ȍ */: return u8"ȍ" /* 0x20d */;
+ case 0x20e /* Ȏ */: return u8"ȏ" /* 0x20f */;
+ case 0x210 /* Ȑ */: return u8"ȑ" /* 0x211 */;
+ case 0x212 /* Ȓ */: return u8"ȓ" /* 0x213 */;
+ case 0x214 /* Ȕ */: return u8"ȕ" /* 0x215 */;
+ case 0x216 /* Ȗ */: return u8"ȗ" /* 0x217 */;
+ case 0x218 /* Ș */: return u8"ș" /* 0x219 */;
+ case 0x21a /* Ț */: return u8"ț" /* 0x21b */;
+ case 0x21c /* Ȝ */: return u8"ȝ" /* 0x21d */;
+ case 0x21e /* Ȟ */: return u8"ȟ" /* 0x21f */;
+ case 0x220 /* Ƞ */: return u8"ƞ" /* 0x19e */;
+ case 0x222 /* Ȣ */: return u8"ȣ" /* 0x223 */;
+ case 0x224 /* Ȥ */: return u8"ȥ" /* 0x225 */;
+ case 0x226 /* Ȧ */: return u8"ȧ" /* 0x227 */;
+ case 0x228 /* Ȩ */: return u8"ȩ" /* 0x229 */;
+ case 0x22a /* Ȫ */: return u8"ȫ" /* 0x22b */;
+ case 0x22c /* Ȭ */: return u8"ȭ" /* 0x22d */;
+ case 0x22e /* Ȯ */: return u8"ȯ" /* 0x22f */;
+ case 0x230 /* Ȱ */: return u8"ȱ" /* 0x231 */;
+ case 0x232 /* Ȳ */: return u8"ȳ" /* 0x233 */;
+ case 0x23a /* Ⱥ */: return u8"ⱥ" /* 0x2c65 */;
+ case 0x23b /* Ȼ */: return u8"ȼ" /* 0x23c */;
+ case 0x23d /* Ƚ */: return u8"ƚ" /* 0x19a */;
+ case 0x23e /* Ⱦ */: return u8"ⱦ" /* 0x2c66 */;
+ case 0x241 /* Ɂ */: return u8"ɂ" /* 0x242 */;
+ case 0x243 /* Ƀ */: return u8"ƀ" /* 0x180 */;
+ case 0x244 /* Ʉ */: return u8"ʉ" /* 0x289 */;
+ case 0x245 /* Ʌ */: return u8"ʌ" /* 0x28c */;
+ case 0x246 /* Ɇ */: return u8"ɇ" /* 0x247 */;
+ case 0x248 /* Ɉ */: return u8"ɉ" /* 0x249 */;
+ case 0x24a /* Ɋ */: return u8"ɋ" /* 0x24b */;
+ case 0x24c /* Ɍ */: return u8"ɍ" /* 0x24d */;
+ case 0x24e /* Ɏ */: return u8"ɏ" /* 0x24f */;
+ case 0x370 /* Ͱ */: return u8"ͱ" /* 0x371 */;
+ case 0x372 /* Ͳ */: return u8"ͳ" /* 0x373 */;
+ case 0x376 /* Ͷ */: return u8"ͷ" /* 0x377 */;
+ case 0x37f /* Ϳ */: return u8"ϳ" /* 0x3f3 */;
+ case 0x386 /* Ά */: return u8"ά" /* 0x3ac */;
+ case 0x388 /* Έ */: return u8"έ" /* 0x3ad */;
+ case 0x389 /* Ή */: return u8"ή" /* 0x3ae */;
+ case 0x38a /* Ί */: return u8"ί" /* 0x3af */;
+ case 0x38c /* Ό */: return u8"ό" /* 0x3cc */;
+ case 0x38e /* Ύ */: return u8"ύ" /* 0x3cd */;
+ case 0x38f /* Ώ */: return u8"ώ" /* 0x3ce */;
+ case 0x391 /* Α */: return u8"α" /* 0x3b1 */;
+ case 0x392 /* Β */: return u8"β" /* 0x3b2 */;
+ case 0x393 /* Γ */: return u8"γ" /* 0x3b3 */;
+ case 0x394 /* Δ */: return u8"δ" /* 0x3b4 */;
+ case 0x395 /* Ε */: return u8"ε" /* 0x3b5 */;
+ case 0x396 /* Ζ */: return u8"ζ" /* 0x3b6 */;
+ case 0x397 /* Η */: return u8"η" /* 0x3b7 */;
+ case 0x398 /* Θ */: return u8"θ" /* 0x3b8 */;
+ case 0x399 /* Ι */: return u8"ι" /* 0x3b9 */;
+ case 0x39a /* Κ */: return u8"κ" /* 0x3ba */;
+ case 0x39b /* Λ */: return u8"λ" /* 0x3bb */;
+ case 0x39c /* Μ */: return u8"μ" /* 0x3bc */;
+ case 0x39d /* Ν */: return u8"ν" /* 0x3bd */;
+ case 0x39e /* Ξ */: return u8"ξ" /* 0x3be */;
+ case 0x39f /* Ο */: return u8"ο" /* 0x3bf */;
+ case 0x3a0 /* Π */: return u8"π" /* 0x3c0 */;
+ case 0x3a1 /* Ρ */: return u8"ρ" /* 0x3c1 */;
+ case 0x3a3 /* Σ */: return u8"σ" /* 0x3c3 */;
+ case 0x3a4 /* Τ */: return u8"τ" /* 0x3c4 */;
+ case 0x3a5 /* Υ */: return u8"υ" /* 0x3c5 */;
+ case 0x3a6 /* Φ */: return u8"φ" /* 0x3c6 */;
+ case 0x3a7 /* Χ */: return u8"χ" /* 0x3c7 */;
+ case 0x3a8 /* Ψ */: return u8"ψ" /* 0x3c8 */;
+ case 0x3a9 /* Ω */: return u8"ω" /* 0x3c9 */;
+ case 0x3aa /* Ϊ */: return u8"ϊ" /* 0x3ca */;
+ case 0x3ab /* Ϋ */: return u8"ϋ" /* 0x3cb */;
+ case 0x3cf /* Ϗ */: return u8"ϗ" /* 0x3d7 */;
+ case 0x3d8 /* Ϙ */: return u8"ϙ" /* 0x3d9 */;
+ case 0x3da /* Ϛ */: return u8"ϛ" /* 0x3db */;
+ case 0x3dc /* Ϝ */: return u8"ϝ" /* 0x3dd */;
+ case 0x3de /* Ϟ */: return u8"ϟ" /* 0x3df */;
+ case 0x3e0 /* Ϡ */: return u8"ϡ" /* 0x3e1 */;
+ case 0x3e2 /* Ϣ */: return u8"ϣ" /* 0x3e3 */;
+ case 0x3e4 /* Ϥ */: return u8"ϥ" /* 0x3e5 */;
+ case 0x3e6 /* Ϧ */: return u8"ϧ" /* 0x3e7 */;
+ case 0x3e8 /* Ϩ */: return u8"ϩ" /* 0x3e9 */;
+ case 0x3ea /* Ϫ */: return u8"ϫ" /* 0x3eb */;
+ case 0x3ec /* Ϭ */: return u8"ϭ" /* 0x3ed */;
+ case 0x3ee /* Ϯ */: return u8"ϯ" /* 0x3ef */;
+ case 0x3f4 /* ϴ */: return u8"θ" /* 0x3b8 */;
+ case 0x3f7 /* Ϸ */: return u8"ϸ" /* 0x3f8 */;
+ case 0x3f9 /* Ϲ */: return u8"ϲ" /* 0x3f2 */;
+ case 0x3fa /* Ϻ */: return u8"ϻ" /* 0x3fb */;
+ case 0x3fd /* Ͻ */: return u8"ͻ" /* 0x37b */;
+ case 0x3fe /* Ͼ */: return u8"ͼ" /* 0x37c */;
+ case 0x3ff /* Ͽ */: return u8"ͽ" /* 0x37d */;
+ case 0x400 /* Ѐ */: return u8"ѐ" /* 0x450 */;
+ case 0x401 /* Ё */: return u8"ё" /* 0x451 */;
+ case 0x402 /* Ђ */: return u8"ђ" /* 0x452 */;
+ case 0x403 /* Ѓ */: return u8"ѓ" /* 0x453 */;
+ case 0x404 /* Є */: return u8"є" /* 0x454 */;
+ case 0x405 /* Ѕ */: return u8"ѕ" /* 0x455 */;
+ case 0x406 /* І */: return u8"і" /* 0x456 */;
+ case 0x407 /* Ї */: return u8"ї" /* 0x457 */;
+ case 0x408 /* Ј */: return u8"ј" /* 0x458 */;
+ case 0x409 /* Љ */: return u8"љ" /* 0x459 */;
+ case 0x40a /* Њ */: return u8"њ" /* 0x45a */;
+ case 0x40b /* Ћ */: return u8"ћ" /* 0x45b */;
+ case 0x40c /* Ќ */: return u8"ќ" /* 0x45c */;
+ case 0x40d /* Ѝ */: return u8"ѝ" /* 0x45d */;
+ case 0x40e /* Ў */: return u8"ў" /* 0x45e */;
+ case 0x40f /* Џ */: return u8"џ" /* 0x45f */;
+ case 0x410 /* А */: return u8"а" /* 0x430 */;
+ case 0x411 /* Б */: return u8"б" /* 0x431 */;
+ case 0x412 /* В */: return u8"в" /* 0x432 */;
+ case 0x413 /* Г */: return u8"г" /* 0x433 */;
+ case 0x414 /* Д */: return u8"д" /* 0x434 */;
+ case 0x415 /* Е */: return u8"е" /* 0x435 */;
+ case 0x416 /* Ж */: return u8"ж" /* 0x436 */;
+ case 0x417 /* З */: return u8"з" /* 0x437 */;
+ case 0x418 /* И */: return u8"и" /* 0x438 */;
+ case 0x419 /* Й */: return u8"й" /* 0x439 */;
+ case 0x41a /* К */: return u8"к" /* 0x43a */;
+ case 0x41b /* Л */: return u8"л" /* 0x43b */;
+ case 0x41c /* М */: return u8"м" /* 0x43c */;
+ case 0x41d /* Н */: return u8"н" /* 0x43d */;
+ case 0x41e /* О */: return u8"о" /* 0x43e */;
+ case 0x41f /* П */: return u8"п" /* 0x43f */;
+ case 0x420 /* Р */: return u8"р" /* 0x440 */;
+ case 0x421 /* С */: return u8"с" /* 0x441 */;
+ case 0x422 /* Т */: return u8"т" /* 0x442 */;
+ case 0x423 /* У */: return u8"у" /* 0x443 */;
+ case 0x424 /* Ф */: return u8"ф" /* 0x444 */;
+ case 0x425 /* Х */: return u8"х" /* 0x445 */;
+ case 0x426 /* Ц */: return u8"ц" /* 0x446 */;
+ case 0x427 /* Ч */: return u8"ч" /* 0x447 */;
+ case 0x428 /* Ш */: return u8"ш" /* 0x448 */;
+ case 0x429 /* Щ */: return u8"щ" /* 0x449 */;
+ case 0x42a /* Ъ */: return u8"ъ" /* 0x44a */;
+ case 0x42b /* Ы */: return u8"ы" /* 0x44b */;
+ case 0x42c /* Ь */: return u8"ь" /* 0x44c */;
+ case 0x42d /* Э */: return u8"э" /* 0x44d */;
+ case 0x42e /* Ю */: return u8"ю" /* 0x44e */;
+ case 0x42f /* Я */: return u8"я" /* 0x44f */;
+ case 0x460 /* Ѡ */: return u8"ѡ" /* 0x461 */;
+ case 0x462 /* Ѣ */: return u8"ѣ" /* 0x463 */;
+ case 0x464 /* Ѥ */: return u8"ѥ" /* 0x465 */;
+ case 0x466 /* Ѧ */: return u8"ѧ" /* 0x467 */;
+ case 0x468 /* Ѩ */: return u8"ѩ" /* 0x469 */;
+ case 0x46a /* Ѫ */: return u8"ѫ" /* 0x46b */;
+ case 0x46c /* Ѭ */: return u8"ѭ" /* 0x46d */;
+ case 0x46e /* Ѯ */: return u8"ѯ" /* 0x46f */;
+ case 0x470 /* Ѱ */: return u8"ѱ" /* 0x471 */;
+ case 0x472 /* Ѳ */: return u8"ѳ" /* 0x473 */;
+ case 0x474 /* Ѵ */: return u8"ѵ" /* 0x475 */;
+ case 0x476 /* Ѷ */: return u8"ѷ" /* 0x477 */;
+ case 0x478 /* Ѹ */: return u8"ѹ" /* 0x479 */;
+ case 0x47a /* Ѻ */: return u8"ѻ" /* 0x47b */;
+ case 0x47c /* Ѽ */: return u8"ѽ" /* 0x47d */;
+ case 0x47e /* Ѿ */: return u8"ѿ" /* 0x47f */;
+ case 0x480 /* Ҁ */: return u8"ҁ" /* 0x481 */;
+ case 0x48a /* Ҋ */: return u8"ҋ" /* 0x48b */;
+ case 0x48c /* Ҍ */: return u8"ҍ" /* 0x48d */;
+ case 0x48e /* Ҏ */: return u8"ҏ" /* 0x48f */;
+ case 0x490 /* Ґ */: return u8"ґ" /* 0x491 */;
+ case 0x492 /* Ғ */: return u8"ғ" /* 0x493 */;
+ case 0x494 /* Ҕ */: return u8"ҕ" /* 0x495 */;
+ case 0x496 /* Җ */: return u8"җ" /* 0x497 */;
+ case 0x498 /* Ҙ */: return u8"ҙ" /* 0x499 */;
+ case 0x49a /* Қ */: return u8"қ" /* 0x49b */;
+ case 0x49c /* Ҝ */: return u8"ҝ" /* 0x49d */;
+ case 0x49e /* Ҟ */: return u8"ҟ" /* 0x49f */;
+ case 0x4a0 /* Ҡ */: return u8"ҡ" /* 0x4a1 */;
+ case 0x4a2 /* Ң */: return u8"ң" /* 0x4a3 */;
+ case 0x4a4 /* Ҥ */: return u8"ҥ" /* 0x4a5 */;
+ case 0x4a6 /* Ҧ */: return u8"ҧ" /* 0x4a7 */;
+ case 0x4a8 /* Ҩ */: return u8"ҩ" /* 0x4a9 */;
+ case 0x4aa /* Ҫ */: return u8"ҫ" /* 0x4ab */;
+ case 0x4ac /* Ҭ */: return u8"ҭ" /* 0x4ad */;
+ case 0x4ae /* Ү */: return u8"ү" /* 0x4af */;
+ case 0x4b0 /* Ұ */: return u8"ұ" /* 0x4b1 */;
+ case 0x4b2 /* Ҳ */: return u8"ҳ" /* 0x4b3 */;
+ case 0x4b4 /* Ҵ */: return u8"ҵ" /* 0x4b5 */;
+ case 0x4b6 /* Ҷ */: return u8"ҷ" /* 0x4b7 */;
+ case 0x4b8 /* Ҹ */: return u8"ҹ" /* 0x4b9 */;
+ case 0x4ba /* Һ */: return u8"һ" /* 0x4bb */;
+ case 0x4bc /* Ҽ */: return u8"ҽ" /* 0x4bd */;
+ case 0x4be /* Ҿ */: return u8"ҿ" /* 0x4bf */;
+ case 0x4c0 /* Ӏ */: return u8"ӏ" /* 0x4cf */;
+ case 0x4c1 /* Ӂ */: return u8"ӂ" /* 0x4c2 */;
+ case 0x4c3 /* Ӄ */: return u8"ӄ" /* 0x4c4 */;
+ case 0x4c5 /* Ӆ */: return u8"ӆ" /* 0x4c6 */;
+ case 0x4c7 /* Ӈ */: return u8"ӈ" /* 0x4c8 */;
+ case 0x4c9 /* Ӊ */: return u8"ӊ" /* 0x4ca */;
+ case 0x4cb /* Ӌ */: return u8"ӌ" /* 0x4cc */;
+ case 0x4cd /* Ӎ */: return u8"ӎ" /* 0x4ce */;
+ case 0x4d0 /* Ӑ */: return u8"ӑ" /* 0x4d1 */;
+ case 0x4d2 /* Ӓ */: return u8"ӓ" /* 0x4d3 */;
+ case 0x4d4 /* Ӕ */: return u8"ӕ" /* 0x4d5 */;
+ case 0x4d6 /* Ӗ */: return u8"ӗ" /* 0x4d7 */;
+ case 0x4d8 /* Ә */: return u8"ә" /* 0x4d9 */;
+ case 0x4da /* Ӛ */: return u8"ӛ" /* 0x4db */;
+ case 0x4dc /* Ӝ */: return u8"ӝ" /* 0x4dd */;
+ case 0x4de /* Ӟ */: return u8"ӟ" /* 0x4df */;
+ case 0x4e0 /* Ӡ */: return u8"ӡ" /* 0x4e1 */;
+ case 0x4e2 /* Ӣ */: return u8"ӣ" /* 0x4e3 */;
+ case 0x4e4 /* Ӥ */: return u8"ӥ" /* 0x4e5 */;
+ case 0x4e6 /* Ӧ */: return u8"ӧ" /* 0x4e7 */;
+ case 0x4e8 /* Ө */: return u8"ө" /* 0x4e9 */;
+ case 0x4ea /* Ӫ */: return u8"ӫ" /* 0x4eb */;
+ case 0x4ec /* Ӭ */: return u8"ӭ" /* 0x4ed */;
+ case 0x4ee /* Ӯ */: return u8"ӯ" /* 0x4ef */;
+ case 0x4f0 /* Ӱ */: return u8"ӱ" /* 0x4f1 */;
+ case 0x4f2 /* Ӳ */: return u8"ӳ" /* 0x4f3 */;
+ case 0x4f4 /* Ӵ */: return u8"ӵ" /* 0x4f5 */;
+ case 0x4f6 /* Ӷ */: return u8"ӷ" /* 0x4f7 */;
+ case 0x4f8 /* Ӹ */: return u8"ӹ" /* 0x4f9 */;
+ case 0x4fa /* Ӻ */: return u8"ӻ" /* 0x4fb */;
+ case 0x4fc /* Ӽ */: return u8"ӽ" /* 0x4fd */;
+ case 0x4fe /* Ӿ */: return u8"ӿ" /* 0x4ff */;
+ case 0x500 /* Ԁ */: return u8"ԁ" /* 0x501 */;
+ case 0x502 /* Ԃ */: return u8"ԃ" /* 0x503 */;
+ case 0x504 /* Ԅ */: return u8"ԅ" /* 0x505 */;
+ case 0x506 /* Ԇ */: return u8"ԇ" /* 0x507 */;
+ case 0x508 /* Ԉ */: return u8"ԉ" /* 0x509 */;
+ case 0x50a /* Ԋ */: return u8"ԋ" /* 0x50b */;
+ case 0x50c /* Ԍ */: return u8"ԍ" /* 0x50d */;
+ case 0x50e /* Ԏ */: return u8"ԏ" /* 0x50f */;
+ case 0x510 /* Ԑ */: return u8"ԑ" /* 0x511 */;
+ case 0x512 /* Ԓ */: return u8"ԓ" /* 0x513 */;
+ case 0x514 /* Ԕ */: return u8"ԕ" /* 0x515 */;
+ case 0x516 /* Ԗ */: return u8"ԗ" /* 0x517 */;
+ case 0x518 /* Ԙ */: return u8"ԙ" /* 0x519 */;
+ case 0x51a /* Ԛ */: return u8"ԛ" /* 0x51b */;
+ case 0x51c /* Ԝ */: return u8"ԝ" /* 0x51d */;
+ case 0x51e /* Ԟ */: return u8"ԟ" /* 0x51f */;
+ case 0x520 /* Ԡ */: return u8"ԡ" /* 0x521 */;
+ case 0x522 /* Ԣ */: return u8"ԣ" /* 0x523 */;
+ case 0x524 /* Ԥ */: return u8"ԥ" /* 0x525 */;
+ case 0x526 /* Ԧ */: return u8"ԧ" /* 0x527 */;
+ case 0x528 /* Ԩ */: return u8"ԩ" /* 0x529 */;
+ case 0x52a /* Ԫ */: return u8"ԫ" /* 0x52b */;
+ case 0x52c /* Ԭ */: return u8"ԭ" /* 0x52d */;
+ case 0x52e /* Ԯ */: return u8"ԯ" /* 0x52f */;
+ case 0x531 /* Ա */: return u8"ա" /* 0x561 */;
+ case 0x532 /* Բ */: return u8"բ" /* 0x562 */;
+ case 0x533 /* Գ */: return u8"գ" /* 0x563 */;
+ case 0x534 /* Դ */: return u8"դ" /* 0x564 */;
+ case 0x535 /* Ե */: return u8"ե" /* 0x565 */;
+ case 0x536 /* Զ */: return u8"զ" /* 0x566 */;
+ case 0x537 /* Է */: return u8"է" /* 0x567 */;
+ case 0x538 /* Ը */: return u8"ը" /* 0x568 */;
+ case 0x539 /* Թ */: return u8"թ" /* 0x569 */;
+ case 0x53a /* Ժ */: return u8"ժ" /* 0x56a */;
+ case 0x53b /* Ի */: return u8"ի" /* 0x56b */;
+ case 0x53c /* Լ */: return u8"լ" /* 0x56c */;
+ case 0x53d /* Խ */: return u8"խ" /* 0x56d */;
+ case 0x53e /* Ծ */: return u8"ծ" /* 0x56e */;
+ case 0x53f /* Կ */: return u8"կ" /* 0x56f */;
+ case 0x540 /* Հ */: return u8"հ" /* 0x570 */;
+ case 0x541 /* Ձ */: return u8"ձ" /* 0x571 */;
+ case 0x542 /* Ղ */: return u8"ղ" /* 0x572 */;
+ case 0x543 /* Ճ */: return u8"ճ" /* 0x573 */;
+ case 0x544 /* Մ */: return u8"մ" /* 0x574 */;
+ case 0x545 /* Յ */: return u8"յ" /* 0x575 */;
+ case 0x546 /* Ն */: return u8"ն" /* 0x576 */;
+ case 0x547 /* Շ */: return u8"շ" /* 0x577 */;
+ case 0x548 /* Ո */: return u8"ո" /* 0x578 */;
+ case 0x549 /* Չ */: return u8"չ" /* 0x579 */;
+ case 0x54a /* Պ */: return u8"պ" /* 0x57a */;
+ case 0x54b /* Ջ */: return u8"ջ" /* 0x57b */;
+ case 0x54c /* Ռ */: return u8"ռ" /* 0x57c */;
+ case 0x54d /* Ս */: return u8"ս" /* 0x57d */;
+ case 0x54e /* Վ */: return u8"վ" /* 0x57e */;
+ case 0x54f /* Տ */: return u8"տ" /* 0x57f */;
+ case 0x550 /* Ր */: return u8"ր" /* 0x580 */;
+ case 0x551 /* Ց */: return u8"ց" /* 0x581 */;
+ case 0x552 /* Ւ */: return u8"ւ" /* 0x582 */;
+ case 0x553 /* Փ */: return u8"փ" /* 0x583 */;
+ case 0x554 /* Ք */: return u8"ք" /* 0x584 */;
+ case 0x555 /* Օ */: return u8"օ" /* 0x585 */;
+ case 0x556 /* Ֆ */: return u8"ֆ" /* 0x586 */;
+ case 0x10a0 /* Ⴀ */: return u8"ⴀ" /* 0x2d00 */;
+ case 0x10a1 /* Ⴁ */: return u8"ⴁ" /* 0x2d01 */;
+ case 0x10a2 /* Ⴂ */: return u8"ⴂ" /* 0x2d02 */;
+ case 0x10a3 /* Ⴃ */: return u8"ⴃ" /* 0x2d03 */;
+ case 0x10a4 /* Ⴄ */: return u8"ⴄ" /* 0x2d04 */;
+ case 0x10a5 /* Ⴅ */: return u8"ⴅ" /* 0x2d05 */;
+ case 0x10a6 /* Ⴆ */: return u8"ⴆ" /* 0x2d06 */;
+ case 0x10a7 /* Ⴇ */: return u8"ⴇ" /* 0x2d07 */;
+ case 0x10a8 /* Ⴈ */: return u8"ⴈ" /* 0x2d08 */;
+ case 0x10a9 /* Ⴉ */: return u8"ⴉ" /* 0x2d09 */;
+ case 0x10aa /* Ⴊ */: return u8"ⴊ" /* 0x2d0a */;
+ case 0x10ab /* Ⴋ */: return u8"ⴋ" /* 0x2d0b */;
+ case 0x10ac /* Ⴌ */: return u8"ⴌ" /* 0x2d0c */;
+ case 0x10ad /* Ⴍ */: return u8"ⴍ" /* 0x2d0d */;
+ case 0x10ae /* Ⴎ */: return u8"ⴎ" /* 0x2d0e */;
+ case 0x10af /* Ⴏ */: return u8"ⴏ" /* 0x2d0f */;
+ case 0x10b0 /* Ⴐ */: return u8"ⴐ" /* 0x2d10 */;
+ case 0x10b1 /* Ⴑ */: return u8"ⴑ" /* 0x2d11 */;
+ case 0x10b2 /* Ⴒ */: return u8"ⴒ" /* 0x2d12 */;
+ case 0x10b3 /* Ⴓ */: return u8"ⴓ" /* 0x2d13 */;
+ case 0x10b4 /* Ⴔ */: return u8"ⴔ" /* 0x2d14 */;
+ case 0x10b5 /* Ⴕ */: return u8"ⴕ" /* 0x2d15 */;
+ case 0x10b6 /* Ⴖ */: return u8"ⴖ" /* 0x2d16 */;
+ case 0x10b7 /* Ⴗ */: return u8"ⴗ" /* 0x2d17 */;
+ case 0x10b8 /* Ⴘ */: return u8"ⴘ" /* 0x2d18 */;
+ case 0x10b9 /* Ⴙ */: return u8"ⴙ" /* 0x2d19 */;
+ case 0x10ba /* Ⴚ */: return u8"ⴚ" /* 0x2d1a */;
+ case 0x10bb /* Ⴛ */: return u8"ⴛ" /* 0x2d1b */;
+ case 0x10bc /* Ⴜ */: return u8"ⴜ" /* 0x2d1c */;
+ case 0x10bd /* Ⴝ */: return u8"ⴝ" /* 0x2d1d */;
+ case 0x10be /* Ⴞ */: return u8"ⴞ" /* 0x2d1e */;
+ case 0x10bf /* Ⴟ */: return u8"ⴟ" /* 0x2d1f */;
+ case 0x10c0 /* Ⴠ */: return u8"ⴠ" /* 0x2d20 */;
+ case 0x10c1 /* Ⴡ */: return u8"ⴡ" /* 0x2d21 */;
+ case 0x10c2 /* Ⴢ */: return u8"ⴢ" /* 0x2d22 */;
+ case 0x10c3 /* Ⴣ */: return u8"ⴣ" /* 0x2d23 */;
+ case 0x10c4 /* Ⴤ */: return u8"ⴤ" /* 0x2d24 */;
+ case 0x10c5 /* Ⴥ */: return u8"ⴥ" /* 0x2d25 */;
+ case 0x10c7 /* Ⴧ */: return u8"ⴧ" /* 0x2d27 */;
+ case 0x10cd /* Ⴭ */: return u8"ⴭ" /* 0x2d2d */;
+ case 0x13a0 /* Ꭰ */: return u8"ꭰ" /* 0xab70 */;
+ case 0x13a1 /* Ꭱ */: return u8"ꭱ" /* 0xab71 */;
+ case 0x13a2 /* Ꭲ */: return u8"ꭲ" /* 0xab72 */;
+ case 0x13a3 /* Ꭳ */: return u8"ꭳ" /* 0xab73 */;
+ case 0x13a4 /* Ꭴ */: return u8"ꭴ" /* 0xab74 */;
+ case 0x13a5 /* Ꭵ */: return u8"ꭵ" /* 0xab75 */;
+ case 0x13a6 /* Ꭶ */: return u8"ꭶ" /* 0xab76 */;
+ case 0x13a7 /* Ꭷ */: return u8"ꭷ" /* 0xab77 */;
+ case 0x13a8 /* Ꭸ */: return u8"ꭸ" /* 0xab78 */;
+ case 0x13a9 /* Ꭹ */: return u8"ꭹ" /* 0xab79 */;
+ case 0x13aa /* Ꭺ */: return u8"ꭺ" /* 0xab7a */;
+ case 0x13ab /* Ꭻ */: return u8"ꭻ" /* 0xab7b */;
+ case 0x13ac /* Ꭼ */: return u8"ꭼ" /* 0xab7c */;
+ case 0x13ad /* Ꭽ */: return u8"ꭽ" /* 0xab7d */;
+ case 0x13ae /* Ꭾ */: return u8"ꭾ" /* 0xab7e */;
+ case 0x13af /* Ꭿ */: return u8"ꭿ" /* 0xab7f */;
+ case 0x13b0 /* Ꮀ */: return u8"ꮀ" /* 0xab80 */;
+ case 0x13b1 /* Ꮁ */: return u8"ꮁ" /* 0xab81 */;
+ case 0x13b2 /* Ꮂ */: return u8"ꮂ" /* 0xab82 */;
+ case 0x13b3 /* Ꮃ */: return u8"ꮃ" /* 0xab83 */;
+ case 0x13b4 /* Ꮄ */: return u8"ꮄ" /* 0xab84 */;
+ case 0x13b5 /* Ꮅ */: return u8"ꮅ" /* 0xab85 */;
+ case 0x13b6 /* Ꮆ */: return u8"ꮆ" /* 0xab86 */;
+ case 0x13b7 /* Ꮇ */: return u8"ꮇ" /* 0xab87 */;
+ case 0x13b8 /* Ꮈ */: return u8"ꮈ" /* 0xab88 */;
+ case 0x13b9 /* Ꮉ */: return u8"ꮉ" /* 0xab89 */;
+ case 0x13ba /* Ꮊ */: return u8"ꮊ" /* 0xab8a */;
+ case 0x13bb /* Ꮋ */: return u8"ꮋ" /* 0xab8b */;
+ case 0x13bc /* Ꮌ */: return u8"ꮌ" /* 0xab8c */;
+ case 0x13bd /* Ꮍ */: return u8"ꮍ" /* 0xab8d */;
+ case 0x13be /* Ꮎ */: return u8"ꮎ" /* 0xab8e */;
+ case 0x13bf /* Ꮏ */: return u8"ꮏ" /* 0xab8f */;
+ case 0x13c0 /* Ꮐ */: return u8"ꮐ" /* 0xab90 */;
+ case 0x13c1 /* Ꮑ */: return u8"ꮑ" /* 0xab91 */;
+ case 0x13c2 /* Ꮒ */: return u8"ꮒ" /* 0xab92 */;
+ case 0x13c3 /* Ꮓ */: return u8"ꮓ" /* 0xab93 */;
+ case 0x13c4 /* Ꮔ */: return u8"ꮔ" /* 0xab94 */;
+ case 0x13c5 /* Ꮕ */: return u8"ꮕ" /* 0xab95 */;
+ case 0x13c6 /* Ꮖ */: return u8"ꮖ" /* 0xab96 */;
+ case 0x13c7 /* Ꮗ */: return u8"ꮗ" /* 0xab97 */;
+ case 0x13c8 /* Ꮘ */: return u8"ꮘ" /* 0xab98 */;
+ case 0x13c9 /* Ꮙ */: return u8"ꮙ" /* 0xab99 */;
+ case 0x13ca /* Ꮚ */: return u8"ꮚ" /* 0xab9a */;
+ case 0x13cb /* Ꮛ */: return u8"ꮛ" /* 0xab9b */;
+ case 0x13cc /* Ꮜ */: return u8"ꮜ" /* 0xab9c */;
+ case 0x13cd /* Ꮝ */: return u8"ꮝ" /* 0xab9d */;
+ case 0x13ce /* Ꮞ */: return u8"ꮞ" /* 0xab9e */;
+ case 0x13cf /* Ꮟ */: return u8"ꮟ" /* 0xab9f */;
+ case 0x13d0 /* Ꮠ */: return u8"ꮠ" /* 0xaba0 */;
+ case 0x13d1 /* Ꮡ */: return u8"ꮡ" /* 0xaba1 */;
+ case 0x13d2 /* Ꮢ */: return u8"ꮢ" /* 0xaba2 */;
+ case 0x13d3 /* Ꮣ */: return u8"ꮣ" /* 0xaba3 */;
+ case 0x13d4 /* Ꮤ */: return u8"ꮤ" /* 0xaba4 */;
+ case 0x13d5 /* Ꮥ */: return u8"ꮥ" /* 0xaba5 */;
+ case 0x13d6 /* Ꮦ */: return u8"ꮦ" /* 0xaba6 */;
+ case 0x13d7 /* Ꮧ */: return u8"ꮧ" /* 0xaba7 */;
+ case 0x13d8 /* Ꮨ */: return u8"ꮨ" /* 0xaba8 */;
+ case 0x13d9 /* Ꮩ */: return u8"ꮩ" /* 0xaba9 */;
+ case 0x13da /* Ꮪ */: return u8"ꮪ" /* 0xabaa */;
+ case 0x13db /* Ꮫ */: return u8"ꮫ" /* 0xabab */;
+ case 0x13dc /* Ꮬ */: return u8"ꮬ" /* 0xabac */;
+ case 0x13dd /* Ꮭ */: return u8"ꮭ" /* 0xabad */;
+ case 0x13de /* Ꮮ */: return u8"ꮮ" /* 0xabae */;
+ case 0x13df /* Ꮯ */: return u8"ꮯ" /* 0xabaf */;
+ case 0x13e0 /* Ꮰ */: return u8"ꮰ" /* 0xabb0 */;
+ case 0x13e1 /* Ꮱ */: return u8"ꮱ" /* 0xabb1 */;
+ case 0x13e2 /* Ꮲ */: return u8"ꮲ" /* 0xabb2 */;
+ case 0x13e3 /* Ꮳ */: return u8"ꮳ" /* 0xabb3 */;
+ case 0x13e4 /* Ꮴ */: return u8"ꮴ" /* 0xabb4 */;
+ case 0x13e5 /* Ꮵ */: return u8"ꮵ" /* 0xabb5 */;
+ case 0x13e6 /* Ꮶ */: return u8"ꮶ" /* 0xabb6 */;
+ case 0x13e7 /* Ꮷ */: return u8"ꮷ" /* 0xabb7 */;
+ case 0x13e8 /* Ꮸ */: return u8"ꮸ" /* 0xabb8 */;
+ case 0x13e9 /* Ꮹ */: return u8"ꮹ" /* 0xabb9 */;
+ case 0x13ea /* Ꮺ */: return u8"ꮺ" /* 0xabba */;
+ case 0x13eb /* Ꮻ */: return u8"ꮻ" /* 0xabbb */;
+ case 0x13ec /* Ꮼ */: return u8"ꮼ" /* 0xabbc */;
+ case 0x13ed /* Ꮽ */: return u8"ꮽ" /* 0xabbd */;
+ case 0x13ee /* Ꮾ */: return u8"ꮾ" /* 0xabbe */;
+ case 0x13ef /* Ꮿ */: return u8"ꮿ" /* 0xabbf */;
+ case 0x13f0 /* Ᏸ */: return u8"ᏸ" /* 0x13f8 */;
+ case 0x13f1 /* Ᏹ */: return u8"ᏹ" /* 0x13f9 */;
+ case 0x13f2 /* Ᏺ */: return u8"ᏺ" /* 0x13fa */;
+ case 0x13f3 /* Ᏻ */: return u8"ᏻ" /* 0x13fb */;
+ case 0x13f4 /* Ᏼ */: return u8"ᏼ" /* 0x13fc */;
+ case 0x13f5 /* Ᏽ */: return u8"ᏽ" /* 0x13fd */;
+ case 0x1c90 /* Ა */: return u8"ა" /* 0x10d0 */;
+ case 0x1c91 /* Ბ */: return u8"ბ" /* 0x10d1 */;
+ case 0x1c92 /* Გ */: return u8"გ" /* 0x10d2 */;
+ case 0x1c93 /* Დ */: return u8"დ" /* 0x10d3 */;
+ case 0x1c94 /* Ე */: return u8"ე" /* 0x10d4 */;
+ case 0x1c95 /* Ვ */: return u8"ვ" /* 0x10d5 */;
+ case 0x1c96 /* Ზ */: return u8"ზ" /* 0x10d6 */;
+ case 0x1c97 /* Თ */: return u8"თ" /* 0x10d7 */;
+ case 0x1c98 /* Ი */: return u8"ი" /* 0x10d8 */;
+ case 0x1c99 /* Კ */: return u8"კ" /* 0x10d9 */;
+ case 0x1c9a /* Ლ */: return u8"ლ" /* 0x10da */;
+ case 0x1c9b /* Მ */: return u8"მ" /* 0x10db */;
+ case 0x1c9c /* Ნ */: return u8"ნ" /* 0x10dc */;
+ case 0x1c9d /* Ო */: return u8"ო" /* 0x10dd */;
+ case 0x1c9e /* Პ */: return u8"პ" /* 0x10de */;
+ case 0x1c9f /* Ჟ */: return u8"ჟ" /* 0x10df */;
+ case 0x1ca0 /* Რ */: return u8"რ" /* 0x10e0 */;
+ case 0x1ca1 /* Ს */: return u8"ს" /* 0x10e1 */;
+ case 0x1ca2 /* Ტ */: return u8"ტ" /* 0x10e2 */;
+ case 0x1ca3 /* Უ */: return u8"უ" /* 0x10e3 */;
+ case 0x1ca4 /* Ფ */: return u8"ფ" /* 0x10e4 */;
+ case 0x1ca5 /* Ქ */: return u8"ქ" /* 0x10e5 */;
+ case 0x1ca6 /* Ღ */: return u8"ღ" /* 0x10e6 */;
+ case 0x1ca7 /* Ყ */: return u8"ყ" /* 0x10e7 */;
+ case 0x1ca8 /* Შ */: return u8"შ" /* 0x10e8 */;
+ case 0x1ca9 /* Ჩ */: return u8"ჩ" /* 0x10e9 */;
+ case 0x1caa /* Ც */: return u8"ც" /* 0x10ea */;
+ case 0x1cab /* Ძ */: return u8"ძ" /* 0x10eb */;
+ case 0x1cac /* Წ */: return u8"წ" /* 0x10ec */;
+ case 0x1cad /* Ჭ */: return u8"ჭ" /* 0x10ed */;
+ case 0x1cae /* Ხ */: return u8"ხ" /* 0x10ee */;
+ case 0x1caf /* Ჯ */: return u8"ჯ" /* 0x10ef */;
+ case 0x1cb0 /* Ჰ */: return u8"ჰ" /* 0x10f0 */;
+ case 0x1cb1 /* Ჱ */: return u8"ჱ" /* 0x10f1 */;
+ case 0x1cb2 /* Ჲ */: return u8"ჲ" /* 0x10f2 */;
+ case 0x1cb3 /* Ჳ */: return u8"ჳ" /* 0x10f3 */;
+ case 0x1cb4 /* Ჴ */: return u8"ჴ" /* 0x10f4 */;
+ case 0x1cb5 /* Ჵ */: return u8"ჵ" /* 0x10f5 */;
+ case 0x1cb6 /* Ჶ */: return u8"ჶ" /* 0x10f6 */;
+ case 0x1cb7 /* Ჷ */: return u8"ჷ" /* 0x10f7 */;
+ case 0x1cb8 /* Ჸ */: return u8"ჸ" /* 0x10f8 */;
+ case 0x1cb9 /* Ჹ */: return u8"ჹ" /* 0x10f9 */;
+ case 0x1cba /* Ჺ */: return u8"ჺ" /* 0x10fa */;
+ case 0x1cbd /* Ჽ */: return u8"ჽ" /* 0x10fd */;
+ case 0x1cbe /* Ჾ */: return u8"ჾ" /* 0x10fe */;
+ case 0x1cbf /* Ჿ */: return u8"ჿ" /* 0x10ff */;
+ case 0x1e00 /* Ḁ */: return u8"ḁ" /* 0x1e01 */;
+ case 0x1e02 /* Ḃ */: return u8"ḃ" /* 0x1e03 */;
+ case 0x1e04 /* Ḅ */: return u8"ḅ" /* 0x1e05 */;
+ case 0x1e06 /* Ḇ */: return u8"ḇ" /* 0x1e07 */;
+ case 0x1e08 /* Ḉ */: return u8"ḉ" /* 0x1e09 */;
+ case 0x1e0a /* Ḋ */: return u8"ḋ" /* 0x1e0b */;
+ case 0x1e0c /* Ḍ */: return u8"ḍ" /* 0x1e0d */;
+ case 0x1e0e /* Ḏ */: return u8"ḏ" /* 0x1e0f */;
+ case 0x1e10 /* Ḑ */: return u8"ḑ" /* 0x1e11 */;
+ case 0x1e12 /* Ḓ */: return u8"ḓ" /* 0x1e13 */;
+ case 0x1e14 /* Ḕ */: return u8"ḕ" /* 0x1e15 */;
+ case 0x1e16 /* Ḗ */: return u8"ḗ" /* 0x1e17 */;
+ case 0x1e18 /* Ḙ */: return u8"ḙ" /* 0x1e19 */;
+ case 0x1e1a /* Ḛ */: return u8"ḛ" /* 0x1e1b */;
+ case 0x1e1c /* Ḝ */: return u8"ḝ" /* 0x1e1d */;
+ case 0x1e1e /* Ḟ */: return u8"ḟ" /* 0x1e1f */;
+ case 0x1e20 /* Ḡ */: return u8"ḡ" /* 0x1e21 */;
+ case 0x1e22 /* Ḣ */: return u8"ḣ" /* 0x1e23 */;
+ case 0x1e24 /* Ḥ */: return u8"ḥ" /* 0x1e25 */;
+ case 0x1e26 /* Ḧ */: return u8"ḧ" /* 0x1e27 */;
+ case 0x1e28 /* Ḩ */: return u8"ḩ" /* 0x1e29 */;
+ case 0x1e2a /* Ḫ */: return u8"ḫ" /* 0x1e2b */;
+ case 0x1e2c /* Ḭ */: return u8"ḭ" /* 0x1e2d */;
+ case 0x1e2e /* Ḯ */: return u8"ḯ" /* 0x1e2f */;
+ case 0x1e30 /* Ḱ */: return u8"ḱ" /* 0x1e31 */;
+ case 0x1e32 /* Ḳ */: return u8"ḳ" /* 0x1e33 */;
+ case 0x1e34 /* Ḵ */: return u8"ḵ" /* 0x1e35 */;
+ case 0x1e36 /* Ḷ */: return u8"ḷ" /* 0x1e37 */;
+ case 0x1e38 /* Ḹ */: return u8"ḹ" /* 0x1e39 */;
+ case 0x1e3a /* Ḻ */: return u8"ḻ" /* 0x1e3b */;
+ case 0x1e3c /* Ḽ */: return u8"ḽ" /* 0x1e3d */;
+ case 0x1e3e /* Ḿ */: return u8"ḿ" /* 0x1e3f */;
+ case 0x1e40 /* Ṁ */: return u8"ṁ" /* 0x1e41 */;
+ case 0x1e42 /* Ṃ */: return u8"ṃ" /* 0x1e43 */;
+ case 0x1e44 /* Ṅ */: return u8"ṅ" /* 0x1e45 */;
+ case 0x1e46 /* Ṇ */: return u8"ṇ" /* 0x1e47 */;
+ case 0x1e48 /* Ṉ */: return u8"ṉ" /* 0x1e49 */;
+ case 0x1e4a /* Ṋ */: return u8"ṋ" /* 0x1e4b */;
+ case 0x1e4c /* Ṍ */: return u8"ṍ" /* 0x1e4d */;
+ case 0x1e4e /* Ṏ */: return u8"ṏ" /* 0x1e4f */;
+ case 0x1e50 /* Ṑ */: return u8"ṑ" /* 0x1e51 */;
+ case 0x1e52 /* Ṓ */: return u8"ṓ" /* 0x1e53 */;
+ case 0x1e54 /* Ṕ */: return u8"ṕ" /* 0x1e55 */;
+ case 0x1e56 /* Ṗ */: return u8"ṗ" /* 0x1e57 */;
+ case 0x1e58 /* Ṙ */: return u8"ṙ" /* 0x1e59 */;
+ case 0x1e5a /* Ṛ */: return u8"ṛ" /* 0x1e5b */;
+ case 0x1e5c /* Ṝ */: return u8"ṝ" /* 0x1e5d */;
+ case 0x1e5e /* Ṟ */: return u8"ṟ" /* 0x1e5f */;
+ case 0x1e60 /* Ṡ */: return u8"ṡ" /* 0x1e61 */;
+ case 0x1e62 /* Ṣ */: return u8"ṣ" /* 0x1e63 */;
+ case 0x1e64 /* Ṥ */: return u8"ṥ" /* 0x1e65 */;
+ case 0x1e66 /* Ṧ */: return u8"ṧ" /* 0x1e67 */;
+ case 0x1e68 /* Ṩ */: return u8"ṩ" /* 0x1e69 */;
+ case 0x1e6a /* Ṫ */: return u8"ṫ" /* 0x1e6b */;
+ case 0x1e6c /* Ṭ */: return u8"ṭ" /* 0x1e6d */;
+ case 0x1e6e /* Ṯ */: return u8"ṯ" /* 0x1e6f */;
+ case 0x1e70 /* Ṱ */: return u8"ṱ" /* 0x1e71 */;
+ case 0x1e72 /* Ṳ */: return u8"ṳ" /* 0x1e73 */;
+ case 0x1e74 /* Ṵ */: return u8"ṵ" /* 0x1e75 */;
+ case 0x1e76 /* Ṷ */: return u8"ṷ" /* 0x1e77 */;
+ case 0x1e78 /* Ṹ */: return u8"ṹ" /* 0x1e79 */;
+ case 0x1e7a /* Ṻ */: return u8"ṻ" /* 0x1e7b */;
+ case 0x1e7c /* Ṽ */: return u8"ṽ" /* 0x1e7d */;
+ case 0x1e7e /* Ṿ */: return u8"ṿ" /* 0x1e7f */;
+ case 0x1e80 /* Ẁ */: return u8"ẁ" /* 0x1e81 */;
+ case 0x1e82 /* Ẃ */: return u8"ẃ" /* 0x1e83 */;
+ case 0x1e84 /* Ẅ */: return u8"ẅ" /* 0x1e85 */;
+ case 0x1e86 /* Ẇ */: return u8"ẇ" /* 0x1e87 */;
+ case 0x1e88 /* Ẉ */: return u8"ẉ" /* 0x1e89 */;
+ case 0x1e8a /* Ẋ */: return u8"ẋ" /* 0x1e8b */;
+ case 0x1e8c /* Ẍ */: return u8"ẍ" /* 0x1e8d */;
+ case 0x1e8e /* Ẏ */: return u8"ẏ" /* 0x1e8f */;
+ case 0x1e90 /* Ẑ */: return u8"ẑ" /* 0x1e91 */;
+ case 0x1e92 /* Ẓ */: return u8"ẓ" /* 0x1e93 */;
+ case 0x1e94 /* Ẕ */: return u8"ẕ" /* 0x1e95 */;
+ case 0x1e9e /* ẞ */: return u8"ß" /* 0xdf */;
+ case 0x1ea0 /* Ạ */: return u8"ạ" /* 0x1ea1 */;
+ case 0x1ea2 /* Ả */: return u8"ả" /* 0x1ea3 */;
+ case 0x1ea4 /* Ấ */: return u8"ấ" /* 0x1ea5 */;
+ case 0x1ea6 /* Ầ */: return u8"ầ" /* 0x1ea7 */;
+ case 0x1ea8 /* Ẩ */: return u8"ẩ" /* 0x1ea9 */;
+ case 0x1eaa /* Ẫ */: return u8"ẫ" /* 0x1eab */;
+ case 0x1eac /* Ậ */: return u8"ậ" /* 0x1ead */;
+ case 0x1eae /* Ắ */: return u8"ắ" /* 0x1eaf */;
+ case 0x1eb0 /* Ằ */: return u8"ằ" /* 0x1eb1 */;
+ case 0x1eb2 /* Ẳ */: return u8"ẳ" /* 0x1eb3 */;
+ case 0x1eb4 /* Ẵ */: return u8"ẵ" /* 0x1eb5 */;
+ case 0x1eb6 /* Ặ */: return u8"ặ" /* 0x1eb7 */;
+ case 0x1eb8 /* Ẹ */: return u8"ẹ" /* 0x1eb9 */;
+ case 0x1eba /* Ẻ */: return u8"ẻ" /* 0x1ebb */;
+ case 0x1ebc /* Ẽ */: return u8"ẽ" /* 0x1ebd */;
+ case 0x1ebe /* Ế */: return u8"ế" /* 0x1ebf */;
+ case 0x1ec0 /* Ề */: return u8"ề" /* 0x1ec1 */;
+ case 0x1ec2 /* Ể */: return u8"ể" /* 0x1ec3 */;
+ case 0x1ec4 /* Ễ */: return u8"ễ" /* 0x1ec5 */;
+ case 0x1ec6 /* Ệ */: return u8"ệ" /* 0x1ec7 */;
+ case 0x1ec8 /* Ỉ */: return u8"ỉ" /* 0x1ec9 */;
+ case 0x1eca /* Ị */: return u8"ị" /* 0x1ecb */;
+ case 0x1ecc /* Ọ */: return u8"ọ" /* 0x1ecd */;
+ case 0x1ece /* Ỏ */: return u8"ỏ" /* 0x1ecf */;
+ case 0x1ed0 /* Ố */: return u8"ố" /* 0x1ed1 */;
+ case 0x1ed2 /* Ồ */: return u8"ồ" /* 0x1ed3 */;
+ case 0x1ed4 /* Ổ */: return u8"ổ" /* 0x1ed5 */;
+ case 0x1ed6 /* Ỗ */: return u8"ỗ" /* 0x1ed7 */;
+ case 0x1ed8 /* Ộ */: return u8"ộ" /* 0x1ed9 */;
+ case 0x1eda /* Ớ */: return u8"ớ" /* 0x1edb */;
+ case 0x1edc /* Ờ */: return u8"ờ" /* 0x1edd */;
+ case 0x1ede /* Ở */: return u8"ở" /* 0x1edf */;
+ case 0x1ee0 /* Ỡ */: return u8"ỡ" /* 0x1ee1 */;
+ case 0x1ee2 /* Ợ */: return u8"ợ" /* 0x1ee3 */;
+ case 0x1ee4 /* Ụ */: return u8"ụ" /* 0x1ee5 */;
+ case 0x1ee6 /* Ủ */: return u8"ủ" /* 0x1ee7 */;
+ case 0x1ee8 /* Ứ */: return u8"ứ" /* 0x1ee9 */;
+ case 0x1eea /* Ừ */: return u8"ừ" /* 0x1eeb */;
+ case 0x1eec /* Ử */: return u8"ử" /* 0x1eed */;
+ case 0x1eee /* Ữ */: return u8"ữ" /* 0x1eef */;
+ case 0x1ef0 /* Ự */: return u8"ự" /* 0x1ef1 */;
+ case 0x1ef2 /* Ỳ */: return u8"ỳ" /* 0x1ef3 */;
+ case 0x1ef4 /* Ỵ */: return u8"ỵ" /* 0x1ef5 */;
+ case 0x1ef6 /* Ỷ */: return u8"ỷ" /* 0x1ef7 */;
+ case 0x1ef8 /* Ỹ */: return u8"ỹ" /* 0x1ef9 */;
+ case 0x1efa /* Ỻ */: return u8"ỻ" /* 0x1efb */;
+ case 0x1efc /* Ỽ */: return u8"ỽ" /* 0x1efd */;
+ case 0x1efe /* Ỿ */: return u8"ỿ" /* 0x1eff */;
+ case 0x1f08 /* Ἀ */: return u8"ἀ" /* 0x1f00 */;
+ case 0x1f09 /* Ἁ */: return u8"ἁ" /* 0x1f01 */;
+ case 0x1f0a /* Ἂ */: return u8"ἂ" /* 0x1f02 */;
+ case 0x1f0b /* Ἃ */: return u8"ἃ" /* 0x1f03 */;
+ case 0x1f0c /* Ἄ */: return u8"ἄ" /* 0x1f04 */;
+ case 0x1f0d /* Ἅ */: return u8"ἅ" /* 0x1f05 */;
+ case 0x1f0e /* Ἆ */: return u8"ἆ" /* 0x1f06 */;
+ case 0x1f0f /* Ἇ */: return u8"ἇ" /* 0x1f07 */;
+ case 0x1f18 /* Ἐ */: return u8"ἐ" /* 0x1f10 */;
+ case 0x1f19 /* Ἑ */: return u8"ἑ" /* 0x1f11 */;
+ case 0x1f1a /* Ἒ */: return u8"ἒ" /* 0x1f12 */;
+ case 0x1f1b /* Ἓ */: return u8"ἓ" /* 0x1f13 */;
+ case 0x1f1c /* Ἔ */: return u8"ἔ" /* 0x1f14 */;
+ case 0x1f1d /* Ἕ */: return u8"ἕ" /* 0x1f15 */;
+ case 0x1f28 /* Ἠ */: return u8"ἠ" /* 0x1f20 */;
+ case 0x1f29 /* Ἡ */: return u8"ἡ" /* 0x1f21 */;
+ case 0x1f2a /* Ἢ */: return u8"ἢ" /* 0x1f22 */;
+ case 0x1f2b /* Ἣ */: return u8"ἣ" /* 0x1f23 */;
+ case 0x1f2c /* Ἤ */: return u8"ἤ" /* 0x1f24 */;
+ case 0x1f2d /* Ἥ */: return u8"ἥ" /* 0x1f25 */;
+ case 0x1f2e /* Ἦ */: return u8"ἦ" /* 0x1f26 */;
+ case 0x1f2f /* Ἧ */: return u8"ἧ" /* 0x1f27 */;
+ case 0x1f38 /* Ἰ */: return u8"ἰ" /* 0x1f30 */;
+ case 0x1f39 /* Ἱ */: return u8"ἱ" /* 0x1f31 */;
+ case 0x1f3a /* Ἲ */: return u8"ἲ" /* 0x1f32 */;
+ case 0x1f3b /* Ἳ */: return u8"ἳ" /* 0x1f33 */;
+ case 0x1f3c /* Ἴ */: return u8"ἴ" /* 0x1f34 */;
+ case 0x1f3d /* Ἵ */: return u8"ἵ" /* 0x1f35 */;
+ case 0x1f3e /* Ἶ */: return u8"ἶ" /* 0x1f36 */;
+ case 0x1f3f /* Ἷ */: return u8"ἷ" /* 0x1f37 */;
+ case 0x1f48 /* Ὀ */: return u8"ὀ" /* 0x1f40 */;
+ case 0x1f49 /* Ὁ */: return u8"ὁ" /* 0x1f41 */;
+ case 0x1f4a /* Ὂ */: return u8"ὂ" /* 0x1f42 */;
+ case 0x1f4b /* Ὃ */: return u8"ὃ" /* 0x1f43 */;
+ case 0x1f4c /* Ὄ */: return u8"ὄ" /* 0x1f44 */;
+ case 0x1f4d /* Ὅ */: return u8"ὅ" /* 0x1f45 */;
+ case 0x1f59 /* Ὑ */: return u8"ὑ" /* 0x1f51 */;
+ case 0x1f5b /* Ὓ */: return u8"ὓ" /* 0x1f53 */;
+ case 0x1f5d /* Ὕ */: return u8"ὕ" /* 0x1f55 */;
+ case 0x1f5f /* Ὗ */: return u8"ὗ" /* 0x1f57 */;
+ case 0x1f68 /* Ὠ */: return u8"ὠ" /* 0x1f60 */;
+ case 0x1f69 /* Ὡ */: return u8"ὡ" /* 0x1f61 */;
+ case 0x1f6a /* Ὢ */: return u8"ὢ" /* 0x1f62 */;
+ case 0x1f6b /* Ὣ */: return u8"ὣ" /* 0x1f63 */;
+ case 0x1f6c /* Ὤ */: return u8"ὤ" /* 0x1f64 */;
+ case 0x1f6d /* Ὥ */: return u8"ὥ" /* 0x1f65 */;
+ case 0x1f6e /* Ὦ */: return u8"ὦ" /* 0x1f66 */;
+ case 0x1f6f /* Ὧ */: return u8"ὧ" /* 0x1f67 */;
+ case 0x1f88 /* ᾈ */: return u8"ᾀ" /* 0x1f80 */;
+ case 0x1f89 /* ᾉ */: return u8"ᾁ" /* 0x1f81 */;
+ case 0x1f8a /* ᾊ */: return u8"ᾂ" /* 0x1f82 */;
+ case 0x1f8b /* ᾋ */: return u8"ᾃ" /* 0x1f83 */;
+ case 0x1f8c /* ᾌ */: return u8"ᾄ" /* 0x1f84 */;
+ case 0x1f8d /* ᾍ */: return u8"ᾅ" /* 0x1f85 */;
+ case 0x1f8e /* ᾎ */: return u8"ᾆ" /* 0x1f86 */;
+ case 0x1f8f /* ᾏ */: return u8"ᾇ" /* 0x1f87 */;
+ case 0x1f98 /* ᾘ */: return u8"ᾐ" /* 0x1f90 */;
+ case 0x1f99 /* ᾙ */: return u8"ᾑ" /* 0x1f91 */;
+ case 0x1f9a /* ᾚ */: return u8"ᾒ" /* 0x1f92 */;
+ case 0x1f9b /* ᾛ */: return u8"ᾓ" /* 0x1f93 */;
+ case 0x1f9c /* ᾜ */: return u8"ᾔ" /* 0x1f94 */;
+ case 0x1f9d /* ᾝ */: return u8"ᾕ" /* 0x1f95 */;
+ case 0x1f9e /* ᾞ */: return u8"ᾖ" /* 0x1f96 */;
+ case 0x1f9f /* ᾟ */: return u8"ᾗ" /* 0x1f97 */;
+ case 0x1fa8 /* ᾨ */: return u8"ᾠ" /* 0x1fa0 */;
+ case 0x1fa9 /* ᾩ */: return u8"ᾡ" /* 0x1fa1 */;
+ case 0x1faa /* ᾪ */: return u8"ᾢ" /* 0x1fa2 */;
+ case 0x1fab /* ᾫ */: return u8"ᾣ" /* 0x1fa3 */;
+ case 0x1fac /* ᾬ */: return u8"ᾤ" /* 0x1fa4 */;
+ case 0x1fad /* ᾭ */: return u8"ᾥ" /* 0x1fa5 */;
+ case 0x1fae /* ᾮ */: return u8"ᾦ" /* 0x1fa6 */;
+ case 0x1faf /* ᾯ */: return u8"ᾧ" /* 0x1fa7 */;
+ case 0x1fb8 /* Ᾰ */: return u8"ᾰ" /* 0x1fb0 */;
+ case 0x1fb9 /* Ᾱ */: return u8"ᾱ" /* 0x1fb1 */;
+ case 0x1fba /* Ὰ */: return u8"ὰ" /* 0x1f70 */;
+ case 0x1fbb /* Ά */: return u8"ά" /* 0x1f71 */;
+ case 0x1fbc /* ᾼ */: return u8"ᾳ" /* 0x1fb3 */;
+ case 0x1fc8 /* Ὲ */: return u8"ὲ" /* 0x1f72 */;
+ case 0x1fc9 /* Έ */: return u8"έ" /* 0x1f73 */;
+ case 0x1fca /* Ὴ */: return u8"ὴ" /* 0x1f74 */;
+ case 0x1fcb /* Ή */: return u8"ή" /* 0x1f75 */;
+ case 0x1fcc /* ῌ */: return u8"ῃ" /* 0x1fc3 */;
+ case 0x1fd8 /* Ῐ */: return u8"ῐ" /* 0x1fd0 */;
+ case 0x1fd9 /* Ῑ */: return u8"ῑ" /* 0x1fd1 */;
+ case 0x1fda /* Ὶ */: return u8"ὶ" /* 0x1f76 */;
+ case 0x1fdb /* Ί */: return u8"ί" /* 0x1f77 */;
+ case 0x1fe8 /* Ῠ */: return u8"ῠ" /* 0x1fe0 */;
+ case 0x1fe9 /* Ῡ */: return u8"ῡ" /* 0x1fe1 */;
+ case 0x1fea /* Ὺ */: return u8"ὺ" /* 0x1f7a */;
+ case 0x1feb /* Ύ */: return u8"ύ" /* 0x1f7b */;
+ case 0x1fec /* Ῥ */: return u8"ῥ" /* 0x1fe5 */;
+ case 0x1ff8 /* Ὸ */: return u8"ὸ" /* 0x1f78 */;
+ case 0x1ff9 /* Ό */: return u8"ό" /* 0x1f79 */;
+ case 0x1ffa /* Ὼ */: return u8"ὼ" /* 0x1f7c */;
+ case 0x1ffb /* Ώ */: return u8"ώ" /* 0x1f7d */;
+ case 0x1ffc /* ῼ */: return u8"ῳ" /* 0x1ff3 */;
+ case 0x2126 /* Ω */: return u8"ω" /* 0x3c9 */;
+ case 0x212a /* K */: return u8"k" /* 0x6b */;
+ case 0x212b /* Å */: return u8"å" /* 0xe5 */;
+ case 0x2132 /* Ⅎ */: return u8"ⅎ" /* 0x214e */;
+ case 0x2160 /* Ⅰ */: return u8"ⅰ" /* 0x2170 */;
+ case 0x2161 /* Ⅱ */: return u8"ⅱ" /* 0x2171 */;
+ case 0x2162 /* Ⅲ */: return u8"ⅲ" /* 0x2172 */;
+ case 0x2163 /* Ⅳ */: return u8"ⅳ" /* 0x2173 */;
+ case 0x2164 /* Ⅴ */: return u8"ⅴ" /* 0x2174 */;
+ case 0x2165 /* Ⅵ */: return u8"ⅵ" /* 0x2175 */;
+ case 0x2166 /* Ⅶ */: return u8"ⅶ" /* 0x2176 */;
+ case 0x2167 /* Ⅷ */: return u8"ⅷ" /* 0x2177 */;
+ case 0x2168 /* Ⅸ */: return u8"ⅸ" /* 0x2178 */;
+ case 0x2169 /* Ⅹ */: return u8"ⅹ" /* 0x2179 */;
+ case 0x216a /* Ⅺ */: return u8"ⅺ" /* 0x217a */;
+ case 0x216b /* Ⅻ */: return u8"ⅻ" /* 0x217b */;
+ case 0x216c /* Ⅼ */: return u8"ⅼ" /* 0x217c */;
+ case 0x216d /* Ⅽ */: return u8"ⅽ" /* 0x217d */;
+ case 0x216e /* Ⅾ */: return u8"ⅾ" /* 0x217e */;
+ case 0x216f /* Ⅿ */: return u8"ⅿ" /* 0x217f */;
+ case 0x2183 /* Ↄ */: return u8"ↄ" /* 0x2184 */;
+ case 0x24b6 /* Ⓐ */: return u8"ⓐ" /* 0x24d0 */;
+ case 0x24b7 /* Ⓑ */: return u8"ⓑ" /* 0x24d1 */;
+ case 0x24b8 /* Ⓒ */: return u8"ⓒ" /* 0x24d2 */;
+ case 0x24b9 /* Ⓓ */: return u8"ⓓ" /* 0x24d3 */;
+ case 0x24ba /* Ⓔ */: return u8"ⓔ" /* 0x24d4 */;
+ case 0x24bb /* Ⓕ */: return u8"ⓕ" /* 0x24d5 */;
+ case 0x24bc /* Ⓖ */: return u8"ⓖ" /* 0x24d6 */;
+ case 0x24bd /* Ⓗ */: return u8"ⓗ" /* 0x24d7 */;
+ case 0x24be /* Ⓘ */: return u8"ⓘ" /* 0x24d8 */;
+ case 0x24bf /* Ⓙ */: return u8"ⓙ" /* 0x24d9 */;
+ case 0x24c0 /* Ⓚ */: return u8"ⓚ" /* 0x24da */;
+ case 0x24c1 /* Ⓛ */: return u8"ⓛ" /* 0x24db */;
+ case 0x24c2 /* Ⓜ */: return u8"ⓜ" /* 0x24dc */;
+ case 0x24c3 /* Ⓝ */: return u8"ⓝ" /* 0x24dd */;
+ case 0x24c4 /* Ⓞ */: return u8"ⓞ" /* 0x24de */;
+ case 0x24c5 /* Ⓟ */: return u8"ⓟ" /* 0x24df */;
+ case 0x24c6 /* Ⓠ */: return u8"ⓠ" /* 0x24e0 */;
+ case 0x24c7 /* Ⓡ */: return u8"ⓡ" /* 0x24e1 */;
+ case 0x24c8 /* Ⓢ */: return u8"ⓢ" /* 0x24e2 */;
+ case 0x24c9 /* Ⓣ */: return u8"ⓣ" /* 0x24e3 */;
+ case 0x24ca /* Ⓤ */: return u8"ⓤ" /* 0x24e4 */;
+ case 0x24cb /* Ⓥ */: return u8"ⓥ" /* 0x24e5 */;
+ case 0x24cc /* Ⓦ */: return u8"ⓦ" /* 0x24e6 */;
+ case 0x24cd /* Ⓧ */: return u8"ⓧ" /* 0x24e7 */;
+ case 0x24ce /* Ⓨ */: return u8"ⓨ" /* 0x24e8 */;
+ case 0x24cf /* Ⓩ */: return u8"ⓩ" /* 0x24e9 */;
+ case 0x2c00 /* Ⰰ */: return u8"ⰰ" /* 0x2c30 */;
+ case 0x2c01 /* Ⰱ */: return u8"ⰱ" /* 0x2c31 */;
+ case 0x2c02 /* Ⰲ */: return u8"ⰲ" /* 0x2c32 */;
+ case 0x2c03 /* Ⰳ */: return u8"ⰳ" /* 0x2c33 */;
+ case 0x2c04 /* Ⰴ */: return u8"ⰴ" /* 0x2c34 */;
+ case 0x2c05 /* Ⰵ */: return u8"ⰵ" /* 0x2c35 */;
+ case 0x2c06 /* Ⰶ */: return u8"ⰶ" /* 0x2c36 */;
+ case 0x2c07 /* Ⰷ */: return u8"ⰷ" /* 0x2c37 */;
+ case 0x2c08 /* Ⰸ */: return u8"ⰸ" /* 0x2c38 */;
+ case 0x2c09 /* Ⰹ */: return u8"ⰹ" /* 0x2c39 */;
+ case 0x2c0a /* Ⰺ */: return u8"ⰺ" /* 0x2c3a */;
+ case 0x2c0b /* Ⰻ */: return u8"ⰻ" /* 0x2c3b */;
+ case 0x2c0c /* Ⰼ */: return u8"ⰼ" /* 0x2c3c */;
+ case 0x2c0d /* Ⰽ */: return u8"ⰽ" /* 0x2c3d */;
+ case 0x2c0e /* Ⰾ */: return u8"ⰾ" /* 0x2c3e */;
+ case 0x2c0f /* Ⰿ */: return u8"ⰿ" /* 0x2c3f */;
+ case 0x2c10 /* Ⱀ */: return u8"ⱀ" /* 0x2c40 */;
+ case 0x2c11 /* Ⱁ */: return u8"ⱁ" /* 0x2c41 */;
+ case 0x2c12 /* Ⱂ */: return u8"ⱂ" /* 0x2c42 */;
+ case 0x2c13 /* Ⱃ */: return u8"ⱃ" /* 0x2c43 */;
+ case 0x2c14 /* Ⱄ */: return u8"ⱄ" /* 0x2c44 */;
+ case 0x2c15 /* Ⱅ */: return u8"ⱅ" /* 0x2c45 */;
+ case 0x2c16 /* Ⱆ */: return u8"ⱆ" /* 0x2c46 */;
+ case 0x2c17 /* Ⱇ */: return u8"ⱇ" /* 0x2c47 */;
+ case 0x2c18 /* Ⱈ */: return u8"ⱈ" /* 0x2c48 */;
+ case 0x2c19 /* Ⱉ */: return u8"ⱉ" /* 0x2c49 */;
+ case 0x2c1a /* Ⱊ */: return u8"ⱊ" /* 0x2c4a */;
+ case 0x2c1b /* Ⱋ */: return u8"ⱋ" /* 0x2c4b */;
+ case 0x2c1c /* Ⱌ */: return u8"ⱌ" /* 0x2c4c */;
+ case 0x2c1d /* Ⱍ */: return u8"ⱍ" /* 0x2c4d */;
+ case 0x2c1e /* Ⱎ */: return u8"ⱎ" /* 0x2c4e */;
+ case 0x2c1f /* Ⱏ */: return u8"ⱏ" /* 0x2c4f */;
+ case 0x2c20 /* Ⱐ */: return u8"ⱐ" /* 0x2c50 */;
+ case 0x2c21 /* Ⱑ */: return u8"ⱑ" /* 0x2c51 */;
+ case 0x2c22 /* Ⱒ */: return u8"ⱒ" /* 0x2c52 */;
+ case 0x2c23 /* Ⱓ */: return u8"ⱓ" /* 0x2c53 */;
+ case 0x2c24 /* Ⱔ */: return u8"ⱔ" /* 0x2c54 */;
+ case 0x2c25 /* Ⱕ */: return u8"ⱕ" /* 0x2c55 */;
+ case 0x2c26 /* Ⱖ */: return u8"ⱖ" /* 0x2c56 */;
+ case 0x2c27 /* Ⱗ */: return u8"ⱗ" /* 0x2c57 */;
+ case 0x2c28 /* Ⱘ */: return u8"ⱘ" /* 0x2c58 */;
+ case 0x2c29 /* Ⱙ */: return u8"ⱙ" /* 0x2c59 */;
+ case 0x2c2a /* Ⱚ */: return u8"ⱚ" /* 0x2c5a */;
+ case 0x2c2b /* Ⱛ */: return u8"ⱛ" /* 0x2c5b */;
+ case 0x2c2c /* Ⱜ */: return u8"ⱜ" /* 0x2c5c */;
+ case 0x2c2d /* Ⱝ */: return u8"ⱝ" /* 0x2c5d */;
+ case 0x2c2e /* Ⱞ */: return u8"ⱞ" /* 0x2c5e */;
+ case 0x2c60 /* Ⱡ */: return u8"ⱡ" /* 0x2c61 */;
+ case 0x2c62 /* Ɫ */: return u8"ɫ" /* 0x26b */;
+ case 0x2c63 /* Ᵽ */: return u8"ᵽ" /* 0x1d7d */;
+ case 0x2c64 /* Ɽ */: return u8"ɽ" /* 0x27d */;
+ case 0x2c67 /* Ⱨ */: return u8"ⱨ" /* 0x2c68 */;
+ case 0x2c69 /* Ⱪ */: return u8"ⱪ" /* 0x2c6a */;
+ case 0x2c6b /* Ⱬ */: return u8"ⱬ" /* 0x2c6c */;
+ case 0x2c6d /* Ɑ */: return u8"ɑ" /* 0x251 */;
+ case 0x2c6e /* Ɱ */: return u8"ɱ" /* 0x271 */;
+ case 0x2c6f /* Ɐ */: return u8"ɐ" /* 0x250 */;
+ case 0x2c70 /* Ɒ */: return u8"ɒ" /* 0x252 */;
+ case 0x2c72 /* Ⱳ */: return u8"ⱳ" /* 0x2c73 */;
+ case 0x2c75 /* Ⱶ */: return u8"ⱶ" /* 0x2c76 */;
+ case 0x2c7e /* Ȿ */: return u8"ȿ" /* 0x23f */;
+ case 0x2c7f /* Ɀ */: return u8"ɀ" /* 0x240 */;
+ case 0x2c80 /* Ⲁ */: return u8"ⲁ" /* 0x2c81 */;
+ case 0x2c82 /* Ⲃ */: return u8"ⲃ" /* 0x2c83 */;
+ case 0x2c84 /* Ⲅ */: return u8"ⲅ" /* 0x2c85 */;
+ case 0x2c86 /* Ⲇ */: return u8"ⲇ" /* 0x2c87 */;
+ case 0x2c88 /* Ⲉ */: return u8"ⲉ" /* 0x2c89 */;
+ case 0x2c8a /* Ⲋ */: return u8"ⲋ" /* 0x2c8b */;
+ case 0x2c8c /* Ⲍ */: return u8"ⲍ" /* 0x2c8d */;
+ case 0x2c8e /* Ⲏ */: return u8"ⲏ" /* 0x2c8f */;
+ case 0x2c90 /* Ⲑ */: return u8"ⲑ" /* 0x2c91 */;
+ case 0x2c92 /* Ⲓ */: return u8"ⲓ" /* 0x2c93 */;
+ case 0x2c94 /* Ⲕ */: return u8"ⲕ" /* 0x2c95 */;
+ case 0x2c96 /* Ⲗ */: return u8"ⲗ" /* 0x2c97 */;
+ case 0x2c98 /* Ⲙ */: return u8"ⲙ" /* 0x2c99 */;
+ case 0x2c9a /* Ⲛ */: return u8"ⲛ" /* 0x2c9b */;
+ case 0x2c9c /* Ⲝ */: return u8"ⲝ" /* 0x2c9d */;
+ case 0x2c9e /* Ⲟ */: return u8"ⲟ" /* 0x2c9f */;
+ case 0x2ca0 /* Ⲡ */: return u8"ⲡ" /* 0x2ca1 */;
+ case 0x2ca2 /* Ⲣ */: return u8"ⲣ" /* 0x2ca3 */;
+ case 0x2ca4 /* Ⲥ */: return u8"ⲥ" /* 0x2ca5 */;
+ case 0x2ca6 /* Ⲧ */: return u8"ⲧ" /* 0x2ca7 */;
+ case 0x2ca8 /* Ⲩ */: return u8"ⲩ" /* 0x2ca9 */;
+ case 0x2caa /* Ⲫ */: return u8"ⲫ" /* 0x2cab */;
+ case 0x2cac /* Ⲭ */: return u8"ⲭ" /* 0x2cad */;
+ case 0x2cae /* Ⲯ */: return u8"ⲯ" /* 0x2caf */;
+ case 0x2cb0 /* Ⲱ */: return u8"ⲱ" /* 0x2cb1 */;
+ case 0x2cb2 /* Ⲳ */: return u8"ⲳ" /* 0x2cb3 */;
+ case 0x2cb4 /* Ⲵ */: return u8"ⲵ" /* 0x2cb5 */;
+ case 0x2cb6 /* Ⲷ */: return u8"ⲷ" /* 0x2cb7 */;
+ case 0x2cb8 /* Ⲹ */: return u8"ⲹ" /* 0x2cb9 */;
+ case 0x2cba /* Ⲻ */: return u8"ⲻ" /* 0x2cbb */;
+ case 0x2cbc /* Ⲽ */: return u8"ⲽ" /* 0x2cbd */;
+ case 0x2cbe /* Ⲿ */: return u8"ⲿ" /* 0x2cbf */;
+ case 0x2cc0 /* Ⳁ */: return u8"ⳁ" /* 0x2cc1 */;
+ case 0x2cc2 /* Ⳃ */: return u8"ⳃ" /* 0x2cc3 */;
+ case 0x2cc4 /* Ⳅ */: return u8"ⳅ" /* 0x2cc5 */;
+ case 0x2cc6 /* Ⳇ */: return u8"ⳇ" /* 0x2cc7 */;
+ case 0x2cc8 /* Ⳉ */: return u8"ⳉ" /* 0x2cc9 */;
+ case 0x2cca /* Ⳋ */: return u8"ⳋ" /* 0x2ccb */;
+ case 0x2ccc /* Ⳍ */: return u8"ⳍ" /* 0x2ccd */;
+ case 0x2cce /* Ⳏ */: return u8"ⳏ" /* 0x2ccf */;
+ case 0x2cd0 /* Ⳑ */: return u8"ⳑ" /* 0x2cd1 */;
+ case 0x2cd2 /* Ⳓ */: return u8"ⳓ" /* 0x2cd3 */;
+ case 0x2cd4 /* Ⳕ */: return u8"ⳕ" /* 0x2cd5 */;
+ case 0x2cd6 /* Ⳗ */: return u8"ⳗ" /* 0x2cd7 */;
+ case 0x2cd8 /* Ⳙ */: return u8"ⳙ" /* 0x2cd9 */;
+ case 0x2cda /* Ⳛ */: return u8"ⳛ" /* 0x2cdb */;
+ case 0x2cdc /* Ⳝ */: return u8"ⳝ" /* 0x2cdd */;
+ case 0x2cde /* Ⳟ */: return u8"ⳟ" /* 0x2cdf */;
+ case 0x2ce0 /* Ⳡ */: return u8"ⳡ" /* 0x2ce1 */;
+ case 0x2ce2 /* Ⳣ */: return u8"ⳣ" /* 0x2ce3 */;
+ case 0x2ceb /* Ⳬ */: return u8"ⳬ" /* 0x2cec */;
+ case 0x2ced /* Ⳮ */: return u8"ⳮ" /* 0x2cee */;
+ case 0x2cf2 /* Ⳳ */: return u8"ⳳ" /* 0x2cf3 */;
+ case 0xa640 /* Ꙁ */: return u8"ꙁ" /* 0xa641 */;
+ case 0xa642 /* Ꙃ */: return u8"ꙃ" /* 0xa643 */;
+ case 0xa644 /* Ꙅ */: return u8"ꙅ" /* 0xa645 */;
+ case 0xa646 /* Ꙇ */: return u8"ꙇ" /* 0xa647 */;
+ case 0xa648 /* Ꙉ */: return u8"ꙉ" /* 0xa649 */;
+ case 0xa64a /* Ꙋ */: return u8"ꙋ" /* 0xa64b */;
+ case 0xa64c /* Ꙍ */: return u8"ꙍ" /* 0xa64d */;
+ case 0xa64e /* Ꙏ */: return u8"ꙏ" /* 0xa64f */;
+ case 0xa650 /* Ꙑ */: return u8"ꙑ" /* 0xa651 */;
+ case 0xa652 /* Ꙓ */: return u8"ꙓ" /* 0xa653 */;
+ case 0xa654 /* Ꙕ */: return u8"ꙕ" /* 0xa655 */;
+ case 0xa656 /* Ꙗ */: return u8"ꙗ" /* 0xa657 */;
+ case 0xa658 /* Ꙙ */: return u8"ꙙ" /* 0xa659 */;
+ case 0xa65a /* Ꙛ */: return u8"ꙛ" /* 0xa65b */;
+ case 0xa65c /* Ꙝ */: return u8"ꙝ" /* 0xa65d */;
+ case 0xa65e /* Ꙟ */: return u8"ꙟ" /* 0xa65f */;
+ case 0xa660 /* Ꙡ */: return u8"ꙡ" /* 0xa661 */;
+ case 0xa662 /* Ꙣ */: return u8"ꙣ" /* 0xa663 */;
+ case 0xa664 /* Ꙥ */: return u8"ꙥ" /* 0xa665 */;
+ case 0xa666 /* Ꙧ */: return u8"ꙧ" /* 0xa667 */;
+ case 0xa668 /* Ꙩ */: return u8"ꙩ" /* 0xa669 */;
+ case 0xa66a /* Ꙫ */: return u8"ꙫ" /* 0xa66b */;
+ case 0xa66c /* Ꙭ */: return u8"ꙭ" /* 0xa66d */;
+ case 0xa680 /* Ꚁ */: return u8"ꚁ" /* 0xa681 */;
+ case 0xa682 /* Ꚃ */: return u8"ꚃ" /* 0xa683 */;
+ case 0xa684 /* Ꚅ */: return u8"ꚅ" /* 0xa685 */;
+ case 0xa686 /* Ꚇ */: return u8"ꚇ" /* 0xa687 */;
+ case 0xa688 /* Ꚉ */: return u8"ꚉ" /* 0xa689 */;
+ case 0xa68a /* Ꚋ */: return u8"ꚋ" /* 0xa68b */;
+ case 0xa68c /* Ꚍ */: return u8"ꚍ" /* 0xa68d */;
+ case 0xa68e /* Ꚏ */: return u8"ꚏ" /* 0xa68f */;
+ case 0xa690 /* Ꚑ */: return u8"ꚑ" /* 0xa691 */;
+ case 0xa692 /* Ꚓ */: return u8"ꚓ" /* 0xa693 */;
+ case 0xa694 /* Ꚕ */: return u8"ꚕ" /* 0xa695 */;
+ case 0xa696 /* Ꚗ */: return u8"ꚗ" /* 0xa697 */;
+ case 0xa698 /* Ꚙ */: return u8"ꚙ" /* 0xa699 */;
+ case 0xa69a /* Ꚛ */: return u8"ꚛ" /* 0xa69b */;
+ case 0xa722 /* Ꜣ */: return u8"ꜣ" /* 0xa723 */;
+ case 0xa724 /* Ꜥ */: return u8"ꜥ" /* 0xa725 */;
+ case 0xa726 /* Ꜧ */: return u8"ꜧ" /* 0xa727 */;
+ case 0xa728 /* Ꜩ */: return u8"ꜩ" /* 0xa729 */;
+ case 0xa72a /* Ꜫ */: return u8"ꜫ" /* 0xa72b */;
+ case 0xa72c /* Ꜭ */: return u8"ꜭ" /* 0xa72d */;
+ case 0xa72e /* Ꜯ */: return u8"ꜯ" /* 0xa72f */;
+ case 0xa732 /* Ꜳ */: return u8"ꜳ" /* 0xa733 */;
+ case 0xa734 /* Ꜵ */: return u8"ꜵ" /* 0xa735 */;
+ case 0xa736 /* Ꜷ */: return u8"ꜷ" /* 0xa737 */;
+ case 0xa738 /* Ꜹ */: return u8"ꜹ" /* 0xa739 */;
+ case 0xa73a /* Ꜻ */: return u8"ꜻ" /* 0xa73b */;
+ case 0xa73c /* Ꜽ */: return u8"ꜽ" /* 0xa73d */;
+ case 0xa73e /* Ꜿ */: return u8"ꜿ" /* 0xa73f */;
+ case 0xa740 /* Ꝁ */: return u8"ꝁ" /* 0xa741 */;
+ case 0xa742 /* Ꝃ */: return u8"ꝃ" /* 0xa743 */;
+ case 0xa744 /* Ꝅ */: return u8"ꝅ" /* 0xa745 */;
+ case 0xa746 /* Ꝇ */: return u8"ꝇ" /* 0xa747 */;
+ case 0xa748 /* Ꝉ */: return u8"ꝉ" /* 0xa749 */;
+ case 0xa74a /* Ꝋ */: return u8"ꝋ" /* 0xa74b */;
+ case 0xa74c /* Ꝍ */: return u8"ꝍ" /* 0xa74d */;
+ case 0xa74e /* Ꝏ */: return u8"ꝏ" /* 0xa74f */;
+ case 0xa750 /* Ꝑ */: return u8"ꝑ" /* 0xa751 */;
+ case 0xa752 /* Ꝓ */: return u8"ꝓ" /* 0xa753 */;
+ case 0xa754 /* Ꝕ */: return u8"ꝕ" /* 0xa755 */;
+ case 0xa756 /* Ꝗ */: return u8"ꝗ" /* 0xa757 */;
+ case 0xa758 /* Ꝙ */: return u8"ꝙ" /* 0xa759 */;
+ case 0xa75a /* Ꝛ */: return u8"ꝛ" /* 0xa75b */;
+ case 0xa75c /* Ꝝ */: return u8"ꝝ" /* 0xa75d */;
+ case 0xa75e /* Ꝟ */: return u8"ꝟ" /* 0xa75f */;
+ case 0xa760 /* Ꝡ */: return u8"ꝡ" /* 0xa761 */;
+ case 0xa762 /* Ꝣ */: return u8"ꝣ" /* 0xa763 */;
+ case 0xa764 /* Ꝥ */: return u8"ꝥ" /* 0xa765 */;
+ case 0xa766 /* Ꝧ */: return u8"ꝧ" /* 0xa767 */;
+ case 0xa768 /* Ꝩ */: return u8"ꝩ" /* 0xa769 */;
+ case 0xa76a /* Ꝫ */: return u8"ꝫ" /* 0xa76b */;
+ case 0xa76c /* Ꝭ */: return u8"ꝭ" /* 0xa76d */;
+ case 0xa76e /* Ꝯ */: return u8"ꝯ" /* 0xa76f */;
+ case 0xa779 /* Ꝺ */: return u8"ꝺ" /* 0xa77a */;
+ case 0xa77b /* Ꝼ */: return u8"ꝼ" /* 0xa77c */;
+ case 0xa77d /* Ᵹ */: return u8"ᵹ" /* 0x1d79 */;
+ case 0xa77e /* Ꝿ */: return u8"ꝿ" /* 0xa77f */;
+ case 0xa780 /* Ꞁ */: return u8"ꞁ" /* 0xa781 */;
+ case 0xa782 /* Ꞃ */: return u8"ꞃ" /* 0xa783 */;
+ case 0xa784 /* Ꞅ */: return u8"ꞅ" /* 0xa785 */;
+ case 0xa786 /* Ꞇ */: return u8"ꞇ" /* 0xa787 */;
+ case 0xa78b /* Ꞌ */: return u8"ꞌ" /* 0xa78c */;
+ case 0xa78d /* Ɥ */: return u8"ɥ" /* 0x265 */;
+ case 0xa790 /* Ꞑ */: return u8"ꞑ" /* 0xa791 */;
+ case 0xa792 /* Ꞓ */: return u8"ꞓ" /* 0xa793 */;
+ case 0xa796 /* Ꞗ */: return u8"ꞗ" /* 0xa797 */;
+ case 0xa798 /* Ꞙ */: return u8"ꞙ" /* 0xa799 */;
+ case 0xa79a /* Ꞛ */: return u8"ꞛ" /* 0xa79b */;
+ case 0xa79c /* Ꞝ */: return u8"ꞝ" /* 0xa79d */;
+ case 0xa79e /* Ꞟ */: return u8"ꞟ" /* 0xa79f */;
+ case 0xa7a0 /* Ꞡ */: return u8"ꞡ" /* 0xa7a1 */;
+ case 0xa7a2 /* Ꞣ */: return u8"ꞣ" /* 0xa7a3 */;
+ case 0xa7a4 /* Ꞥ */: return u8"ꞥ" /* 0xa7a5 */;
+ case 0xa7a6 /* Ꞧ */: return u8"ꞧ" /* 0xa7a7 */;
+ case 0xa7a8 /* Ꞩ */: return u8"ꞩ" /* 0xa7a9 */;
+ case 0xa7aa /* Ɦ */: return u8"ɦ" /* 0x266 */;
+ case 0xa7ab /* Ɜ */: return u8"ɜ" /* 0x25c */;
+ case 0xa7ac /* Ɡ */: return u8"ɡ" /* 0x261 */;
+ case 0xa7ad /* Ɬ */: return u8"ɬ" /* 0x26c */;
+ case 0xa7ae /* Ɪ */: return u8"ɪ" /* 0x26a */;
+ case 0xa7b0 /* Ʞ */: return u8"ʞ" /* 0x29e */;
+ case 0xa7b1 /* Ʇ */: return u8"ʇ" /* 0x287 */;
+ case 0xa7b2 /* Ʝ */: return u8"ʝ" /* 0x29d */;
+ case 0xa7b3 /* Ꭓ */: return u8"ꭓ" /* 0xab53 */;
+ case 0xa7b4 /* Ꞵ */: return u8"ꞵ" /* 0xa7b5 */;
+ case 0xa7b6 /* Ꞷ */: return u8"ꞷ" /* 0xa7b7 */;
+ case 0xa7b8 /* Ꞹ */: return u8"ꞹ" /* 0xa7b9 */;
+ case 0xa7ba /* Ꞻ */: return u8"ꞻ" /* 0xa7bb */;
+ case 0xa7bc /* Ꞽ */: return u8"ꞽ" /* 0xa7bd */;
+ case 0xa7be /* Ꞿ */: return u8"ꞿ" /* 0xa7bf */;
+ case 0xa7c2 /* Ꟃ */: return u8"ꟃ" /* 0xa7c3 */;
+ case 0xa7c4 /* Ꞔ */: return u8"ꞔ" /* 0xa794 */;
+ case 0xa7c5 /* Ʂ */: return u8"ʂ" /* 0x282 */;
+ case 0xa7c6 /* Ᶎ */: return u8"ᶎ" /* 0x1d8e */;
+ case 0xa7c7 /* Ꟈ */: return u8"ꟈ" /* 0xa7c8 */;
+ case 0xa7c9 /* Ꟊ */: return u8"ꟊ" /* 0xa7ca */;
+ case 0xa7f5 /* Ꟶ */: return u8"ꟶ" /* 0xa7f6 */;
+ case 0xff21 /* A */: return u8"a" /* 0xff41 */;
+ case 0xff22 /* B */: return u8"b" /* 0xff42 */;
+ case 0xff23 /* C */: return u8"c" /* 0xff43 */;
+ case 0xff24 /* D */: return u8"d" /* 0xff44 */;
+ case 0xff25 /* E */: return u8"e" /* 0xff45 */;
+ case 0xff26 /* F */: return u8"f" /* 0xff46 */;
+ case 0xff27 /* G */: return u8"g" /* 0xff47 */;
+ case 0xff28 /* H */: return u8"h" /* 0xff48 */;
+ case 0xff29 /* I */: return u8"i" /* 0xff49 */;
+ case 0xff2a /* J */: return u8"j" /* 0xff4a */;
+ case 0xff2b /* K */: return u8"k" /* 0xff4b */;
+ case 0xff2c /* L */: return u8"l" /* 0xff4c */;
+ case 0xff2d /* M */: return u8"m" /* 0xff4d */;
+ case 0xff2e /* N */: return u8"n" /* 0xff4e */;
+ case 0xff2f /* O */: return u8"o" /* 0xff4f */;
+ case 0xff30 /* P */: return u8"p" /* 0xff50 */;
+ case 0xff31 /* Q */: return u8"q" /* 0xff51 */;
+ case 0xff32 /* R */: return u8"r" /* 0xff52 */;
+ case 0xff33 /* S */: return u8"s" /* 0xff53 */;
+ case 0xff34 /* T */: return u8"t" /* 0xff54 */;
+ case 0xff35 /* U */: return u8"u" /* 0xff55 */;
+ case 0xff36 /* V */: return u8"v" /* 0xff56 */;
+ case 0xff37 /* W */: return u8"w" /* 0xff57 */;
+ case 0xff38 /* X */: return u8"x" /* 0xff58 */;
+ case 0xff39 /* Y */: return u8"y" /* 0xff59 */;
+ case 0xff3a /* Z */: return u8"z" /* 0xff5a */;
+ case 0x10400 /* 𐐀 */: return u8"𐐨" /* 0x10428 */;
+ case 0x10401 /* 𐐁 */: return u8"𐐩" /* 0x10429 */;
+ case 0x10402 /* 𐐂 */: return u8"𐐪" /* 0x1042a */;
+ case 0x10403 /* 𐐃 */: return u8"𐐫" /* 0x1042b */;
+ case 0x10404 /* 𐐄 */: return u8"𐐬" /* 0x1042c */;
+ case 0x10405 /* 𐐅 */: return u8"𐐭" /* 0x1042d */;
+ case 0x10406 /* 𐐆 */: return u8"𐐮" /* 0x1042e */;
+ case 0x10407 /* 𐐇 */: return u8"𐐯" /* 0x1042f */;
+ case 0x10408 /* 𐐈 */: return u8"𐐰" /* 0x10430 */;
+ case 0x10409 /* 𐐉 */: return u8"𐐱" /* 0x10431 */;
+ case 0x1040a /* 𐐊 */: return u8"𐐲" /* 0x10432 */;
+ case 0x1040b /* 𐐋 */: return u8"𐐳" /* 0x10433 */;
+ case 0x1040c /* 𐐌 */: return u8"𐐴" /* 0x10434 */;
+ case 0x1040d /* 𐐍 */: return u8"𐐵" /* 0x10435 */;
+ case 0x1040e /* 𐐎 */: return u8"𐐶" /* 0x10436 */;
+ case 0x1040f /* 𐐏 */: return u8"𐐷" /* 0x10437 */;
+ case 0x10410 /* 𐐐 */: return u8"𐐸" /* 0x10438 */;
+ case 0x10411 /* 𐐑 */: return u8"𐐹" /* 0x10439 */;
+ case 0x10412 /* 𐐒 */: return u8"𐐺" /* 0x1043a */;
+ case 0x10413 /* 𐐓 */: return u8"𐐻" /* 0x1043b */;
+ case 0x10414 /* 𐐔 */: return u8"𐐼" /* 0x1043c */;
+ case 0x10415 /* 𐐕 */: return u8"𐐽" /* 0x1043d */;
+ case 0x10416 /* 𐐖 */: return u8"𐐾" /* 0x1043e */;
+ case 0x10417 /* 𐐗 */: return u8"𐐿" /* 0x1043f */;
+ case 0x10418 /* 𐐘 */: return u8"𐑀" /* 0x10440 */;
+ case 0x10419 /* 𐐙 */: return u8"𐑁" /* 0x10441 */;
+ case 0x1041a /* 𐐚 */: return u8"𐑂" /* 0x10442 */;
+ case 0x1041b /* 𐐛 */: return u8"𐑃" /* 0x10443 */;
+ case 0x1041c /* 𐐜 */: return u8"𐑄" /* 0x10444 */;
+ case 0x1041d /* 𐐝 */: return u8"𐑅" /* 0x10445 */;
+ case 0x1041e /* 𐐞 */: return u8"𐑆" /* 0x10446 */;
+ case 0x1041f /* 𐐟 */: return u8"𐑇" /* 0x10447 */;
+ case 0x10420 /* 𐐠 */: return u8"𐑈" /* 0x10448 */;
+ case 0x10421 /* 𐐡 */: return u8"𐑉" /* 0x10449 */;
+ case 0x10422 /* 𐐢 */: return u8"𐑊" /* 0x1044a */;
+ case 0x10423 /* 𐐣 */: return u8"𐑋" /* 0x1044b */;
+ case 0x10424 /* 𐐤 */: return u8"𐑌" /* 0x1044c */;
+ case 0x10425 /* 𐐥 */: return u8"𐑍" /* 0x1044d */;
+ case 0x10426 /* 𐐦 */: return u8"𐑎" /* 0x1044e */;
+ case 0x10427 /* 𐐧 */: return u8"𐑏" /* 0x1044f */;
+ case 0x104b0 /* 𐒰 */: return u8"𐓘" /* 0x104d8 */;
+ case 0x104b1 /* 𐒱 */: return u8"𐓙" /* 0x104d9 */;
+ case 0x104b2 /* 𐒲 */: return u8"𐓚" /* 0x104da */;
+ case 0x104b3 /* 𐒳 */: return u8"𐓛" /* 0x104db */;
+ case 0x104b4 /* 𐒴 */: return u8"𐓜" /* 0x104dc */;
+ case 0x104b5 /* 𐒵 */: return u8"𐓝" /* 0x104dd */;
+ case 0x104b6 /* 𐒶 */: return u8"𐓞" /* 0x104de */;
+ case 0x104b7 /* 𐒷 */: return u8"𐓟" /* 0x104df */;
+ case 0x104b8 /* 𐒸 */: return u8"𐓠" /* 0x104e0 */;
+ case 0x104b9 /* 𐒹 */: return u8"𐓡" /* 0x104e1 */;
+ case 0x104ba /* 𐒺 */: return u8"𐓢" /* 0x104e2 */;
+ case 0x104bb /* 𐒻 */: return u8"𐓣" /* 0x104e3 */;
+ case 0x104bc /* 𐒼 */: return u8"𐓤" /* 0x104e4 */;
+ case 0x104bd /* 𐒽 */: return u8"𐓥" /* 0x104e5 */;
+ case 0x104be /* 𐒾 */: return u8"𐓦" /* 0x104e6 */;
+ case 0x104bf /* 𐒿 */: return u8"𐓧" /* 0x104e7 */;
+ case 0x104c0 /* 𐓀 */: return u8"𐓨" /* 0x104e8 */;
+ case 0x104c1 /* 𐓁 */: return u8"𐓩" /* 0x104e9 */;
+ case 0x104c2 /* 𐓂 */: return u8"𐓪" /* 0x104ea */;
+ case 0x104c3 /* 𐓃 */: return u8"𐓫" /* 0x104eb */;
+ case 0x104c4 /* 𐓄 */: return u8"𐓬" /* 0x104ec */;
+ case 0x104c5 /* 𐓅 */: return u8"𐓭" /* 0x104ed */;
+ case 0x104c6 /* 𐓆 */: return u8"𐓮" /* 0x104ee */;
+ case 0x104c7 /* 𐓇 */: return u8"𐓯" /* 0x104ef */;
+ case 0x104c8 /* 𐓈 */: return u8"𐓰" /* 0x104f0 */;
+ case 0x104c9 /* 𐓉 */: return u8"𐓱" /* 0x104f1 */;
+ case 0x104ca /* 𐓊 */: return u8"𐓲" /* 0x104f2 */;
+ case 0x104cb /* 𐓋 */: return u8"𐓳" /* 0x104f3 */;
+ case 0x104cc /* 𐓌 */: return u8"𐓴" /* 0x104f4 */;
+ case 0x104cd /* 𐓍 */: return u8"𐓵" /* 0x104f5 */;
+ case 0x104ce /* 𐓎 */: return u8"𐓶" /* 0x104f6 */;
+ case 0x104cf /* 𐓏 */: return u8"𐓷" /* 0x104f7 */;
+ case 0x104d0 /* 𐓐 */: return u8"𐓸" /* 0x104f8 */;
+ case 0x104d1 /* 𐓑 */: return u8"𐓹" /* 0x104f9 */;
+ case 0x104d2 /* 𐓒 */: return u8"𐓺" /* 0x104fa */;
+ case 0x104d3 /* 𐓓 */: return u8"𐓻" /* 0x104fb */;
+ case 0x10c80 /* 𐲀 */: return u8"𐳀" /* 0x10cc0 */;
+ case 0x10c81 /* 𐲁 */: return u8"𐳁" /* 0x10cc1 */;
+ case 0x10c82 /* 𐲂 */: return u8"𐳂" /* 0x10cc2 */;
+ case 0x10c83 /* 𐲃 */: return u8"𐳃" /* 0x10cc3 */;
+ case 0x10c84 /* 𐲄 */: return u8"𐳄" /* 0x10cc4 */;
+ case 0x10c85 /* 𐲅 */: return u8"𐳅" /* 0x10cc5 */;
+ case 0x10c86 /* 𐲆 */: return u8"𐳆" /* 0x10cc6 */;
+ case 0x10c87 /* 𐲇 */: return u8"𐳇" /* 0x10cc7 */;
+ case 0x10c88 /* 𐲈 */: return u8"𐳈" /* 0x10cc8 */;
+ case 0x10c89 /* 𐲉 */: return u8"𐳉" /* 0x10cc9 */;
+ case 0x10c8a /* 𐲊 */: return u8"𐳊" /* 0x10cca */;
+ case 0x10c8b /* 𐲋 */: return u8"𐳋" /* 0x10ccb */;
+ case 0x10c8c /* 𐲌 */: return u8"𐳌" /* 0x10ccc */;
+ case 0x10c8d /* 𐲍 */: return u8"𐳍" /* 0x10ccd */;
+ case 0x10c8e /* 𐲎 */: return u8"𐳎" /* 0x10cce */;
+ case 0x10c8f /* 𐲏 */: return u8"𐳏" /* 0x10ccf */;
+ case 0x10c90 /* 𐲐 */: return u8"𐳐" /* 0x10cd0 */;
+ case 0x10c91 /* 𐲑 */: return u8"𐳑" /* 0x10cd1 */;
+ case 0x10c92 /* 𐲒 */: return u8"𐳒" /* 0x10cd2 */;
+ case 0x10c93 /* 𐲓 */: return u8"𐳓" /* 0x10cd3 */;
+ case 0x10c94 /* 𐲔 */: return u8"𐳔" /* 0x10cd4 */;
+ case 0x10c95 /* 𐲕 */: return u8"𐳕" /* 0x10cd5 */;
+ case 0x10c96 /* 𐲖 */: return u8"𐳖" /* 0x10cd6 */;
+ case 0x10c97 /* 𐲗 */: return u8"𐳗" /* 0x10cd7 */;
+ case 0x10c98 /* 𐲘 */: return u8"𐳘" /* 0x10cd8 */;
+ case 0x10c99 /* 𐲙 */: return u8"𐳙" /* 0x10cd9 */;
+ case 0x10c9a /* 𐲚 */: return u8"𐳚" /* 0x10cda */;
+ case 0x10c9b /* 𐲛 */: return u8"𐳛" /* 0x10cdb */;
+ case 0x10c9c /* 𐲜 */: return u8"𐳜" /* 0x10cdc */;
+ case 0x10c9d /* 𐲝 */: return u8"𐳝" /* 0x10cdd */;
+ case 0x10c9e /* 𐲞 */: return u8"𐳞" /* 0x10cde */;
+ case 0x10c9f /* 𐲟 */: return u8"𐳟" /* 0x10cdf */;
+ case 0x10ca0 /* 𐲠 */: return u8"𐳠" /* 0x10ce0 */;
+ case 0x10ca1 /* 𐲡 */: return u8"𐳡" /* 0x10ce1 */;
+ case 0x10ca2 /* 𐲢 */: return u8"𐳢" /* 0x10ce2 */;
+ case 0x10ca3 /* 𐲣 */: return u8"𐳣" /* 0x10ce3 */;
+ case 0x10ca4 /* 𐲤 */: return u8"𐳤" /* 0x10ce4 */;
+ case 0x10ca5 /* 𐲥 */: return u8"𐳥" /* 0x10ce5 */;
+ case 0x10ca6 /* 𐲦 */: return u8"𐳦" /* 0x10ce6 */;
+ case 0x10ca7 /* 𐲧 */: return u8"𐳧" /* 0x10ce7 */;
+ case 0x10ca8 /* 𐲨 */: return u8"𐳨" /* 0x10ce8 */;
+ case 0x10ca9 /* 𐲩 */: return u8"𐳩" /* 0x10ce9 */;
+ case 0x10caa /* 𐲪 */: return u8"𐳪" /* 0x10cea */;
+ case 0x10cab /* 𐲫 */: return u8"𐳫" /* 0x10ceb */;
+ case 0x10cac /* 𐲬 */: return u8"𐳬" /* 0x10cec */;
+ case 0x10cad /* 𐲭 */: return u8"𐳭" /* 0x10ced */;
+ case 0x10cae /* 𐲮 */: return u8"𐳮" /* 0x10cee */;
+ case 0x10caf /* 𐲯 */: return u8"𐳯" /* 0x10cef */;
+ case 0x10cb0 /* 𐲰 */: return u8"𐳰" /* 0x10cf0 */;
+ case 0x10cb1 /* 𐲱 */: return u8"𐳱" /* 0x10cf1 */;
+ case 0x10cb2 /* 𐲲 */: return u8"𐳲" /* 0x10cf2 */;
+ case 0x118a0 /* 𑢠 */: return u8"𑣀" /* 0x118c0 */;
+ case 0x118a1 /* 𑢡 */: return u8"𑣁" /* 0x118c1 */;
+ case 0x118a2 /* 𑢢 */: return u8"𑣂" /* 0x118c2 */;
+ case 0x118a3 /* 𑢣 */: return u8"𑣃" /* 0x118c3 */;
+ case 0x118a4 /* 𑢤 */: return u8"𑣄" /* 0x118c4 */;
+ case 0x118a5 /* 𑢥 */: return u8"𑣅" /* 0x118c5 */;
+ case 0x118a6 /* 𑢦 */: return u8"𑣆" /* 0x118c6 */;
+ case 0x118a7 /* 𑢧 */: return u8"𑣇" /* 0x118c7 */;
+ case 0x118a8 /* 𑢨 */: return u8"𑣈" /* 0x118c8 */;
+ case 0x118a9 /* 𑢩 */: return u8"𑣉" /* 0x118c9 */;
+ case 0x118aa /* 𑢪 */: return u8"𑣊" /* 0x118ca */;
+ case 0x118ab /* 𑢫 */: return u8"𑣋" /* 0x118cb */;
+ case 0x118ac /* 𑢬 */: return u8"𑣌" /* 0x118cc */;
+ case 0x118ad /* 𑢭 */: return u8"𑣍" /* 0x118cd */;
+ case 0x118ae /* 𑢮 */: return u8"𑣎" /* 0x118ce */;
+ case 0x118af /* 𑢯 */: return u8"𑣏" /* 0x118cf */;
+ case 0x118b0 /* 𑢰 */: return u8"𑣐" /* 0x118d0 */;
+ case 0x118b1 /* 𑢱 */: return u8"𑣑" /* 0x118d1 */;
+ case 0x118b2 /* 𑢲 */: return u8"𑣒" /* 0x118d2 */;
+ case 0x118b3 /* 𑢳 */: return u8"𑣓" /* 0x118d3 */;
+ case 0x118b4 /* 𑢴 */: return u8"𑣔" /* 0x118d4 */;
+ case 0x118b5 /* 𑢵 */: return u8"𑣕" /* 0x118d5 */;
+ case 0x118b6 /* 𑢶 */: return u8"𑣖" /* 0x118d6 */;
+ case 0x118b7 /* 𑢷 */: return u8"𑣗" /* 0x118d7 */;
+ case 0x118b8 /* 𑢸 */: return u8"𑣘" /* 0x118d8 */;
+ case 0x118b9 /* 𑢹 */: return u8"𑣙" /* 0x118d9 */;
+ case 0x118ba /* 𑢺 */: return u8"𑣚" /* 0x118da */;
+ case 0x118bb /* 𑢻 */: return u8"𑣛" /* 0x118db */;
+ case 0x118bc /* 𑢼 */: return u8"𑣜" /* 0x118dc */;
+ case 0x118bd /* 𑢽 */: return u8"𑣝" /* 0x118dd */;
+ case 0x118be /* 𑢾 */: return u8"𑣞" /* 0x118de */;
+ case 0x118bf /* 𑢿 */: return u8"𑣟" /* 0x118df */;
+ case 0x16e40 /* 𖹀 */: return u8"𖹠" /* 0x16e60 */;
+ case 0x16e41 /* 𖹁 */: return u8"𖹡" /* 0x16e61 */;
+ case 0x16e42 /* 𖹂 */: return u8"𖹢" /* 0x16e62 */;
+ case 0x16e43 /* 𖹃 */: return u8"𖹣" /* 0x16e63 */;
+ case 0x16e44 /* 𖹄 */: return u8"𖹤" /* 0x16e64 */;
+ case 0x16e45 /* 𖹅 */: return u8"𖹥" /* 0x16e65 */;
+ case 0x16e46 /* 𖹆 */: return u8"𖹦" /* 0x16e66 */;
+ case 0x16e47 /* 𖹇 */: return u8"𖹧" /* 0x16e67 */;
+ case 0x16e48 /* 𖹈 */: return u8"𖹨" /* 0x16e68 */;
+ case 0x16e49 /* 𖹉 */: return u8"𖹩" /* 0x16e69 */;
+ case 0x16e4a /* 𖹊 */: return u8"𖹪" /* 0x16e6a */;
+ case 0x16e4b /* 𖹋 */: return u8"𖹫" /* 0x16e6b */;
+ case 0x16e4c /* 𖹌 */: return u8"𖹬" /* 0x16e6c */;
+ case 0x16e4d /* 𖹍 */: return u8"𖹭" /* 0x16e6d */;
+ case 0x16e4e /* 𖹎 */: return u8"𖹮" /* 0x16e6e */;
+ case 0x16e4f /* 𖹏 */: return u8"𖹯" /* 0x16e6f */;
+ case 0x16e50 /* 𖹐 */: return u8"𖹰" /* 0x16e70 */;
+ case 0x16e51 /* 𖹑 */: return u8"𖹱" /* 0x16e71 */;
+ case 0x16e52 /* 𖹒 */: return u8"𖹲" /* 0x16e72 */;
+ case 0x16e53 /* 𖹓 */: return u8"𖹳" /* 0x16e73 */;
+ case 0x16e54 /* 𖹔 */: return u8"𖹴" /* 0x16e74 */;
+ case 0x16e55 /* 𖹕 */: return u8"𖹵" /* 0x16e75 */;
+ case 0x16e56 /* 𖹖 */: return u8"𖹶" /* 0x16e76 */;
+ case 0x16e57 /* 𖹗 */: return u8"𖹷" /* 0x16e77 */;
+ case 0x16e58 /* 𖹘 */: return u8"𖹸" /* 0x16e78 */;
+ case 0x16e59 /* 𖹙 */: return u8"𖹹" /* 0x16e79 */;
+ case 0x16e5a /* 𖹚 */: return u8"𖹺" /* 0x16e7a */;
+ case 0x16e5b /* 𖹛 */: return u8"𖹻" /* 0x16e7b */;
+ case 0x16e5c /* 𖹜 */: return u8"𖹼" /* 0x16e7c */;
+ case 0x16e5d /* 𖹝 */: return u8"𖹽" /* 0x16e7d */;
+ case 0x16e5e /* 𖹞 */: return u8"𖹾" /* 0x16e7e */;
+ case 0x16e5f /* 𖹟 */: return u8"𖹿" /* 0x16e7f */;
+ case 0x1e900 /* 𞤀 */: return u8"𞤢" /* 0x1e922 */;
+ case 0x1e901 /* 𞤁 */: return u8"𞤣" /* 0x1e923 */;
+ case 0x1e902 /* 𞤂 */: return u8"𞤤" /* 0x1e924 */;
+ case 0x1e903 /* 𞤃 */: return u8"𞤥" /* 0x1e925 */;
+ case 0x1e904 /* 𞤄 */: return u8"𞤦" /* 0x1e926 */;
+ case 0x1e905 /* 𞤅 */: return u8"𞤧" /* 0x1e927 */;
+ case 0x1e906 /* 𞤆 */: return u8"𞤨" /* 0x1e928 */;
+ case 0x1e907 /* 𞤇 */: return u8"𞤩" /* 0x1e929 */;
+ case 0x1e908 /* 𞤈 */: return u8"𞤪" /* 0x1e92a */;
+ case 0x1e909 /* 𞤉 */: return u8"𞤫" /* 0x1e92b */;
+ case 0x1e90a /* 𞤊 */: return u8"𞤬" /* 0x1e92c */;
+ case 0x1e90b /* 𞤋 */: return u8"𞤭" /* 0x1e92d */;
+ case 0x1e90c /* 𞤌 */: return u8"𞤮" /* 0x1e92e */;
+ case 0x1e90d /* 𞤍 */: return u8"𞤯" /* 0x1e92f */;
+ case 0x1e90e /* 𞤎 */: return u8"𞤰" /* 0x1e930 */;
+ case 0x1e90f /* 𞤏 */: return u8"𞤱" /* 0x1e931 */;
+ case 0x1e910 /* 𞤐 */: return u8"𞤲" /* 0x1e932 */;
+ case 0x1e911 /* 𞤑 */: return u8"𞤳" /* 0x1e933 */;
+ case 0x1e912 /* 𞤒 */: return u8"𞤴" /* 0x1e934 */;
+ case 0x1e913 /* 𞤓 */: return u8"𞤵" /* 0x1e935 */;
+ case 0x1e914 /* 𞤔 */: return u8"𞤶" /* 0x1e936 */;
+ case 0x1e915 /* 𞤕 */: return u8"𞤷" /* 0x1e937 */;
+ case 0x1e916 /* 𞤖 */: return u8"𞤸" /* 0x1e938 */;
+ case 0x1e917 /* 𞤗 */: return u8"𞤹" /* 0x1e939 */;
+ case 0x1e918 /* 𞤘 */: return u8"𞤺" /* 0x1e93a */;
+ case 0x1e919 /* 𞤙 */: return u8"𞤻" /* 0x1e93b */;
+ case 0x1e91a /* 𞤚 */: return u8"𞤼" /* 0x1e93c */;
+ case 0x1e91b /* 𞤛 */: return u8"𞤽" /* 0x1e93d */;
+ case 0x1e91c /* 𞤜 */: return u8"𞤾" /* 0x1e93e */;
+ case 0x1e91d /* 𞤝 */: return u8"𞤿" /* 0x1e93f */;
+ case 0x1e91e /* 𞤞 */: return u8"𞥀" /* 0x1e940 */;
+ case 0x1e91f /* 𞤟 */: return u8"𞥁" /* 0x1e941 */;
+ case 0x1e920 /* 𞤠 */: return u8"𞥂" /* 0x1e942 */;
+ case 0x1e921 /* 𞤡 */: return u8"𞥃" /* 0x1e943 */;
+ default: return nullptr;
+ }
+}
+
+#endif
diff --git a/src/caseconvert.py b/src/caseconvert.py
new file mode 100644
index 0000000..0b0b57b
--- /dev/null
+++ b/src/caseconvert.py
@@ -0,0 +1,56 @@
+# python3 script to generate caseconvert.h.
+# It uses difference in lower() and upper() on a character to make a mapping
+# that maps a given unicode point to either a lower or upper case UTF-8 character.
+# this also include multi-byte characters.
+
+import codecs
+
+toupper = {}
+tolower = {}
+
+def writeMapping(file,mapping):
+ for k,v in sorted(mapping.items()):
+ file.write(u" case %s /* %s */: return u8\"%s\" /* %s */;\n" %
+ (hex(ord(k[0])),k,v,",".join("0x{:02x}".format(ord(c)) for c in v)))
+
+# create mappings of characters whose upper and lower case differs
+for codeValue in range(0,0x1FFFF):
+ s = chr(codeValue)
+ sl = s.lower()
+ su = s.upper()
+ if ord(s[0])!=ord(sl[0]):
+ tolower[s]=sl
+ if ord(s[0])!=ord(su[0]):
+ toupper[s]=su
+
+file = codecs.open("caseconvert.h", "w", "utf-8")
+file.write(r'''/** This file is generated by python3 caseconvert.py. DO NOT EDIT! */
+
+#ifndef CASECONVERT_H
+#define CASECONVERT_H
+
+#include <cstdint>
+#include <string>
+
+inline const char *convertUnicodeToUpper(uint32_t code)
+{
+ switch(code)
+ {
+''');
+writeMapping(file,toupper);
+file.write(r''' default: return nullptr;
+ }
+}
+
+inline const char *convertUnicodeToLower(uint32_t code)
+{
+ switch(code)
+ {
+''');
+writeMapping(file,tolower);
+file.write(r''' default: return nullptr;
+ }
+}
+
+#endif
+''');
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index 045b0aa..431215b 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -19,6 +19,7 @@
#include "membername.h"
#include "filename.h"
#include "tooltip.h"
+#include "utf8.h"
#endif
//--------------------------------------------------------------------------
@@ -73,18 +74,14 @@ static QCString detab(const QCString &s)
col++;
break;
default: // non-whitespace => update minIndent
- out.addChar(c);
- if (c<0 && i<size) // multibyte sequence
{
- out.addChar(data[i++]); // >= 2 bytes
- if (((uchar)c&0xE0)==0xE0 && i<size)
- {
- out.addChar(data[i++]); // 3 bytes
- }
- if (((uchar)c&0xF0)==0xF0 && i<size)
+ int bytes = getUTF8CharNumBytes(c);
+ for (int j=0;j<bytes-1 && c!=0; j++)
{
- out.addChar(data[i++]); // 4 byres
+ out.addChar(c);
+ c = data[i++];
}
+ out.addChar(c);
}
if (col<minIndent) minIndent=col;
col++;
diff --git a/src/definition.cpp b/src/definition.cpp
index 03ca911..1ad7b98 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1,8 +1,6 @@
/******************************************************************************
*
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ * Copyright (C) 1997-2021 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -51,7 +49,7 @@
#include "pagedef.h"
#include "bufstr.h"
#include "reflist.h"
-
+#include "utf8.h"
//-----------------------------------------------------------------------------------------
@@ -503,20 +501,6 @@ void DefinitionImpl::setDocumentation(const char *d,const char *docFile,int docL
_setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
}
-#define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
-
-// do a UTF-8 aware search for the last real character and return TRUE
-// if that is a multibyte one.
-static bool lastCharIsMultibyte(const QCString &s)
-{
- uint l = s.length();
- int p = 0;
- int pp = -1;
- while ((p=nextUtf8CharPosition(s,l,(uint)p))<(int)l) pp=p;
- if (pp==-1 || ((uchar)s[pp])<0x80) return FALSE;
- return TRUE;
-}
-
void DefinitionImpl::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
static QCString outputLanguage = Config_getEnum(OUTPUT_LANGUAGE);
@@ -536,7 +520,7 @@ void DefinitionImpl::_setBriefDescription(const char *b,const char *briefFile,in
{
case '.': case '!': case '?': case '>': case ':': case ')': break;
default:
- if (uni_isupper(brief.at(0)) && !lastCharIsMultibyte(brief)) brief+='.';
+ if (isUTF8CharUpperCase(brief.str(),0) && !lastUTF8CharIsMultibyte(brief.str())) brief+='.';
break;
}
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 2a7155a..59d4868 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -51,6 +51,7 @@
#include "growbuf.h"
#include "fileinfo.h"
#include "dir.h"
+#include "utf8.h"
//#define DBG_HTML(x) x;
#define DBG_HTML(x)
@@ -585,7 +586,7 @@ void HtmlCodeGenerator::codify(const char *str)
}
else
{
- p=writeUtf8Char(m_t,p-1);
+ p=writeUTF8Char(m_t,p-1);
m_col++;
}
}
diff --git a/src/index.cpp b/src/index.cpp
index 9e91b3a..ded45a9 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -47,6 +47,7 @@
#include "namespacedef.h"
#include "filename.h"
#include "tooltip.h"
+#include "utf8.h"
#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
@@ -2052,13 +2053,12 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
if (cd->getLanguage()==SrcLangExt_VHDL && !((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS ))// no architecture
continue;
+ // get the first UTF8 character (after the part that should be ignored)
int index = getPrefixIndex(cd->className());
- //printf("name=%s index=%d %d\n",cd->className().data(),index,cd->protection());
- char charStr[MAX_UTF8_CHAR_SIZE];
- if (getUtf8Char(cd->className().data()+index,charStr,CaseModifier::ToUpper)>0)
- // get the first UTF8 character (after the part that should be ignored)
+ std::string letter = getUTF8CharAt(cd->className().str(),index);
+ if (!letter.empty())
{
- indexLettersUsed.insert(charStr);
+ indexLettersUsed.insert(convertUTF8ToUpper(letter));
}
}
}
@@ -2092,12 +2092,13 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
- int index = getPrefixIndex(cd->className());
- char charStr[MAX_UTF8_CHAR_SIZE];
- if (getUtf8Char(cd->className().data()+index,charStr,CaseModifier::ToUpper)>0)
- // get the first UTF8 character (after the part that should be ignored)
+ QCString className = cd->className();
+ int index = getPrefixIndex(className);
+ std::string letter = getUTF8CharAt(className.str(),index);
+ if (!letter.empty())
{
- auto it = classesByLetter.find(charStr);
+ letter = convertUTF8ToUpper(letter);
+ auto it = classesByLetter.find(letter);
if (it!=classesByLetter.end()) // add class to the existing list
{
it->second.push_back(cd.get());
@@ -2105,8 +2106,7 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
else // new entry
{
classesByLetter.insert(
- std::make_pair(std::string(charStr),
- std::vector<const ClassDef*>({ cd.get() })));
+ std::make_pair(letter, std::vector<const ClassDef*>({ cd.get() })));
}
}
}
@@ -2633,9 +2633,10 @@ void addClassMemberNameToIndex(const MemberDef *md)
{
QCString n = md->name();
int index = getPrefixIndex(n);
- char letter[MAX_UTF8_CHAR_SIZE];
- if (getUtf8Char(n.data()+index,letter,CaseModifier::ToLower)>0)
+ std::string letter = getUTF8CharAt(n.str(),index);
+ if (!letter.empty())
{
+ letter = convertUTF8ToLower(letter);
bool isFriendToHide = hideFriendCompounds &&
(QCString(md->typeString())=="friend class" ||
QCString(md->typeString())=="friend struct" ||
@@ -2711,9 +2712,10 @@ void addNamespaceMemberNameToIndex(const MemberDef *md)
{
QCString n = md->name();
int index = getPrefixIndex(n);
- char letter[MAX_UTF8_CHAR_SIZE];
- if (getUtf8Char(n.data()+index,letter,CaseModifier::ToLower)>0)
+ std::string letter = getUTF8CharAt(n.str(),index);
+ if (!letter.empty())
{
+ letter = convertUTF8ToLower(letter);
if (!md->isEnumValue() || (md->getEnumScope() && !md->getEnumScope()->isStrong()))
{
MemberIndexMap_add(g_namespaceIndexLetterUsed[NMHL_All],letter,md);
@@ -2778,9 +2780,10 @@ void addFileMemberNameToIndex(const MemberDef *md)
{
QCString n = md->name();
int index = getPrefixIndex(n);
- char letter[MAX_UTF8_CHAR_SIZE];
- if (getUtf8Char(n.data()+index,letter,CaseModifier::ToLower)>0)
+ std::string letter = getUTF8CharAt(n.str(),index);
+ if (!letter.empty())
{
+ letter = convertUTF8ToLower(letter);
if (!md->isEnumValue() || (md->getEnumScope() && !md->getEnumScope()->isStrong()))
{
MemberIndexMap_add(g_fileIndexLetterUsed[FMHL_All],letter,md);
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index f9b78f0..300af19 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -44,6 +44,7 @@
#include "resourcemgr.h"
#include "portable.h"
#include "fileinfo.h"
+#include "utf8.h"
static QCString g_header;
static QCString g_footer;
@@ -117,26 +118,15 @@ void LatexCodeGenerator::codify(const char *str)
#undef COPYCHAR
// helper macro to copy a single utf8 character, dealing with multibyte chars.
#define COPYCHAR() do { \
- if (lresult < (i + 5)) \
+ int bytes = getUTF8CharNumBytes(c); \
+ if (lresult < (i + bytes + 1)) \
{ \
lresult += 512; \
result = (signed char *)realloc(result, lresult); \
} \
- result[i++]=c; p++; \
- if (c<0) /* multibyte utf-8 character */ \
+ for (int j=0; j<bytes && *p; j++) \
{ \
- /* 1xxx.xxxx: >=2 byte character */ \
result[i++]=*p++; \
- if (((uchar)c&0xE0)==0xE0) \
- { \
- /* 111x.xxxx: >=3 byte character */ \
- result[i++]=*p++; \
- } \
- if (((uchar)c&0xF0)==0xF0) \
- { \
- /* 1111.xxxx: 4 byte character */ \
- result[i++]=*p++; \
- } \
} \
m_col++; \
} while(0)
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 51fc598..2c26553 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -30,6 +30,7 @@
#include "mandocvisitor.h"
#include "language.h"
#include "dir.h"
+#include "utf8.h"
static QCString getExtension()
{
@@ -332,7 +333,7 @@ void ManGenerator::codify(const char *str)
case '\n': t << "\n"; m_firstCol=TRUE; m_col=0; break;
case '\\': t << "\\"; m_col++; break;
case '\"': // no break!
- default: p=writeUtf8Char(t,p-1); m_firstCol=FALSE; m_col++; break;
+ default: p=writeUTF8Char(t,p-1); m_firstCol=FALSE; m_col++; break;
}
}
//printf("%s",str);fflush(stdout);
diff --git a/src/markdown.cpp b/src/markdown.cpp
index ceba79d..277777a 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -50,6 +50,7 @@
#include "portable.h"
#include "regex.h"
#include "fileinfo.h"
+#include "utf8.h"
#if !defined(NDEBUG)
#define ENABLE_TRACING
@@ -2657,23 +2658,21 @@ QCString Markdown::detab(const QCString &s,int &refIndent)
if (c<0 && i<size) // multibyte sequence
{
// special handling of the UTF-8 nbsp character 0xC2 0xA0
- if ((uchar)c == 0xC2 && (uchar)(data[i]) == 0xA0)
+ int nb = isUTF8NonBreakableSpace(data);
+ if (nb>0)
{
m_out.addStr(g_doxy_nsbp);
- i++;
+ i+=nb-1;
}
else
{
- m_out.addChar(c);
- m_out.addChar(data[i++]); // >= 2 bytes
- if (((uchar)c&0xE0)==0xE0 && i<size)
- {
- m_out.addChar(data[i++]); // 3 bytes
- }
- if (((uchar)c&0xF0)==0xF0 && i<size)
+ int bytes = getUTF8CharNumBytes(c);
+ for (int j=0;j<bytes-1 && c;j++)
{
- m_out.addChar(data[i++]); // 4 byres
+ m_out.addChar(c);
+ c = data[i++];
}
+ m_out.addChar(c);
}
}
else
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 0f96cad..63e6377 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -46,6 +46,7 @@
#include "filename.h"
#include "namespacedef.h"
#include "dir.h"
+#include "utf8.h"
//#define DBG_RTF(x) x;
@@ -1809,7 +1810,7 @@ void RTFGenerator::codify(const char *str)
case '{': t << "\\{"; m_col++; break;
case '}': t << "\\}"; m_col++; break;
case '\\': t << "\\\\"; m_col++; break;
- default: p=(const unsigned char *)writeUtf8Char(t,(const char *)p-1); m_col++; break;
+ default: p=(const unsigned char *)writeUTF8Char(t,(const char *)p-1); m_col++; break;
}
}
}
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index c0d3c02..cff7824 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -34,6 +34,7 @@
#include "resourcemgr.h"
#include "namespacedef.h"
#include "classdef.h"
+#include "utf8.h"
//---------------------------------------------------------------------------------------------
// the following part is for the server based search engine
@@ -550,28 +551,7 @@ QCString searchName(const Definition *d)
QCString searchId(const Definition *d)
{
QCString s = searchName(d);
- int c;
- uint i;
- QCString result;
- for (i=0;i<s.length();i++)
- {
- c=s.at(i);
- if (c>0x7f || c<0) // part of multibyte character
- {
- result+=(char)c;
- }
- else if (isalnum(c)) // simply alpha numerical character
- {
- result+=(char)tolower(c);
- }
- else // other 'unprintable' characters
- {
- char val[4];
- sprintf(val,"_%02x",(uchar)c);
- result+=val;
- }
- }
- return result;
+ return convertUTF8ToLower(s.str());
}
@@ -642,11 +622,10 @@ static void addMemberToSearchIndex(const MemberDef *md)
)
)
{
- QCString n = md->name();
- if (!n.isEmpty())
+ std::string n = md->name().str();
+ if (!n.empty())
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(n,letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(n,0));
bool isFriendToHide = hideFriendCompounds &&
(QCString(md->typeString())=="friend class" ||
QCString(md->typeString())=="friend struct" ||
@@ -704,11 +683,10 @@ static void addMemberToSearchIndex(const MemberDef *md)
)
)
{
- QCString n = md->name();
- if (!n.isEmpty())
+ std::string n = md->name().str();
+ if (!n.empty())
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(n,letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(n,0));
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,md);
if (md->isFunction())
@@ -754,8 +732,7 @@ void createJavaScriptSearchIndex()
// index classes
for (const auto &cd : *Doxygen::classLinkedMap)
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(cd->localName(),letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(cd->localName().str(),0));
if (cd->isLinkable())
{
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,cd.get());
@@ -788,8 +765,7 @@ void createJavaScriptSearchIndex()
// index namespaces
for (const auto &nd : *Doxygen::namespaceLinkedMap)
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(nd->name(),letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(nd->name().str(),0));
if (nd->isLinkable())
{
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,nd.get());
@@ -802,8 +778,7 @@ void createJavaScriptSearchIndex()
{
for (const auto &fd : *fn)
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(fd->name(),letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(fd->name().str(),0));
if (fd->isLinkable())
{
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,fd.get());
@@ -843,11 +818,10 @@ void createJavaScriptSearchIndex()
{
if (gd->isLinkable())
{
- QCString title = gd->groupTitle();
- if (!title.isEmpty()) // TODO: able searching for all word in the title
+ std::string title = gd->groupTitle();
+ if (!title.empty()) // TODO: able searching for all word in the title
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(title,letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(title,0));
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,gd.get());
g_searchIndexInfo[SEARCH_INDEX_GROUPS].add(letter,gd.get());
}
@@ -859,11 +833,10 @@ void createJavaScriptSearchIndex()
{
if (pd->isLinkable())
{
- QCString title = pd->title();
- if (!title.isEmpty())
+ std::string title = pd->title().str();
+ if (!title.empty())
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(title,letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(title,0));
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,pd.get());
g_searchIndexInfo[SEARCH_INDEX_PAGES].add(letter,pd.get());
}
@@ -871,11 +844,10 @@ void createJavaScriptSearchIndex()
}
if (Doxygen::mainPage)
{
- QCString title = Doxygen::mainPage->title();
- if (!title.isEmpty())
+ std::string title = Doxygen::mainPage->title().str();
+ if (!title.empty())
{
- char letter[MAX_UTF8_CHAR_SIZE];
- getUtf8Char(title,letter,CaseModifier::ToLower);
+ std::string letter = convertUTF8ToLower(getUTF8CharAt(title,0));
g_searchIndexInfo[SEARCH_INDEX_ALL].add(letter,Doxygen::mainPage.get());
g_searchIndexInfo[SEARCH_INDEX_PAGES].add(letter,Doxygen::mainPage.get());
}
diff --git a/src/template.cpp b/src/template.cpp
index 9bfeb23..9af1d60 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -30,6 +30,7 @@
#include "regex.h"
#include "fileinfo.h"
#include "dir.h"
+#include "utf8.h"
#define ENABLE_TRACING 0
@@ -1106,7 +1107,10 @@ class FilterAlphaIndex
{
TemplateVariant v = s->get(attribName);
int index = getPrefixIndex(v.toString());
- return getUtf8CodeToUpper(v.toString(),index);
+ return getUnicodeForUTF8CharAt(
+ convertUTF8ToUpper(
+ getUTF8CharAt(v.toString().str(),index)
+ ),0);
}
public:
diff --git a/src/utf8.cpp b/src/utf8.cpp
new file mode 100644
index 0000000..a71ede8
--- /dev/null
+++ b/src/utf8.cpp
@@ -0,0 +1,208 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2021 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include <sstream>
+
+#include "utf8.h"
+#include "caseconvert.h"
+
+int getUTF8CharNumBytes(char c)
+{
+ int num=1;
+ unsigned char uc = static_cast<unsigned char>(c);
+ if (uc>=0x80u) // multibyte character
+ {
+ if ((uc&0xE0u)==0xC0u)
+ {
+ num=2; // 110x.xxxx: 2 byte character
+ }
+ if ((uc&0xF0u)==0xE0u)
+ {
+ num=3; // 1110.xxxx: 3 byte character
+ }
+ if ((uc&0xF8u)==0xF0u)
+ {
+ num=4; // 1111.0xxx: 4 byte character
+ }
+ if ((uc&0xFCu)==0xF8u)
+ {
+ num=5; // 1111.10xx: 5 byte character
+ }
+ if ((uc&0xFEu)==0xFCu)
+ {
+ num=6; // 1111.110x: 6 byte character
+ }
+ }
+ return num;
+}
+
+//! Decodes a given input of utf8 data to a unicode code point
+//! given the number of bytes it's made of
+static inline uint32_t decode_utf8( const char* data , int numBytes ) noexcept
+{
+ uint32_t cp = (unsigned char)*data;
+ if (numBytes>1)
+ {
+ cp &= 0x7F >> numBytes; // Mask out the header bits
+ for (int i=1 ; i<numBytes ; i++)
+ {
+ cp = (cp<<6) | ((unsigned char)data[i]&0x3F);
+ }
+ }
+ return cp;
+}
+
+static inline uint32_t convertUTF8CharToUnicode(const char *s,size_t bytesLeft,size_t &len)
+{
+ if (s==0 || bytesLeft==0)
+ {
+ len=0;
+ return 0;
+ }
+ unsigned char uc = static_cast<unsigned char>(*s);
+ switch (bytesLeft)
+ {
+ default:
+ if ((uc&0xFEu)==0xFCu)// 1111110X six bytes
+ {
+ len=6;
+ return decode_utf8(s,len);
+ }
+ // fall through
+ case 5:
+ if ((uc&0xFCu)==0xF8u) // 111110XX five bytes
+ {
+ len=5;
+ return decode_utf8(s,len);
+ }
+ // fall through
+ case 4:
+ if ((uc&0xF8u)==0xF0u) // 11110XXX four bytes
+ {
+ len=4;
+ return decode_utf8(s,len);
+ }
+ // fall through
+ case 3:
+ if ((uc&0xF0u)==0xE0u) // 1110XXXX three bytes
+ {
+ len=3;
+ return decode_utf8(s,len);
+ }
+ // fall through
+ case 2:
+ if ((uc&0xE0u)==0xC0u) // 110XXXXX two bytes
+ {
+ len=2;
+ return decode_utf8(s,len);
+ }
+ // fall through
+ case 1:
+ {
+ len=1;
+ return uc;
+ }
+ }
+ len=0;
+ return 0;
+}
+
+std::string getUTF8CharAt(const std::string &input,size_t pos)
+{
+ if (input.length()<=pos) return std::string();
+ int numBytes=getUTF8CharNumBytes(input[pos]);
+ if (input.length()<pos+numBytes) return std::string();
+ return input.substr(pos,pos+numBytes);
+}
+
+uint32_t getUnicodeForUTF8CharAt(const std::string &input,size_t pos)
+{
+ std::string charS = getUTF8CharAt(input,pos);
+ size_t len;
+ return convertUTF8CharToUnicode(charS.c_str(),charS.length(),len);
+}
+
+static inline std::string caseConvert(const std::string &input,
+ const char *(*conversionFunc)(uint32_t code))
+{
+ uint32_t code;
+ std::stringstream result;
+ size_t len;
+ size_t bytesLeft = input.length();
+ const char *p = input.c_str();
+ while ((code=convertUTF8CharToUnicode(p,bytesLeft,len)))
+ {
+ const char *conv = conversionFunc(code);
+ if (conv==nullptr) // no difference between lower and upper case
+ {
+ result << std::string(p,len);
+ }
+ else // replace the input character with the conversion result
+ {
+ result << conv;
+ }
+ p+=len;
+ bytesLeft-=len;
+ }
+ return result.str();
+}
+
+std::string convertUTF8ToLower(const std::string &input)
+{
+ return caseConvert(input,convertUnicodeToLower);
+}
+
+std::string convertUTF8ToUpper(const std::string &input)
+{
+ return caseConvert(input,convertUnicodeToUpper);
+}
+
+const char *writeUTF8Char(std::ostream &t,const char *s)
+{
+ if (s==0) return 0;
+ int len = getUTF8CharNumBytes(*s);
+ for (int i=0;i<len;i++)
+ {
+ if (s[i]==0) // detect premature end of string (due to invalid UTF8 char)
+ {
+ len=i;
+ }
+ }
+ t.write(s,len);
+ return s+len;
+}
+
+bool lastUTF8CharIsMultibyte(const std::string &input)
+{
+ // last byte is part of a multibyte UTF8 char if bit 8 is set and bit 7 is not
+ return !input.empty() && (((unsigned char)input[input.length()-1])&0xC0)==0x80;
+}
+
+bool isUTF8CharUpperCase(const std::string &input,size_t pos)
+{
+ if (input.length()<=pos) return false;
+ size_t len;
+ // turn the UTF8 character at position pos into a unicode value
+ uint32_t code = convertUTF8CharToUnicode(input.c_str()+pos,input.length()-pos,len);
+ // check if the character can be converted to lower case, if so it was an upper case character
+ return convertUnicodeToLower(code)!=nullptr;
+}
+
+int isUTF8NonBreakableSpace(const char *input)
+{
+ return (static_cast<unsigned char>(input[0])==0xC2 &&
+ static_cast<unsigned char>(input[1])==0xA0) ? 2 : 0;
+}
+
diff --git a/src/utf8.h b/src/utf8.h
new file mode 100644
index 0000000..c4c8aad
--- /dev/null
+++ b/src/utf8.h
@@ -0,0 +1,71 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2021 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef UTF8_H
+#define UTF8_H
+
+#include <cstdint>
+#include <string>
+#include <iostream>
+
+/** @file
+ * @brief Various UTF8 related helper functions.
+ *
+ * See https://en.wikipedia.org/wiki/UTF-8 for details on UTF8 encoding.
+ */
+
+
+/** Converts the input string into a lower case version, also taking into account
+ * non-ASCII characters that has a lower case variant.
+ */
+std::string convertUTF8ToLower(const std::string &input);
+
+/** Converts the input string into a upper case version, also taking into account
+ * non-ASCII characters that has a upper case variant.
+ */
+std::string convertUTF8ToUpper(const std::string &input);
+
+/** Returns the UTF8 character found at byte position pos in the input string.
+ * The resulting string can be a multi byte sequence.
+ */
+std::string getUTF8CharAt(const std::string &input,size_t pos);
+
+/** Returns the 32bit Unicode value matching character at byte position pos in
+ * the UTF8 encoded input.
+ */
+uint32_t getUnicodeForUTF8CharAt(const std::string &input,size_t pos);
+
+/** Returns the number of bytes making up a single UTF8 character given the first byte
+ * in the sequence.
+ */
+int getUTF8CharNumBytes(char firstByte);
+
+/** Writes the UTF8 character pointed to by s to stream t and returns a pointer
+ * to the next character.
+ */
+const char *writeUTF8Char(std::ostream &t,const char *s);
+
+/** Returns true iff the last character in input is a multibyte character. */
+bool lastUTF8CharIsMultibyte(const std::string &input);
+
+/** Returns true iff the input string at byte position pos holds an upper case character. */
+bool isUTF8CharUpperCase(const std::string &input,size_t pos);
+
+/** Check if the first character pointed at by input is a non-breakable whitespace character.
+ * Returns the byte size of the character if there is match or 0 if not.
+ */
+int isUTF8NonBreakableSpace(const char *input);
+
+#endif
diff --git a/src/util.cpp b/src/util.cpp
index b2f8e56..ccae0de 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -71,6 +71,7 @@
#include "symbolresolver.h"
#include "fileinfo.h"
#include "dir.h"
+#include "utf8.h"
#define ENABLE_TRACINGSUPPORT 0
@@ -3474,6 +3475,7 @@ bool hasVisibleRoot(const BaseClassList &bcl)
//----------------------------------------------------------------------
+#if 0
// copies the next UTF8 character from input stream into buffer ids
// returns the size of the character in bytes (or 0 if it is invalid)
// the character itself will be copied as a UTF-8 encoded string to ids.
@@ -3533,7 +3535,7 @@ int getUtf8Char(const char *input,char ids[MAX_UTF8_CHAR_SIZE],CaseModifier modi
}
return inputLen;
}
-
+#endif
// note that this function is not reentrant due to the use of static growBuf!
QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore)
@@ -3579,20 +3581,20 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor
default:
if (c<0)
{
- char ids[MAX_UTF8_CHAR_SIZE];
bool doEscape = true;
if (allowUnicodeNames)
{
- int charLen = getUtf8Char(p-1,ids);
+ int charLen = getUTF8CharNumBytes(c);
if (charLen>0)
{
- growBuf.addStr(ids);
- p+=charLen-1;
+ growBuf.addStr(p-1,charLen);
+ p+=charLen;
doEscape = false;
}
}
if (doEscape) // not a valid unicode char or escaping needed
{
+ char ids[5];
unsigned char id = (unsigned char)c;
ids[0]='_';
ids[1]='x';
@@ -5695,67 +5697,14 @@ bool checkIfTypedef(const Definition *scope,const FileDef *fileScope,const char
return FALSE;
}
-const char *writeUtf8Char(std::ostream &t,const char *s)
-{
- const char *p = s;
- uchar c=(uchar)*s++;
- if (c>=0x80) // multibyte character
- {
- if (((uchar)c&0xE0)==0xC0)
- {
- s++; // 11xx.xxxx: >=2 byte character
- }
- if (((uchar)c&0xF0)==0xE0)
- {
- s++; // 111x.xxxx: >=3 byte character
- }
- if (((uchar)c&0xF8)==0xF0)
- {
- s++; // 1111.xxxx: >=4 byte character
- }
- if (((uchar)c&0xFC)==0xF8)
- {
- s++; // 1111.1xxx: >=5 byte character
- }
- if (((uchar)c&0xFE)==0xFC)
- {
- s++; // 1111.1xxx: 6 byte character
- }
- }
- t.write(p,s-p);
- return s;
-}
-
-int nextUtf8CharPosition(const QCString &utf8Str,uint len,uint startPos)
+static int nextUTF8CharPosition(const QCString &utf8Str,uint len,uint startPos)
{
- int bytes=1;
if (startPos>=len) return len;
uchar c = (uchar)utf8Str[startPos];
- if (c>=0x80) // multibyte utf-8 character
- {
- if (((uchar)c&0xE0)==0xC0)
- {
- bytes+=1; // 11xx.xxxx: >=2 byte character
- }
- if (((uchar)c&0xF0)==0xE0)
- {
- bytes+=2; // 111x.xxxx: >=3 byte character
- }
- if (((uchar)c&0xF8)==0xF0)
- {
- bytes+=3; // 1111.xxxx: >=4 byte character
- }
- if (((uchar)c&0xFC)==0xF8)
- {
- bytes+=4; // 1111.1xxx: >=5 byte character
- }
- if (((uchar)c&0xFE)==0xFC)
- {
- bytes+=5; // 1111.1xxx: 6 byte character
- }
- }
- else if (c=='&') // skip over character entities
+ int bytes=getUTF8CharNumBytes(c);
+ if (c=='&') // skip over character entities
{
+ bytes=1;
int (*matcher)(int) = 0;
c = (uchar)utf8Str[startPos+bytes];
if (c=='#') // numerical entity?
@@ -5809,14 +5758,14 @@ QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
int i=0;
int charCnt=0;
int l=result.length();
- while ((i=nextUtf8CharPosition(result,l,i))<l)
+ while ((i=nextUTF8CharPosition(result,l,i))<l)
{
charCnt++;
if (charCnt>=80) break;
}
if (charCnt>=80) // try to truncate the string
{
- while ((i=nextUtf8CharPosition(result,l,i))<l && charCnt<100)
+ while ((i=nextUTF8CharPosition(result,l,i))<l && charCnt<100)
{
charCnt++;
if (result.at(i)==',' ||
@@ -6783,6 +6732,7 @@ bool fileVisibleInIndex(const FileDef *fd,bool &genSourceFile)
//--------------------------------------------------------------------------------------
+#if 0
/*! @brief Get one unicode character as an unsigned integer from utf-8 string
*
* @param s utf-8 encoded string
@@ -6847,6 +6797,9 @@ uint getUtf8CodeToUpper( const QCString& s, int idx )
const uint v = getUtf8Code( s, idx );
return v < 0x7f ? toupper( v ) : v;
}
+#endif
+
+
//--------------------------------------------------------------------------------------
//
diff --git a/src/util.h b/src/util.h
index 7f5513d..d8f77af 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,8 +1,6 @@
/******************************************************************************
*
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ * Copyright (C) 1997-2021 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -430,19 +428,6 @@ QCString getDotImageExtension();
bool fileVisibleInIndex(const FileDef *fd,bool &genSourceFile);
-const int MAX_UTF8_CHAR_LEN = 4;
-const int MAX_UTF8_CHAR_SIZE = MAX_UTF8_CHAR_LEN+1; // include 0 terminator
-enum class CaseModifier
-{
- None,
- ToUpper,
- ToLower
-};
-int getUtf8Char(const char *input,char ids[MAX_UTF8_CHAR_SIZE],CaseModifier modifier=CaseModifier::None);
-uint getUtf8Code( const QCString& s, int idx );
-uint getUtf8CodeToLower( const QCString& s, int idx );
-uint getUtf8CodeToUpper( const QCString& s, int idx );
-
QCString extractDirection(QCString &docs);
void convertProtectionLevel(
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 512405c..9f74b69 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -45,6 +45,7 @@
#include "htmlentity.h"
#include "resourcemgr.h"
#include "dir.h"
+#include "utf8.h"
// no debug info
#define XML_DB(x) do {} while(0)
@@ -138,7 +139,7 @@ inline void writeXMLCodeString(std::ostream &t,const char *s, int &col)
// encode invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
t << "<sp value=\"" << int(c) << "\"/>";
break;
- default: s=writeUtf8Char(t,s-1); col++; break;
+ default: s=writeUTF8Char(t,s-1); col++; break;
}
}
}
diff --git a/templates/html/search.js b/templates/html/search.js
index 08d1c06..fb226f7 100644
--- a/templates/html/search.js
+++ b/templates/html/search.js
@@ -335,15 +335,11 @@ function SearchBox(name, resultsPath, inFrame, label, extension)
var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
var code = searchValue.toLowerCase().charCodeAt(0);
- var idxChar = searchValue.substr(0, 1);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
{
idxChar = searchValue.substr(0, 2);
}
- else if (code <128)
- {
- idxChar = idxChar.toLowerCase();
- }
var resultsPage;
var resultsPageWithSearch;