asciifolding/lib.rs
1/// Converts characters above ASCII to their ASCII equivalents.
2/// For example, accents are removed from accented characters.
3pub fn fold_to_ascii(input: &str) -> String {
4 let mut output = String::with_capacity(input.len());
5
6 for c in input.chars() {
7 // Quick test: if it's not in range then just keep current character
8 if c.is_ascii() {
9 output.push(c);
10 continue;
11 }
12
13 match c {
14 '\u{00C0}'| // À [LATIN CAPITAL LETTER A WITH GRAVE]
15 '\u{00C1}'| // Á [LATIN CAPITAL LETTER A WITH ACUTE]
16 '\u{00C2}'| // Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
17 '\u{00C3}'| // Ã [LATIN CAPITAL LETTER A WITH TILDE]
18 '\u{00C4}'| // Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
19 '\u{00C5}'| // Å [LATIN CAPITAL LETTER A WITH RING ABOVE]
20 '\u{0100}'| // Ā [LATIN CAPITAL LETTER A WITH MACRON]
21 '\u{0102}'| // Ă [LATIN CAPITAL LETTER A WITH BREVE]
22 '\u{0104}'| // Ą [LATIN CAPITAL LETTER A WITH OGONEK]
23 '\u{018F}'| // Ə http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
24 '\u{01CD}'| // Ǎ [LATIN CAPITAL LETTER A WITH CARON]
25 '\u{01DE}'| // Ǟ [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
26 '\u{01E0}'| // Ǡ [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
27 '\u{01FA}'| // Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
28 '\u{0200}'| // Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
29 '\u{0202}'| // Ȃ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
30 '\u{0226}'| // Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
31 '\u{023A}'| // Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
32 '\u{1D00}'| // ᴀ [LATIN LETTER SMALL CAPITAL A]
33 '\u{1E00}'| // Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
34 '\u{1EA0}'| // Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
35 '\u{1EA2}'| // Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
36 '\u{1EA4}'| // Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
37 '\u{1EA6}'| // Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
38 '\u{1EA8}'| // Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
39 '\u{1EAA}'| // Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
40 '\u{1EAC}'| // Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
41 '\u{1EAE}'| // Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
42 '\u{1EB0}'| // Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
43 '\u{1EB2}'| // Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
44 '\u{1EB4}'| // Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
45 '\u{1EB6}'| // Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
46 '\u{24B6}'| // Ⓐ [CIRCLED LATIN CAPITAL LETTER A]
47 '\u{FF21}' // A [FULLWIDTH LATIN CAPITAL LETTER A]
48 => {
49 output.push('A');
50 },
51 '\u{00E0}'| // à [LATIN SMALL LETTER A WITH GRAVE]
52 '\u{00E1}'| // á [LATIN SMALL LETTER A WITH ACUTE]
53 '\u{00E2}'| // â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
54 '\u{00E3}'| // ã [LATIN SMALL LETTER A WITH TILDE]
55 '\u{00E4}'| // ä [LATIN SMALL LETTER A WITH DIAERESIS]
56 '\u{00E5}'| // å [LATIN SMALL LETTER A WITH RING ABOVE]
57 '\u{0101}'| // ā [LATIN SMALL LETTER A WITH MACRON]
58 '\u{0103}'| // ă [LATIN SMALL LETTER A WITH BREVE]
59 '\u{0105}'| // ą [LATIN SMALL LETTER A WITH OGONEK]
60 '\u{01CE}'| // ǎ [LATIN SMALL LETTER A WITH CARON]
61 '\u{01DF}'| // ǟ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
62 '\u{01E1}'| // ǡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
63 '\u{01FB}'| // ǻ [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
64 '\u{0201}'| // ȁ [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
65 '\u{0203}'| // ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
66 '\u{0227}'| // ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
67 '\u{0250}'| // ɐ [LATIN SMALL LETTER TURNED A]
68 '\u{0259}'| // ə [LATIN SMALL LETTER SCHWA]
69 '\u{025A}'| // ɚ [LATIN SMALL LETTER SCHWA WITH HOOK]
70 '\u{1D8F}'| // ᶏ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
71 '\u{1D95}'| // ᶕ [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
72 '\u{1E01}'| // ạ [LATIN SMALL LETTER A WITH RING BELOW]
73 '\u{1E9A}'| // ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
74 '\u{1EA1}'| // ạ [LATIN SMALL LETTER A WITH DOT BELOW]
75 '\u{1EA3}'| // ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
76 '\u{1EA5}'| // ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
77 '\u{1EA7}'| // ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
78 '\u{1EA9}'| // ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
79 '\u{1EAB}'| // ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
80 '\u{1EAD}'| // ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
81 '\u{1EAF}'| // ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
82 '\u{1EB1}'| // ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
83 '\u{1EB3}'| // ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
84 '\u{1EB5}'| // ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
85 '\u{1EB7}'| // ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
86 '\u{2090}'| // ₐ [LATIN SUBSCRIPT SMALL LETTER A]
87 '\u{2094}'| // ₔ [LATIN SUBSCRIPT SMALL LETTER SCHWA]
88 '\u{24D0}'| // ⓐ [CIRCLED LATIN SMALL LETTER A]
89 '\u{2C65}'| // ⱥ [LATIN SMALL LETTER A WITH STROKE]
90 '\u{2C6F}'| // Ɐ [LATIN CAPITAL LETTER TURNED A]
91 '\u{FF41}' // a [FULLWIDTH LATIN SMALL LETTER A]
92 => {
93 output.push('a');
94 },
95 '\u{A732}' // Ꜳ [LATIN CAPITAL LETTER AA]
96 => {
97 output.push('A');
98 output.push('A');
99 },
100 '\u{00C6}'| // Æ [LATIN CAPITAL LETTER AE]
101 '\u{01E2}'| // Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
102 '\u{01FC}'| // Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
103 '\u{1D01}' // ᴁ [LATIN LETTER SMALL CAPITAL AE]
104 => {
105 output.push('A');
106 output.push('E');
107 },
108 '\u{A734}' // Ꜵ [LATIN CAPITAL LETTER AO]
109 => {
110 output.push('A');
111 output.push('O');
112 }
113 '\u{A736}' // Ꜷ [LATIN CAPITAL LETTER AU]
114 => {
115 output.push('A');
116 output.push('U');
117 }
118 '\u{A738}'| // Ꜹ [LATIN CAPITAL LETTER AV]
119 '\u{A73A}' // Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
120 => {
121 output.push('A');
122 output.push('V');
123 }
124 '\u{A73C}' // Ꜽ [LATIN CAPITAL LETTER AY]
125 => {
126 output.push('A');
127 output.push('Y');
128 }
129 '\u{249C}' // ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
130 => {
131 output.push('(');
132 output.push('a');
133 output.push(')');
134 }
135 '\u{A733}' // ꜳ [LATIN SMALL LETTER AA]
136 => {
137 output.push('a');
138 output.push('a');
139 }
140 '\u{00E6}'| // æ [LATIN SMALL LETTER AE]
141 '\u{01E3}'| // ǣ [LATIN SMALL LETTER AE WITH MACRON]
142 '\u{01FD}'| // ǽ [LATIN SMALL LETTER AE WITH ACUTE]
143 '\u{1D02}' // ᴂ [LATIN SMALL LETTER TURNED AE]
144 => {
145 output.push('a');
146 output.push('e');
147 }
148 '\u{A735}' // ꜵ [LATIN SMALL LETTER AO]
149 => {
150 output.push('a');
151 output.push('o');
152 }
153 '\u{A737}' // ꜷ [LATIN SMALL LETTER AU]
154 => {
155 output.push('a');
156 output.push('u');
157 }
158 '\u{A739}'| // ꜹ [LATIN SMALL LETTER AV]
159 '\u{A73B}' // ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
160 => {
161 output.push('a');
162 output.push('v');
163 }
164 '\u{A73D}' // ꜽ [LATIN SMALL LETTER AY]
165 => {
166 output.push('a');
167 output.push('y');
168 }
169 '\u{0181}'| // Ɓ [LATIN CAPITAL LETTER B WITH HOOK]
170 '\u{0182}'| // Ƃ [LATIN CAPITAL LETTER B WITH TOPBAR]
171 '\u{0243}'| // Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
172 '\u{0299}'| // ʙ [LATIN LETTER SMALL CAPITAL B]
173 '\u{1D03}'| // ᴃ [LATIN LETTER SMALL CAPITAL BARRED B]
174 '\u{1E02}'| // Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
175 '\u{1E04}'| // Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
176 '\u{1E06}'| // Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
177 '\u{24B7}'| // Ⓑ [CIRCLED LATIN CAPITAL LETTER B]
178 '\u{FF22}' // B [FULLWIDTH LATIN CAPITAL LETTER B]
179 => {
180 output.push('B');
181 }
182 '\u{0180}'| // ƀ [LATIN SMALL LETTER B WITH STROKE]
183 '\u{0183}'| // ƃ [LATIN SMALL LETTER B WITH TOPBAR]
184 '\u{0253}'| // ɓ [LATIN SMALL LETTER B WITH HOOK]
185 '\u{1D6C}'| // ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
186 '\u{1D80}'| // ᶀ [LATIN SMALL LETTER B WITH PALATAL HOOK]
187 '\u{1E03}'| // ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
188 '\u{1E05}'| // ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
189 '\u{1E07}'| // ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
190 '\u{24D1}'| // ⓑ [CIRCLED LATIN SMALL LETTER B]
191 '\u{FF42}' // b [FULLWIDTH LATIN SMALL LETTER B]
192 => {
193 output.push('b');
194 }
195 '\u{249D}' // ⒝ [PARENTHESIZED LATIN SMALL LETTER B]
196 => {
197 output.push('(');
198 output.push('b');
199 output.push(')');
200 }
201 '\u{00C7}'| // Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
202 '\u{0106}'| // Ć [LATIN CAPITAL LETTER C WITH ACUTE]
203 '\u{0108}'| // Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
204 '\u{010A}'| // Ċ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
205 '\u{010C}'| // Č [LATIN CAPITAL LETTER C WITH CARON]
206 '\u{0187}'| // Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
207 '\u{023B}'| // Ȼ [LATIN CAPITAL LETTER C WITH STROKE]
208 '\u{0297}'| // ʗ [LATIN LETTER STRETCHED C]
209 '\u{1D04}'| // ᴄ [LATIN LETTER SMALL CAPITAL C]
210 '\u{1E08}'| // Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
211 '\u{24B8}'| // Ⓒ [CIRCLED LATIN CAPITAL LETTER C]
212 '\u{FF23}' // C [FULLWIDTH LATIN CAPITAL LETTER C]
213 => {
214 output.push('C');
215 }
216 '\u{00E7}'| // ç [LATIN SMALL LETTER C WITH CEDILLA]
217 '\u{0107}'| // ć [LATIN SMALL LETTER C WITH ACUTE]
218 '\u{0109}'| // ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
219 '\u{010B}'| // ċ [LATIN SMALL LETTER C WITH DOT ABOVE]
220 '\u{010D}'| // č [LATIN SMALL LETTER C WITH CARON]
221 '\u{0188}'| // ƈ [LATIN SMALL LETTER C WITH HOOK]
222 '\u{023C}'| // ȼ [LATIN SMALL LETTER C WITH STROKE]
223 '\u{0255}'| // ɕ [LATIN SMALL LETTER C WITH CURL]
224 '\u{1E09}'| // ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
225 '\u{2184}'| // ↄ [LATIN SMALL LETTER REVERSED C]
226 '\u{24D2}'| // ⓒ [CIRCLED LATIN SMALL LETTER C]
227 '\u{A73E}'| // Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
228 '\u{A73F}'| // ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
229 '\u{FF43}' // c [FULLWIDTH LATIN SMALL LETTER C]
230 => {
231 output.push('c');
232 }
233 '\u{249E}' // ⒞ [PARENTHESIZED LATIN SMALL LETTER C]
234 => {
235 output.push('(');
236 output.push('c');
237 output.push(')');
238 }
239 '\u{00D0}'| // Ð [LATIN CAPITAL LETTER ETH]
240 '\u{010E}'| // Ď [LATIN CAPITAL LETTER D WITH CARON]
241 '\u{0110}'| // Đ [LATIN CAPITAL LETTER D WITH STROKE]
242 '\u{0189}'| // Ɖ [LATIN CAPITAL LETTER AFRICAN D]
243 '\u{018A}'| // Ɗ [LATIN CAPITAL LETTER D WITH HOOK]
244 '\u{018B}'| // Ƌ [LATIN CAPITAL LETTER D WITH TOPBAR]
245 '\u{1D05}'| // ᴅ [LATIN LETTER SMALL CAPITAL D]
246 '\u{1D06}'| // ᴆ [LATIN LETTER SMALL CAPITAL ETH]
247 '\u{1E0A}'| // Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
248 '\u{1E0C}'| // Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
249 '\u{1E0E}'| // Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
250 '\u{1E10}'| // Ḑ [LATIN CAPITAL LETTER D WITH CEDILLA]
251 '\u{1E12}'| // Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
252 '\u{24B9}'| // Ⓓ [CIRCLED LATIN CAPITAL LETTER D]
253 '\u{A779}'| // Ꝺ [LATIN CAPITAL LETTER INSULAR D]
254 '\u{FF24}' // D [FULLWIDTH LATIN CAPITAL LETTER D]
255 => {
256 output.push('D');
257 }
258 '\u{00F0}'| // ð [LATIN SMALL LETTER ETH]
259 '\u{010F}'| // ď [LATIN SMALL LETTER D WITH CARON]
260 '\u{0111}'| // đ [LATIN SMALL LETTER D WITH STROKE]
261 '\u{018C}'| // ƌ [LATIN SMALL LETTER D WITH TOPBAR]
262 '\u{0221}'| // ȡ [LATIN SMALL LETTER D WITH CURL]
263 '\u{0256}'| // ɖ [LATIN SMALL LETTER D WITH TAIL]
264 '\u{0257}'| // ɗ [LATIN SMALL LETTER D WITH HOOK]
265 '\u{1D6D}'| // ᵭ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
266 '\u{1D81}'| // ᶁ [LATIN SMALL LETTER D WITH PALATAL HOOK]
267 '\u{1D91}'| // ᶑ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
268 '\u{1E0B}'| // ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
269 '\u{1E0D}'| // ḍ [LATIN SMALL LETTER D WITH DOT BELOW]
270 '\u{1E0F}'| // ḏ [LATIN SMALL LETTER D WITH LINE BELOW]
271 '\u{1E11}'| // ḑ [LATIN SMALL LETTER D WITH CEDILLA]
272 '\u{1E13}'| // ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
273 '\u{24D3}'| // ⓓ [CIRCLED LATIN SMALL LETTER D]
274 '\u{A77A}'| // ꝺ [LATIN SMALL LETTER INSULAR D]
275 '\u{FF44}' // d [FULLWIDTH LATIN SMALL LETTER D]
276 => {
277 output.push('d');
278 }
279 '\u{01C4}'| // DŽ [LATIN CAPITAL LETTER DZ WITH CARON]
280 '\u{01F1}' // DZ [LATIN CAPITAL LETTER DZ]
281 => {
282 output.push('D');
283 output.push('Z');
284 }
285 '\u{01C5}'| // Dž [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
286 '\u{01F2}' // Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
287 => {
288 output.push('D');
289 output.push('z');
290 }
291 '\u{249F}' // ⒟ [PARENTHESIZED LATIN SMALL LETTER D]
292 => {
293 output.push('(');
294 output.push('d');
295 output.push(')');
296 }
297 '\u{0238}' // ȸ [LATIN SMALL LETTER DB DIGRAPH]
298 => {
299 output.push('d');
300 output.push('b');
301 }
302 '\u{01C6}'| // dž [LATIN SMALL LETTER DZ WITH CARON]
303 '\u{01F3}'| // dz [LATIN SMALL LETTER DZ]
304 '\u{02A3}'| // ʣ [LATIN SMALL LETTER DZ DIGRAPH]
305 '\u{02A5}' // ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
306 => {
307 output.push('d');
308 output.push('z');
309 }
310 '\u{00C8}'| // È [LATIN CAPITAL LETTER E WITH GRAVE]
311 '\u{00C9}'| // É [LATIN CAPITAL LETTER E WITH ACUTE]
312 '\u{00CA}'| // Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
313 '\u{00CB}'| // Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
314 '\u{0112}'| // Ē [LATIN CAPITAL LETTER E WITH MACRON]
315 '\u{0114}'| // Ĕ [LATIN CAPITAL LETTER E WITH BREVE]
316 '\u{0116}'| // Ė [LATIN CAPITAL LETTER E WITH DOT ABOVE]
317 '\u{0118}'| // Ę [LATIN CAPITAL LETTER E WITH OGONEK]
318 '\u{011A}'| // Ě [LATIN CAPITAL LETTER E WITH CARON]
319 '\u{018E}'| // Ǝ [LATIN CAPITAL LETTER REVERSED E]
320 '\u{0190}'| // Ɛ [LATIN CAPITAL LETTER OPEN E]
321 '\u{0204}'| // Ȅ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
322 '\u{0206}'| // Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
323 '\u{0228}'| // Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
324 '\u{0246}'| // Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
325 '\u{1D07}'| // ᴇ [LATIN LETTER SMALL CAPITAL E]
326 '\u{1E14}'| // Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
327 '\u{1E16}'| // Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
328 '\u{1E18}'| // Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
329 '\u{1E1A}'| // Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
330 '\u{1E1C}'| // Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
331 '\u{1EB8}'| // Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
332 '\u{1EBA}'| // Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
333 '\u{1EBC}'| // Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
334 '\u{1EBE}'| // Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
335 '\u{1EC0}'| // Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
336 '\u{1EC2}'| // Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
337 '\u{1EC4}'| // Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
338 '\u{1EC6}'| // Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
339 '\u{24BA}'| // Ⓔ [CIRCLED LATIN CAPITAL LETTER E]
340 '\u{2C7B}'| // ⱻ [LATIN LETTER SMALL CAPITAL TURNED E]
341 '\u{FF25}' // E [FULLWIDTH LATIN CAPITAL LETTER E]
342 => {
343 output.push('E');
344 }
345 '\u{00E8}'| // è [LATIN SMALL LETTER E WITH GRAVE]
346 '\u{00E9}'| // é [LATIN SMALL LETTER E WITH ACUTE]
347 '\u{00EA}'| // ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
348 '\u{00EB}'| // ë [LATIN SMALL LETTER E WITH DIAERESIS]
349 '\u{0113}'| // ē [LATIN SMALL LETTER E WITH MACRON]
350 '\u{0115}'| // ĕ [LATIN SMALL LETTER E WITH BREVE]
351 '\u{0117}'| // ė [LATIN SMALL LETTER E WITH DOT ABOVE]
352 '\u{0119}'| // ę [LATIN SMALL LETTER E WITH OGONEK]
353 '\u{011B}'| // ě [LATIN SMALL LETTER E WITH CARON]
354 '\u{01DD}'| // ǝ [LATIN SMALL LETTER TURNED E]
355 '\u{0205}'| // ȅ [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
356 '\u{0207}'| // ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
357 '\u{0229}'| // ȩ [LATIN SMALL LETTER E WITH CEDILLA]
358 '\u{0247}'| // ɇ [LATIN SMALL LETTER E WITH STROKE]
359 '\u{0258}'| // ɘ [LATIN SMALL LETTER REVERSED E]
360 '\u{025B}'| // ɛ [LATIN SMALL LETTER OPEN E]
361 '\u{025C}'| // ɜ [LATIN SMALL LETTER REVERSED OPEN E]
362 '\u{025D}'| // ɝ [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
363 '\u{025E}'| // ɞ [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
364 '\u{029A}'| // ʚ [LATIN SMALL LETTER CLOSED OPEN E]
365 '\u{1D08}'| // ᴈ [LATIN SMALL LETTER TURNED OPEN E]
366 '\u{1D92}'| // ᶒ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
367 '\u{1D93}'| // ᶓ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
368 '\u{1D94}'| // ᶔ [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
369 '\u{1E15}'| // ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
370 '\u{1E17}'| // ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
371 '\u{1E19}'| // ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
372 '\u{1E1B}'| // ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
373 '\u{1E1D}'| // ḝ [LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
374 '\u{1EB9}'| // ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
375 '\u{1EBB}'| // ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
376 '\u{1EBD}'| // ẽ [LATIN SMALL LETTER E WITH TILDE]
377 '\u{1EBF}'| // ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
378 '\u{1EC1}'| // ề [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
379 '\u{1EC3}'| // ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
380 '\u{1EC5}'| // ễ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
381 '\u{1EC7}'| // ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
382 '\u{2091}'| // ₑ [LATIN SUBSCRIPT SMALL LETTER E]
383 '\u{24D4}'| // ⓔ [CIRCLED LATIN SMALL LETTER E]
384 '\u{2C78}'| // ⱸ [LATIN SMALL LETTER E WITH NOTCH]
385 '\u{FF45}' // e [FULLWIDTH LATIN SMALL LETTER E]
386 => {
387 output.push('e');
388 }
389 '\u{24A0}' // ⒠ [PARENTHESIZED LATIN SMALL LETTER E]
390 => {
391 output.push('(');
392 output.push('e');
393 output.push(')');
394 }
395 '\u{0191}'| // Ƒ [LATIN CAPITAL LETTER F WITH HOOK]
396 '\u{1E1E}'| // Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
397 '\u{24BB}'| // Ⓕ [CIRCLED LATIN CAPITAL LETTER F]
398 '\u{A730}'| // ꜰ [LATIN LETTER SMALL CAPITAL F]
399 '\u{A77B}'| // Ꝼ [LATIN CAPITAL LETTER INSULAR F]
400 '\u{A7FB}'| // ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
401 '\u{FF26}' // F [FULLWIDTH LATIN CAPITAL LETTER F]
402 => {
403 output.push('F');
404 }
405 '\u{0192}'| // ƒ [LATIN SMALL LETTER F WITH HOOK]
406 '\u{1D6E}'| // ᵮ [LATIN SMALL LETTER F WITH MIDDLE TILDE]
407 '\u{1D82}'| // ᶂ [LATIN SMALL LETTER F WITH PALATAL HOOK]
408 '\u{1E1F}'| // ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
409 '\u{1E9B}'| // ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
410 '\u{24D5}'| // ⓕ [CIRCLED LATIN SMALL LETTER F]
411 '\u{A77C}'| // ꝼ [LATIN SMALL LETTER INSULAR F]
412 '\u{FF46}' // f [FULLWIDTH LATIN SMALL LETTER F]
413 => {
414 output.push('f');
415 }
416 '\u{24A1}' // ⒡ [PARENTHESIZED LATIN SMALL LETTER F]
417 => {
418 output.push('(');
419 output.push('f');
420 output.push(')');
421 }
422 '\u{FB00}' // ff [LATIN SMALL LIGATURE FF]
423 => {
424 output.push('f');
425 output.push('f');
426 }
427 '\u{FB03}' // ffi [LATIN SMALL LIGATURE FFI]
428 => {
429 output.push('f');
430 output.push('f');
431 output.push('i');
432 }
433 '\u{FB04}' // ffl [LATIN SMALL LIGATURE FFL]
434 => {
435 output.push('f');
436 output.push('f');
437 output.push('l');
438 }
439 '\u{FB01}' // fi [LATIN SMALL LIGATURE FI]
440 => {
441 output.push('f');
442 output.push('i');
443 }
444 '\u{FB02}' // fl [LATIN SMALL LIGATURE FL]
445 => {
446 output.push('f');
447 output.push('l');
448 }
449 '\u{011C}'| // Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
450 '\u{011E}'| // Ğ [LATIN CAPITAL LETTER G WITH BREVE]
451 '\u{0120}'| // Ġ [LATIN CAPITAL LETTER G WITH DOT ABOVE]
452 '\u{0122}'| // Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
453 '\u{0193}'| // Ɠ [LATIN CAPITAL LETTER G WITH HOOK]
454 '\u{01E4}'| // Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
455 '\u{01E5}'| // ǥ [LATIN SMALL LETTER G WITH STROKE]
456 '\u{01E6}'| // Ǧ [LATIN CAPITAL LETTER G WITH CARON]
457 '\u{01E7}'| // ǧ [LATIN SMALL LETTER G WITH CARON]
458 '\u{01F4}'| // Ǵ [LATIN CAPITAL LETTER G WITH ACUTE]
459 '\u{0262}'| // ɢ [LATIN LETTER SMALL CAPITAL G]
460 '\u{029B}'| // ʛ [LATIN LETTER SMALL CAPITAL G WITH HOOK]
461 '\u{1E20}'| // Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
462 '\u{24BC}'| // Ⓖ [CIRCLED LATIN CAPITAL LETTER G]
463 '\u{A77D}'| // Ᵹ [LATIN CAPITAL LETTER INSULAR G]
464 '\u{A77E}'| // Ꝿ [LATIN CAPITAL LETTER TURNED INSULAR G]
465 '\u{FF27}' // G [FULLWIDTH LATIN CAPITAL LETTER G]
466 => {
467 output.push('G');
468 }
469 '\u{011D}'| // ĝ [LATIN SMALL LETTER G WITH CIRCUMFLEX]
470 '\u{011F}'| // ğ [LATIN SMALL LETTER G WITH BREVE]
471 '\u{0121}'| // ġ [LATIN SMALL LETTER G WITH DOT ABOVE]
472 '\u{0123}'| // ģ [LATIN SMALL LETTER G WITH CEDILLA]
473 '\u{01F5}'| // ǵ [LATIN SMALL LETTER G WITH ACUTE]
474 '\u{0260}'| // ɠ [LATIN SMALL LETTER G WITH HOOK]
475 '\u{0261}'| // ɡ [LATIN SMALL LETTER SCRIPT G]
476 '\u{1D77}'| // ᵷ [LATIN SMALL LETTER TURNED G]
477 '\u{1D79}'| // ᵹ [LATIN SMALL LETTER INSULAR G]
478 '\u{1D83}'| // ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
479 '\u{1E21}'| // ḡ [LATIN SMALL LETTER G WITH MACRON]
480 '\u{24D6}'| // ⓖ [CIRCLED LATIN SMALL LETTER G]
481 '\u{A77F}'| // ꝿ [LATIN SMALL LETTER TURNED INSULAR G]
482 '\u{FF47}' // g [FULLWIDTH LATIN SMALL LETTER G]
483 => {
484 output.push('g');
485 }
486 '\u{24A2}' // ⒢ [PARENTHESIZED LATIN SMALL LETTER G]
487 => {
488 output.push('(');
489 output.push('g');
490 output.push(')');
491 }
492 '\u{0124}'| // Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
493 '\u{0126}'| // Ħ [LATIN CAPITAL LETTER H WITH STROKE]
494 '\u{021E}'| // Ȟ [LATIN CAPITAL LETTER H WITH CARON]
495 '\u{029C}'| // ʜ [LATIN LETTER SMALL CAPITAL H]
496 '\u{1E22}'| // Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
497 '\u{1E24}'| // Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
498 '\u{1E26}'| // Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
499 '\u{1E28}'| // Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
500 '\u{1E2A}'| // Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
501 '\u{24BD}'| // Ⓗ [CIRCLED LATIN CAPITAL LETTER H]
502 '\u{2C67}'| // Ⱨ [LATIN CAPITAL LETTER H WITH DESCENDER]
503 '\u{2C75}'| // Ⱶ [LATIN CAPITAL LETTER HALF H]
504 '\u{FF28}' // H [FULLWIDTH LATIN CAPITAL LETTER H]
505 => {
506 output.push('H');
507 }
508 '\u{0125}'| // ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
509 '\u{0127}'| // ħ [LATIN SMALL LETTER H WITH STROKE]
510 '\u{021F}'| // ȟ [LATIN SMALL LETTER H WITH CARON]
511 '\u{0265}'| // ɥ [LATIN SMALL LETTER TURNED H]
512 '\u{0266}'| // ɦ [LATIN SMALL LETTER H WITH HOOK]
513 '\u{02AE}'| // ʮ [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
514 '\u{02AF}'| // ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
515 '\u{1E23}'| // ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
516 '\u{1E25}'| // ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
517 '\u{1E27}'| // ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
518 '\u{1E29}'| // ḩ [LATIN SMALL LETTER H WITH CEDILLA]
519 '\u{1E2B}'| // ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
520 '\u{1E96}'| // ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
521 '\u{24D7}'| // ⓗ [CIRCLED LATIN SMALL LETTER H]
522 '\u{2C68}'| // ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
523 '\u{2C76}'| // ⱶ [LATIN SMALL LETTER HALF H]
524 '\u{FF48}' // h [FULLWIDTH LATIN SMALL LETTER H]
525 => {
526 output.push('h');
527 }
528 '\u{01F6}' // Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
529 => {
530 output.push('H');
531 output.push('V');
532 }
533 '\u{24A3}' // ⒣ [PARENTHESIZED LATIN SMALL LETTER H]
534 => {
535 output.push('(');
536 output.push('h');
537 output.push(')');
538 }
539 '\u{0195}' // ƕ [LATIN SMALL LETTER HV]
540 => {
541 output.push('h');
542 output.push('v');
543 }
544 '\u{00CC}'| // Ì [LATIN CAPITAL LETTER I WITH GRAVE]
545 '\u{00CD}'| // Í [LATIN CAPITAL LETTER I WITH ACUTE]
546 '\u{00CE}'| // Î [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
547 '\u{00CF}'| // Ï [LATIN CAPITAL LETTER I WITH DIAERESIS]
548 '\u{0128}'| // Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
549 '\u{012A}'| // Ī [LATIN CAPITAL LETTER I WITH MACRON]
550 '\u{012C}'| // Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
551 '\u{012E}'| // Į [LATIN CAPITAL LETTER I WITH OGONEK]
552 '\u{0130}'| // İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
553 '\u{0196}'| // Ɩ [LATIN CAPITAL LETTER IOTA]
554 '\u{0197}'| // Ɨ [LATIN CAPITAL LETTER I WITH STROKE]
555 '\u{01CF}'| // Ǐ [LATIN CAPITAL LETTER I WITH CARON]
556 '\u{0208}'| // Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
557 '\u{020A}'| // Ȋ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
558 '\u{026A}'| // ɪ [LATIN LETTER SMALL CAPITAL I]
559 '\u{1D7B}'| // ᵻ [LATIN SMALL CAPITAL LETTER I WITH STROKE]
560 '\u{1E2C}'| // Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
561 '\u{1E2E}'| // Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
562 '\u{1EC8}'| // Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
563 '\u{1ECA}'| // Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
564 '\u{24BE}'| // Ⓘ [CIRCLED LATIN CAPITAL LETTER I]
565 '\u{A7FE}'| // ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
566 '\u{FF29}' // I [FULLWIDTH LATIN CAPITAL LETTER I]
567 => {
568 output.push('I');
569 }
570 '\u{00EC}'| // ì [LATIN SMALL LETTER I WITH GRAVE]
571 '\u{00ED}'| // í [LATIN SMALL LETTER I WITH ACUTE]
572 '\u{00EE}'| // î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
573 '\u{00EF}'| // ï [LATIN SMALL LETTER I WITH DIAERESIS]
574 '\u{0129}'| // ĩ [LATIN SMALL LETTER I WITH TILDE]
575 '\u{012B}'| // ī [LATIN SMALL LETTER I WITH MACRON]
576 '\u{012D}'| // ĭ [LATIN SMALL LETTER I WITH BREVE]
577 '\u{012F}'| // į [LATIN SMALL LETTER I WITH OGONEK]
578 '\u{0131}'| // ı [LATIN SMALL LETTER DOTLESS I]
579 '\u{01D0}'| // ǐ [LATIN SMALL LETTER I WITH CARON]
580 '\u{0209}'| // ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
581 '\u{020B}'| // ȋ [LATIN SMALL LETTER I WITH INVERTED BREVE]
582 '\u{0268}'| // ɨ [LATIN SMALL LETTER I WITH STROKE]
583 '\u{1D09}'| // ᴉ [LATIN SMALL LETTER TURNED I]
584 '\u{1D62}'| // ᵢ [LATIN SUBSCRIPT SMALL LETTER I]
585 '\u{1D7C}'| // ᵼ [LATIN SMALL LETTER IOTA WITH STROKE]
586 '\u{1D96}'| // ᶖ [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
587 '\u{1E2D}'| // ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
588 '\u{1E2F}'| // ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
589 '\u{1EC9}'| // ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
590 '\u{1ECB}'| // ị [LATIN SMALL LETTER I WITH DOT BELOW]
591 '\u{2071}'| // ⁱ [SUPERSCRIPT LATIN SMALL LETTER I]
592 '\u{24D8}'| // ⓘ [CIRCLED LATIN SMALL LETTER I]
593 '\u{FF49}' // i [FULLWIDTH LATIN SMALL LETTER I]
594 => {
595 output.push('i');
596 }
597 '\u{0132}' // IJ [LATIN CAPITAL LIGATURE IJ]
598 => {
599 output.push('I');
600 output.push('J');
601 }
602 '\u{24A4}' // ⒤ [PARENTHESIZED LATIN SMALL LETTER I]
603 => {
604 output.push('(');
605 output.push('i');
606 output.push(')');
607 }
608 '\u{0133}' // ij [LATIN SMALL LIGATURE IJ]
609 => {
610 output.push('i');
611 output.push('j');
612 }
613 '\u{0134}'| // Ĵ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
614 '\u{0248}'| // Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
615 '\u{1D0A}'| // ᴊ [LATIN LETTER SMALL CAPITAL J]
616 '\u{24BF}'| // Ⓙ [CIRCLED LATIN CAPITAL LETTER J]
617 '\u{FF2A}' // J [FULLWIDTH LATIN CAPITAL LETTER J]
618 => {
619 output.push('J');
620 }
621 '\u{0135}'| // ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
622 '\u{01F0}'| // ǰ [LATIN SMALL LETTER J WITH CARON]
623 '\u{0237}'| // ȷ [LATIN SMALL LETTER DOTLESS J]
624 '\u{0249}'| // ɉ [LATIN SMALL LETTER J WITH STROKE]
625 '\u{025F}'| // ɟ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
626 '\u{0284}'| // ʄ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
627 '\u{029D}'| // ʝ [LATIN SMALL LETTER J WITH CROSSED-TAIL]
628 '\u{24D9}'| // ⓙ [CIRCLED LATIN SMALL LETTER J]
629 '\u{2C7C}'| // ⱼ [LATIN SUBSCRIPT SMALL LETTER J]
630 '\u{FF4A}' // j [FULLWIDTH LATIN SMALL LETTER J]
631 => {
632 output.push('j');
633 }
634 '\u{24A5}' // ⒥ [PARENTHESIZED LATIN SMALL LETTER J]
635 => {
636 output.push('(');
637 output.push('j');
638 output.push(')');
639 }
640 '\u{0136}'| // Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
641 '\u{0198}'| // Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
642 '\u{01E8}'| // Ǩ [LATIN CAPITAL LETTER K WITH CARON]
643 '\u{1D0B}'| // ᴋ [LATIN LETTER SMALL CAPITAL K]
644 '\u{1E30}'| // Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
645 '\u{1E32}'| // Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
646 '\u{1E34}'| // Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
647 '\u{24C0}'| // Ⓚ [CIRCLED LATIN CAPITAL LETTER K]
648 '\u{2C69}'| // Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
649 '\u{A740}'| // Ꝁ [LATIN CAPITAL LETTER K WITH STROKE]
650 '\u{A742}'| // Ꝃ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
651 '\u{A744}'| // Ꝅ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
652 '\u{FF2B}' // K [FULLWIDTH LATIN CAPITAL LETTER K]
653 => {
654 output.push('K');
655 }
656 '\u{0137}'| // ķ [LATIN SMALL LETTER K WITH CEDILLA]
657 '\u{0199}'| // ƙ [LATIN SMALL LETTER K WITH HOOK]
658 '\u{01E9}'| // ǩ [LATIN SMALL LETTER K WITH CARON]
659 '\u{029E}'| // ʞ [LATIN SMALL LETTER TURNED K]
660 '\u{1D84}'| // ᶄ [LATIN SMALL LETTER K WITH PALATAL HOOK]
661 '\u{1E31}'| // ḱ [LATIN SMALL LETTER K WITH ACUTE]
662 '\u{1E33}'| // ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
663 '\u{1E35}'| // ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
664 '\u{24DA}'| // ⓚ [CIRCLED LATIN SMALL LETTER K]
665 '\u{2C6A}'| // ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
666 '\u{A741}'| // ꝁ [LATIN SMALL LETTER K WITH STROKE]
667 '\u{A743}'| // ꝃ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
668 '\u{A745}'| // ꝅ [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
669 '\u{FF4B}' // k [FULLWIDTH LATIN SMALL LETTER K]
670 => {
671 output.push('k');
672 }
673 '\u{24A6}' // ⒦ [PARENTHESIZED LATIN SMALL LETTER K]
674 => {
675 output.push('(');
676 output.push('k');
677 output.push(')');
678 }
679 '\u{0139}'| // Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
680 '\u{013B}'| // Ļ [LATIN CAPITAL LETTER L WITH CEDILLA]
681 '\u{013D}'| // Ľ [LATIN CAPITAL LETTER L WITH CARON]
682 '\u{013F}'| // Ŀ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
683 '\u{0141}'| // Ł [LATIN CAPITAL LETTER L WITH STROKE]
684 '\u{023D}'| // Ƚ [LATIN CAPITAL LETTER L WITH BAR]
685 '\u{029F}'| // ʟ [LATIN LETTER SMALL CAPITAL L]
686 '\u{1D0C}'| // ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
687 '\u{1E36}'| // Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
688 '\u{1E38}'| // Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
689 '\u{1E3A}'| // Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
690 '\u{1E3C}'| // Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
691 '\u{24C1}'| // Ⓛ [CIRCLED LATIN CAPITAL LETTER L]
692 '\u{2C60}'| // Ⱡ [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
693 '\u{2C62}'| // Ɫ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
694 '\u{A746}'| // Ꝇ [LATIN CAPITAL LETTER BROKEN L]
695 '\u{A748}'| // Ꝉ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
696 '\u{A780}'| // Ꞁ [LATIN CAPITAL LETTER TURNED L]
697 '\u{FF2C}' // L [FULLWIDTH LATIN CAPITAL LETTER L]
698 => {
699 output.push('L');
700 }
701 '\u{013A}'| // ĺ [LATIN SMALL LETTER L WITH ACUTE]
702 '\u{013C}'| // ļ [LATIN SMALL LETTER L WITH CEDILLA]
703 '\u{013E}'| // ľ [LATIN SMALL LETTER L WITH CARON]
704 '\u{0140}'| // ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
705 '\u{0142}'| // ł [LATIN SMALL LETTER L WITH STROKE]
706 '\u{019A}'| // ƚ [LATIN SMALL LETTER L WITH BAR]
707 '\u{0234}'| // ȴ [LATIN SMALL LETTER L WITH CURL]
708 '\u{026B}'| // ɫ [LATIN SMALL LETTER L WITH MIDDLE TILDE]
709 '\u{026C}'| // ɬ [LATIN SMALL LETTER L WITH BELT]
710 '\u{026D}'| // ɭ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
711 '\u{1D85}'| // ᶅ [LATIN SMALL LETTER L WITH PALATAL HOOK]
712 '\u{1E37}'| // ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
713 '\u{1E39}'| // ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
714 '\u{1E3B}'| // ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
715 '\u{1E3D}'| // ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
716 '\u{24DB}'| // ⓛ [CIRCLED LATIN SMALL LETTER L]
717 '\u{2C61}'| // ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
718 '\u{A747}'| // ꝇ [LATIN SMALL LETTER BROKEN L]
719 '\u{A749}'| // ꝉ [LATIN SMALL LETTER L WITH HIGH STROKE]
720 '\u{A781}'| // ꞁ [LATIN SMALL LETTER TURNED L]
721 '\u{FF4C}' // l [FULLWIDTH LATIN SMALL LETTER L]
722 => {
723 output.push('l');
724 }
725 '\u{01C7}' // LJ [LATIN CAPITAL LETTER LJ]
726 => {
727 output.push('L');
728 output.push('J');
729 }
730 '\u{1EFA}' // Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
731 => {
732 output.push('L');
733 output.push('L');
734 }
735 '\u{01C8}' // Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
736 => {
737 output.push('L');
738 output.push('j');
739 }
740 '\u{24A7}' // ⒧ [PARENTHESIZED LATIN SMALL LETTER L]
741 => {
742 output.push('(');
743 output.push('l');
744 output.push(')');
745 }
746 '\u{01C9}' // lj [LATIN SMALL LETTER LJ]
747 => {
748 output.push('l');
749 output.push('j');
750 }
751 '\u{1EFB}' // ỻ [LATIN SMALL LETTER MIDDLE-WELSH LL]
752 => {
753 output.push('l');
754 output.push('l');
755 }
756 '\u{02AA}' // ʪ [LATIN SMALL LETTER LS DIGRAPH]
757 => {
758 output.push('l');
759 output.push('s');
760 }
761 '\u{02AB}' // ʫ [LATIN SMALL LETTER LZ DIGRAPH]
762 => {
763 output.push('l');
764 output.push('z');
765 }
766 '\u{019C}'| // Ɯ [LATIN CAPITAL LETTER TURNED M]
767 '\u{1D0D}'| // ᴍ [LATIN LETTER SMALL CAPITAL M]
768 '\u{1E3E}'| // Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
769 '\u{1E40}'| // Ṁ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
770 '\u{1E42}'| // Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
771 '\u{24C2}'| // Ⓜ [CIRCLED LATIN CAPITAL LETTER M]
772 '\u{2C6E}'| // Ɱ [LATIN CAPITAL LETTER M WITH HOOK]
773 '\u{A7FD}'| // ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
774 '\u{A7FF}'| // ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
775 '\u{FF2D}' // M [FULLWIDTH LATIN CAPITAL LETTER M]
776 => {
777 output.push('M');
778 }
779 '\u{026F}'| // ɯ [LATIN SMALL LETTER TURNED M]
780 '\u{0270}'| // ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
781 '\u{0271}'| // ɱ [LATIN SMALL LETTER M WITH HOOK]
782 '\u{1D6F}'| // ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
783 '\u{1D86}'| // ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
784 '\u{1E3F}'| // ḿ [LATIN SMALL LETTER M WITH ACUTE]
785 '\u{1E41}'| // ṁ [LATIN SMALL LETTER M WITH DOT ABOVE]
786 '\u{1E43}'| // ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
787 '\u{24DC}'| // ⓜ [CIRCLED LATIN SMALL LETTER M]
788 '\u{FF4D}' // m [FULLWIDTH LATIN SMALL LETTER M]
789 => {
790 output.push('m');
791 }
792 '\u{24A8}' // ⒨ [PARENTHESIZED LATIN SMALL LETTER M]
793 => {
794 output.push('(');
795 output.push('m');
796 output.push(')');
797 }
798 '\u{00D1}'| // Ñ [LATIN CAPITAL LETTER N WITH TILDE]
799 '\u{0143}'| // Ń [LATIN CAPITAL LETTER N WITH ACUTE]
800 '\u{0145}'| // Ņ [LATIN CAPITAL LETTER N WITH CEDILLA]
801 '\u{0147}'| // Ň [LATIN CAPITAL LETTER N WITH CARON]
802 '\u{014A}'| // Ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
803 '\u{019D}'| // Ɲ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
804 '\u{01F8}'| // Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
805 '\u{0220}'| // Ƞ [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
806 '\u{0274}'| // ɴ [LATIN LETTER SMALL CAPITAL N]
807 '\u{1D0E}'| // ᴎ [LATIN LETTER SMALL CAPITAL REVERSED N]
808 '\u{1E44}'| // Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
809 '\u{1E46}'| // Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
810 '\u{1E48}'| // Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
811 '\u{1E4A}'| // Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
812 '\u{24C3}'| // Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
813 '\u{FF2E}' // N [FULLWIDTH LATIN CAPITAL LETTER N]
814 => {
815 output.push('N');
816 }
817 '\u{00F1}'| // ñ [LATIN SMALL LETTER N WITH TILDE]
818 '\u{0144}'| // ń [LATIN SMALL LETTER N WITH ACUTE]
819 '\u{0146}'| // ņ [LATIN SMALL LETTER N WITH CEDILLA]
820 '\u{0148}'| // ň [LATIN SMALL LETTER N WITH CARON]
821 '\u{0149}'| // ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
822 '\u{014B}'| // ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
823 '\u{019E}'| // ƞ [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
824 '\u{01F9}'| // ǹ [LATIN SMALL LETTER N WITH GRAVE]
825 '\u{0235}'| // ȵ [LATIN SMALL LETTER N WITH CURL]
826 '\u{0272}'| // ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
827 '\u{0273}'| // ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
828 '\u{1D70}'| // ᵰ [LATIN SMALL LETTER N WITH MIDDLE TILDE]
829 '\u{1D87}'| // ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
830 '\u{1E45}'| // ṅ [LATIN SMALL LETTER N WITH DOT ABOVE]
831 '\u{1E47}'| // ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
832 '\u{1E49}'| // ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
833 '\u{1E4B}'| // ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
834 '\u{207F}'| // ⁿ [SUPERSCRIPT LATIN SMALL LETTER N]
835 '\u{24DD}'| // ⓝ [CIRCLED LATIN SMALL LETTER N]
836 '\u{FF4E}' // n [FULLWIDTH LATIN SMALL LETTER N]
837 => {
838 output.push('n');
839 }
840 '\u{01CA}' // NJ [LATIN CAPITAL LETTER NJ]
841 => {
842 output.push('N');
843 output.push('J');
844 }
845 '\u{01CB}' // Nj [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
846 => {
847 output.push('N');
848 output.push('j');
849 }
850 '\u{24A9}' // ⒩ [PARENTHESIZED LATIN SMALL LETTER N]
851 => {
852 output.push('(');
853 output.push('n');
854 output.push(')');
855 }
856 '\u{01CC}' // nj [LATIN SMALL LETTER NJ]
857 => {
858 output.push('n');
859 output.push('j');
860 }
861 '\u{00D2}'| // Ò [LATIN CAPITAL LETTER O WITH GRAVE]
862 '\u{00D3}'| // Ó [LATIN CAPITAL LETTER O WITH ACUTE]
863 '\u{00D4}'| // Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
864 '\u{00D5}'| // Õ [LATIN CAPITAL LETTER O WITH TILDE]
865 '\u{00D6}'| // Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
866 '\u{00D8}'| // Ø [LATIN CAPITAL LETTER O WITH STROKE]
867 '\u{014C}'| // Ō [LATIN CAPITAL LETTER O WITH MACRON]
868 '\u{014E}'| // Ŏ [LATIN CAPITAL LETTER O WITH BREVE]
869 '\u{0150}'| // Ő [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
870 '\u{0186}'| // Ɔ [LATIN CAPITAL LETTER OPEN O]
871 '\u{019F}'| // Ɵ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
872 '\u{01A0}'| // Ơ [LATIN CAPITAL LETTER O WITH HORN]
873 '\u{01D1}'| // Ǒ [LATIN CAPITAL LETTER O WITH CARON]
874 '\u{01EA}'| // Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
875 '\u{01EC}'| // Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
876 '\u{01FE}'| // Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
877 '\u{020C}'| // Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
878 '\u{020E}'| // Ȏ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
879 '\u{022A}'| // Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
880 '\u{022C}'| // Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
881 '\u{022E}'| // Ȯ [LATIN CAPITAL LETTER O WITH DOT ABOVE]
882 '\u{0230}'| // Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
883 '\u{1D0F}'| // ᴏ [LATIN LETTER SMALL CAPITAL O]
884 '\u{1D10}'| // ᴐ [LATIN LETTER SMALL CAPITAL OPEN O]
885 '\u{1E4C}'| // Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
886 '\u{1E4E}'| // Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
887 '\u{1E50}'| // Ṑ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
888 '\u{1E52}'| // Ṓ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
889 '\u{1ECC}'| // Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
890 '\u{1ECE}'| // Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
891 '\u{1ED0}'| // Ố [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
892 '\u{1ED2}'| // Ồ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
893 '\u{1ED4}'| // Ổ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
894 '\u{1ED6}'| // Ỗ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
895 '\u{1ED8}'| // Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
896 '\u{1EDA}'| // Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
897 '\u{1EDC}'| // Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
898 '\u{1EDE}'| // Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
899 '\u{1EE0}'| // Ỡ [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
900 '\u{1EE2}'| // Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
901 '\u{24C4}'| // Ⓞ [CIRCLED LATIN CAPITAL LETTER O]
902 '\u{A74A}'| // Ꝋ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
903 '\u{A74C}'| // Ꝍ [LATIN CAPITAL LETTER O WITH LOOP]
904 '\u{FF2F}' // O [FULLWIDTH LATIN CAPITAL LETTER O]
905 => {
906 output.push('O');
907 }
908 '\u{00F2}'| // ò [LATIN SMALL LETTER O WITH GRAVE]
909 '\u{00F3}'| // ó [LATIN SMALL LETTER O WITH ACUTE]
910 '\u{00F4}'| // ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
911 '\u{00F5}'| // õ [LATIN SMALL LETTER O WITH TILDE]
912 '\u{00F6}'| // ö [LATIN SMALL LETTER O WITH DIAERESIS]
913 '\u{00F8}'| // ø [LATIN SMALL LETTER O WITH STROKE]
914 '\u{014D}'| // ō [LATIN SMALL LETTER O WITH MACRON]
915 '\u{014F}'| // ŏ [LATIN SMALL LETTER O WITH BREVE]
916 '\u{0151}'| // ő [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
917 '\u{01A1}'| // ơ [LATIN SMALL LETTER O WITH HORN]
918 '\u{01D2}'| // ǒ [LATIN SMALL LETTER O WITH CARON]
919 '\u{01EB}'| // ǫ [LATIN SMALL LETTER O WITH OGONEK]
920 '\u{01ED}'| // ǭ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
921 '\u{01FF}'| // ǿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
922 '\u{020D}'| // ȍ [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
923 '\u{020F}'| // ȏ [LATIN SMALL LETTER O WITH INVERTED BREVE]
924 '\u{022B}'| // ȫ [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
925 '\u{022D}'| // ȭ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
926 '\u{022F}'| // ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
927 '\u{0231}'| // ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
928 '\u{0254}'| // ɔ [LATIN SMALL LETTER OPEN O]
929 '\u{0275}'| // ɵ [LATIN SMALL LETTER BARRED O]
930 '\u{1D16}'| // ᴖ [LATIN SMALL LETTER TOP HALF O]
931 '\u{1D17}'| // ᴗ [LATIN SMALL LETTER BOTTOM HALF O]
932 '\u{1D97}'| // ᶗ [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
933 '\u{1E4D}'| // ṍ [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
934 '\u{1E4F}'| // ṏ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
935 '\u{1E51}'| // ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
936 '\u{1E53}'| // ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
937 '\u{1ECD}'| // ọ [LATIN SMALL LETTER O WITH DOT BELOW]
938 '\u{1ECF}'| // ỏ [LATIN SMALL LETTER O WITH HOOK ABOVE]
939 '\u{1ED1}'| // ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
940 '\u{1ED3}'| // ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
941 '\u{1ED5}'| // ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
942 '\u{1ED7}'| // ỗ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
943 '\u{1ED9}'| // ộ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
944 '\u{1EDB}'| // ớ [LATIN SMALL LETTER O WITH HORN AND ACUTE]
945 '\u{1EDD}'| // ờ [LATIN SMALL LETTER O WITH HORN AND GRAVE]
946 '\u{1EDF}'| // ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
947 '\u{1EE1}'| // ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
948 '\u{1EE3}'| // ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
949 '\u{2092}'| // ₒ [LATIN SUBSCRIPT SMALL LETTER O]
950 '\u{24DE}'| // ⓞ [CIRCLED LATIN SMALL LETTER O]
951 '\u{2C7A}'| // ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
952 '\u{A74B}'| // ꝋ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
953 '\u{A74D}'| // ꝍ [LATIN SMALL LETTER O WITH LOOP]
954 '\u{FF4F}' // o [FULLWIDTH LATIN SMALL LETTER O]
955 => {
956 output.push('o');
957 }
958 '\u{0152}'| // Œ [LATIN CAPITAL LIGATURE OE]
959 '\u{0276}' // ɶ [LATIN LETTER SMALL CAPITAL OE]
960 => {
961 output.push('O');
962 output.push('E');
963 }
964 '\u{A74E}' // Ꝏ [LATIN CAPITAL LETTER OO]
965 => {
966 output.push('O');
967 output.push('O');
968 }
969 '\u{0222}'| // Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
970 '\u{1D15}' // ᴕ [LATIN LETTER SMALL CAPITAL OU]
971 => {
972 output.push('O');
973 output.push('U');
974 }
975 '\u{24AA}' // ⒪ [PARENTHESIZED LATIN SMALL LETTER O]
976 => {
977 output.push('(');
978 output.push('o');
979 output.push(')');
980 }
981 '\u{0153}'| // œ [LATIN SMALL LIGATURE OE]
982 '\u{1D14}' // ᴔ [LATIN SMALL LETTER TURNED OE]
983 => {
984 output.push('o');
985 output.push('e');
986 }
987 '\u{A74F}' // ꝏ [LATIN SMALL LETTER OO]
988 => {
989 output.push('o');
990 output.push('o');
991 }
992 '\u{0223}' // ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
993 => {
994 output.push('o');
995 output.push('u');
996 }
997 '\u{01A4}'| // Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
998 '\u{1D18}'| // ᴘ [LATIN LETTER SMALL CAPITAL P]
999 '\u{1E54}'| // Ṕ [LATIN CAPITAL LETTER P WITH ACUTE]
1000 '\u{1E56}'| // Ṗ [LATIN CAPITAL LETTER P WITH DOT ABOVE]
1001 '\u{24C5}'| // Ⓟ [CIRCLED LATIN CAPITAL LETTER P]
1002 '\u{2C63}'| // Ᵽ [LATIN CAPITAL LETTER P WITH STROKE]
1003 '\u{A750}'| // Ꝑ [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
1004 '\u{A752}'| // Ꝓ [LATIN CAPITAL LETTER P WITH FLOURISH]
1005 '\u{A754}'| // Ꝕ [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
1006 '\u{FF30}' // P [FULLWIDTH LATIN CAPITAL LETTER P]
1007 => {
1008 output.push('P');
1009 }
1010 '\u{01A5}'| // ƥ [LATIN SMALL LETTER P WITH HOOK]
1011 '\u{1D71}'| // ᵱ [LATIN SMALL LETTER P WITH MIDDLE TILDE]
1012 '\u{1D7D}'| // ᵽ [LATIN SMALL LETTER P WITH STROKE]
1013 '\u{1D88}'| // ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
1014 '\u{1E55}'| // ṕ [LATIN SMALL LETTER P WITH ACUTE]
1015 '\u{1E57}'| // ṗ [LATIN SMALL LETTER P WITH DOT ABOVE]
1016 '\u{24DF}'| // ⓟ [CIRCLED LATIN SMALL LETTER P]
1017 '\u{A751}'| // ꝑ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
1018 '\u{A753}'| // ꝓ [LATIN SMALL LETTER P WITH FLOURISH]
1019 '\u{A755}'| // ꝕ [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
1020 '\u{A7FC}'| // ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
1021 '\u{FF50}' // p [FULLWIDTH LATIN SMALL LETTER P]
1022 => {
1023 output.push('p');
1024 }
1025 '\u{24AB}' // ⒫ [PARENTHESIZED LATIN SMALL LETTER P]
1026 => {
1027 output.push('(');
1028 output.push('p');
1029 output.push(')');
1030 }
1031 '\u{024A}'| // Ɋ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
1032 '\u{24C6}'| // Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
1033 '\u{A756}'| // Ꝗ [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
1034 '\u{A758}'| // Ꝙ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
1035 '\u{FF31}' // Q [FULLWIDTH LATIN CAPITAL LETTER Q]
1036 => {
1037 output.push('Q');
1038 }
1039 '\u{0138}'| // ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
1040 '\u{024B}'| // ɋ [LATIN SMALL LETTER Q WITH HOOK TAIL]
1041 '\u{02A0}'| // ʠ [LATIN SMALL LETTER Q WITH HOOK]
1042 '\u{24E0}'| // ⓠ [CIRCLED LATIN SMALL LETTER Q]
1043 '\u{A757}'| // ꝗ [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
1044 '\u{A759}'| // ꝙ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
1045 '\u{FF51}' // q [FULLWIDTH LATIN SMALL LETTER Q]
1046 => {
1047 output.push('q');
1048 }
1049 '\u{24AC}' // ⒬ [PARENTHESIZED LATIN SMALL LETTER Q]
1050 => {
1051 output.push('(');
1052 output.push('q');
1053 output.push(')');
1054 }
1055 '\u{0239}' // ȹ [LATIN SMALL LETTER QP DIGRAPH]
1056 => {
1057 output.push('q');
1058 output.push('p');
1059 }
1060 '\u{0154}'| // Ŕ [LATIN CAPITAL LETTER R WITH ACUTE]
1061 '\u{0156}'| // Ŗ [LATIN CAPITAL LETTER R WITH CEDILLA]
1062 '\u{0158}'| // Ř [LATIN CAPITAL LETTER R WITH CARON]
1063 '\u{0210}'| // Ȓ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
1064 '\u{0212}'| // Ȓ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
1065 '\u{024C}'| // Ɍ [LATIN CAPITAL LETTER R WITH STROKE]
1066 '\u{0280}'| // ʀ [LATIN LETTER SMALL CAPITAL R]
1067 '\u{0281}'| // ʁ [LATIN LETTER SMALL CAPITAL INVERTED R]
1068 '\u{1D19}'| // ᴙ [LATIN LETTER SMALL CAPITAL REVERSED R]
1069 '\u{1D1A}'| // ᴚ [LATIN LETTER SMALL CAPITAL TURNED R]
1070 '\u{1E58}'| // Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
1071 '\u{1E5A}'| // Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
1072 '\u{1E5C}'| // Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
1073 '\u{1E5E}'| // Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
1074 '\u{24C7}'| // Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
1075 '\u{2C64}'| // Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
1076 '\u{A75A}'| // Ꝛ [LATIN CAPITAL LETTER R ROTUNDA]
1077 '\u{A782}'| // Ꞃ [LATIN CAPITAL LETTER INSULAR R]
1078 '\u{FF32}' // R [FULLWIDTH LATIN CAPITAL LETTER R]
1079 => {
1080 output.push('R');
1081 }
1082 '\u{0155}'| // ŕ [LATIN SMALL LETTER R WITH ACUTE]
1083 '\u{0157}'| // ŗ [LATIN SMALL LETTER R WITH CEDILLA]
1084 '\u{0159}'| // ř [LATIN SMALL LETTER R WITH CARON]
1085 '\u{0211}'| // ȑ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
1086 '\u{0213}'| // ȓ [LATIN SMALL LETTER R WITH INVERTED BREVE]
1087 '\u{024D}'| // ɍ [LATIN SMALL LETTER R WITH STROKE]
1088 '\u{027C}'| // ɼ [LATIN SMALL LETTER R WITH LONG LEG]
1089 '\u{027D}'| // ɽ [LATIN SMALL LETTER R WITH TAIL]
1090 '\u{027E}'| // ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
1091 '\u{027F}'| // ɿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
1092 '\u{1D63}'| // ᵣ [LATIN SUBSCRIPT SMALL LETTER R]
1093 '\u{1D72}'| // ᵲ [LATIN SMALL LETTER R WITH MIDDLE TILDE]
1094 '\u{1D73}'| // ᵳ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
1095 '\u{1D89}'| // ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
1096 '\u{1E59}'| // ṙ [LATIN SMALL LETTER R WITH DOT ABOVE]
1097 '\u{1E5B}'| // ṛ [LATIN SMALL LETTER R WITH DOT BELOW]
1098 '\u{1E5D}'| // ṝ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
1099 '\u{1E5F}'| // ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
1100 '\u{24E1}'| // ⓡ [CIRCLED LATIN SMALL LETTER R]
1101 '\u{A75B}'| // ꝛ [LATIN SMALL LETTER R ROTUNDA]
1102 '\u{A783}'| // ꞃ [LATIN SMALL LETTER INSULAR R]
1103 '\u{FF52}' // r [FULLWIDTH LATIN SMALL LETTER R]
1104 => {
1105 output.push('r');
1106 }
1107 '\u{24AD}' // ⒭ [PARENTHESIZED LATIN SMALL LETTER R]
1108 => {
1109 output.push('(');
1110 output.push('r');
1111 output.push(')');
1112 }
1113 '\u{015A}'| // Ś [LATIN CAPITAL LETTER S WITH ACUTE]
1114 '\u{015C}'| // Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
1115 '\u{015E}'| // Ş [LATIN CAPITAL LETTER S WITH CEDILLA]
1116 '\u{0160}'| // Š [LATIN CAPITAL LETTER S WITH CARON]
1117 '\u{0218}'| // Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
1118 '\u{1E60}'| // Ṡ [LATIN CAPITAL LETTER S WITH DOT ABOVE]
1119 '\u{1E62}'| // Ṣ [LATIN CAPITAL LETTER S WITH DOT BELOW]
1120 '\u{1E64}'| // Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
1121 '\u{1E66}'| // Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
1122 '\u{1E68}'| // Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
1123 '\u{24C8}'| // Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
1124 '\u{A731}'| // ꜱ [LATIN LETTER SMALL CAPITAL S]
1125 '\u{A785}'| // ꞅ [LATIN SMALL LETTER INSULAR S]
1126 '\u{FF33}' // S [FULLWIDTH LATIN CAPITAL LETTER S]
1127 => {
1128 output.push('S');
1129 }
1130 '\u{015B}'| // ś [LATIN SMALL LETTER S WITH ACUTE]
1131 '\u{015D}'| // ŝ [LATIN SMALL LETTER S WITH CIRCUMFLEX]
1132 '\u{015F}'| // ş [LATIN SMALL LETTER S WITH CEDILLA]
1133 '\u{0161}'| // š [LATIN SMALL LETTER S WITH CARON]
1134 '\u{017F}'| // ſ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
1135 '\u{0219}'| // ș [LATIN SMALL LETTER S WITH COMMA BELOW]
1136 '\u{023F}'| // ȿ [LATIN SMALL LETTER S WITH SWASH TAIL]
1137 '\u{0282}'| // ʂ [LATIN SMALL LETTER S WITH HOOK]
1138 '\u{1D74}'| // ᵴ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
1139 '\u{1D8A}'| // ᶊ [LATIN SMALL LETTER S WITH PALATAL HOOK]
1140 '\u{1E61}'| // ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
1141 '\u{1E63}'| // ṣ [LATIN SMALL LETTER S WITH DOT BELOW]
1142 '\u{1E65}'| // ṥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
1143 '\u{1E67}'| // ṧ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
1144 '\u{1E69}'| // ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
1145 '\u{1E9C}'| // ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
1146 '\u{1E9D}'| // ẝ [LATIN SMALL LETTER LONG S WITH HIGH STROKE]
1147 '\u{24E2}'| // ⓢ [CIRCLED LATIN SMALL LETTER S]
1148 '\u{A784}'| // Ꞅ [LATIN CAPITAL LETTER INSULAR S]
1149 '\u{FF53}' // s [FULLWIDTH LATIN SMALL LETTER S]
1150 => {
1151 output.push('s');
1152 }
1153 '\u{1E9E}' // ẞ [LATIN CAPITAL LETTER SHARP S]
1154 => {
1155 output.push('S');
1156 output.push('S');
1157 }
1158 '\u{24AE}' // ⒮ [PARENTHESIZED LATIN SMALL LETTER S]
1159 => {
1160 output.push('(');
1161 output.push('s');
1162 output.push(')');
1163 }
1164 '\u{00DF}' // ß [LATIN SMALL LETTER SHARP S]
1165 => {
1166 output.push('s');
1167 output.push('s');
1168 }
1169 '\u{FB06}' // st [LATIN SMALL LIGATURE ST]
1170 => {
1171 output.push('s');
1172 output.push('t');
1173 }
1174 '\u{0162}'| // Ţ [LATIN CAPITAL LETTER T WITH CEDILLA]
1175 '\u{0164}'| // Ť [LATIN CAPITAL LETTER T WITH CARON]
1176 '\u{0166}'| // Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
1177 '\u{01AC}'| // Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
1178 '\u{01AE}'| // Ʈ [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
1179 '\u{021A}'| // Ț [LATIN CAPITAL LETTER T WITH COMMA BELOW]
1180 '\u{023E}'| // Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
1181 '\u{1D1B}'| // ᴛ [LATIN LETTER SMALL CAPITAL T]
1182 '\u{1E6A}'| // Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
1183 '\u{1E6C}'| // Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
1184 '\u{1E6E}'| // Ṯ [LATIN CAPITAL LETTER T WITH LINE BELOW]
1185 '\u{1E70}'| // Ṱ [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
1186 '\u{24C9}'| // Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
1187 '\u{A786}'| // Ꞇ [LATIN CAPITAL LETTER INSULAR T]
1188 '\u{FF34}' // T [FULLWIDTH LATIN CAPITAL LETTER T]
1189 => {
1190 output.push('T');
1191 }
1192 '\u{0163}'| // ţ [LATIN SMALL LETTER T WITH CEDILLA]
1193 '\u{0165}'| // ť [LATIN SMALL LETTER T WITH CARON]
1194 '\u{0167}'| // ŧ [LATIN SMALL LETTER T WITH STROKE]
1195 '\u{01AB}'| // ƫ [LATIN SMALL LETTER T WITH PALATAL HOOK]
1196 '\u{01AD}'| // ƭ [LATIN SMALL LETTER T WITH HOOK]
1197 '\u{021B}'| // ț [LATIN SMALL LETTER T WITH COMMA BELOW]
1198 '\u{0236}'| // ȶ [LATIN SMALL LETTER T WITH CURL]
1199 '\u{0287}'| // ʇ [LATIN SMALL LETTER TURNED T]
1200 '\u{0288}'| // ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
1201 '\u{1D75}'| // ᵵ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
1202 '\u{1E6B}'| // ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
1203 '\u{1E6D}'| // ṭ [LATIN SMALL LETTER T WITH DOT BELOW]
1204 '\u{1E6F}'| // ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
1205 '\u{1E71}'| // ṱ [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
1206 '\u{1E97}'| // ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
1207 '\u{24E3}'| // ⓣ [CIRCLED LATIN SMALL LETTER T]
1208 '\u{2C66}'| // ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
1209 '\u{FF54}' // t [FULLWIDTH LATIN SMALL LETTER T]
1210 => {
1211 output.push('t');
1212 }
1213 '\u{00DE}'| // Þ [LATIN CAPITAL LETTER THORN]
1214 '\u{A766}' // Ꝧ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
1215 => {
1216 output.push('T');
1217 output.push('H');
1218 }
1219 '\u{A728}' // Ꜩ [LATIN CAPITAL LETTER TZ]
1220 => {
1221 output.push('T');
1222 output.push('Z');
1223 }
1224 '\u{24AF}' // ⒯ [PARENTHESIZED LATIN SMALL LETTER T]
1225 => {
1226 output.push('(');
1227 output.push('t');
1228 output.push(')');
1229 }
1230 '\u{02A8}' // ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
1231 => {
1232 output.push('t');
1233 output.push('c');
1234 }
1235 '\u{00FE}'| // þ [LATIN SMALL LETTER THORN]
1236 '\u{1D7A}'| // ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
1237 '\u{A767}' // ꝧ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
1238 => {
1239 output.push('t');
1240 output.push('h');
1241 }
1242 '\u{02A6}' // ʦ [LATIN SMALL LETTER TS DIGRAPH]
1243 => {
1244 output.push('t');
1245 output.push('s');
1246 }
1247 '\u{A729}' // ꜩ [LATIN SMALL LETTER TZ]
1248 => {
1249 output.push('t');
1250 output.push('z');
1251 }
1252 '\u{00D9}'| // Ù [LATIN CAPITAL LETTER U WITH GRAVE]
1253 '\u{00DA}'| // Ú [LATIN CAPITAL LETTER U WITH ACUTE]
1254 '\u{00DB}'| // Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
1255 '\u{00DC}'| // Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]
1256 '\u{0168}'| // Ũ [LATIN CAPITAL LETTER U WITH TILDE]
1257 '\u{016A}'| // Ū [LATIN CAPITAL LETTER U WITH MACRON]
1258 '\u{016C}'| // Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
1259 '\u{016E}'| // Ů [LATIN CAPITAL LETTER U WITH RING ABOVE]
1260 '\u{0170}'| // Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
1261 '\u{0172}'| // Ų [LATIN CAPITAL LETTER U WITH OGONEK]
1262 '\u{01AF}'| // Ư [LATIN CAPITAL LETTER U WITH HORN]
1263 '\u{01D3}'| // Ǔ [LATIN CAPITAL LETTER U WITH CARON]
1264 '\u{01D5}'| // Ǖ [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
1265 '\u{01D7}'| // Ǘ [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
1266 '\u{01D9}'| // Ǚ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
1267 '\u{01DB}'| // Ǜ [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
1268 '\u{0214}'| // Ȕ [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
1269 '\u{0216}'| // Ȗ [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
1270 '\u{0244}'| // Ʉ [LATIN CAPITAL LETTER U BAR]
1271 '\u{1D1C}'| // ᴜ [LATIN LETTER SMALL CAPITAL U]
1272 '\u{1D7E}'| // ᵾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
1273 '\u{1E72}'| // Ṳ [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
1274 '\u{1E74}'| // Ṵ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
1275 '\u{1E76}'| // Ṷ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
1276 '\u{1E78}'| // Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
1277 '\u{1E7A}'| // Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
1278 '\u{1EE4}'| // Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
1279 '\u{1EE6}'| // Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
1280 '\u{1EE8}'| // Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
1281 '\u{1EEA}'| // Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
1282 '\u{1EEC}'| // Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
1283 '\u{1EEE}'| // Ữ [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
1284 '\u{1EF0}'| // Ự [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
1285 '\u{24CA}'| // Ⓤ [CIRCLED LATIN CAPITAL LETTER U]
1286 '\u{FF35}' // U [FULLWIDTH LATIN CAPITAL LETTER U]
1287 => {
1288 output.push('U');
1289 }
1290 '\u{00F9}'| // ù [LATIN SMALL LETTER U WITH GRAVE]
1291 '\u{00FA}'| // ú [LATIN SMALL LETTER U WITH ACUTE]
1292 '\u{00FB}'| // û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
1293 '\u{00FC}'| // ü [LATIN SMALL LETTER U WITH DIAERESIS]
1294 '\u{0169}'| // ũ [LATIN SMALL LETTER U WITH TILDE]
1295 '\u{016B}'| // ū [LATIN SMALL LETTER U WITH MACRON]
1296 '\u{016D}'| // ŭ [LATIN SMALL LETTER U WITH BREVE]
1297 '\u{016F}'| // ů [LATIN SMALL LETTER U WITH RING ABOVE]
1298 '\u{0171}'| // ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
1299 '\u{0173}'| // ų [LATIN SMALL LETTER U WITH OGONEK]
1300 '\u{01B0}'| // ư [LATIN SMALL LETTER U WITH HORN]
1301 '\u{01D4}'| // ǔ [LATIN SMALL LETTER U WITH CARON]
1302 '\u{01D6}'| // ǖ [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
1303 '\u{01D8}'| // ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
1304 '\u{01DA}'| // ǚ [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
1305 '\u{01DC}'| // ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
1306 '\u{0215}'| // ȕ [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
1307 '\u{0217}'| // ȗ [LATIN SMALL LETTER U WITH INVERTED BREVE]
1308 '\u{0289}'| // ʉ [LATIN SMALL LETTER U BAR]
1309 '\u{1D64}'| // ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
1310 '\u{1D99}'| // ᶙ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
1311 '\u{1E73}'| // ṳ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
1312 '\u{1E75}'| // ṵ [LATIN SMALL LETTER U WITH TILDE BELOW]
1313 '\u{1E77}'| // ṷ [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
1314 '\u{1E79}'| // ṹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
1315 '\u{1E7B}'| // ṻ [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
1316 '\u{1EE5}'| // ụ [LATIN SMALL LETTER U WITH DOT BELOW]
1317 '\u{1EE7}'| // ủ [LATIN SMALL LETTER U WITH HOOK ABOVE]
1318 '\u{1EE9}'| // ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
1319 '\u{1EEB}'| // ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
1320 '\u{1EED}'| // ử [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
1321 '\u{1EEF}'| // ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
1322 '\u{1EF1}'| // ự [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
1323 '\u{24E4}'| // ⓤ [CIRCLED LATIN SMALL LETTER U]
1324 '\u{FF55}' // u [FULLWIDTH LATIN SMALL LETTER U]
1325 => {
1326 output.push('u');
1327 }
1328 '\u{24B0}' // ⒰ [PARENTHESIZED LATIN SMALL LETTER U]
1329 => {
1330 output.push('(');
1331 output.push('u');
1332 output.push(')');
1333 }
1334 '\u{1D6B}' // ᵫ [LATIN SMALL LETTER UE]
1335 => {
1336 output.push('u');
1337 output.push('e');
1338 }
1339 '\u{01B2}'| // Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
1340 '\u{0245}'| // Ʌ [LATIN CAPITAL LETTER TURNED V]
1341 '\u{1D20}'| // ᴠ [LATIN LETTER SMALL CAPITAL V]
1342 '\u{1E7C}'| // Ṽ [LATIN CAPITAL LETTER V WITH TILDE]
1343 '\u{1E7E}'| // Ṿ [LATIN CAPITAL LETTER V WITH DOT BELOW]
1344 '\u{1EFC}'| // Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
1345 '\u{24CB}'| // Ⓥ [CIRCLED LATIN CAPITAL LETTER V]
1346 '\u{A75E}'| // Ꝟ [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
1347 '\u{A768}'| // Ꝩ [LATIN CAPITAL LETTER VEND]
1348 '\u{FF36}' // V [FULLWIDTH LATIN CAPITAL LETTER V]
1349 => {
1350 output.push('V');
1351 }
1352 '\u{028B}'| // ʋ [LATIN SMALL LETTER V WITH HOOK]
1353 '\u{028C}'| // ʌ [LATIN SMALL LETTER TURNED V]
1354 '\u{1D65}'| // ᵥ [LATIN SUBSCRIPT SMALL LETTER V]
1355 '\u{1D8C}'| // ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
1356 '\u{1E7D}'| // ṽ [LATIN SMALL LETTER V WITH TILDE]
1357 '\u{1E7F}'| // ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
1358 '\u{24E5}'| // ⓥ [CIRCLED LATIN SMALL LETTER V]
1359 '\u{2C71}'| // ⱱ [LATIN SMALL LETTER V WITH RIGHT HOOK]
1360 '\u{2C74}'| // ⱴ [LATIN SMALL LETTER V WITH CURL]
1361 '\u{A75F}'| // ꝟ [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
1362 '\u{FF56}' // v [FULLWIDTH LATIN SMALL LETTER V]
1363 => {
1364 output.push('v');
1365 }
1366 '\u{A760}' // Ꝡ [LATIN CAPITAL LETTER VY]
1367 => {
1368 output.push('V');
1369 output.push('Y');
1370 }
1371 '\u{24B1}' // ⒱ [PARENTHESIZED LATIN SMALL LETTER V]
1372 => {
1373 output.push('(');
1374 output.push('v');
1375 output.push(')');
1376 }
1377 '\u{A761}' // ꝡ [LATIN SMALL LETTER VY]
1378 => {
1379 output.push('v');
1380 output.push('y');
1381 }
1382 '\u{0174}'| // Ŵ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
1383 '\u{01F7}'| // Ƿ http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
1384 '\u{1D21}'| // ᴡ [LATIN LETTER SMALL CAPITAL W]
1385 '\u{1E80}'| // Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
1386 '\u{1E82}'| // Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
1387 '\u{1E84}'| // Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
1388 '\u{1E86}'| // Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
1389 '\u{1E88}'| // Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
1390 '\u{24CC}'| // Ⓦ [CIRCLED LATIN CAPITAL LETTER W]
1391 '\u{2C72}'| // Ⱳ [LATIN CAPITAL LETTER W WITH HOOK]
1392 '\u{FF37}' // W [FULLWIDTH LATIN CAPITAL LETTER W]
1393 => {
1394 output.push('W');
1395 }
1396 '\u{0175}'| // ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
1397 '\u{01BF}'| // ƿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
1398 '\u{028D}'| // ʍ [LATIN SMALL LETTER TURNED W]
1399 '\u{1E81}'| // ẁ [LATIN SMALL LETTER W WITH GRAVE]
1400 '\u{1E83}'| // ẃ [LATIN SMALL LETTER W WITH ACUTE]
1401 '\u{1E85}'| // ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
1402 '\u{1E87}'| // ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
1403 '\u{1E89}'| // ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
1404 '\u{1E98}'| // ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
1405 '\u{24E6}'| // ⓦ [CIRCLED LATIN SMALL LETTER W]
1406 '\u{2C73}'| // ⱳ [LATIN SMALL LETTER W WITH HOOK]
1407 '\u{FF57}' // w [FULLWIDTH LATIN SMALL LETTER W]
1408 => {
1409 output.push('w');
1410 }
1411 '\u{24B2}' // ⒲ [PARENTHESIZED LATIN SMALL LETTER W]
1412 => {
1413 output.push('(');
1414 output.push('w');
1415 output.push(')');
1416 }
1417 '\u{1E8A}'| // Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
1418 '\u{1E8C}'| // Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
1419 '\u{24CD}'| // Ⓧ [CIRCLED LATIN CAPITAL LETTER X]
1420 '\u{FF38}' // X [FULLWIDTH LATIN CAPITAL LETTER X]
1421 => {
1422 output.push('X');
1423 }
1424 '\u{1D8D}'| // ᶍ [LATIN SMALL LETTER X WITH PALATAL HOOK]
1425 '\u{1E8B}'| // ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
1426 '\u{1E8D}'| // ẍ [LATIN SMALL LETTER X WITH DIAERESIS]
1427 '\u{2093}'| // ₓ [LATIN SUBSCRIPT SMALL LETTER X]
1428 '\u{24E7}'| // ⓧ [CIRCLED LATIN SMALL LETTER X]
1429 '\u{FF58}' // x [FULLWIDTH LATIN SMALL LETTER X]
1430 => {
1431 output.push('x');
1432 }
1433 '\u{24B3}' // ⒳ [PARENTHESIZED LATIN SMALL LETTER X]
1434 => {
1435 output.push('(');
1436 output.push('x');
1437 output.push(')');
1438 }
1439 '\u{00DD}'| // Ý [LATIN CAPITAL LETTER Y WITH ACUTE]
1440 '\u{0176}'| // Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
1441 '\u{0178}'| // Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
1442 '\u{01B3}'| // Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
1443 '\u{0232}'| // Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
1444 '\u{024E}'| // Ɏ [LATIN CAPITAL LETTER Y WITH STROKE]
1445 '\u{028F}'| // ʏ [LATIN LETTER SMALL CAPITAL Y]
1446 '\u{1E8E}'| // Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
1447 '\u{1EF2}'| // Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
1448 '\u{1EF4}'| // Ỵ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
1449 '\u{1EF6}'| // Ỷ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
1450 '\u{1EF8}'| // Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
1451 '\u{1EFE}'| // Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
1452 '\u{24CE}'| // Ⓨ [CIRCLED LATIN CAPITAL LETTER Y]
1453 '\u{FF39}' // Y [FULLWIDTH LATIN CAPITAL LETTER Y]
1454 => {
1455 output.push('Y');
1456 }
1457 '\u{00FD}'| // ý [LATIN SMALL LETTER Y WITH ACUTE]
1458 '\u{00FF}'| // ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
1459 '\u{0177}'| // ŷ [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
1460 '\u{01B4}'| // ƴ [LATIN SMALL LETTER Y WITH HOOK]
1461 '\u{0233}'| // ȳ [LATIN SMALL LETTER Y WITH MACRON]
1462 '\u{024F}'| // ɏ [LATIN SMALL LETTER Y WITH STROKE]
1463 '\u{028E}'| // ʎ [LATIN SMALL LETTER TURNED Y]
1464 '\u{1E8F}'| // ẏ [LATIN SMALL LETTER Y WITH DOT ABOVE]
1465 '\u{1E99}'| // ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
1466 '\u{1EF3}'| // ỳ [LATIN SMALL LETTER Y WITH GRAVE]
1467 '\u{1EF5}'| // ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
1468 '\u{1EF7}'| // ỷ [LATIN SMALL LETTER Y WITH HOOK ABOVE]
1469 '\u{1EF9}'| // ỹ [LATIN SMALL LETTER Y WITH TILDE]
1470 '\u{1EFF}'| // ỿ [LATIN SMALL LETTER Y WITH LOOP]
1471 '\u{24E8}'| // ⓨ [CIRCLED LATIN SMALL LETTER Y]
1472 '\u{FF59}' // y [FULLWIDTH LATIN SMALL LETTER Y]
1473 => {
1474 output.push('y');
1475 }
1476 '\u{24B4}' // ⒴ [PARENTHESIZED LATIN SMALL LETTER Y]
1477 => {
1478 output.push('(');
1479 output.push('y');
1480 output.push(')');
1481 }
1482 '\u{0179}'| // Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
1483 '\u{017B}'| // Ż [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
1484 '\u{017D}'| // Ž [LATIN CAPITAL LETTER Z WITH CARON]
1485 '\u{01B5}'| // Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
1486 '\u{021C}'| // Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
1487 '\u{0224}'| // Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
1488 '\u{1D22}'| // ᴢ [LATIN LETTER SMALL CAPITAL Z]
1489 '\u{1E90}'| // Ẑ [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
1490 '\u{1E92}'| // Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
1491 '\u{1E94}'| // Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW]
1492 '\u{24CF}'| // Ⓩ [CIRCLED LATIN CAPITAL LETTER Z]
1493 '\u{2C6B}'| // Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
1494 '\u{A762}'| // Ꝣ [LATIN CAPITAL LETTER VISIGOTHIC Z]
1495 '\u{FF3A}' // Z [FULLWIDTH LATIN CAPITAL LETTER Z]
1496 => {
1497 output.push('Z');
1498 }
1499 '\u{017A}'| // ź [LATIN SMALL LETTER Z WITH ACUTE]
1500 '\u{017C}'| // ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
1501 '\u{017E}'| // ž [LATIN SMALL LETTER Z WITH CARON]
1502 '\u{01B6}'| // ƶ [LATIN SMALL LETTER Z WITH STROKE]
1503 '\u{021D}'| // ȝ http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
1504 '\u{0225}'| // ȥ [LATIN SMALL LETTER Z WITH HOOK]
1505 '\u{0240}'| // ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL]
1506 '\u{0290}'| // ʐ [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
1507 '\u{0291}'| // ʑ [LATIN SMALL LETTER Z WITH CURL]
1508 '\u{1D76}'| // ᵶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
1509 '\u{1D8E}'| // ᶎ [LATIN SMALL LETTER Z WITH PALATAL HOOK]
1510 '\u{1E91}'| // ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
1511 '\u{1E93}'| // ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
1512 '\u{1E95}'| // ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
1513 '\u{24E9}'| // ⓩ [CIRCLED LATIN SMALL LETTER Z]
1514 '\u{2C6C}'| // ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
1515 '\u{A763}'| // ꝣ [LATIN SMALL LETTER VISIGOTHIC Z]
1516 '\u{FF5A}' // z [FULLWIDTH LATIN SMALL LETTER Z]
1517 => {
1518 output.push('z');
1519 }
1520 '\u{24B5}' // ⒵ [PARENTHESIZED LATIN SMALL LETTER Z]
1521 => {
1522 output.push('(');
1523 output.push('z');
1524 output.push(')');
1525 }
1526 '\u{2070}'| // ⁰ [SUPERSCRIPT ZERO]
1527 '\u{2080}'| // ₀ [SUBSCRIPT ZERO]
1528 '\u{24EA}'| // ⓪ [CIRCLED DIGIT ZERO]
1529 '\u{24FF}'| // ⓿ [NEGATIVE CIRCLED DIGIT ZERO]
1530 '\u{FF10}' // 0 [FULLWIDTH DIGIT ZERO]
1531 => {
1532 output.push('0');
1533 }
1534 '\u{00B9}'| // ¹ [SUPERSCRIPT ONE]
1535 '\u{2081}'| // ₁ [SUBSCRIPT ONE]
1536 '\u{2460}'| // ① [CIRCLED DIGIT ONE]
1537 '\u{24F5}'| // ⓵ [DOUBLE CIRCLED DIGIT ONE]
1538 '\u{2776}'| // ❶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
1539 '\u{2780}'| // ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
1540 '\u{278A}'| // ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
1541 '\u{FF11}' // 1 [FULLWIDTH DIGIT ONE]
1542 => {
1543 output.push('1');
1544 }
1545 '\u{2488}' // ⒈ [DIGIT ONE FULL STOP]
1546 => {
1547 output.push('1');
1548 output.push('.');
1549 }
1550 '\u{2474}' // ⑴ [PARENTHESIZED DIGIT ONE]
1551 => {
1552 output.push('(');
1553 output.push('1');
1554 output.push(')');
1555 }
1556 '\u{00B2}'| // ² [SUPERSCRIPT TWO]
1557 '\u{2082}'| // ₂ [SUBSCRIPT TWO]
1558 '\u{2461}'| // ② [CIRCLED DIGIT TWO]
1559 '\u{24F6}'| // ⓶ [DOUBLE CIRCLED DIGIT TWO]
1560 '\u{2777}'| // ❷ [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
1561 '\u{2781}'| // ➁ [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
1562 '\u{278B}'| // ➋ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
1563 '\u{FF12}' // 2 [FULLWIDTH DIGIT TWO]
1564 => {
1565 output.push('2');
1566 }
1567 '\u{2489}' // ⒉ [DIGIT TWO FULL STOP]
1568 => {
1569 output.push('2');
1570 output.push('.');
1571 }
1572 '\u{2475}' // ⑵ [PARENTHESIZED DIGIT TWO]
1573 => {
1574 output.push('(');
1575 output.push('2');
1576 output.push(')');
1577 }
1578 '\u{00B3}'| // ³ [SUPERSCRIPT THREE]
1579 '\u{2083}'| // ₃ [SUBSCRIPT THREE]
1580 '\u{2462}'| // ③ [CIRCLED DIGIT THREE]
1581 '\u{24F7}'| // ⓷ [DOUBLE CIRCLED DIGIT THREE]
1582 '\u{2778}'| // ❸ [DINGBAT NEGATIVE CIRCLED DIGIT THREE]
1583 '\u{2782}'| // ➂ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
1584 '\u{278C}'| // ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
1585 '\u{FF13}' // 3 [FULLWIDTH DIGIT THREE]
1586 => {
1587 output.push('3');
1588 }
1589 '\u{248A}' // ⒊ [DIGIT THREE FULL STOP]
1590 => {
1591 output.push('3');
1592 output.push('.');
1593 }
1594 '\u{2476}' // ⑶ [PARENTHESIZED DIGIT THREE]
1595 => {
1596 output.push('(');
1597 output.push('3');
1598 output.push(')');
1599 }
1600 '\u{2074}'| // ⁴ [SUPERSCRIPT FOUR]
1601 '\u{2084}'| // ₄ [SUBSCRIPT FOUR]
1602 '\u{2463}'| // ④ [CIRCLED DIGIT FOUR]
1603 '\u{24F8}'| // ⓸ [DOUBLE CIRCLED DIGIT FOUR]
1604 '\u{2779}'| // ❹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
1605 '\u{2783}'| // ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
1606 '\u{278D}'| // ➍ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
1607 '\u{FF14}' // 4 [FULLWIDTH DIGIT FOUR]
1608 => {
1609 output.push('4');
1610 }
1611 '\u{248B}' // ⒋ [DIGIT FOUR FULL STOP]
1612 => {
1613 output.push('4');
1614 output.push('.');
1615 }
1616 '\u{2477}' // ⑷ [PARENTHESIZED DIGIT FOUR]
1617 => {
1618 output.push('(');
1619 output.push('4');
1620 output.push(')');
1621 }
1622 '\u{2075}'| // ⁵ [SUPERSCRIPT FIVE]
1623 '\u{2085}'| // ₅ [SUBSCRIPT FIVE]
1624 '\u{2464}'| // ⑤ [CIRCLED DIGIT FIVE]
1625 '\u{24F9}'| // ⓹ [DOUBLE CIRCLED DIGIT FIVE]
1626 '\u{277A}'| // ❺ [DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
1627 '\u{2784}'| // ➄ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
1628 '\u{278E}'| // ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
1629 '\u{FF15}' // 5 [FULLWIDTH DIGIT FIVE]
1630 => {
1631 output.push('5');
1632 }
1633 '\u{248C}' // ⒌ [DIGIT FIVE FULL STOP]
1634 => {
1635 output.push('5');
1636 output.push('.');
1637 }
1638 '\u{2478}' // ⑸ [PARENTHESIZED DIGIT FIVE]
1639 => {
1640 output.push('(');
1641 output.push('5');
1642 output.push(')');
1643 }
1644 '\u{2076}'| // ⁶ [SUPERSCRIPT SIX]
1645 '\u{2086}'| // ₆ [SUBSCRIPT SIX]
1646 '\u{2465}'| // ⑥ [CIRCLED DIGIT SIX]
1647 '\u{24FA}'| // ⓺ [DOUBLE CIRCLED DIGIT SIX]
1648 '\u{277B}'| // ❻ [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
1649 '\u{2785}'| // ➅ [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
1650 '\u{278F}'| // ➏ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
1651 '\u{FF16}' // 6 [FULLWIDTH DIGIT SIX]
1652 => {
1653 output.push('6');
1654 }
1655 '\u{248D}' // ⒍ [DIGIT SIX FULL STOP]
1656 => {
1657 output.push('6');
1658 output.push('.');
1659 }
1660 '\u{2479}' // ⑹ [PARENTHESIZED DIGIT SIX]
1661 => {
1662 output.push('(');
1663 output.push('6');
1664 output.push(')');
1665 }
1666 '\u{2077}'| // ⁷ [SUPERSCRIPT SEVEN]
1667 '\u{2087}'| // ₇ [SUBSCRIPT SEVEN]
1668 '\u{2466}'| // ⑦ [CIRCLED DIGIT SEVEN]
1669 '\u{24FB}'| // ⓻ [DOUBLE CIRCLED DIGIT SEVEN]
1670 '\u{277C}'| // ❼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
1671 '\u{2786}'| // ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
1672 '\u{2790}'| // ➐ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
1673 '\u{FF17}' // 7 [FULLWIDTH DIGIT SEVEN]
1674 => {
1675 output.push('7');
1676 }
1677 '\u{248E}' // ⒎ [DIGIT SEVEN FULL STOP]
1678 => {
1679 output.push('7');
1680 output.push('.');
1681 }
1682 '\u{247A}' // ⑺ [PARENTHESIZED DIGIT SEVEN]
1683 => {
1684 output.push('(');
1685 output.push('7');
1686 output.push(')');
1687 }
1688 '\u{2078}'| // ⁸ [SUPERSCRIPT EIGHT]
1689 '\u{2088}'| // ₈ [SUBSCRIPT EIGHT]
1690 '\u{2467}'| // ⑧ [CIRCLED DIGIT EIGHT]
1691 '\u{24FC}'| // ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
1692 '\u{277D}'| // ❽ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
1693 '\u{2787}'| // ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
1694 '\u{2791}'| // ➑ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
1695 '\u{FF18}' // 8 [FULLWIDTH DIGIT EIGHT]
1696 => {
1697 output.push('8');
1698 }
1699 '\u{248F}' // ⒏ [DIGIT EIGHT FULL STOP]
1700 => {
1701 output.push('8');
1702 output.push('.');
1703 }
1704 '\u{247B}' // ⑻ [PARENTHESIZED DIGIT EIGHT]
1705 => {
1706 output.push('(');
1707 output.push('8');
1708 output.push(')');
1709 }
1710 '\u{2079}'| // ⁹ [SUPERSCRIPT NINE]
1711 '\u{2089}'| // ₉ [SUBSCRIPT NINE]
1712 '\u{2468}'| // ⑨ [CIRCLED DIGIT NINE]
1713 '\u{24FD}'| // ⓽ [DOUBLE CIRCLED DIGIT NINE]
1714 '\u{277E}'| // ❾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
1715 '\u{2788}'| // ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
1716 '\u{2792}'| // ➒ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
1717 '\u{FF19}' // 9 [FULLWIDTH DIGIT NINE]
1718 => {
1719 output.push('9');
1720 }
1721 '\u{2490}' // ⒐ [DIGIT NINE FULL STOP]
1722 => {
1723 output.push('9');
1724 output.push('.');
1725 }
1726 '\u{247C}' // ⑼ [PARENTHESIZED DIGIT NINE]
1727 => {
1728 output.push('(');
1729 output.push('9');
1730 output.push(')');
1731 }
1732 '\u{2469}'| // ⑩ [CIRCLED NUMBER TEN]
1733 '\u{24FE}'| // ⓾ [DOUBLE CIRCLED NUMBER TEN]
1734 '\u{277F}'| // ❿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
1735 '\u{2789}'| // ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
1736 '\u{2793}' // ➓ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
1737 => {
1738 output.push('1');
1739 output.push('0');
1740 }
1741 '\u{2491}' // ⒑ [NUMBER TEN FULL STOP]
1742 => {
1743 output.push('1');
1744 output.push('0');
1745 output.push('.');
1746 }
1747 '\u{247D}' // ⑽ [PARENTHESIZED NUMBER TEN]
1748 => {
1749 output.push('(');
1750 output.push('1');
1751 output.push('0');
1752 output.push(')');
1753 }
1754 '\u{246A}'| // ⑪ [CIRCLED NUMBER ELEVEN]
1755 '\u{24EB}' // ⓫ [NEGATIVE CIRCLED NUMBER ELEVEN]
1756 => {
1757 output.push('1');
1758 output.push('1');
1759 }
1760 '\u{2492}' // ⒒ [NUMBER ELEVEN FULL STOP]
1761 => {
1762 output.push('1');
1763 output.push('1');
1764 output.push('.');
1765 }
1766 '\u{247E}' // ⑾ [PARENTHESIZED NUMBER ELEVEN]
1767 => {
1768 output.push('(');
1769 output.push('1');
1770 output.push('1');
1771 output.push(')');
1772 }
1773 '\u{246B}'| // ⑫ [CIRCLED NUMBER TWELVE]
1774 '\u{24EC}' // ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
1775 => {
1776 output.push('1');
1777 output.push('2');
1778 }
1779 '\u{2493}' // ⒓ [NUMBER TWELVE FULL STOP]
1780 => {
1781 output.push('1');
1782 output.push('2');
1783 output.push('.');
1784 }
1785 '\u{247F}' // ⑿ [PARENTHESIZED NUMBER TWELVE]
1786 => {
1787 output.push('(');
1788 output.push('1');
1789 output.push('2');
1790 output.push(')');
1791 }
1792 '\u{246C}'| // ⑬ [CIRCLED NUMBER THIRTEEN]
1793 '\u{24ED}' // ⓭ [NEGATIVE CIRCLED NUMBER THIRTEEN]
1794 => {
1795 output.push('1');
1796 output.push('3');
1797 }
1798 '\u{2494}' // ⒔ [NUMBER THIRTEEN FULL STOP]
1799 => {
1800 output.push('1');
1801 output.push('3');
1802 output.push('.');
1803 }
1804 '\u{2480}' // ⒀ [PARENTHESIZED NUMBER THIRTEEN]
1805 => {
1806 output.push('(');
1807 output.push('1');
1808 output.push('3');
1809 output.push(')');
1810 }
1811 '\u{246D}'| // ⑭ [CIRCLED NUMBER FOURTEEN]
1812 '\u{24EE}' // ⓮ [NEGATIVE CIRCLED NUMBER FOURTEEN]
1813 => {
1814 output.push('1');
1815 output.push('4');
1816 }
1817 '\u{2495}' // ⒕ [NUMBER FOURTEEN FULL STOP]
1818 => {
1819 output.push('1');
1820 output.push('4');
1821 output.push('.');
1822 }
1823 '\u{2481}' // ⒁ [PARENTHESIZED NUMBER FOURTEEN]
1824 => {
1825 output.push('(');
1826 output.push('1');
1827 output.push('4');
1828 output.push(')');
1829 }
1830 '\u{246E}'| // ⑮ [CIRCLED NUMBER FIFTEEN]
1831 '\u{24EF}' // ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
1832 => {
1833 output.push('1');
1834 output.push('5');
1835 }
1836 '\u{2496}' // ⒖ [NUMBER FIFTEEN FULL STOP]
1837 => {
1838 output.push('1');
1839 output.push('5');
1840 output.push('.');
1841 }
1842 '\u{2482}' // ⒂ [PARENTHESIZED NUMBER FIFTEEN]
1843 => {
1844 output.push('(');
1845 output.push('1');
1846 output.push('5');
1847 output.push(')');
1848 }
1849 '\u{246F}'| // ⑯ [CIRCLED NUMBER SIXTEEN]
1850 '\u{24F0}' // ⓰ [NEGATIVE CIRCLED NUMBER SIXTEEN]
1851 => {
1852 output.push('1');
1853 output.push('6');
1854 }
1855 '\u{2497}' // ⒗ [NUMBER SIXTEEN FULL STOP]
1856 => {
1857 output.push('1');
1858 output.push('6');
1859 output.push('.');
1860 }
1861 '\u{2483}' // ⒃ [PARENTHESIZED NUMBER SIXTEEN]
1862 => {
1863 output.push('(');
1864 output.push('1');
1865 output.push('6');
1866 output.push(')');
1867 }
1868 '\u{2470}'| // ⑰ [CIRCLED NUMBER SEVENTEEN]
1869 '\u{24F1}' // ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
1870 => {
1871 output.push('1');
1872 output.push('7');
1873 }
1874 '\u{2498}' // ⒘ [NUMBER SEVENTEEN FULL STOP]
1875 => {
1876 output.push('1');
1877 output.push('7');
1878 output.push('.');
1879 }
1880 '\u{2484}' // ⒄ [PARENTHESIZED NUMBER SEVENTEEN]
1881 => {
1882 output.push('(');
1883 output.push('1');
1884 output.push('7');
1885 output.push(')');
1886 }
1887 '\u{2471}'| // ⑱ [CIRCLED NUMBER EIGHTEEN]
1888 '\u{24F2}' // ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
1889 => {
1890 output.push('1');
1891 output.push('8');
1892 }
1893 '\u{2499}' // ⒙ [NUMBER EIGHTEEN FULL STOP]
1894 => {
1895 output.push('1');
1896 output.push('8');
1897 output.push('.');
1898 }
1899 '\u{2485}' // ⒅ [PARENTHESIZED NUMBER EIGHTEEN]
1900 => {
1901 output.push('(');
1902 output.push('1');
1903 output.push('8');
1904 output.push(')');
1905 }
1906 '\u{2472}'| // ⑲ [CIRCLED NUMBER NINETEEN]
1907 '\u{24F3}' // ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
1908 => {
1909 output.push('1');
1910 output.push('9');
1911 }
1912 '\u{249A}' // ⒚ [NUMBER NINETEEN FULL STOP]
1913 => {
1914 output.push('1');
1915 output.push('9');
1916 output.push('.');
1917 }
1918 '\u{2486}' // ⒆ [PARENTHESIZED NUMBER NINETEEN]
1919 => {
1920 output.push('(');
1921 output.push('1');
1922 output.push('9');
1923 output.push(')');
1924 }
1925 '\u{2473}'| // ⑳ [CIRCLED NUMBER TWENTY]
1926 '\u{24F4}' // ⓴ [NEGATIVE CIRCLED NUMBER TWENTY]
1927 => {
1928 output.push('2');
1929 output.push('0');
1930 }
1931 '\u{249B}' // ⒛ [NUMBER TWENTY FULL STOP]
1932 => {
1933 output.push('2');
1934 output.push('0');
1935 output.push('.');
1936 }
1937 '\u{2487}' // ⒇ [PARENTHESIZED NUMBER TWENTY]
1938 => {
1939 output.push('(');
1940 output.push('2');
1941 output.push('0');
1942 output.push(')');
1943 }
1944 '\u{00AB}'| // « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
1945 '\u{00BB}'| // » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
1946 '\u{201C}'| // “ [LEFT DOUBLE QUOTATION MARK]
1947 '\u{201D}'| // ” [RIGHT DOUBLE QUOTATION MARK]
1948 '\u{201E}'| // „ [DOUBLE LOW-9 QUOTATION MARK]
1949 '\u{2033}'| // ″ [DOUBLE PRIME]
1950 '\u{2036}'| // ‶ [REVERSED DOUBLE PRIME]
1951 '\u{275D}'| // ❝ [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
1952 '\u{275E}'| // ❞ [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
1953 '\u{276E}'| // ❮ [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
1954 '\u{276F}'| // ❯ [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
1955 '\u{FF02}' // " [FULLWIDTH QUOTATION MARK]
1956 => {
1957 output.push('"');
1958 }
1959 '\u{2018}'| // ‘ [LEFT SINGLE QUOTATION MARK]
1960 '\u{2019}'| // ’ [RIGHT SINGLE QUOTATION MARK]
1961 '\u{201A}'| // ‚ [SINGLE LOW-9 QUOTATION MARK]
1962 '\u{201B}'| // ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
1963 '\u{2032}'| // ′ [PRIME]
1964 '\u{2035}'| // ‵ [REVERSED PRIME]
1965 '\u{2039}'| // ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
1966 '\u{203A}'| // › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
1967 '\u{275B}'| // ❛ [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
1968 '\u{275C}'| // ❜ [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
1969 '\u{FF07}' // ' [FULLWIDTH APOSTROPHE]
1970 => {
1971 output.push('\'');
1972 }
1973 '\u{2010}'| // ‐ [HYPHEN]
1974 '\u{2011}'| // ‑ [NON-BREAKING HYPHEN]
1975 '\u{2012}'| // ‒ [FIGURE DASH]
1976 '\u{2013}'| // – [EN DASH]
1977 '\u{2014}'| // — [EM DASH]
1978 '\u{207B}'| // ⁻ [SUPERSCRIPT MINUS]
1979 '\u{208B}'| // ₋ [SUBSCRIPT MINUS]
1980 '\u{FF0D}' // - [FULLWIDTH HYPHEN-MINUS]
1981 => {
1982 output.push('-');
1983 }
1984 '\u{2045}'| // ⁅ [LEFT SQUARE BRACKET WITH QUILL]
1985 '\u{2772}'| // ❲ [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
1986 '\u{FF3B}' // [ [FULLWIDTH LEFT SQUARE BRACKET]
1987 => {
1988 output.push('[');
1989 }
1990 '\u{2046}'| // ⁆ [RIGHT SQUARE BRACKET WITH QUILL]
1991 '\u{2773}'| // ❳ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
1992 '\u{FF3D}' // ] [FULLWIDTH RIGHT SQUARE BRACKET]
1993 => {
1994 output.push(']');
1995 }
1996 '\u{207D}'| // ⁽ [SUPERSCRIPT LEFT PARENTHESIS]
1997 '\u{208D}'| // ₍ [SUBSCRIPT LEFT PARENTHESIS]
1998 '\u{2768}'| // ❨ [MEDIUM LEFT PARENTHESIS ORNAMENT]
1999 '\u{276A}'| // ❪ [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
2000 '\u{FF08}' // ( [FULLWIDTH LEFT PARENTHESIS]
2001 => {
2002 output.push('(');
2003 }
2004 '\u{2E28}' // ⸨ [LEFT DOUBLE PARENTHESIS]
2005 => {
2006 output.push('(');
2007 output.push('(');
2008 }
2009 '\u{207E}'| // ⁾ [SUPERSCRIPT RIGHT PARENTHESIS]
2010 '\u{208E}'| // ₎ [SUBSCRIPT RIGHT PARENTHESIS]
2011 '\u{2769}'| // ❩ [MEDIUM RIGHT PARENTHESIS ORNAMENT]
2012 '\u{276B}'| // ❫ [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
2013 '\u{FF09}' // ) [FULLWIDTH RIGHT PARENTHESIS]
2014 => {
2015 output.push(')');
2016 }
2017 '\u{2E29}' // ⸩ [RIGHT DOUBLE PARENTHESIS]
2018 => {
2019 output.push(')');
2020 output.push(')');
2021 }
2022 '\u{276C}'| // ❬ [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
2023 '\u{2770}'| // ❰ [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
2024 '\u{FF1C}' // < [FULLWIDTH LESS-THAN SIGN]
2025 => {
2026 output.push('<');
2027 }
2028 '\u{276D}'| // ❭ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
2029 '\u{2771}'| // ❱ [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
2030 '\u{FF1E}' // > [FULLWIDTH GREATER-THAN SIGN]
2031 => {
2032 output.push('>');
2033 }
2034 '\u{2774}'| // ❴ [MEDIUM LEFT CURLY BRACKET ORNAMENT]
2035 '\u{FF5B}' // { [FULLWIDTH LEFT CURLY BRACKET]
2036 => {
2037 output.push('{');
2038 }
2039 '\u{2775}'| // ❵ [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
2040 '\u{FF5D}' // } [FULLWIDTH RIGHT CURLY BRACKET]
2041 => {
2042 output.push('}');
2043 }
2044 '\u{207A}'| // ⁺ [SUPERSCRIPT PLUS SIGN]
2045 '\u{208A}'| // ₊ [SUBSCRIPT PLUS SIGN]
2046 '\u{FF0B}' // + [FULLWIDTH PLUS SIGN]
2047 => {
2048 output.push('+');
2049 }
2050 '\u{207C}'| // ⁼ [SUPERSCRIPT EQUALS SIGN]
2051 '\u{208C}'| // ₌ [SUBSCRIPT EQUALS SIGN]
2052 '\u{FF1D}' // = [FULLWIDTH EQUALS SIGN]
2053 => {
2054 output.push('=');
2055 }
2056 '\u{FF01}' // ! [FULLWIDTH EXCLAMATION MARK]
2057 => {
2058 output.push('!');
2059 }
2060 '\u{203C}' // ‼ [DOUBLE EXCLAMATION MARK]
2061 => {
2062 output.push('!');
2063 output.push('!');
2064 }
2065 '\u{2049}' // ⁉ [EXCLAMATION QUESTION MARK]
2066 => {
2067 output.push('!');
2068 output.push('?');
2069 }
2070 '\u{FF03}' // # [FULLWIDTH NUMBER SIGN]
2071 => {
2072 output.push('#');
2073 }
2074 '\u{FF04}' // $ [FULLWIDTH DOLLAR SIGN]
2075 => {
2076 output.push('$');
2077 }
2078 '\u{2052}'| // ⁒ [COMMERCIAL MINUS SIGN]
2079 '\u{FF05}' // % [FULLWIDTH PERCENT SIGN]
2080 => {
2081 output.push('%');
2082 }
2083 '\u{FF06}' // & [FULLWIDTH AMPERSAND]
2084 => {
2085 output.push('&');
2086 }
2087 '\u{204E}'| // ⁎ [LOW ASTERISK]
2088 '\u{FF0A}' // * [FULLWIDTH ASTERISK]
2089 => {
2090 output.push('*');
2091 }
2092 '\u{FF0C}' // , [FULLWIDTH COMMA]
2093 => {
2094 output.push(',');
2095 }
2096 '\u{FF0E}' // . [FULLWIDTH FULL STOP]
2097 => {
2098 output.push('.');
2099 }
2100 '\u{2044}'| // ⁄ [FRACTION SLASH]
2101 '\u{FF0F}' // / [FULLWIDTH SOLIDUS]
2102 => {
2103 output.push('/');
2104 }
2105 '\u{FF1A}' // : [FULLWIDTH COLON]
2106 => {
2107 output.push(':');
2108 }
2109 '\u{204F}'| // ⁏ [REVERSED SEMICOLON]
2110 '\u{FF1B}' // ; [FULLWIDTH SEMICOLON]
2111 => {
2112 output.push(';');
2113 }
2114 '\u{FF1F}' // ? [FULLWIDTH QUESTION MARK]
2115 => {
2116 output.push('?');
2117 }
2118 '\u{2047}' // ⁇ [DOUBLE QUESTION MARK]
2119 => {
2120 output.push('?');
2121 output.push('?');
2122 }
2123 '\u{2048}' // ⁈ [QUESTION EXCLAMATION MARK]
2124 => {
2125 output.push('?');
2126 output.push('!');
2127 }
2128 '\u{FF20}' // @ [FULLWIDTH COMMERCIAL AT]
2129 => {
2130 output.push('@');
2131 }
2132 '\u{FF3C}' // \ [FULLWIDTH REVERSE SOLIDUS]
2133 => {
2134 output.push('\\');
2135 }
2136 '\u{2038}'| // ‸ [CARET]
2137 '\u{FF3E}' // ^ [FULLWIDTH CIRCUMFLEX ACCENT]
2138 => {
2139 output.push('^');
2140 }
2141 '\u{FF3F}' // _ [FULLWIDTH LOW LINE]
2142 => {
2143 output.push('_');
2144 }
2145 '\u{2053}'| // ⁓ [SWUNG DASH]
2146 '\u{FF5E}' // ~ [FULLWIDTH TILDE]
2147 => {
2148 output.push('~');
2149 }
2150 _ =>
2151 output.push(c)
2152 }
2153 }
2154 return output;
2155}
2156
2157#[cfg(test)]
2158mod tests {
2159 use crate::fold_to_ascii;
2160
2161 #[test]
2162 fn test_latin1_accents() {
2163 let foldings = vec![
2164 ("Des", "Des"),
2165 ("mot", "mot"),
2166 ("clés", "cles"),
2167 ("À", "A"),
2168 ("LA", "LA"),
2169 ("CHAÎNE", "CHAINE"),
2170 ("À", "A"),
2171 ("Á", "A"),
2172 ("Â", "A"),
2173 ("Ã", "A"),
2174 ("Ä", "A"),
2175 ("Å", "A"),
2176 ("Æ", "AE"),
2177 ("Ç", "C"),
2178 ("È", "E"),
2179 ("É", "E"),
2180 ("Ê", "E"),
2181 ("Ë", "E"),
2182 ("Ì", "I"),
2183 ("Í", "I"),
2184 ("Î", "I"),
2185 ("Ï", "I"),
2186 ("IJ", "IJ"),
2187 ("Ð", "D"),
2188 ("Ñ", "N"),
2189 ("Ò", "O"),
2190 ("Ó", "O"),
2191 ("Ô", "O"),
2192 ("Õ", "O"),
2193 ("Ö", "O"),
2194 ("Ø", "O"),
2195 ("Œ", "OE"),
2196 ("Þ", "TH"),
2197 ("Ù", "U"),
2198 ("Ú", "U"),
2199 ("Û", "U"),
2200 ("Ü", "U"),
2201 ("Ý", "Y"),
2202 ("Ÿ", "Y"),
2203 ("à", "a"),
2204 ("á", "a"),
2205 ("â", "a"),
2206 ("ã", "a"),
2207 ("ä", "a"),
2208 ("å", "a"),
2209 ("æ", "ae"),
2210 ("ç", "c"),
2211 ("è", "e"),
2212 ("é", "e"),
2213 ("ê", "e"),
2214 ("ë", "e"),
2215 ("ì", "i"),
2216 ("í", "i"),
2217 ("î", "i"),
2218 ("ï", "i"),
2219 ("ij", "ij"),
2220 ("ð", "d"),
2221 ("ñ", "n"),
2222 ("ò", "o"),
2223 ("ó", "o"),
2224 ("ô", "o"),
2225 ("õ", "o"),
2226 ("ö", "o"),
2227 ("ø", "o"),
2228 ("œ", "oe"),
2229 ("ß", "ss"),
2230 ("þ", "th"),
2231 ("ù", "u"),
2232 ("ú", "u"),
2233 ("û", "u"),
2234 ("ü", "u"),
2235 ("ý", "y"),
2236 ("ÿ", "y"),
2237 ("fi", "fi"),
2238 ("fl", "fl")
2239 ];
2240
2241 for (input, expected) in foldings {
2242 assert_eq!(fold_to_ascii(input), expected)
2243 }
2244 }
2245
2246 #[test]
2247 fn test_unmodified_letters() {
2248 assert_eq!(fold_to_ascii("§"), "§");
2249 assert_eq!(fold_to_ascii("¦"), "¦");
2250 assert_eq!(fold_to_ascii("¤"), "¤");
2251 assert_eq!(fold_to_ascii("END"), "END");
2252 }
2253
2254 #[test]
2255 fn test_all_foldings() {
2256 let foldings = vec![
2257 (r#"ÀÁÂÃÄÅĀĂĄƏǍǞǠǺȀȂȦȺᴀḀẠẢẤẦẨẪẬẮẰẲẴẶⒶA"#, r#"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"#),
2258 (r#"àáâãäåāăąǎǟǡǻȁȃȧɐəɚᶏḁᶕẚạảấầẩẫậắằẳẵặₐₔⓐⱥⱯa"#, r#"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"#),
2259 (r#"Ꜳ"#, r#"AA"#),
2260 (r#"ÆǢǼᴁ"#, r#"AEAEAEAE"#),
2261 (r#"Ꜵ"#, r#"AO"#),
2262 (r#"Ꜷ"#, r#"AU"#),
2263 (r#"ꜸꜺ"#, r#"AVAV"#),
2264 (r#"Ꜽ"#, r#"AY"#),
2265 (r#"⒜"#, r#"(a)"#),
2266 (r#"ꜳ"#, r#"aa"#),
2267 (r#"æǣǽᴂ"#, r#"aeaeaeae"#),
2268 (r#"ꜵ"#, r#"ao"#),
2269 (r#"ꜷ"#, r#"au"#),
2270 (r#"ꜹꜻ"#, r#"avav"#),
2271 (r#"ꜽ"#, r#"ay"#),
2272 (r#"ƁƂɃʙᴃḂḄḆⒷB"#, r#"BBBBBBBBBB"#),
2273 (r#"ƀƃɓᵬᶀḃḅḇⓑb"#, r#"bbbbbbbbbb"#),
2274 (r#"⒝"#, r#"(b)"#),
2275 (r#"ÇĆĈĊČƇȻʗᴄḈⒸC"#, r#"CCCCCCCCCCCC"#),
2276 (r#"çćĉċčƈȼɕḉↄⓒꜾꜿc"#, r#"cccccccccccccc"#),
2277 (r#"⒞"#, r#"(c)"#),
2278 (r#"ÐĎĐƉƊƋᴅᴆḊḌḎḐḒⒹꝹD"#, r#"DDDDDDDDDDDDDDDD"#),
2279 (r#"ðďđƌȡɖɗᵭᶁᶑḋḍḏḑḓⓓꝺd"#, r#"dddddddddddddddddd"#),
2280 (r#"DŽDZ"#, r#"DZDZ"#),
2281 (r#"DžDz"#, r#"DzDz"#),
2282 (r#"⒟"#, r#"(d)"#),
2283 (r#"ȸ"#, r#"db"#),
2284 (r#"dždzʣʥ"#, r#"dzdzdzdz"#),
2285 (r#"ÈÉÊËĒĔĖĘĚƎƐȄȆȨɆᴇḔḖḘḚḜẸẺẼẾỀỂỄỆⒺⱻE"#, r#"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"#),
2286 (r#"èéêëēĕėęěǝȅȇȩɇɘɛɜɝɞʚᴈᶒᶓᶔḕḗḙḛḝẹẻẽếềểễệₑⓔⱸe"#, r#"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"#),
2287 (r#"⒠"#, r#"(e)"#),
2288 (r#"ƑḞⒻꜰꝻꟻF"#, r#"FFFFFFF"#),
2289 (r#"ƒᵮᶂḟẛⓕꝼf"#, r#"ffffffff"#),
2290 (r#"⒡"#, r#"(f)"#),
2291 (r#"ff"#, r#"ff"#),
2292 (r#"ffi"#, r#"ffi"#),
2293 (r#"ffl"#, r#"ffl"#),
2294 (r#"fi"#, r#"fi"#),
2295 (r#"fl"#, r#"fl"#),
2296 (r#"ĜĞĠĢƓǤǥǦǧǴɢʛḠⒼꝽꝾG"#, r#"GGGGGGGGGGGGGGGGG"#),
2297 (r#"ĝğġģǵɠɡᵷᵹᶃḡⓖꝿg"#, r#"gggggggggggggg"#),
2298 (r#"⒢"#, r#"(g)"#),
2299 (r#"ĤĦȞʜḢḤḦḨḪⒽⱧⱵH"#, r#"HHHHHHHHHHHHH"#),
2300 (r#"ĥħȟɥɦʮʯḣḥḧḩḫẖⓗⱨⱶh"#, r#"hhhhhhhhhhhhhhhhh"#),
2301 (r#"Ƕ"#, r#"HV"#),
2302 (r#"⒣"#, r#"(h)"#),
2303 (r#"ƕ"#, r#"hv"#),
2304 (r#"ÌÍÎÏĨĪĬĮİƖƗǏȈȊɪᵻḬḮỈỊⒾꟾI"#, r#"IIIIIIIIIIIIIIIIIIIIIII"#),
2305 (r#"ìíîïĩīĭįıǐȉȋɨᴉᵢᵼᶖḭḯỉịⁱⓘi"#, r#"iiiiiiiiiiiiiiiiiiiiiiii"#),
2306 (r#"IJ"#, r#"IJ"#),
2307 (r#"⒤"#, r#"(i)"#),
2308 (r#"ij"#, r#"ij"#),
2309 (r#"ĴɈᴊⒿJ"#, r#"JJJJJ"#),
2310 (r#"ĵǰȷɉɟʄʝⓙⱼj"#, r#"jjjjjjjjjj"#),
2311 (r#"⒥"#, r#"(j)"#),
2312 (r#"ĶƘǨᴋḰḲḴⓀⱩꝀꝂꝄK"#, r#"KKKKKKKKKKKKK"#),
2313 (r#"ķƙǩʞᶄḱḳḵⓚⱪꝁꝃꝅk"#, r#"kkkkkkkkkkkkkk"#),
2314 (r#"⒦"#, r#"(k)"#),
2315 (r#"ĹĻĽĿŁȽʟᴌḶḸḺḼⓁⱠⱢꝆꝈꞀL"#, r#"LLLLLLLLLLLLLLLLLLL"#),
2316 (r#"ĺļľŀłƚȴɫɬɭᶅḷḹḻḽⓛⱡꝇꝉꞁl"#, r#"lllllllllllllllllllll"#),
2317 (r#"LJ"#, r#"LJ"#),
2318 (r#"Ỻ"#, r#"LL"#),
2319 (r#"Lj"#, r#"Lj"#),
2320 (r#"⒧"#, r#"(l)"#),
2321 (r#"lj"#, r#"lj"#),
2322 (r#"ỻ"#, r#"ll"#),
2323 (r#"ʪ"#, r#"ls"#),
2324 (r#"ʫ"#, r#"lz"#),
2325 (r#"ƜᴍḾṀṂⓂⱮꟽꟿM"#, r#"MMMMMMMMMM"#),
2326 (r#"ɯɰɱᵯᶆḿṁṃⓜm"#, r#"mmmmmmmmmm"#),
2327 (r#"⒨"#, r#"(m)"#),
2328 (r#"ÑŃŅŇŊƝǸȠɴᴎṄṆṈṊⓃN"#, r#"NNNNNNNNNNNNNNNN"#),
2329 (r#"ñńņňʼnŋƞǹȵɲɳᵰᶇṅṇṉṋⁿⓝn"#, r#"nnnnnnnnnnnnnnnnnnnn"#),
2330 (r#"NJ"#, r#"NJ"#),
2331 (r#"Nj"#, r#"Nj"#),
2332 (r#"⒩"#, r#"(n)"#),
2333 (r#"nj"#, r#"nj"#),
2334 (r#"ÒÓÔÕÖØŌŎŐƆƟƠǑǪǬǾȌȎȪȬȮȰᴏᴐṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢⓄꝊꝌO"#, r#"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"#),
2335 (r#"òóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱɔɵᴖᴗᶗṍṏṑṓọỏốồổỗộớờởỡợₒⓞⱺꝋꝍo"#, r#"ooooooooooooooooooooooooooooooooooooooooooooooo"#),
2336 (r#"Œɶ"#, r#"OEOE"#),
2337 (r#"Ꝏ"#, r#"OO"#),
2338 (r#"Ȣᴕ"#, r#"OUOU"#),
2339 (r#"⒪"#, r#"(o)"#),
2340 (r#"œᴔ"#, r#"oeoe"#),
2341 (r#"ꝏ"#, r#"oo"#),
2342 (r#"ȣ"#, r#"ou"#),
2343 (r#"ƤᴘṔṖⓅⱣꝐꝒꝔP"#, r#"PPPPPPPPPP"#),
2344 (r#"ƥᵱᵽᶈṕṗⓟꝑꝓꝕꟼp"#, r#"pppppppppppp"#),
2345 (r#"⒫"#, r#"(p)"#),
2346 (r#"ɊⓆꝖꝘQ"#, r#"QQQQQ"#),
2347 (r#"ĸɋʠⓠꝗꝙq"#, r#"qqqqqqq"#),
2348 (r#"⒬"#, r#"(q)"#),
2349 (r#"ȹ"#, r#"qp"#),
2350 (r#"ŔŖŘȐȒɌʀʁᴙᴚṘṚṜṞⓇⱤꝚꞂR"#, r#"RRRRRRRRRRRRRRRRRRR"#),
2351 (r#"ŕŗřȑȓɍɼɽɾɿᵣᵲᵳᶉṙṛṝṟⓡꝛꞃr"#, r#"rrrrrrrrrrrrrrrrrrrrrr"#),
2352 (r#"⒭"#, r#"(r)"#),
2353 (r#"ŚŜŞŠȘṠṢṤṦṨⓈꜱꞅS"#, r#"SSSSSSSSSSSSSS"#),
2354 (r#"śŝşšſșȿʂᵴᶊṡṣṥṧṩẜẝⓢꞄs"#, r#"ssssssssssssssssssss"#),
2355 (r#"ẞ"#, r#"SS"#),
2356 (r#"⒮"#, r#"(s)"#),
2357 (r#"ß"#, r#"ss"#),
2358 (r#"st"#, r#"st"#),
2359 (r#"ŢŤŦƬƮȚȾᴛṪṬṮṰⓉꞆT"#, r#"TTTTTTTTTTTTTTT"#),
2360 (r#"ţťŧƫƭțȶʇʈᵵṫṭṯṱẗⓣⱦt"#, r#"tttttttttttttttttt"#),
2361 (r#"ÞꝦ"#, r#"THTH"#),
2362 (r#"Ꜩ"#, r#"TZ"#),
2363 (r#"⒯"#, r#"(t)"#),
2364 (r#"ʨ"#, r#"tc"#),
2365 (r#"þᵺꝧ"#, r#"ththth"#),
2366 (r#"ʦ"#, r#"ts"#),
2367 (r#"ꜩ"#, r#"tz"#),
2368 (r#"ÙÚÛÜŨŪŬŮŰŲƯǓǕǗǙǛȔȖɄᴜᵾṲṴṶṸṺỤỦỨỪỬỮỰⓊU"#, r#"UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"#),
2369 (r#"ùúûüũūŭůűųưǔǖǘǚǜȕȗʉᵤᶙṳṵṷṹṻụủứừửữựⓤu"#, r#"uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"#),
2370 (r#"⒰"#, r#"(u)"#),
2371 (r#"ᵫ"#, r#"ue"#),
2372 (r#"ƲɅᴠṼṾỼⓋꝞꝨV"#, r#"VVVVVVVVVV"#),
2373 (r#"ʋʌᵥᶌṽṿⓥⱱⱴꝟv"#, r#"vvvvvvvvvvv"#),
2374 (r#"Ꝡ"#, r#"VY"#),
2375 (r#"⒱"#, r#"(v)"#),
2376 (r#"ꝡ"#, r#"vy"#),
2377 (r#"ŴǷᴡẀẂẄẆẈⓌⱲW"#, r#"WWWWWWWWWWW"#),
2378 (r#"ŵƿʍẁẃẅẇẉẘⓦⱳw"#, r#"wwwwwwwwwwww"#),
2379 (r#"⒲"#, r#"(w)"#),
2380 (r#"ẊẌⓍX"#, r#"XXXX"#),
2381 (r#"ᶍẋẍₓⓧx"#, r#"xxxxxx"#),
2382 (r#"⒳"#, r#"(x)"#),
2383 (r#"ÝŶŸƳȲɎʏẎỲỴỶỸỾⓎY"#, r#"YYYYYYYYYYYYYYY"#),
2384 (r#"ýÿŷƴȳɏʎẏẙỳỵỷỹỿⓨy"#, r#"yyyyyyyyyyyyyyyy"#),
2385 (r#"⒴"#, r#"(y)"#),
2386 (r#"ŹŻŽƵȜȤᴢẐẒẔⓏⱫꝢZ"#, r#"ZZZZZZZZZZZZZZ"#),
2387 (r#"źżžƶȝȥɀʐʑᵶᶎẑẓẕⓩⱬꝣz"#, r#"zzzzzzzzzzzzzzzzzz"#),
2388 (r#"⒵"#, r#"(z)"#),
2389 (r#"⁰₀⓪⓿0"#, r#"00000"#),
2390 (r#"¹₁①⓵❶➀➊1"#, r#"11111111"#),
2391 (r#"⒈"#, r#"1."#),
2392 (r#"⑴"#, r#"(1)"#),
2393 (r#"²₂②⓶❷➁➋2"#, r#"22222222"#),
2394 (r#"⒉"#, r#"2."#),
2395 (r#"⑵"#, r#"(2)"#),
2396 (r#"³₃③⓷❸➂➌3"#, r#"33333333"#),
2397 (r#"⒊"#, r#"3."#),
2398 (r#"⑶"#, r#"(3)"#),
2399 (r#"⁴₄④⓸❹➃➍4"#, r#"44444444"#),
2400 (r#"⒋"#, r#"4."#),
2401 (r#"⑷"#, r#"(4)"#),
2402 (r#"⁵₅⑤⓹❺➄➎5"#, r#"55555555"#),
2403 (r#"⒌"#, r#"5."#),
2404 (r#"⑸"#, r#"(5)"#),
2405 (r#"⁶₆⑥⓺❻➅➏6"#, r#"66666666"#),
2406 (r#"⒍"#, r#"6."#),
2407 (r#"⑹"#, r#"(6)"#),
2408 (r#"⁷₇⑦⓻❼➆➐7"#, r#"77777777"#),
2409 (r#"⒎"#, r#"7."#),
2410 (r#"⑺"#, r#"(7)"#),
2411 (r#"⁸₈⑧⓼❽➇➑8"#, r#"88888888"#),
2412 (r#"⒏"#, r#"8."#),
2413 (r#"⑻"#, r#"(8)"#),
2414 (r#"⁹₉⑨⓽❾➈➒9"#, r#"99999999"#),
2415 (r#"⒐"#, r#"9."#),
2416 (r#"⑼"#, r#"(9)"#),
2417 (r#"⑩⓾❿➉➓"#, r#"1010101010"#),
2418 (r#"⒑"#, r#"10."#),
2419 (r#"⑽"#, r#"(10)"#),
2420 (r#"⑪⓫"#, r#"1111"#),
2421 (r#"⒒"#, r#"11."#),
2422 (r#"⑾"#, r#"(11)"#),
2423 (r#"⑫⓬"#, r#"1212"#),
2424 (r#"⒓"#, r#"12."#),
2425 (r#"⑿"#, r#"(12)"#),
2426 (r#"⑬⓭"#, r#"1313"#),
2427 (r#"⒔"#, r#"13."#),
2428 (r#"⒀"#, r#"(13)"#),
2429 (r#"⑭⓮"#, r#"1414"#),
2430 (r#"⒕"#, r#"14."#),
2431 (r#"⒁"#, r#"(14)"#),
2432 (r#"⑮⓯"#, r#"1515"#),
2433 (r#"⒖"#, r#"15."#),
2434 (r#"⒂"#, r#"(15)"#),
2435 (r#"⑯⓰"#, r#"1616"#),
2436 (r#"⒗"#, r#"16."#),
2437 (r#"⒃"#, r#"(16)"#),
2438 (r#"⑰⓱"#, r#"1717"#),
2439 (r#"⒘"#, r#"17."#),
2440 (r#"⒄"#, r#"(17)"#),
2441 (r#"⑱⓲"#, r#"1818"#),
2442 (r#"⒙"#, r#"18."#),
2443 (r#"⒅"#, r#"(18)"#),
2444 (r#"⑲⓳"#, r#"1919"#),
2445 (r#"⒚"#, r#"19."#),
2446 (r#"⒆"#, r#"(19)"#),
2447 (r#"⑳⓴"#, r#"2020"#),
2448 (r#"⒛"#, r#"20."#),
2449 (r#"⒇"#, r#"(20)"#),
2450 (r#"«»“”„″‶❝❞❮❯""#, r#""""""""""""""#),
2451 (r#"‘’‚‛′‵‹›❛❜'"#, r#"'''''''''''"#),
2452 (r#"‐‑‒–—⁻₋-"#, r#"--------"#),
2453 (r#"⁅❲["#, r#"[[["#),
2454 (r#"⁆❳]"#, r#"]]]"#),
2455 (r#"⁽₍❨❪("#, r#"((((("#),
2456 (r#"⸨"#, r#"(("#),
2457 (r#"⁾₎❩❫)"#, r#")))))"#),
2458 (r#"⸩"#, r#"))"#),
2459 (r#"❬❰<"#, r#"<<<"#),
2460 (r#"❭❱>"#, r#">>>"#),
2461 (r#"❴{"#, r#"{{"#),
2462 (r#"❵}"#, r#"}}"#),
2463 (r#"⁺₊+"#, r#"+++"#),
2464 (r#"⁼₌="#, r#"==="#),
2465 (r#"!"#, r#"!"#),
2466 (r#"‼"#, r#"!!"#),
2467 (r#"⁉"#, r#"!?"#),
2468 (r#"#"#, r#"#"#),
2469 (r#"$"#, r#"$"#),
2470 (r#"⁒%"#, r#"%%"#),
2471 (r#"&"#, r#"&"#),
2472 (r#"⁎*"#, r#"**"#),
2473 (r#","#, r#","#),
2474 (r#"."#, r#"."#),
2475 (r#"⁄/"#, r#"//"#),
2476 (r#":"#, r#":"#),
2477 (r#"⁏;"#, r#";;"#),
2478 (r#"?"#, r#"?"#),
2479 (r#"⁇"#, r#"??"#),
2480 (r#"⁈"#, r#"?!"#),
2481 (r#"@"#, r#"@"#),
2482 (r#"\"#, r#"\"#),
2483 (r#"‸^"#, r#"^^"#),
2484 (r#"_"#, r#"_"#),
2485 (r#"⁓~"#, r#"~~"#)
2486 ];
2487
2488 for (input, expected) in foldings {
2489 assert_eq!(fold_to_ascii(input), expected)
2490 }
2491 }
2492}