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}