Lucene.Net  3.0.3
Lucene.Net is a .NET port of the Java Lucene Indexing Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties
ASCIIFoldingFilter.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 using Lucene.Net.Analysis.Tokenattributes;
19 using ArrayUtil = Lucene.Net.Util.ArrayUtil;
20 
21 namespace Lucene.Net.Analysis
22 {
23 
57  public sealed class ASCIIFoldingFilter : TokenFilter
58  {
59  public ASCIIFoldingFilter(TokenStream input):base(input)
60  {
61  termAtt = AddAttribute<ITermAttribute>();
62  }
63 
64  private char[] output = new char[512];
65  private int outputPos;
66  private ITermAttribute termAtt;
67 
68  public override bool IncrementToken()
69  {
70  if (input.IncrementToken())
71  {
72  char[] buffer = termAtt.TermBuffer();
73  int length = termAtt.TermLength();
74 
75  // If no characters actually require rewriting then we
76  // just return token as-is:
77  for (int i = 0; i < length; ++i)
78  {
79  char c = buffer[i];
80  if (c >= '\u0080')
81  {
82  FoldToASCII(buffer, length);
83  termAtt.SetTermBuffer(output, 0, outputPos);
84  break;
85  }
86  }
87  return true;
88  }
89  else
90  {
91  return false;
92  }
93  }
94 
102  public void FoldToASCII(char[] input, int length)
103  {
104  // Worst-case length required:
105  int maxSizeNeeded = 4 * length;
106  if (output.Length < maxSizeNeeded)
107  {
108  output = new char[ArrayUtil.GetNextSize(maxSizeNeeded)];
109  }
110 
111  outputPos = 0;
112 
113  for (int pos = 0; pos < length; ++pos)
114  {
115  char c = input[pos];
116 
117  // Quick test: if it's not in range then just keep current character
118  if (c < '\u0080')
119  {
120  output[outputPos++] = c;
121  }
122  else
123  {
124  switch (c)
125  {
126 
127  case '\u00C0':
128  // À [LATIN CAPITAL LETTER A WITH GRAVE]
129  case '\u00C1':
130  // � [LATIN CAPITAL LETTER A WITH ACUTE]
131  case '\u00C2':
132  // Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
133  case '\u00C3':
134  // Ã [LATIN CAPITAL LETTER A WITH TILDE]
135  case '\u00C4':
136  // Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
137  case '\u00C5':
138  // Ã… [LATIN CAPITAL LETTER A WITH RING ABOVE]
139  case '\u0100':
140  // Ä€ [LATIN CAPITAL LETTER A WITH MACRON]
141  case '\u0102':
142  // Ä‚ [LATIN CAPITAL LETTER A WITH BREVE]
143  case '\u0104':
144  // Ä„ [LATIN CAPITAL LETTER A WITH OGONEK]
145  case '\u018F':
146  // � http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
147  case '\u01CD':
148  // � [LATIN CAPITAL LETTER A WITH CARON]
149  case '\u01DE':
150  // Çž [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
151  case '\u01E0':
152  // Ç  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
153  case '\u01FA':
154  // Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
155  case '\u0200':
156  // È€ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
157  case '\u0202':
158  // È‚ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
159  case '\u0226':
160  // Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
161  case '\u023A':
162  // Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
163  case '\u1D00':
164  // á´€ [LATIN LETTER SMALL CAPITAL A]
165  case '\u1E00':
166  // Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
167  case '\u1EA0':
168  // Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
169  case '\u1EA2':
170  // Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
171  case '\u1EA4':
172  // Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
173  case '\u1EA6':
174  // Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
175  case '\u1EA8':
176  // Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
177  case '\u1EAA':
178  // Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
179  case '\u1EAC':
180  // Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
181  case '\u1EAE':
182  // Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
183  case '\u1EB0':
184  // Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
185  case '\u1EB2':
186  // Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
187  case '\u1EB4':
188  // Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
189  case '\u1EB6':
190  // Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
191  case '\u24B6':
192  // â’¶ [CIRCLED LATIN CAPITAL LETTER A]
193  case '\uFF21': // A [FULLWIDTH LATIN CAPITAL LETTER A]
194  output[outputPos++] = 'A';
195  break;
196 
197  case '\u00E0':
198  // à [LATIN SMALL LETTER A WITH GRAVE]
199  case '\u00E1':
200  // á [LATIN SMALL LETTER A WITH ACUTE]
201  case '\u00E2':
202  // â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
203  case '\u00E3':
204  // ã [LATIN SMALL LETTER A WITH TILDE]
205  case '\u00E4':
206  // ä [LATIN SMALL LETTER A WITH DIAERESIS]
207  case '\u00E5':
208  // Ã¥ [LATIN SMALL LETTER A WITH RING ABOVE]
209  case '\u0101':
210  // � [LATIN SMALL LETTER A WITH MACRON]
211  case '\u0103':
212  // ă [LATIN SMALL LETTER A WITH BREVE]
213  case '\u0105':
214  // Ä… [LATIN SMALL LETTER A WITH OGONEK]
215  case '\u01CE':
216  // ÇŽ [LATIN SMALL LETTER A WITH CARON]
217  case '\u01DF':
218  // ÇŸ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
219  case '\u01E1':
220  // Ç¡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
221  case '\u01FB':
222  // Ç» [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
223  case '\u0201':
224  // � [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
225  case '\u0203':
226  // ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
227  case '\u0227':
228  // ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
229  case '\u0250':
230  // � [LATIN SMALL LETTER TURNED A]
231  case '\u0259':
232  // É™ [LATIN SMALL LETTER SCHWA]
233  case '\u025A':
234  // Éš [LATIN SMALL LETTER SCHWA WITH HOOK]
235  case '\u1D8F':
236  // � [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
237  case '\u1D95':
238  // ᶕ [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
239  case '\u1E01':
240  // ạ [LATIN SMALL LETTER A WITH RING BELOW]
241  case '\u1E9A':
242  // ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
243  case '\u1EA1':
244  // ạ [LATIN SMALL LETTER A WITH DOT BELOW]
245  case '\u1EA3':
246  // ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
247  case '\u1EA5':
248  // ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
249  case '\u1EA7':
250  // ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
251  case '\u1EA9':
252  // ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
253  case '\u1EAB':
254  // ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
255  case '\u1EAD':
256  // ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
257  case '\u1EAF':
258  // ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
259  case '\u1EB1':
260  // ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
261  case '\u1EB3':
262  // ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
263  case '\u1EB5':
264  // ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
265  case '\u1EB7':
266  // ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
267  case '\u2090':
268  // � [LATIN SUBSCRIPT SMALL LETTER A]
269  case '\u2094':
270  // �? [LATIN SUBSCRIPT SMALL LETTER SCHWA]
271  case '\u24D0':
272  // � [CIRCLED LATIN SMALL LETTER A]
273  case '\u2C65':
274  // â±¥ [LATIN SMALL LETTER A WITH STROKE]
275  case '\u2C6F':
276  // Ɐ [LATIN CAPITAL LETTER TURNED A]
277  case '\uFF41': // � [FULLWIDTH LATIN SMALL LETTER A]
278  output[outputPos++] = 'a';
279  break;
280 
281  case '\uA732': // Ꜳ [LATIN CAPITAL LETTER AA]
282  output[outputPos++] = 'A';
283  output[outputPos++] = 'A';
284  break;
285 
286  case '\u00C6':
287  // Æ [LATIN CAPITAL LETTER AE]
288  case '\u01E2':
289  // Ç¢ [LATIN CAPITAL LETTER AE WITH MACRON]
290  case '\u01FC':
291  // Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
292  case '\u1D01': // á´� [LATIN LETTER SMALL CAPITAL AE]
293  output[outputPos++] = 'A';
294  output[outputPos++] = 'E';
295  break;
296 
297  case '\uA734': // Ꜵ [LATIN CAPITAL LETTER AO]
298  output[outputPos++] = 'A';
299  output[outputPos++] = 'O';
300  break;
301 
302  case '\uA736': // Ꜷ [LATIN CAPITAL LETTER AU]
303  output[outputPos++] = 'A';
304  output[outputPos++] = 'U';
305  break;
306 
307  case '\uA738':
308  // Ꜹ [LATIN CAPITAL LETTER AV]
309  case '\uA73A': // Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
310  output[outputPos++] = 'A';
311  output[outputPos++] = 'V';
312  break;
313 
314  case '\uA73C': // Ꜽ [LATIN CAPITAL LETTER AY]
315  output[outputPos++] = 'A';
316  output[outputPos++] = 'Y';
317  break;
318 
319  case '\u249C': // â’œ [PARENTHESIZED LATIN SMALL LETTER A]
320  output[outputPos++] = '(';
321  output[outputPos++] = 'a';
322  output[outputPos++] = ')';
323  break;
324 
325  case '\uA733': // ꜳ [LATIN SMALL LETTER AA]
326  output[outputPos++] = 'a';
327  output[outputPos++] = 'a';
328  break;
329 
330  case '\u00E6':
331  // æ [LATIN SMALL LETTER AE]
332  case '\u01E3':
333  // Ç£ [LATIN SMALL LETTER AE WITH MACRON]
334  case '\u01FD':
335  // ǽ [LATIN SMALL LETTER AE WITH ACUTE]
336  case '\u1D02': // á´‚ [LATIN SMALL LETTER TURNED AE]
337  output[outputPos++] = 'a';
338  output[outputPos++] = 'e';
339  break;
340 
341  case '\uA735': // ꜵ [LATIN SMALL LETTER AO]
342  output[outputPos++] = 'a';
343  output[outputPos++] = 'o';
344  break;
345 
346  case '\uA737': // ꜷ [LATIN SMALL LETTER AU]
347  output[outputPos++] = 'a';
348  output[outputPos++] = 'u';
349  break;
350 
351  case '\uA739':
352  // ꜹ [LATIN SMALL LETTER AV]
353  case '\uA73B': // ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
354  output[outputPos++] = 'a';
355  output[outputPos++] = 'v';
356  break;
357 
358  case '\uA73D': // ꜽ [LATIN SMALL LETTER AY]
359  output[outputPos++] = 'a';
360  output[outputPos++] = 'y';
361  break;
362 
363  case '\u0181':
364  // � [LATIN CAPITAL LETTER B WITH HOOK]
365  case '\u0182':
366  // Æ‚ [LATIN CAPITAL LETTER B WITH TOPBAR]
367  case '\u0243':
368  // Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
369  case '\u0299':
370  // Ê™ [LATIN LETTER SMALL CAPITAL B]
371  case '\u1D03':
372  // á´ƒ [LATIN LETTER SMALL CAPITAL BARRED B]
373  case '\u1E02':
374  // Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
375  case '\u1E04':
376  // Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
377  case '\u1E06':
378  // Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
379  case '\u24B7':
380  // â’· [CIRCLED LATIN CAPITAL LETTER B]
381  case '\uFF22': // ï¼¢ [FULLWIDTH LATIN CAPITAL LETTER B]
382  output[outputPos++] = 'B';
383  break;
384 
385  case '\u0180':
386  // Æ€ [LATIN SMALL LETTER B WITH STROKE]
387  case '\u0183':
388  // ƃ [LATIN SMALL LETTER B WITH TOPBAR]
389  case '\u0253':
390  // É“ [LATIN SMALL LETTER B WITH HOOK]
391  case '\u1D6C':
392  // ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
393  case '\u1D80':
394  // ᶀ [LATIN SMALL LETTER B WITH PALATAL HOOK]
395  case '\u1E03':
396  // ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
397  case '\u1E05':
398  // ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
399  case '\u1E07':
400  // ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
401  case '\u24D1':
402  // â“‘ [CIRCLED LATIN SMALL LETTER B]
403  case '\uFF42': // b [FULLWIDTH LATIN SMALL LETTER B]
404  output[outputPos++] = 'b';
405  break;
406 
407  case '\u249D': // â’� [PARENTHESIZED LATIN SMALL LETTER B]
408  output[outputPos++] = '(';
409  output[outputPos++] = 'b';
410  output[outputPos++] = ')';
411  break;
412 
413  case '\u00C7':
414  // Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
415  case '\u0106':
416  // Ć [LATIN CAPITAL LETTER C WITH ACUTE]
417  case '\u0108':
418  // Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
419  case '\u010A':
420  // ÄŠ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
421  case '\u010C':
422  // ÄŒ [LATIN CAPITAL LETTER C WITH CARON]
423  case '\u0187':
424  // Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
425  case '\u023B':
426  // È» [LATIN CAPITAL LETTER C WITH STROKE]
427  case '\u0297':
428  // Ê— [LATIN LETTER STRETCHED C]
429  case '\u1D04':
430  // á´„ [LATIN LETTER SMALL CAPITAL C]
431  case '\u1E08':
432  // Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
433  case '\u24B8':
434  // â’¸ [CIRCLED LATIN CAPITAL LETTER C]
435  case '\uFF23': // ï¼£ [FULLWIDTH LATIN CAPITAL LETTER C]
436  output[outputPos++] = 'C';
437  break;
438 
439  case '\u00E7':
440  // ç [LATIN SMALL LETTER C WITH CEDILLA]
441  case '\u0107':
442  // ć [LATIN SMALL LETTER C WITH ACUTE]
443  case '\u0109':
444  // ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
445  case '\u010B':
446  // Ä‹ [LATIN SMALL LETTER C WITH DOT ABOVE]
447  case '\u010D':
448  // � [LATIN SMALL LETTER C WITH CARON]
449  case '\u0188':
450  // ƈ [LATIN SMALL LETTER C WITH HOOK]
451  case '\u023C':
452  // ȼ [LATIN SMALL LETTER C WITH STROKE]
453  case '\u0255':
454  // É• [LATIN SMALL LETTER C WITH CURL]
455  case '\u1E09':
456  // ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
457  case '\u2184':
458  // ↄ [LATIN SMALL LETTER REVERSED C]
459  case '\u24D2':
460  // â“’ [CIRCLED LATIN SMALL LETTER C]
461  case '\uA73E':
462  // Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
463  case '\uA73F':
464  // ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
465  case '\uFF43': // c [FULLWIDTH LATIN SMALL LETTER C]
466  output[outputPos++] = 'c';
467  break;
468 
469  case '\u249E': // â’ž [PARENTHESIZED LATIN SMALL LETTER C]
470  output[outputPos++] = '(';
471  output[outputPos++] = 'c';
472  output[outputPos++] = ')';
473  break;
474 
475  case '\u00D0':
476  // � [LATIN CAPITAL LETTER ETH]
477  case '\u010E':
478  // ÄŽ [LATIN CAPITAL LETTER D WITH CARON]
479  case '\u0110':
480  // � [LATIN CAPITAL LETTER D WITH STROKE]
481  case '\u0189':
482  // Ɖ [LATIN CAPITAL LETTER AFRICAN D]
483  case '\u018A':
484  // ÆŠ [LATIN CAPITAL LETTER D WITH HOOK]
485  case '\u018B':
486  // Æ‹ [LATIN CAPITAL LETTER D WITH TOPBAR]
487  case '\u1D05':
488  // á´… [LATIN LETTER SMALL CAPITAL D]
489  case '\u1D06':
490  // á´† [LATIN LETTER SMALL CAPITAL ETH]
491  case '\u1E0A':
492  // Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
493  case '\u1E0C':
494  // Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
495  case '\u1E0E':
496  // Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
497  case '\u1E10':
498  // � [LATIN CAPITAL LETTER D WITH CEDILLA]
499  case '\u1E12':
500  // Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
501  case '\u24B9':
502  // â’¹ [CIRCLED LATIN CAPITAL LETTER D]
503  case '\uA779':
504  // � [LATIN CAPITAL LETTER INSULAR D]
505  case '\uFF24': // D [FULLWIDTH LATIN CAPITAL LETTER D]
506  output[outputPos++] = 'D';
507  break;
508 
509  case '\u00F0':
510  // ð [LATIN SMALL LETTER ETH]
511  case '\u010F':
512  // � [LATIN SMALL LETTER D WITH CARON]
513  case '\u0111':
514  // Ä‘ [LATIN SMALL LETTER D WITH STROKE]
515  case '\u018C':
516  // ÆŒ [LATIN SMALL LETTER D WITH TOPBAR]
517  case '\u0221':
518  // È¡ [LATIN SMALL LETTER D WITH CURL]
519  case '\u0256':
520  // É– [LATIN SMALL LETTER D WITH TAIL]
521  case '\u0257':
522  // É— [LATIN SMALL LETTER D WITH HOOK]
523  case '\u1D6D':
524  // áµ­ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
525  case '\u1D81':
526  // � [LATIN SMALL LETTER D WITH PALATAL HOOK]
527  case '\u1D91':
528  // ᶑ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
529  case '\u1E0B':
530  // ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
531  case '\u1E0D':
532  // � [LATIN SMALL LETTER D WITH DOT BELOW]
533  case '\u1E0F':
534  // � [LATIN SMALL LETTER D WITH LINE BELOW]
535  case '\u1E11':
536  // ḑ [LATIN SMALL LETTER D WITH CEDILLA]
537  case '\u1E13':
538  // ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
539  case '\u24D3':
540  // â““ [CIRCLED LATIN SMALL LETTER D]
541  case '\uA77A':
542  // � [LATIN SMALL LETTER INSULAR D]
543  case '\uFF44': // d [FULLWIDTH LATIN SMALL LETTER D]
544  output[outputPos++] = 'd';
545  break;
546 
547  case '\u01C4':
548  // Ç„ [LATIN CAPITAL LETTER DZ WITH CARON]
549  case '\u01F1': // DZ [LATIN CAPITAL LETTER DZ]
550  output[outputPos++] = 'D';
551  output[outputPos++] = 'Z';
552  break;
553 
554  case '\u01C5':
555  // Ç… [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
556  case '\u01F2': // Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
557  output[outputPos++] = 'D';
558  output[outputPos++] = 'z';
559  break;
560 
561  case '\u249F': // â’Ÿ [PARENTHESIZED LATIN SMALL LETTER D]
562  output[outputPos++] = '(';
563  output[outputPos++] = 'd';
564  output[outputPos++] = ')';
565  break;
566 
567  case '\u0238': // ȸ [LATIN SMALL LETTER DB DIGRAPH]
568  output[outputPos++] = 'd';
569  output[outputPos++] = 'b';
570  break;
571 
572  case '\u01C6':
573  // dž [LATIN SMALL LETTER DZ WITH CARON]
574  case '\u01F3':
575  // dz [LATIN SMALL LETTER DZ]
576  case '\u02A3':
577  // Ê£ [LATIN SMALL LETTER DZ DIGRAPH]
578  case '\u02A5': // Ê¥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
579  output[outputPos++] = 'd';
580  output[outputPos++] = 'z';
581  break;
582 
583  case '\u00C8':
584  // È [LATIN CAPITAL LETTER E WITH GRAVE]
585  case '\u00C9':
586  // É [LATIN CAPITAL LETTER E WITH ACUTE]
587  case '\u00CA':
588  // Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
589  case '\u00CB':
590  // Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
591  case '\u0112':
592  // Ä’ [LATIN CAPITAL LETTER E WITH MACRON]
593  case '\u0114':
594  // �? [LATIN CAPITAL LETTER E WITH BREVE]
595  case '\u0116':
596  // Ä– [LATIN CAPITAL LETTER E WITH DOT ABOVE]
597  case '\u0118':
598  // Ę [LATIN CAPITAL LETTER E WITH OGONEK]
599  case '\u011A':
600  // Äš [LATIN CAPITAL LETTER E WITH CARON]
601  case '\u018E':
602  // ÆŽ [LATIN CAPITAL LETTER REVERSED E]
603  case '\u0190':
604  // � [LATIN CAPITAL LETTER OPEN E]
605  case '\u0204':
606  // È„ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
607  case '\u0206':
608  // Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
609  case '\u0228':
610  // Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
611  case '\u0246':
612  // Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
613  case '\u1D07':
614  // á´‡ [LATIN LETTER SMALL CAPITAL E]
615  case '\u1E14':
616  // �? [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
617  case '\u1E16':
618  // Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
619  case '\u1E18':
620  // Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
621  case '\u1E1A':
622  // Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
623  case '\u1E1C':
624  // Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
625  case '\u1EB8':
626  // Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
627  case '\u1EBA':
628  // Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
629  case '\u1EBC':
630  // Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
631  case '\u1EBE':
632  // Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
633  case '\u1EC0':
634  // Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
635  case '\u1EC2':
636  // Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
637  case '\u1EC4':
638  // Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
639  case '\u1EC6':
640  // Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
641  case '\u24BA':
642  // â’º [CIRCLED LATIN CAPITAL LETTER E]
643  case '\u2C7B':
644  // â±» [LATIN LETTER SMALL CAPITAL TURNED E]
645  case '\uFF25': // ï¼¥ [FULLWIDTH LATIN CAPITAL LETTER E]
646  output[outputPos++] = 'E';
647  break;
648 
649  case '\u00E8':
650  // è [LATIN SMALL LETTER E WITH GRAVE]
651  case '\u00E9':
652  // é [LATIN SMALL LETTER E WITH ACUTE]
653  case '\u00EA':
654  // ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
655  case '\u00EB':
656  // ë [LATIN SMALL LETTER E WITH DIAERESIS]
657  case '\u0113':
658  // Ä“ [LATIN SMALL LETTER E WITH MACRON]
659  case '\u0115':
660  // Ä• [LATIN SMALL LETTER E WITH BREVE]
661  case '\u0117':
662  // Ä— [LATIN SMALL LETTER E WITH DOT ABOVE]
663  case '\u0119':
664  // Ä™ [LATIN SMALL LETTER E WITH OGONEK]
665  case '\u011B':
666  // Ä› [LATIN SMALL LETTER E WITH CARON]
667  case '\u01DD':
668  // � [LATIN SMALL LETTER TURNED E]
669  case '\u0205':
670  // È… [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
671  case '\u0207':
672  // ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
673  case '\u0229':
674  // È© [LATIN SMALL LETTER E WITH CEDILLA]
675  case '\u0247':
676  // ɇ [LATIN SMALL LETTER E WITH STROKE]
677  case '\u0258':
678  // ɘ [LATIN SMALL LETTER REVERSED E]
679  case '\u025B':
680  // É› [LATIN SMALL LETTER OPEN E]
681  case '\u025C':
682  // Éœ [LATIN SMALL LETTER REVERSED OPEN E]
683  case '\u025D':
684  // � [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
685  case '\u025E':
686  // Éž [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
687  case '\u029A':
688  // Êš [LATIN SMALL LETTER CLOSED OPEN E]
689  case '\u1D08':
690  // á´ˆ [LATIN SMALL LETTER TURNED OPEN E]
691  case '\u1D92':
692  // ᶒ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
693  case '\u1D93':
694  // ᶓ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
695  case '\u1D94':
696  // �? [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
697  case '\u1E15':
698  // ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
699  case '\u1E17':
700  // ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
701  case '\u1E19':
702  // ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
703  case '\u1E1B':
704  // ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
705  case '\u1E1D':
706  // � [LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
707  case '\u1EB9':
708  // ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
709  case '\u1EBB':
710  // ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
711  case '\u1EBD':
712  // ẽ [LATIN SMALL LETTER E WITH TILDE]
713  case '\u1EBF':
714  // ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
715  case '\u1EC1':
716  // � [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
717  case '\u1EC3':
718  // ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
719  case '\u1EC5':
720  // á»… [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
721  case '\u1EC7':
722  // ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
723  case '\u2091':
724  // â‚‘ [LATIN SUBSCRIPT SMALL LETTER E]
725  case '\u24D4':
726  // �? [CIRCLED LATIN SMALL LETTER E]
727  case '\u2C78':
728  // ⱸ [LATIN SMALL LETTER E WITH NOTCH]
729  case '\uFF45': // ï½… [FULLWIDTH LATIN SMALL LETTER E]
730  output[outputPos++] = 'e';
731  break;
732 
733  case '\u24A0': // â’  [PARENTHESIZED LATIN SMALL LETTER E]
734  output[outputPos++] = '(';
735  output[outputPos++] = 'e';
736  output[outputPos++] = ')';
737  break;
738 
739  case '\u0191':
740  // Æ‘ [LATIN CAPITAL LETTER F WITH HOOK]
741  case '\u1E1E':
742  // Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
743  case '\u24BB':
744  // â’» [CIRCLED LATIN CAPITAL LETTER F]
745  case '\uA730':
746  // ꜰ [LATIN LETTER SMALL CAPITAL F]
747  case '\uA77B':
748  // � [LATIN CAPITAL LETTER INSULAR F]
749  case '\uA7FB':
750  // ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
751  case '\uFF26': // F [FULLWIDTH LATIN CAPITAL LETTER F]
752  output[outputPos++] = 'F';
753  break;
754 
755  case '\u0192':
756  // Æ’ [LATIN SMALL LETTER F WITH HOOK]
757  case '\u1D6E':
758  // áµ® [LATIN SMALL LETTER F WITH MIDDLE TILDE]
759  case '\u1D82':
760  // ᶂ [LATIN SMALL LETTER F WITH PALATAL HOOK]
761  case '\u1E1F':
762  // ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
763  case '\u1E9B':
764  // ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
765  case '\u24D5':
766  // â“• [CIRCLED LATIN SMALL LETTER F]
767  case '\uA77C':
768  // � [LATIN SMALL LETTER INSULAR F]
769  case '\uFF46': // f [FULLWIDTH LATIN SMALL LETTER F]
770  output[outputPos++] = 'f';
771  break;
772 
773  case '\u24A1': // â’¡ [PARENTHESIZED LATIN SMALL LETTER F]
774  output[outputPos++] = '(';
775  output[outputPos++] = 'f';
776  output[outputPos++] = ')';
777  break;
778 
779  case '\uFB00': // ff [LATIN SMALL LIGATURE FF]
780  output[outputPos++] = 'f';
781  output[outputPos++] = 'f';
782  break;
783 
784  case '\uFB03': // ffi [LATIN SMALL LIGATURE FFI]
785  output[outputPos++] = 'f';
786  output[outputPos++] = 'f';
787  output[outputPos++] = 'i';
788  break;
789 
790  case '\uFB04': // ffl [LATIN SMALL LIGATURE FFL]
791  output[outputPos++] = 'f';
792  output[outputPos++] = 'f';
793  output[outputPos++] = 'l';
794  break;
795 
796  case '\uFB01': // � [LATIN SMALL LIGATURE FI]
797  output[outputPos++] = 'f';
798  output[outputPos++] = 'i';
799  break;
800 
801  case '\uFB02': // fl [LATIN SMALL LIGATURE FL]
802  output[outputPos++] = 'f';
803  output[outputPos++] = 'l';
804  break;
805 
806  case '\u011C':
807  // Äœ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
808  case '\u011E':
809  // Äž [LATIN CAPITAL LETTER G WITH BREVE]
810  case '\u0120':
811  // Ä  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
812  case '\u0122':
813  // Ä¢ [LATIN CAPITAL LETTER G WITH CEDILLA]
814  case '\u0193':
815  // Æ“ [LATIN CAPITAL LETTER G WITH HOOK]
816  case '\u01E4':
817  // Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
818  case '\u01E5':
819  // Ç¥ [LATIN SMALL LETTER G WITH STROKE]
820  case '\u01E6':
821  // Ǧ [LATIN CAPITAL LETTER G WITH CARON]
822  case '\u01E7':
823  // ǧ [LATIN SMALL LETTER G WITH CARON]
824  case '\u01F4':
825  // Ç´ [LATIN CAPITAL LETTER G WITH ACUTE]
826  case '\u0262':
827  // É¢ [LATIN LETTER SMALL CAPITAL G]
828  case '\u029B':
829  // Ê› [LATIN LETTER SMALL CAPITAL G WITH HOOK]
830  case '\u1E20':
831  // Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
832  case '\u24BC':
833  // â’¼ [CIRCLED LATIN CAPITAL LETTER G]
834  case '\uA77D':
835  // � [LATIN CAPITAL LETTER INSULAR G]
836  case '\uA77E':
837  // � [LATIN CAPITAL LETTER TURNED INSULAR G]
838  case '\uFF27': // G [FULLWIDTH LATIN CAPITAL LETTER G]
839  output[outputPos++] = 'G';
840  break;
841 
842  case '\u011D':
843  // � [LATIN SMALL LETTER G WITH CIRCUMFLEX]
844  case '\u011F':
845  // ÄŸ [LATIN SMALL LETTER G WITH BREVE]
846  case '\u0121':
847  // Ä¡ [LATIN SMALL LETTER G WITH DOT ABOVE]
848  case '\u0123':
849  // Ä£ [LATIN SMALL LETTER G WITH CEDILLA]
850  case '\u01F5':
851  // ǵ [LATIN SMALL LETTER G WITH ACUTE]
852  case '\u0260':
853  // É  [LATIN SMALL LETTER G WITH HOOK]
854  case '\u0261':
855  // É¡ [LATIN SMALL LETTER SCRIPT G]
856  case '\u1D77':
857  // áµ· [LATIN SMALL LETTER TURNED G]
858  case '\u1D79':
859  // áµ¹ [LATIN SMALL LETTER INSULAR G]
860  case '\u1D83':
861  // ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
862  case '\u1E21':
863  // ḡ [LATIN SMALL LETTER G WITH MACRON]
864  case '\u24D6':
865  // â“– [CIRCLED LATIN SMALL LETTER G]
866  case '\uA77F':
867  // � [LATIN SMALL LETTER TURNED INSULAR G]
868  case '\uFF47': // g [FULLWIDTH LATIN SMALL LETTER G]
869  output[outputPos++] = 'g';
870  break;
871 
872  case '\u24A2': // â’¢ [PARENTHESIZED LATIN SMALL LETTER G]
873  output[outputPos++] = '(';
874  output[outputPos++] = 'g';
875  output[outputPos++] = ')';
876  break;
877 
878  case '\u0124':
879  // Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
880  case '\u0126':
881  // Ħ [LATIN CAPITAL LETTER H WITH STROKE]
882  case '\u021E':
883  // Èž [LATIN CAPITAL LETTER H WITH CARON]
884  case '\u029C':
885  // Êœ [LATIN LETTER SMALL CAPITAL H]
886  case '\u1E22':
887  // Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
888  case '\u1E24':
889  // Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
890  case '\u1E26':
891  // Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
892  case '\u1E28':
893  // Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
894  case '\u1E2A':
895  // Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
896  case '\u24BD':
897  // â’½ [CIRCLED LATIN CAPITAL LETTER H]
898  case '\u2C67':
899  // Ⱨ [LATIN CAPITAL LETTER H WITH DESCENDER]
900  case '\u2C75':
901  // â±µ [LATIN CAPITAL LETTER HALF H]
902  case '\uFF28': // H [FULLWIDTH LATIN CAPITAL LETTER H]
903  output[outputPos++] = 'H';
904  break;
905 
906  case '\u0125':
907  // Ä¥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
908  case '\u0127':
909  // ħ [LATIN SMALL LETTER H WITH STROKE]
910  case '\u021F':
911  // ÈŸ [LATIN SMALL LETTER H WITH CARON]
912  case '\u0265':
913  // É¥ [LATIN SMALL LETTER TURNED H]
914  case '\u0266':
915  // ɦ [LATIN SMALL LETTER H WITH HOOK]
916  case '\u02AE':
917  // Ê® [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
918  case '\u02AF':
919  // ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
920  case '\u1E23':
921  // ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
922  case '\u1E25':
923  // ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
924  case '\u1E27':
925  // ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
926  case '\u1E29':
927  // ḩ [LATIN SMALL LETTER H WITH CEDILLA]
928  case '\u1E2B':
929  // ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
930  case '\u1E96':
931  // ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
932  case '\u24D7':
933  // â“— [CIRCLED LATIN SMALL LETTER H]
934  case '\u2C68':
935  // ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
936  case '\u2C76':
937  // ⱶ [LATIN SMALL LETTER HALF H]
938  case '\uFF48': // h [FULLWIDTH LATIN SMALL LETTER H]
939  output[outputPos++] = 'h';
940  break;
941 
942  case '\u01F6': // Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
943  output[outputPos++] = 'H';
944  output[outputPos++] = 'V';
945  break;
946 
947  case '\u24A3': // â’£ [PARENTHESIZED LATIN SMALL LETTER H]
948  output[outputPos++] = '(';
949  output[outputPos++] = 'h';
950  output[outputPos++] = ')';
951  break;
952 
953  case '\u0195': // Æ• [LATIN SMALL LETTER HV]
954  output[outputPos++] = 'h';
955  output[outputPos++] = 'v';
956  break;
957 
958  case '\u00CC':
959  // ÃŒ [LATIN CAPITAL LETTER I WITH GRAVE]
960  case '\u00CD':
961  // � [LATIN CAPITAL LETTER I WITH ACUTE]
962  case '\u00CE':
963  // ÃŽ [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
964  case '\u00CF':
965  // � [LATIN CAPITAL LETTER I WITH DIAERESIS]
966  case '\u0128':
967  // Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
968  case '\u012A':
969  // Ī [LATIN CAPITAL LETTER I WITH MACRON]
970  case '\u012C':
971  // Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
972  case '\u012E':
973  // Ä® [LATIN CAPITAL LETTER I WITH OGONEK]
974  case '\u0130':
975  // Ä° [LATIN CAPITAL LETTER I WITH DOT ABOVE]
976  case '\u0196':
977  // Æ– [LATIN CAPITAL LETTER IOTA]
978  case '\u0197':
979  // Æ— [LATIN CAPITAL LETTER I WITH STROKE]
980  case '\u01CF':
981  // � [LATIN CAPITAL LETTER I WITH CARON]
982  case '\u0208':
983  // Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
984  case '\u020A':
985  // ÈŠ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
986  case '\u026A':
987  // ɪ [LATIN LETTER SMALL CAPITAL I]
988  case '\u1D7B':
989  // áµ» [LATIN SMALL CAPITAL LETTER I WITH STROKE]
990  case '\u1E2C':
991  // Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
992  case '\u1E2E':
993  // Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
994  case '\u1EC8':
995  // Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
996  case '\u1ECA':
997  // Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
998  case '\u24BE':
999  // â’¾ [CIRCLED LATIN CAPITAL LETTER I]
1000  case '\uA7FE':
1001  // ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
1002  case '\uFF29': // I [FULLWIDTH LATIN CAPITAL LETTER I]
1003  output[outputPos++] = 'I';
1004  break;
1005 
1006  case '\u00EC':
1007  // ì [LATIN SMALL LETTER I WITH GRAVE]
1008  case '\u00ED':
1009  // í [LATIN SMALL LETTER I WITH ACUTE]
1010  case '\u00EE':
1011  // î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
1012  case '\u00EF':
1013  // ï [LATIN SMALL LETTER I WITH DIAERESIS]
1014  case '\u0129':
1015  // Ä© [LATIN SMALL LETTER I WITH TILDE]
1016  case '\u012B':
1017  // Ä« [LATIN SMALL LETTER I WITH MACRON]
1018  case '\u012D':
1019  // Ä­ [LATIN SMALL LETTER I WITH BREVE]
1020  case '\u012F':
1021  // į [LATIN SMALL LETTER I WITH OGONEK]
1022  case '\u0131':
1023  // ı [LATIN SMALL LETTER DOTLESS I]
1024  case '\u01D0':
1025  // � [LATIN SMALL LETTER I WITH CARON]
1026  case '\u0209':
1027  // ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
1028  case '\u020B':
1029  // È‹ [LATIN SMALL LETTER I WITH INVERTED BREVE]
1030  case '\u0268':
1031  // ɨ [LATIN SMALL LETTER I WITH STROKE]
1032  case '\u1D09':
1033  // á´‰ [LATIN SMALL LETTER TURNED I]
1034  case '\u1D62':
1035  // áµ¢ [LATIN SUBSCRIPT SMALL LETTER I]
1036  case '\u1D7C':
1037  // áµ¼ [LATIN SMALL LETTER IOTA WITH STROKE]
1038  case '\u1D96':
1039  // ᶖ [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
1040  case '\u1E2D':
1041  // ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
1042  case '\u1E2F':
1043  // ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
1044  case '\u1EC9':
1045  // ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
1046  case '\u1ECB':
1047  // ị [LATIN SMALL LETTER I WITH DOT BELOW]
1048  case '\u2071':
1049  // � [SUPERSCRIPT LATIN SMALL LETTER I]
1050  case '\u24D8':
1051  // ⓘ [CIRCLED LATIN SMALL LETTER I]
1052  case '\uFF49': // i [FULLWIDTH LATIN SMALL LETTER I]
1053  output[outputPos++] = 'i';
1054  break;
1055 
1056  case '\u0132': // IJ [LATIN CAPITAL LIGATURE IJ]
1057  output[outputPos++] = 'I';
1058  output[outputPos++] = 'J';
1059  break;
1060 
1061  case '\u24A4': // â’¤ [PARENTHESIZED LATIN SMALL LETTER I]
1062  output[outputPos++] = '(';
1063  output[outputPos++] = 'i';
1064  output[outputPos++] = ')';
1065  break;
1066 
1067  case '\u0133': // ij [LATIN SMALL LIGATURE IJ]
1068  output[outputPos++] = 'i';
1069  output[outputPos++] = 'j';
1070  break;
1071 
1072  case '\u0134':
1073  // Ä´ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
1074  case '\u0248':
1075  // Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
1076  case '\u1D0A':
1077  // á´Š [LATIN LETTER SMALL CAPITAL J]
1078  case '\u24BF':
1079  // â’¿ [CIRCLED LATIN CAPITAL LETTER J]
1080  case '\uFF2A': // J [FULLWIDTH LATIN CAPITAL LETTER J]
1081  output[outputPos++] = 'J';
1082  break;
1083 
1084  case '\u0135':
1085  // ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
1086  case '\u01F0':
1087  // Ç° [LATIN SMALL LETTER J WITH CARON]
1088  case '\u0237':
1089  // È· [LATIN SMALL LETTER DOTLESS J]
1090  case '\u0249':
1091  // ɉ [LATIN SMALL LETTER J WITH STROKE]
1092  case '\u025F':
1093  // ÉŸ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
1094  case '\u0284':
1095  // Ê„ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
1096  case '\u029D':
1097  // � [LATIN SMALL LETTER J WITH CROSSED-TAIL]
1098  case '\u24D9':
1099  // â“™ [CIRCLED LATIN SMALL LETTER J]
1100  case '\u2C7C':
1101  // â±¼ [LATIN SUBSCRIPT SMALL LETTER J]
1102  case '\uFF4A': // j [FULLWIDTH LATIN SMALL LETTER J]
1103  output[outputPos++] = 'j';
1104  break;
1105 
1106  case '\u24A5': // â’¥ [PARENTHESIZED LATIN SMALL LETTER J]
1107  output[outputPos++] = '(';
1108  output[outputPos++] = 'j';
1109  output[outputPos++] = ')';
1110  break;
1111 
1112  case '\u0136':
1113  // Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
1114  case '\u0198':
1115  // Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
1116  case '\u01E8':
1117  // Ǩ [LATIN CAPITAL LETTER K WITH CARON]
1118  case '\u1D0B':
1119  // á´‹ [LATIN LETTER SMALL CAPITAL K]
1120  case '\u1E30':
1121  // Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
1122  case '\u1E32':
1123  // Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
1124  case '\u1E34':
1125  // Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
1126  case '\u24C0':
1127  // â“€ [CIRCLED LATIN CAPITAL LETTER K]
1128  case '\u2C69':
1129  // Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
1130  case '\uA740':
1131  // � [LATIN CAPITAL LETTER K WITH STROKE]
1132  case '\uA742':
1133  // � [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
1134  case '\uA744':
1135  // � [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
1136  case '\uFF2B': // K [FULLWIDTH LATIN CAPITAL LETTER K]
1137  output[outputPos++] = 'K';
1138  break;
1139 
1140  case '\u0137':
1141  // Ä· [LATIN SMALL LETTER K WITH CEDILLA]
1142  case '\u0199':
1143  // Æ™ [LATIN SMALL LETTER K WITH HOOK]
1144  case '\u01E9':
1145  // Ç© [LATIN SMALL LETTER K WITH CARON]
1146  case '\u029E':
1147  // Êž [LATIN SMALL LETTER TURNED K]
1148  case '\u1D84':
1149  // ᶄ [LATIN SMALL LETTER K WITH PALATAL HOOK]
1150  case '\u1E31':
1151  // ḱ [LATIN SMALL LETTER K WITH ACUTE]
1152  case '\u1E33':
1153  // ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
1154  case '\u1E35':
1155  // ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
1156  case '\u24DA':
1157  // â“š [CIRCLED LATIN SMALL LETTER K]
1158  case '\u2C6A':
1159  // ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
1160  case '\uA741':
1161  // � [LATIN SMALL LETTER K WITH STROKE]
1162  case '\uA743':
1163  // � [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
1164  case '\uA745':
1165  // � [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
1166  case '\uFF4B': // k [FULLWIDTH LATIN SMALL LETTER K]
1167  output[outputPos++] = 'k';
1168  break;
1169 
1170  case '\u24A6': // â’¦ [PARENTHESIZED LATIN SMALL LETTER K]
1171  output[outputPos++] = '(';
1172  output[outputPos++] = 'k';
1173  output[outputPos++] = ')';
1174  break;
1175 
1176  case '\u0139':
1177  // Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
1178  case '\u013B':
1179  // Ä» [LATIN CAPITAL LETTER L WITH CEDILLA]
1180  case '\u013D':
1181  // Ľ [LATIN CAPITAL LETTER L WITH CARON]
1182  case '\u013F':
1183  // Ä¿ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
1184  case '\u0141':
1185  // � [LATIN CAPITAL LETTER L WITH STROKE]
1186  case '\u023D':
1187  // Ƚ [LATIN CAPITAL LETTER L WITH BAR]
1188  case '\u029F':
1189  // ÊŸ [LATIN LETTER SMALL CAPITAL L]
1190  case '\u1D0C':
1191  // á´Œ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
1192  case '\u1E36':
1193  // Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
1194  case '\u1E38':
1195  // Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
1196  case '\u1E3A':
1197  // Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
1198  case '\u1E3C':
1199  // Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
1200  case '\u24C1':
1201  // � [CIRCLED LATIN CAPITAL LETTER L]
1202  case '\u2C60':
1203  // â±  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
1204  case '\u2C62':
1205  // â±¢ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
1206  case '\uA746':
1207  // � [LATIN CAPITAL LETTER BROKEN L]
1208  case '\uA748':
1209  // � [LATIN CAPITAL LETTER L WITH HIGH STROKE]
1210  case '\uA780':
1211  // Ꞁ [LATIN CAPITAL LETTER TURNED L]
1212  case '\uFF2C': // L [FULLWIDTH LATIN CAPITAL LETTER L]
1213  output[outputPos++] = 'L';
1214  break;
1215 
1216  case '\u013A':
1217  // ĺ [LATIN SMALL LETTER L WITH ACUTE]
1218  case '\u013C':
1219  // ļ [LATIN SMALL LETTER L WITH CEDILLA]
1220  case '\u013E':
1221  // ľ [LATIN SMALL LETTER L WITH CARON]
1222  case '\u0140':
1223  // Å€ [LATIN SMALL LETTER L WITH MIDDLE DOT]
1224  case '\u0142':
1225  // Å‚ [LATIN SMALL LETTER L WITH STROKE]
1226  case '\u019A':
1227  // Æš [LATIN SMALL LETTER L WITH BAR]
1228  case '\u0234':
1229  // È´ [LATIN SMALL LETTER L WITH CURL]
1230  case '\u026B':
1231  // É« [LATIN SMALL LETTER L WITH MIDDLE TILDE]
1232  case '\u026C':
1233  // ɬ [LATIN SMALL LETTER L WITH BELT]
1234  case '\u026D':
1235  // É­ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
1236  case '\u1D85':
1237  // ᶅ [LATIN SMALL LETTER L WITH PALATAL HOOK]
1238  case '\u1E37':
1239  // ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
1240  case '\u1E39':
1241  // ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
1242  case '\u1E3B':
1243  // ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
1244  case '\u1E3D':
1245  // ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
1246  case '\u24DB':
1247  // â“› [CIRCLED LATIN SMALL LETTER L]
1248  case '\u2C61':
1249  // ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
1250  case '\uA747':
1251  // � [LATIN SMALL LETTER BROKEN L]
1252  case '\uA749':
1253  // � [LATIN SMALL LETTER L WITH HIGH STROKE]
1254  case '\uA781':
1255  // � [LATIN SMALL LETTER TURNED L]
1256  case '\uFF4C': // l [FULLWIDTH LATIN SMALL LETTER L]
1257  output[outputPos++] = 'l';
1258  break;
1259 
1260  case '\u01C7': // LJ [LATIN CAPITAL LETTER LJ]
1261  output[outputPos++] = 'L';
1262  output[outputPos++] = 'J';
1263  break;
1264 
1265  case '\u1EFA': // Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
1266  output[outputPos++] = 'L';
1267  output[outputPos++] = 'L';
1268  break;
1269 
1270  case '\u01C8': // Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
1271  output[outputPos++] = 'L';
1272  output[outputPos++] = 'j';
1273  break;
1274 
1275  case '\u24A7': // â’§ [PARENTHESIZED LATIN SMALL LETTER L]
1276  output[outputPos++] = '(';
1277  output[outputPos++] = 'l';
1278  output[outputPos++] = ')';
1279  break;
1280 
1281  case '\u01C9': // lj [LATIN SMALL LETTER LJ]
1282  output[outputPos++] = 'l';
1283  output[outputPos++] = 'j';
1284  break;
1285 
1286  case '\u1EFB': // á»» [LATIN SMALL LETTER MIDDLE-WELSH LL]
1287  output[outputPos++] = 'l';
1288  output[outputPos++] = 'l';
1289  break;
1290 
1291  case '\u02AA': // ʪ [LATIN SMALL LETTER LS DIGRAPH]
1292  output[outputPos++] = 'l';
1293  output[outputPos++] = 's';
1294  break;
1295 
1296  case '\u02AB': // Ê« [LATIN SMALL LETTER LZ DIGRAPH]
1297  output[outputPos++] = 'l';
1298  output[outputPos++] = 'z';
1299  break;
1300 
1301  case '\u019C':
1302  // Æœ [LATIN CAPITAL LETTER TURNED M]
1303  case '\u1D0D':
1304  // á´� [LATIN LETTER SMALL CAPITAL M]
1305  case '\u1E3E':
1306  // Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
1307  case '\u1E40':
1308  // á¹€ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
1309  case '\u1E42':
1310  // Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
1311  case '\u24C2':
1312  // â“‚ [CIRCLED LATIN CAPITAL LETTER M]
1313  case '\u2C6E':
1314  // â±® [LATIN CAPITAL LETTER M WITH HOOK]
1315  case '\uA7FD':
1316  // ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
1317  case '\uA7FF':
1318  // ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
1319  case '\uFF2D': // ï¼­ [FULLWIDTH LATIN CAPITAL LETTER M]
1320  output[outputPos++] = 'M';
1321  break;
1322 
1323  case '\u026F':
1324  // ɯ [LATIN SMALL LETTER TURNED M]
1325  case '\u0270':
1326  // É° [LATIN SMALL LETTER TURNED M WITH LONG LEG]
1327  case '\u0271':
1328  // ɱ [LATIN SMALL LETTER M WITH HOOK]
1329  case '\u1D6F':
1330  // ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
1331  case '\u1D86':
1332  // ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
1333  case '\u1E3F':
1334  // ḿ [LATIN SMALL LETTER M WITH ACUTE]
1335  case '\u1E41':
1336  // � [LATIN SMALL LETTER M WITH DOT ABOVE]
1337  case '\u1E43':
1338  // ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
1339  case '\u24DC':
1340  // â“œ [CIRCLED LATIN SMALL LETTER M]
1341  case '\uFF4D': // � [FULLWIDTH LATIN SMALL LETTER M]
1342  output[outputPos++] = 'm';
1343  break;
1344 
1345  case '\u24A8': // â’¨ [PARENTHESIZED LATIN SMALL LETTER M]
1346  output[outputPos++] = '(';
1347  output[outputPos++] = 'm';
1348  output[outputPos++] = ')';
1349  break;
1350 
1351  case '\u00D1':
1352  // Ñ [LATIN CAPITAL LETTER N WITH TILDE]
1353  case '\u0143':
1354  // Ã…Æ’ [LATIN CAPITAL LETTER N WITH ACUTE]
1355  case '\u0145':
1356  // Å… [LATIN CAPITAL LETTER N WITH CEDILLA]
1357  case '\u0147':
1358  // Ň [LATIN CAPITAL LETTER N WITH CARON]
1359  case '\u014A':
1360  // Ã…Å  http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
1361  case '\u019D':
1362  // � [LATIN CAPITAL LETTER N WITH LEFT HOOK]
1363  case '\u01F8':
1364  // Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
1365  case '\u0220':
1366  // È  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
1367  case '\u0274':
1368  // É´ [LATIN LETTER SMALL CAPITAL N]
1369  case '\u1D0E':
1370  // á´Ž [LATIN LETTER SMALL CAPITAL REVERSED N]
1371  case '\u1E44':
1372  // Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
1373  case '\u1E46':
1374  // Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
1375  case '\u1E48':
1376  // Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
1377  case '\u1E4A':
1378  // Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
1379  case '\u24C3':
1380  // Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
1381  case '\uFF2E': // ï¼® [FULLWIDTH LATIN CAPITAL LETTER N]
1382  output[outputPos++] = 'N';
1383  break;
1384 
1385  case '\u00F1':
1386  // ñ [LATIN SMALL LETTER N WITH TILDE]
1387  case '\u0144':
1388  // Å„ [LATIN SMALL LETTER N WITH ACUTE]
1389  case '\u0146':
1390  // ņ [LATIN SMALL LETTER N WITH CEDILLA]
1391  case '\u0148':
1392  // ň [LATIN SMALL LETTER N WITH CARON]
1393  case '\u0149':
1394  // ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
1395  case '\u014B':
1396  // Å‹ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
1397  case '\u019E':
1398  // Æž [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
1399  case '\u01F9':
1400  // ǹ [LATIN SMALL LETTER N WITH GRAVE]
1401  case '\u0235':
1402  // ȵ [LATIN SMALL LETTER N WITH CURL]
1403  case '\u0272':
1404  // ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
1405  case '\u0273':
1406  // ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
1407  case '\u1D70':
1408  // áµ° [LATIN SMALL LETTER N WITH MIDDLE TILDE]
1409  case '\u1D87':
1410  // ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
1411  case '\u1E45':
1412  // á¹… [LATIN SMALL LETTER N WITH DOT ABOVE]
1413  case '\u1E47':
1414  // ṇ [LATIN SMALL LETTER N WITH DOT BELOW]
1415  case '\u1E49':
1416  // ṉ [LATIN SMALL LETTER N WITH LINE BELOW]
1417  case '\u1E4B':
1418  // ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
1419  case '\u207F':
1420  // � [SUPERSCRIPT LATIN SMALL LETTER N]
1421  case '\u24DD':
1422  // � [CIRCLED LATIN SMALL LETTER N]
1423  case '\uFF4E': // n [FULLWIDTH LATIN SMALL LETTER N]
1424  output[outputPos++] = 'n';
1425  break;
1426 
1427  case '\u01CA': // ÇŠ [LATIN CAPITAL LETTER NJ]
1428  output[outputPos++] = 'N';
1429  output[outputPos++] = 'J';
1430  break;
1431 
1432  case '\u01CB': // Ç‹ [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
1433  output[outputPos++] = 'N';
1434  output[outputPos++] = 'j';
1435  break;
1436 
1437  case '\u24A9': // â’© [PARENTHESIZED LATIN SMALL LETTER N]
1438  output[outputPos++] = '(';
1439  output[outputPos++] = 'n';
1440  output[outputPos++] = ')';
1441  break;
1442 
1443  case '\u01CC': // ÇŒ [LATIN SMALL LETTER NJ]
1444  output[outputPos++] = 'n';
1445  output[outputPos++] = 'j';
1446  break;
1447 
1448  case '\u00D2':
1449  // Ã’ [LATIN CAPITAL LETTER O WITH GRAVE]
1450  case '\u00D3':
1451  // Ó [LATIN CAPITAL LETTER O WITH ACUTE]
1452  case '\u00D4':
1453  // �? [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
1454  case '\u00D5':
1455  // Õ [LATIN CAPITAL LETTER O WITH TILDE]
1456  case '\u00D6':
1457  // Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
1458  case '\u00D8':
1459  // Ø [LATIN CAPITAL LETTER O WITH STROKE]
1460  case '\u014C':
1461  // Ã…Å’ [LATIN CAPITAL LETTER O WITH MACRON]
1462  case '\u014E':
1463  // ÅŽ [LATIN CAPITAL LETTER O WITH BREVE]
1464  case '\u0150':
1465  // � [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
1466  case '\u0186':
1467  // Ɔ [LATIN CAPITAL LETTER OPEN O]
1468  case '\u019F':
1469  // ÆŸ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
1470  case '\u01A0':
1471  // Æ  [LATIN CAPITAL LETTER O WITH HORN]
1472  case '\u01D1':
1473  // Ç‘ [LATIN CAPITAL LETTER O WITH CARON]
1474  case '\u01EA':
1475  // Ǫ [LATIN CAPITAL LETTER O WITH OGONEK]
1476  case '\u01EC':
1477  // Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
1478  case '\u01FE':
1479  // Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
1480  case '\u020C':
1481  // ÈŒ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
1482  case '\u020E':
1483  // ÈŽ [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
1484  case '\u022A':
1485  // Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
1486  case '\u022C':
1487  // Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
1488  case '\u022E':
1489  // È® [LATIN CAPITAL LETTER O WITH DOT ABOVE]
1490  case '\u0230':
1491  // È° [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
1492  case '\u1D0F':
1493  // á´� [LATIN LETTER SMALL CAPITAL O]
1494  case '\u1D10':
1495  // á´� [LATIN LETTER SMALL CAPITAL OPEN O]
1496  case '\u1E4C':
1497  // Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
1498  case '\u1E4E':
1499  // Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
1500  case '\u1E50':
1501  // � [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
1502  case '\u1E52':
1503  // á¹’ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
1504  case '\u1ECC':
1505  // Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW]
1506  case '\u1ECE':
1507  // Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
1508  case '\u1ED0':
1509  // � [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
1510  case '\u1ED2':
1511  // á»’ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
1512  case '\u1ED4':
1513  // �? [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
1514  case '\u1ED6':
1515  // á»– [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
1516  case '\u1ED8':
1517  // Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
1518  case '\u1EDA':
1519  // Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
1520  case '\u1EDC':
1521  // Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
1522  case '\u1EDE':
1523  // Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
1524  case '\u1EE0':
1525  // á»  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
1526  case '\u1EE2':
1527  // Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
1528  case '\u24C4':
1529  // â“„ [CIRCLED LATIN CAPITAL LETTER O]
1530  case '\uA74A':
1531  // � [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
1532  case '\uA74C':
1533  // � [LATIN CAPITAL LETTER O WITH LOOP]
1534  case '\uFF2F': // O [FULLWIDTH LATIN CAPITAL LETTER O]
1535  output[outputPos++] = 'O';
1536  break;
1537 
1538  case '\u00F2':
1539  // ò [LATIN SMALL LETTER O WITH GRAVE]
1540  case '\u00F3':
1541  // ó [LATIN SMALL LETTER O WITH ACUTE]
1542  case '\u00F4':
1543  // ô [LATIN SMALL LETTER O WITH CIRCUMFLEX]
1544  case '\u00F5':
1545  // õ [LATIN SMALL LETTER O WITH TILDE]
1546  case '\u00F6':
1547  // ö [LATIN SMALL LETTER O WITH DIAERESIS]
1548  case '\u00F8':
1549  // ø [LATIN SMALL LETTER O WITH STROKE]
1550  case '\u014D':
1551  // � [LATIN SMALL LETTER O WITH MACRON]
1552  case '\u014F':
1553  // � [LATIN SMALL LETTER O WITH BREVE]
1554  case '\u0151':
1555  // Å‘ [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
1556  case '\u01A1':
1557  // Æ¡ [LATIN SMALL LETTER O WITH HORN]
1558  case '\u01D2':
1559  // Ç’ [LATIN SMALL LETTER O WITH CARON]
1560  case '\u01EB':
1561  // Ç« [LATIN SMALL LETTER O WITH OGONEK]
1562  case '\u01ED':
1563  // Ç­ [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
1564  case '\u01FF':
1565  // Ç¿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
1566  case '\u020D':
1567  // � [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
1568  case '\u020F':
1569  // � [LATIN SMALL LETTER O WITH INVERTED BREVE]
1570  case '\u022B':
1571  // È« [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
1572  case '\u022D':
1573  // È­ [LATIN SMALL LETTER O WITH TILDE AND MACRON]
1574  case '\u022F':
1575  // ȯ [LATIN SMALL LETTER O WITH DOT ABOVE]
1576  case '\u0231':
1577  // ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
1578  case '\u0254':
1579  // �? [LATIN SMALL LETTER OPEN O]
1580  case '\u0275':
1581  // ɵ [LATIN SMALL LETTER BARRED O]
1582  case '\u1D16':
1583  // á´– [LATIN SMALL LETTER TOP HALF O]
1584  case '\u1D17':
1585  // á´— [LATIN SMALL LETTER BOTTOM HALF O]
1586  case '\u1D97':
1587  // ᶗ [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
1588  case '\u1E4D':
1589  // � [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
1590  case '\u1E4F':
1591  // � [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
1592  case '\u1E51':
1593  // ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
1594  case '\u1E53':
1595  // ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
1596  case '\u1ECD':
1597  // � [LATIN SMALL LETTER O WITH DOT BELOW]
1598  case '\u1ECF':
1599  // � [LATIN SMALL LETTER O WITH HOOK ABOVE]
1600  case '\u1ED1':
1601  // ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
1602  case '\u1ED3':
1603  // ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
1604  case '\u1ED5':
1605  // ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
1606  case '\u1ED7':
1607  // á»— [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
1608  case '\u1ED9':
1609  // á»™ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
1610  case '\u1EDB':
1611  // á»› [LATIN SMALL LETTER O WITH HORN AND ACUTE]
1612  case '\u1EDD':
1613  // � [LATIN SMALL LETTER O WITH HORN AND GRAVE]
1614  case '\u1EDF':
1615  // ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
1616  case '\u1EE1':
1617  // ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE]
1618  case '\u1EE3':
1619  // ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
1620  case '\u2092':
1621  // â‚’ [LATIN SUBSCRIPT SMALL LETTER O]
1622  case '\u24DE':
1623  // â“ž [CIRCLED LATIN SMALL LETTER O]
1624  case '\u2C7A':
1625  // ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE]
1626  case '\uA74B':
1627  // � [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
1628  case '\uA74D':
1629  // � [LATIN SMALL LETTER O WITH LOOP]
1630  case '\uFF4F': // � [FULLWIDTH LATIN SMALL LETTER O]
1631  output[outputPos++] = 'o';
1632  break;
1633 
1634  case '\u0152':
1635  // Å’ [LATIN CAPITAL LIGATURE OE]
1636  case '\u0276': // ɶ [LATIN LETTER SMALL CAPITAL OE]
1637  output[outputPos++] = 'O';
1638  output[outputPos++] = 'E';
1639  break;
1640 
1641  case '\uA74E': // � [LATIN CAPITAL LETTER OO]
1642  output[outputPos++] = 'O';
1643  output[outputPos++] = 'O';
1644  break;
1645 
1646  case '\u0222':
1647  // È¢ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU]
1648  case '\u1D15': // á´• [LATIN LETTER SMALL CAPITAL OU]
1649  output[outputPos++] = 'O';
1650  output[outputPos++] = 'U';
1651  break;
1652 
1653  case '\u24AA': // â’ª [PARENTHESIZED LATIN SMALL LETTER O]
1654  output[outputPos++] = '(';
1655  output[outputPos++] = 'o';
1656  output[outputPos++] = ')';
1657  break;
1658 
1659  case '\u0153':
1660  // Å“ [LATIN SMALL LIGATURE OE]
1661  case '\u1D14': // á´�? [LATIN SMALL LETTER TURNED OE]
1662  output[outputPos++] = 'o';
1663  output[outputPos++] = 'e';
1664  break;
1665 
1666  case '\uA74F': // � [LATIN SMALL LETTER OO]
1667  output[outputPos++] = 'o';
1668  output[outputPos++] = 'o';
1669  break;
1670 
1671  case '\u0223': // È£ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU]
1672  output[outputPos++] = 'o';
1673  output[outputPos++] = 'u';
1674  break;
1675 
1676  case '\u01A4':
1677  // Ƥ [LATIN CAPITAL LETTER P WITH HOOK]
1678  case '\u1D18':
1679  // á´˜ [LATIN LETTER SMALL CAPITAL P]
1680  case '\u1E54':
1681  // �? [LATIN CAPITAL LETTER P WITH ACUTE]
1682  case '\u1E56':
1683  // á¹– [LATIN CAPITAL LETTER P WITH DOT ABOVE]
1684  case '\u24C5':
1685  // â“… [CIRCLED LATIN CAPITAL LETTER P]
1686  case '\u2C63':
1687  // â±£ [LATIN CAPITAL LETTER P WITH STROKE]
1688  case '\uA750':
1689  // � [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
1690  case '\uA752':
1691  // � [LATIN CAPITAL LETTER P WITH FLOURISH]
1692  case '\uA754':
1693  // �? [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
1694  case '\uFF30': // ï¼° [FULLWIDTH LATIN CAPITAL LETTER P]
1695  output[outputPos++] = 'P';
1696  break;
1697 
1698  case '\u01A5':
1699  // Æ¥ [LATIN SMALL LETTER P WITH HOOK]
1700  case '\u1D71':
1701  // áµ± [LATIN SMALL LETTER P WITH MIDDLE TILDE]
1702  case '\u1D7D':
1703  // áµ½ [LATIN SMALL LETTER P WITH STROKE]
1704  case '\u1D88':
1705  // ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK]
1706  case '\u1E55':
1707  // ṕ [LATIN SMALL LETTER P WITH ACUTE]
1708  case '\u1E57':
1709  // á¹— [LATIN SMALL LETTER P WITH DOT ABOVE]
1710  case '\u24DF':
1711  // â“Ÿ [CIRCLED LATIN SMALL LETTER P]
1712  case '\uA751':
1713  // � [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
1714  case '\uA753':
1715  // � [LATIN SMALL LETTER P WITH FLOURISH]
1716  case '\uA755':
1717  // � [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
1718  case '\uA7FC':
1719  // ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P]
1720  case '\uFF50': // � [FULLWIDTH LATIN SMALL LETTER P]
1721  output[outputPos++] = 'p';
1722  break;
1723 
1724  case '\u24AB': // â’« [PARENTHESIZED LATIN SMALL LETTER P]
1725  output[outputPos++] = '(';
1726  output[outputPos++] = 'p';
1727  output[outputPos++] = ')';
1728  break;
1729 
1730  case '\u024A':
1731  // ÉŠ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
1732  case '\u24C6':
1733  // Ⓠ [CIRCLED LATIN CAPITAL LETTER Q]
1734  case '\uA756':
1735  // � [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
1736  case '\uA758':
1737  // � [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
1738  case '\uFF31': // ï¼± [FULLWIDTH LATIN CAPITAL LETTER Q]
1739  output[outputPos++] = 'Q';
1740  break;
1741 
1742  case '\u0138':
1743  // ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA]
1744  case '\u024B':
1745  // É‹ [LATIN SMALL LETTER Q WITH HOOK TAIL]
1746  case '\u02A0':
1747  // Ê  [LATIN SMALL LETTER Q WITH HOOK]
1748  case '\u24E0':
1749  // â“  [CIRCLED LATIN SMALL LETTER Q]
1750  case '\uA757':
1751  // � [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
1752  case '\uA759':
1753  // � [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
1754  case '\uFF51': // q [FULLWIDTH LATIN SMALL LETTER Q]
1755  output[outputPos++] = 'q';
1756  break;
1757 
1758  case '\u24AC': // â’¬ [PARENTHESIZED LATIN SMALL LETTER Q]
1759  output[outputPos++] = '(';
1760  output[outputPos++] = 'q';
1761  output[outputPos++] = ')';
1762  break;
1763 
1764  case '\u0239': // ȹ [LATIN SMALL LETTER QP DIGRAPH]
1765  output[outputPos++] = 'q';
1766  output[outputPos++] = 'p';
1767  break;
1768 
1769  case '\u0154':
1770  // �? [LATIN CAPITAL LETTER R WITH ACUTE]
1771  case '\u0156':
1772  // Å– [LATIN CAPITAL LETTER R WITH CEDILLA]
1773  case '\u0158':
1774  // Ã…Ëœ [LATIN CAPITAL LETTER R WITH CARON]
1775  case '\u0210':
1776  // È’ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
1777  case '\u0212':
1778  // È’ [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
1779  case '\u024C':
1780  // ÉŒ [LATIN CAPITAL LETTER R WITH STROKE]
1781  case '\u0280':
1782  // Ê€ [LATIN LETTER SMALL CAPITAL R]
1783  case '\u0281':
1784  // � [LATIN LETTER SMALL CAPITAL INVERTED R]
1785  case '\u1D19':
1786  // á´™ [LATIN LETTER SMALL CAPITAL REVERSED R]
1787  case '\u1D1A':
1788  // á´š [LATIN LETTER SMALL CAPITAL TURNED R]
1789  case '\u1E58':
1790  // Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE]
1791  case '\u1E5A':
1792  // Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW]
1793  case '\u1E5C':
1794  // Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
1795  case '\u1E5E':
1796  // Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW]
1797  case '\u24C7':
1798  // Ⓡ [CIRCLED LATIN CAPITAL LETTER R]
1799  case '\u2C64':
1800  // Ɽ [LATIN CAPITAL LETTER R WITH TAIL]
1801  case '\uA75A':
1802  // � [LATIN CAPITAL LETTER R ROTUNDA]
1803  case '\uA782':
1804  // êž‚ [LATIN CAPITAL LETTER INSULAR R]
1805  case '\uFF32': // ï¼² [FULLWIDTH LATIN CAPITAL LETTER R]
1806  output[outputPos++] = 'R';
1807  break;
1808 
1809  case '\u0155':
1810  // Å• [LATIN SMALL LETTER R WITH ACUTE]
1811  case '\u0157':
1812  // Å— [LATIN SMALL LETTER R WITH CEDILLA]
1813  case '\u0159':
1814  // Ã…â„¢ [LATIN SMALL LETTER R WITH CARON]
1815  case '\u0211':
1816  // È‘ [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
1817  case '\u0213':
1818  // È“ [LATIN SMALL LETTER R WITH INVERTED BREVE]
1819  case '\u024D':
1820  // � [LATIN SMALL LETTER R WITH STROKE]
1821  case '\u027C':
1822  // ɼ [LATIN SMALL LETTER R WITH LONG LEG]
1823  case '\u027D':
1824  // ɽ [LATIN SMALL LETTER R WITH TAIL]
1825  case '\u027E':
1826  // ɾ [LATIN SMALL LETTER R WITH FISHHOOK]
1827  case '\u027F':
1828  // É¿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
1829  case '\u1D63':
1830  // áµ£ [LATIN SUBSCRIPT SMALL LETTER R]
1831  case '\u1D72':
1832  // áµ² [LATIN SMALL LETTER R WITH MIDDLE TILDE]
1833  case '\u1D73':
1834  // áµ³ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
1835  case '\u1D89':
1836  // ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK]
1837  case '\u1E59':
1838  // á¹™ [LATIN SMALL LETTER R WITH DOT ABOVE]
1839  case '\u1E5B':
1840  // á¹› [LATIN SMALL LETTER R WITH DOT BELOW]
1841  case '\u1E5D':
1842  // � [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
1843  case '\u1E5F':
1844  // ṟ [LATIN SMALL LETTER R WITH LINE BELOW]
1845  case '\u24E1':
1846  // â“¡ [CIRCLED LATIN SMALL LETTER R]
1847  case '\uA75B':
1848  // � [LATIN SMALL LETTER R ROTUNDA]
1849  case '\uA783':
1850  // ꞃ [LATIN SMALL LETTER INSULAR R]
1851  case '\uFF52': // ï½’ [FULLWIDTH LATIN SMALL LETTER R]
1852  output[outputPos++] = 'r';
1853  break;
1854 
1855  case '\u24AD': // â’­ [PARENTHESIZED LATIN SMALL LETTER R]
1856  output[outputPos++] = '(';
1857  output[outputPos++] = 'r';
1858  output[outputPos++] = ')';
1859  break;
1860 
1861  case '\u015A':
1862  // Ã…Å¡ [LATIN CAPITAL LETTER S WITH ACUTE]
1863  case '\u015C':
1864  // Ã…Å“ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
1865  case '\u015E':
1866  // Åž [LATIN CAPITAL LETTER S WITH CEDILLA]
1867  case '\u0160':
1868  // Å  [LATIN CAPITAL LETTER S WITH CARON]
1869  case '\u0218':
1870  // Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW]
1871  case '\u1E60':
1872  // á¹  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
1873  case '\u1E62':
1874  // á¹¢ [LATIN CAPITAL LETTER S WITH DOT BELOW]
1875  case '\u1E64':
1876  // Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
1877  case '\u1E66':
1878  // Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
1879  case '\u1E68':
1880  // Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
1881  case '\u24C8':
1882  // Ⓢ [CIRCLED LATIN CAPITAL LETTER S]
1883  case '\uA731':
1884  // ꜱ [LATIN LETTER SMALL CAPITAL S]
1885  case '\uA785':
1886  // êž… [LATIN SMALL LETTER INSULAR S]
1887  case '\uFF33': // ï¼³ [FULLWIDTH LATIN CAPITAL LETTER S]
1888  output[outputPos++] = 'S';
1889  break;
1890 
1891  case '\u015B':
1892  // Å› [LATIN SMALL LETTER S WITH ACUTE]
1893  case '\u015D':
1894  // � [LATIN SMALL LETTER S WITH CIRCUMFLEX]
1895  case '\u015F':
1896  // ÅŸ [LATIN SMALL LETTER S WITH CEDILLA]
1897  case '\u0161':
1898  // Å¡ [LATIN SMALL LETTER S WITH CARON]
1899  case '\u017F':
1900  // Å¿ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S]
1901  case '\u0219':
1902  // È™ [LATIN SMALL LETTER S WITH COMMA BELOW]
1903  case '\u023F':
1904  // È¿ [LATIN SMALL LETTER S WITH SWASH TAIL]
1905  case '\u0282':
1906  // Ê‚ [LATIN SMALL LETTER S WITH HOOK]
1907  case '\u1D74':
1908  // áµ´ [LATIN SMALL LETTER S WITH MIDDLE TILDE]
1909  case '\u1D8A':
1910  // ᶊ [LATIN SMALL LETTER S WITH PALATAL HOOK]
1911  case '\u1E61':
1912  // ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
1913  case '\u1E63':
1914  // á¹£ [LATIN SMALL LETTER S WITH DOT BELOW]
1915  case '\u1E65':
1916  // á¹¥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
1917  case '\u1E67':
1918  // ṧ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
1919  case '\u1E69':
1920  // ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
1921  case '\u1E9C':
1922  // ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
1923  case '\u1E9D':
1924  // � [LATIN SMALL LETTER LONG S WITH HIGH STROKE]
1925  case '\u24E2':
1926  // â“¢ [CIRCLED LATIN SMALL LETTER S]
1927  case '\uA784':
1928  // êž„ [LATIN CAPITAL LETTER INSULAR S]
1929  case '\uFF53': // s [FULLWIDTH LATIN SMALL LETTER S]
1930  output[outputPos++] = 's';
1931  break;
1932 
1933  case '\u1E9E': // ẞ [LATIN CAPITAL LETTER SHARP S]
1934  output[outputPos++] = 'S';
1935  output[outputPos++] = 'S';
1936  break;
1937 
1938  case '\u24AE': // â’® [PARENTHESIZED LATIN SMALL LETTER S]
1939  output[outputPos++] = '(';
1940  output[outputPos++] = 's';
1941  output[outputPos++] = ')';
1942  break;
1943 
1944  case '\u00DF': // ß [LATIN SMALL LETTER SHARP S]
1945  output[outputPos++] = 's';
1946  output[outputPos++] = 's';
1947  break;
1948 
1949  case '\uFB06': // st [LATIN SMALL LIGATURE ST]
1950  output[outputPos++] = 's';
1951  output[outputPos++] = 't';
1952  break;
1953 
1954  case '\u0162':
1955  // Å¢ [LATIN CAPITAL LETTER T WITH CEDILLA]
1956  case '\u0164':
1957  // Ť [LATIN CAPITAL LETTER T WITH CARON]
1958  case '\u0166':
1959  // Ŧ [LATIN CAPITAL LETTER T WITH STROKE]
1960  case '\u01AC':
1961  // Ƭ [LATIN CAPITAL LETTER T WITH HOOK]
1962  case '\u01AE':
1963  // Æ® [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
1964  case '\u021A':
1965  // Èš [LATIN CAPITAL LETTER T WITH COMMA BELOW]
1966  case '\u023E':
1967  // Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
1968  case '\u1D1B':
1969  // á´› [LATIN LETTER SMALL CAPITAL T]
1970  case '\u1E6A':
1971  // Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]
1972  case '\u1E6C':
1973  // Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW]
1974  case '\u1E6E':
1975  // á¹® [LATIN CAPITAL LETTER T WITH LINE BELOW]
1976  case '\u1E70':
1977  // á¹° [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
1978  case '\u24C9':
1979  // Ⓣ [CIRCLED LATIN CAPITAL LETTER T]
1980  case '\uA786':
1981  // Ꞇ [LATIN CAPITAL LETTER INSULAR T]
1982  case '\uFF34': // ï¼´ [FULLWIDTH LATIN CAPITAL LETTER T]
1983  output[outputPos++] = 'T';
1984  break;
1985 
1986  case '\u0163':
1987  // Å£ [LATIN SMALL LETTER T WITH CEDILLA]
1988  case '\u0165':
1989  // Ã…Â¥ [LATIN SMALL LETTER T WITH CARON]
1990  case '\u0167':
1991  // ŧ [LATIN SMALL LETTER T WITH STROKE]
1992  case '\u01AB':
1993  // Æ« [LATIN SMALL LETTER T WITH PALATAL HOOK]
1994  case '\u01AD':
1995  // Æ­ [LATIN SMALL LETTER T WITH HOOK]
1996  case '\u021B':
1997  // È› [LATIN SMALL LETTER T WITH COMMA BELOW]
1998  case '\u0236':
1999  // ȶ [LATIN SMALL LETTER T WITH CURL]
2000  case '\u0287':
2001  // ʇ [LATIN SMALL LETTER TURNED T]
2002  case '\u0288':
2003  // ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
2004  case '\u1D75':
2005  // áµµ [LATIN SMALL LETTER T WITH MIDDLE TILDE]
2006  case '\u1E6B':
2007  // ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]
2008  case '\u1E6D':
2009  // á¹­ [LATIN SMALL LETTER T WITH DOT BELOW]
2010  case '\u1E6F':
2011  // ṯ [LATIN SMALL LETTER T WITH LINE BELOW]
2012  case '\u1E71':
2013  // á¹± [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
2014  case '\u1E97':
2015  // ẗ [LATIN SMALL LETTER T WITH DIAERESIS]
2016  case '\u24E3':
2017  // â“£ [CIRCLED LATIN SMALL LETTER T]
2018  case '\u2C66':
2019  // ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
2020  case '\uFF54': // �? [FULLWIDTH LATIN SMALL LETTER T]
2021  output[outputPos++] = 't';
2022  break;
2023 
2024  case '\u00DE':
2025  // Þ [LATIN CAPITAL LETTER THORN]
2026  case '\uA766': // � [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
2027  output[outputPos++] = 'T';
2028  output[outputPos++] = 'H';
2029  break;
2030 
2031  case '\uA728': // Ꜩ [LATIN CAPITAL LETTER TZ]
2032  output[outputPos++] = 'T';
2033  output[outputPos++] = 'Z';
2034  break;
2035 
2036  case '\u24AF': // â’¯ [PARENTHESIZED LATIN SMALL LETTER T]
2037  output[outputPos++] = '(';
2038  output[outputPos++] = 't';
2039  output[outputPos++] = ')';
2040  break;
2041 
2042  case '\u02A8': // ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
2043  output[outputPos++] = 't';
2044  output[outputPos++] = 'c';
2045  break;
2046 
2047  case '\u00FE':
2048  // þ [LATIN SMALL LETTER THORN]
2049  case '\u1D7A':
2050  // ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
2051  case '\uA767': // � [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
2052  output[outputPos++] = 't';
2053  output[outputPos++] = 'h';
2054  break;
2055 
2056  case '\u02A6': // ʦ [LATIN SMALL LETTER TS DIGRAPH]
2057  output[outputPos++] = 't';
2058  output[outputPos++] = 's';
2059  break;
2060 
2061  case '\uA729': // ꜩ [LATIN SMALL LETTER TZ]
2062  output[outputPos++] = 't';
2063  output[outputPos++] = 'z';
2064  break;
2065 
2066  case '\u00D9':
2067  // Ù [LATIN CAPITAL LETTER U WITH GRAVE]
2068  case '\u00DA':
2069  // Ú [LATIN CAPITAL LETTER U WITH ACUTE]
2070  case '\u00DB':
2071  // Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
2072  case '\u00DC':
2073  // Ãœ [LATIN CAPITAL LETTER U WITH DIAERESIS]
2074  case '\u0168':
2075  // Ũ [LATIN CAPITAL LETTER U WITH TILDE]
2076  case '\u016A':
2077  // Ū [LATIN CAPITAL LETTER U WITH MACRON]
2078  case '\u016C':
2079  // Ŭ [LATIN CAPITAL LETTER U WITH BREVE]
2080  case '\u016E':
2081  // Å® [LATIN CAPITAL LETTER U WITH RING ABOVE]
2082  case '\u0170':
2083  // Å° [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
2084  case '\u0172':
2085  // Ų [LATIN CAPITAL LETTER U WITH OGONEK]
2086  case '\u01AF':
2087  // Ư [LATIN CAPITAL LETTER U WITH HORN]
2088  case '\u01D3':
2089  // Ç“ [LATIN CAPITAL LETTER U WITH CARON]
2090  case '\u01D5':
2091  // Ç• [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
2092  case '\u01D7':
2093  // Ç— [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
2094  case '\u01D9':
2095  // Ç™ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
2096  case '\u01DB':
2097  // Ç› [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
2098  case '\u0214':
2099  // �? [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
2100  case '\u0216':
2101  // È– [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
2102  case '\u0244':
2103  // É„ [LATIN CAPITAL LETTER U BAR]
2104  case '\u1D1C':
2105  // á´œ [LATIN LETTER SMALL CAPITAL U]
2106  case '\u1D7E':
2107  // áµ¾ [LATIN SMALL CAPITAL LETTER U WITH STROKE]
2108  case '\u1E72':
2109  // á¹² [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
2110  case '\u1E74':
2111  // á¹´ [LATIN CAPITAL LETTER U WITH TILDE BELOW]
2112  case '\u1E76':
2113  // Ṷ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
2114  case '\u1E78':
2115  // Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
2116  case '\u1E7A':
2117  // Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
2118  case '\u1EE4':
2119  // Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW]
2120  case '\u1EE6':
2121  // Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
2122  case '\u1EE8':
2123  // Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
2124  case '\u1EEA':
2125  // Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
2126  case '\u1EEC':
2127  // Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
2128  case '\u1EEE':
2129  // á»® [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
2130  case '\u1EF0':
2131  // á»° [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
2132  case '\u24CA':
2133  // â“Š [CIRCLED LATIN CAPITAL LETTER U]
2134  case '\uFF35': // ï¼µ [FULLWIDTH LATIN CAPITAL LETTER U]
2135  output[outputPos++] = 'U';
2136  break;
2137 
2138  case '\u00F9':
2139  // ù [LATIN SMALL LETTER U WITH GRAVE]
2140  case '\u00FA':
2141  // ú [LATIN SMALL LETTER U WITH ACUTE]
2142  case '\u00FB':
2143  // û [LATIN SMALL LETTER U WITH CIRCUMFLEX]
2144  case '\u00FC':
2145  // ü [LATIN SMALL LETTER U WITH DIAERESIS]
2146  case '\u0169':
2147  // Å© [LATIN SMALL LETTER U WITH TILDE]
2148  case '\u016B':
2149  // Å« [LATIN SMALL LETTER U WITH MACRON]
2150  case '\u016D':
2151  // Å­ [LATIN SMALL LETTER U WITH BREVE]
2152  case '\u016F':
2153  // ů [LATIN SMALL LETTER U WITH RING ABOVE]
2154  case '\u0171':
2155  // ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
2156  case '\u0173':
2157  // ų [LATIN SMALL LETTER U WITH OGONEK]
2158  case '\u01B0':
2159  // Æ° [LATIN SMALL LETTER U WITH HORN]
2160  case '\u01D4':
2161  // �? [LATIN SMALL LETTER U WITH CARON]
2162  case '\u01D6':
2163  // Ç– [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
2164  case '\u01D8':
2165  // ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
2166  case '\u01DA':
2167  // Çš [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
2168  case '\u01DC':
2169  // Çœ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
2170  case '\u0215':
2171  // È• [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
2172  case '\u0217':
2173  // È— [LATIN SMALL LETTER U WITH INVERTED BREVE]
2174  case '\u0289':
2175  // ʉ [LATIN SMALL LETTER U BAR]
2176  case '\u1D64':
2177  // ᵤ [LATIN SUBSCRIPT SMALL LETTER U]
2178  case '\u1D99':
2179  // ᶙ [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
2180  case '\u1E73':
2181  // á¹³ [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
2182  case '\u1E75':
2183  // á¹µ [LATIN SMALL LETTER U WITH TILDE BELOW]
2184  case '\u1E77':
2185  // á¹· [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
2186  case '\u1E79':
2187  // á¹¹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
2188  case '\u1E7B':
2189  // á¹» [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
2190  case '\u1EE5':
2191  // ụ [LATIN SMALL LETTER U WITH DOT BELOW]
2192  case '\u1EE7':
2193  // ủ [LATIN SMALL LETTER U WITH HOOK ABOVE]
2194  case '\u1EE9':
2195  // ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE]
2196  case '\u1EEB':
2197  // ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE]
2198  case '\u1EED':
2199  // á»­ [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
2200  case '\u1EEF':
2201  // ữ [LATIN SMALL LETTER U WITH HORN AND TILDE]
2202  case '\u1EF1':
2203  // á»± [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
2204  case '\u24E4':
2205  // ⓤ [CIRCLED LATIN SMALL LETTER U]
2206  case '\uFF55': // u [FULLWIDTH LATIN SMALL LETTER U]
2207  output[outputPos++] = 'u';
2208  break;
2209 
2210  case '\u24B0': // â’° [PARENTHESIZED LATIN SMALL LETTER U]
2211  output[outputPos++] = '(';
2212  output[outputPos++] = 'u';
2213  output[outputPos++] = ')';
2214  break;
2215 
2216  case '\u1D6B': // ᵫ [LATIN SMALL LETTER UE]
2217  output[outputPos++] = 'u';
2218  output[outputPos++] = 'e';
2219  break;
2220 
2221  case '\u01B2':
2222  // Ʋ [LATIN CAPITAL LETTER V WITH HOOK]
2223  case '\u0245':
2224  // É… [LATIN CAPITAL LETTER TURNED V]
2225  case '\u1D20':
2226  // á´  [LATIN LETTER SMALL CAPITAL V]
2227  case '\u1E7C':
2228  // á¹¼ [LATIN CAPITAL LETTER V WITH TILDE]
2229  case '\u1E7E':
2230  // á¹¾ [LATIN CAPITAL LETTER V WITH DOT BELOW]
2231  case '\u1EFC':
2232  // Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V]
2233  case '\u24CB':
2234  // â“‹ [CIRCLED LATIN CAPITAL LETTER V]
2235  case '\uA75E':
2236  // � [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
2237  case '\uA768':
2238  // � [LATIN CAPITAL LETTER VEND]
2239  case '\uFF36': // V [FULLWIDTH LATIN CAPITAL LETTER V]
2240  output[outputPos++] = 'V';
2241  break;
2242 
2243  case '\u028B':
2244  // Ê‹ [LATIN SMALL LETTER V WITH HOOK]
2245  case '\u028C':
2246  // ÊŒ [LATIN SMALL LETTER TURNED V]
2247  case '\u1D65':
2248  // áµ¥ [LATIN SUBSCRIPT SMALL LETTER V]
2249  case '\u1D8C':
2250  // ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK]
2251  case '\u1E7D':
2252  // á¹½ [LATIN SMALL LETTER V WITH TILDE]
2253  case '\u1E7F':
2254  // ṿ [LATIN SMALL LETTER V WITH DOT BELOW]
2255  case '\u24E5':
2256  // â“¥ [CIRCLED LATIN SMALL LETTER V]
2257  case '\u2C71':
2258  // â±± [LATIN SMALL LETTER V WITH RIGHT HOOK]
2259  case '\u2C74':
2260  // â±´ [LATIN SMALL LETTER V WITH CURL]
2261  case '\uA75F':
2262  // � [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
2263  case '\uFF56': // ï½– [FULLWIDTH LATIN SMALL LETTER V]
2264  output[outputPos++] = 'v';
2265  break;
2266 
2267  case '\uA760': // � [LATIN CAPITAL LETTER VY]
2268  output[outputPos++] = 'V';
2269  output[outputPos++] = 'Y';
2270  break;
2271 
2272  case '\u24B1': // â’± [PARENTHESIZED LATIN SMALL LETTER V]
2273  output[outputPos++] = '(';
2274  output[outputPos++] = 'v';
2275  output[outputPos++] = ')';
2276  break;
2277 
2278  case '\uA761': // � [LATIN SMALL LETTER VY]
2279  output[outputPos++] = 'v';
2280  output[outputPos++] = 'y';
2281  break;
2282 
2283  case '\u0174':
2284  // Å´ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
2285  case '\u01F7':
2286  // Ç· http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN]
2287  case '\u1D21':
2288  // á´¡ [LATIN LETTER SMALL CAPITAL W]
2289  case '\u1E80':
2290  // Ẁ [LATIN CAPITAL LETTER W WITH GRAVE]
2291  case '\u1E82':
2292  // Ẃ [LATIN CAPITAL LETTER W WITH ACUTE]
2293  case '\u1E84':
2294  // Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS]
2295  case '\u1E86':
2296  // Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE]
2297  case '\u1E88':
2298  // Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW]
2299  case '\u24CC':
2300  // â“Œ [CIRCLED LATIN CAPITAL LETTER W]
2301  case '\u2C72':
2302  // â±² [LATIN CAPITAL LETTER W WITH HOOK]
2303  case '\uFF37': // ï¼· [FULLWIDTH LATIN CAPITAL LETTER W]
2304  output[outputPos++] = 'W';
2305  break;
2306 
2307  case '\u0175':
2308  // ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX]
2309  case '\u01BF':
2310  // Æ¿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN]
2311  case '\u028D':
2312  // � [LATIN SMALL LETTER TURNED W]
2313  case '\u1E81':
2314  // � [LATIN SMALL LETTER W WITH GRAVE]
2315  case '\u1E83':
2316  // ẃ [LATIN SMALL LETTER W WITH ACUTE]
2317  case '\u1E85':
2318  // ẅ [LATIN SMALL LETTER W WITH DIAERESIS]
2319  case '\u1E87':
2320  // ẇ [LATIN SMALL LETTER W WITH DOT ABOVE]
2321  case '\u1E89':
2322  // ẉ [LATIN SMALL LETTER W WITH DOT BELOW]
2323  case '\u1E98':
2324  // ẘ [LATIN SMALL LETTER W WITH RING ABOVE]
2325  case '\u24E6':
2326  // ⓦ [CIRCLED LATIN SMALL LETTER W]
2327  case '\u2C73':
2328  // â±³ [LATIN SMALL LETTER W WITH HOOK]
2329  case '\uFF57': // ï½— [FULLWIDTH LATIN SMALL LETTER W]
2330  output[outputPos++] = 'w';
2331  break;
2332 
2333  case '\u24B2': // â’² [PARENTHESIZED LATIN SMALL LETTER W]
2334  output[outputPos++] = '(';
2335  output[outputPos++] = 'w';
2336  output[outputPos++] = ')';
2337  break;
2338 
2339  case '\u1E8A':
2340  // Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE]
2341  case '\u1E8C':
2342  // Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS]
2343  case '\u24CD':
2344  // � [CIRCLED LATIN CAPITAL LETTER X]
2345  case '\uFF38': // X [FULLWIDTH LATIN CAPITAL LETTER X]
2346  output[outputPos++] = 'X';
2347  break;
2348 
2349  case '\u1D8D':
2350  // � [LATIN SMALL LETTER X WITH PALATAL HOOK]
2351  case '\u1E8B':
2352  // ẋ [LATIN SMALL LETTER X WITH DOT ABOVE]
2353  case '\u1E8D':
2354  // � [LATIN SMALL LETTER X WITH DIAERESIS]
2355  case '\u2093':
2356  // â‚“ [LATIN SUBSCRIPT SMALL LETTER X]
2357  case '\u24E7':
2358  // ⓧ [CIRCLED LATIN SMALL LETTER X]
2359  case '\uFF58': // x [FULLWIDTH LATIN SMALL LETTER X]
2360  output[outputPos++] = 'x';
2361  break;
2362 
2363  case '\u24B3': // â’³ [PARENTHESIZED LATIN SMALL LETTER X]
2364  output[outputPos++] = '(';
2365  output[outputPos++] = 'x';
2366  output[outputPos++] = ')';
2367  break;
2368 
2369  case '\u00DD':
2370  // � [LATIN CAPITAL LETTER Y WITH ACUTE]
2371  case '\u0176':
2372  // Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
2373  case '\u0178':
2374  // Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS]
2375  case '\u01B3':
2376  // Ƴ [LATIN CAPITAL LETTER Y WITH HOOK]
2377  case '\u0232':
2378  // Ȳ [LATIN CAPITAL LETTER Y WITH MACRON]
2379  case '\u024E':
2380  // ÉŽ [LATIN CAPITAL LETTER Y WITH STROKE]
2381  case '\u028F':
2382  // � [LATIN LETTER SMALL CAPITAL Y]
2383  case '\u1E8E':
2384  // Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
2385  case '\u1EF2':
2386  // Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE]
2387  case '\u1EF4':
2388  // á»´ [LATIN CAPITAL LETTER Y WITH DOT BELOW]
2389  case '\u1EF6':
2390  // Ỷ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
2391  case '\u1EF8':
2392  // Ỹ [LATIN CAPITAL LETTER Y WITH TILDE]
2393  case '\u1EFE':
2394  // Ỿ [LATIN CAPITAL LETTER Y WITH LOOP]
2395  case '\u24CE':
2396  // â“Ž [CIRCLED LATIN CAPITAL LETTER Y]
2397  case '\uFF39': // ï¼¹ [FULLWIDTH LATIN CAPITAL LETTER Y]
2398  output[outputPos++] = 'Y';
2399  break;
2400 
2401  case '\u00FD':
2402  // ý [LATIN SMALL LETTER Y WITH ACUTE]
2403  case '\u00FF':
2404  // ÿ [LATIN SMALL LETTER Y WITH DIAERESIS]
2405  case '\u0177':
2406  // Å· [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
2407  case '\u01B4':
2408  // Æ´ [LATIN SMALL LETTER Y WITH HOOK]
2409  case '\u0233':
2410  // ȳ [LATIN SMALL LETTER Y WITH MACRON]
2411  case '\u024F':
2412  // � [LATIN SMALL LETTER Y WITH STROKE]
2413  case '\u028E':
2414  // ÊŽ [LATIN SMALL LETTER TURNED Y]
2415  case '\u1E8F':
2416  // � [LATIN SMALL LETTER Y WITH DOT ABOVE]
2417  case '\u1E99':
2418  // ẙ [LATIN SMALL LETTER Y WITH RING ABOVE]
2419  case '\u1EF3':
2420  // ỳ [LATIN SMALL LETTER Y WITH GRAVE]
2421  case '\u1EF5':
2422  // ỵ [LATIN SMALL LETTER Y WITH DOT BELOW]
2423  case '\u1EF7':
2424  // á»· [LATIN SMALL LETTER Y WITH HOOK ABOVE]
2425  case '\u1EF9':
2426  // ỹ [LATIN SMALL LETTER Y WITH TILDE]
2427  case '\u1EFF':
2428  // ỿ [LATIN SMALL LETTER Y WITH LOOP]
2429  case '\u24E8':
2430  // ⓨ [CIRCLED LATIN SMALL LETTER Y]
2431  case '\uFF59': // ï½™ [FULLWIDTH LATIN SMALL LETTER Y]
2432  output[outputPos++] = 'y';
2433  break;
2434 
2435  case '\u24B4': // â’´ [PARENTHESIZED LATIN SMALL LETTER Y]
2436  output[outputPos++] = '(';
2437  output[outputPos++] = 'y';
2438  output[outputPos++] = ')';
2439  break;
2440 
2441  case '\u0179':
2442  // Ź [LATIN CAPITAL LETTER Z WITH ACUTE]
2443  case '\u017B':
2444  // Å» [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
2445  case '\u017D':
2446  // Ž [LATIN CAPITAL LETTER Z WITH CARON]
2447  case '\u01B5':
2448  // Ƶ [LATIN CAPITAL LETTER Z WITH STROKE]
2449  case '\u021C':
2450  // Èœ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH]
2451  case '\u0224':
2452  // Ȥ [LATIN CAPITAL LETTER Z WITH HOOK]
2453  case '\u1D22':
2454  // á´¢ [LATIN LETTER SMALL CAPITAL Z]
2455  case '\u1E90':
2456  // � [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
2457  case '\u1E92':
2458  // Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW]
2459  case '\u1E94':
2460  // �? [LATIN CAPITAL LETTER Z WITH LINE BELOW]
2461  case '\u24CF':
2462  // � [CIRCLED LATIN CAPITAL LETTER Z]
2463  case '\u2C6B':
2464  // Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER]
2465  case '\uA762':
2466  // � [LATIN CAPITAL LETTER VISIGOTHIC Z]
2467  case '\uFF3A': // Z [FULLWIDTH LATIN CAPITAL LETTER Z]
2468  output[outputPos++] = 'Z';
2469  break;
2470 
2471  case '\u017A':
2472  // ź [LATIN SMALL LETTER Z WITH ACUTE]
2473  case '\u017C':
2474  // ż [LATIN SMALL LETTER Z WITH DOT ABOVE]
2475  case '\u017E':
2476  // ž [LATIN SMALL LETTER Z WITH CARON]
2477  case '\u01B6':
2478  // ƶ [LATIN SMALL LETTER Z WITH STROKE]
2479  case '\u021D':
2480  // � http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH]
2481  case '\u0225':
2482  // È¥ [LATIN SMALL LETTER Z WITH HOOK]
2483  case '\u0240':
2484  // É€ [LATIN SMALL LETTER Z WITH SWASH TAIL]
2485  case '\u0290':
2486  // � [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
2487  case '\u0291':
2488  // Ê‘ [LATIN SMALL LETTER Z WITH CURL]
2489  case '\u1D76':
2490  // ᵶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
2491  case '\u1D8E':
2492  // ᶎ [LATIN SMALL LETTER Z WITH PALATAL HOOK]
2493  case '\u1E91':
2494  // ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
2495  case '\u1E93':
2496  // ẓ [LATIN SMALL LETTER Z WITH DOT BELOW]
2497  case '\u1E95':
2498  // ẕ [LATIN SMALL LETTER Z WITH LINE BELOW]
2499  case '\u24E9':
2500  // â“© [CIRCLED LATIN SMALL LETTER Z]
2501  case '\u2C6C':
2502  // ⱬ [LATIN SMALL LETTER Z WITH DESCENDER]
2503  case '\uA763':
2504  // � [LATIN SMALL LETTER VISIGOTHIC Z]
2505  case '\uFF5A': // z [FULLWIDTH LATIN SMALL LETTER Z]
2506  output[outputPos++] = 'z';
2507  break;
2508 
2509  case '\u24B5': // â’µ [PARENTHESIZED LATIN SMALL LETTER Z]
2510  output[outputPos++] = '(';
2511  output[outputPos++] = 'z';
2512  output[outputPos++] = ')';
2513  break;
2514 
2515  case '\u2070':
2516  // � [SUPERSCRIPT ZERO]
2517  case '\u2080':
2518  // â‚€ [SUBSCRIPT ZERO]
2519  case '\u24EA':
2520  // ⓪ [CIRCLED DIGIT ZERO]
2521  case '\u24FF':
2522  // â“¿ [NEGATIVE CIRCLED DIGIT ZERO]
2523  case '\uFF10': // � [FULLWIDTH DIGIT ZERO]
2524  output[outputPos++] = '0';
2525  break;
2526 
2527  case '\u00B9':
2528  // ¹ [SUPERSCRIPT ONE]
2529  case '\u2081':
2530  // � [SUBSCRIPT ONE]
2531  case '\u2460':
2532  // â‘  [CIRCLED DIGIT ONE]
2533  case '\u24F5':
2534  // ⓵ [DOUBLE CIRCLED DIGIT ONE]
2535  case '\u2776':
2536  // � [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
2537  case '\u2780':
2538  // ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
2539  case '\u278A':
2540  // ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
2541  case '\uFF11': // 1 [FULLWIDTH DIGIT ONE]
2542  output[outputPos++] = '1';
2543  break;
2544 
2545  case '\u2488': // â’ˆ [DIGIT ONE FULL STOP]
2546  output[outputPos++] = '1';
2547  output[outputPos++] = '.';
2548  break;
2549 
2550  case '\u2474': // â‘´ [PARENTHESIZED DIGIT ONE]
2551  output[outputPos++] = '(';
2552  output[outputPos++] = '1';
2553  output[outputPos++] = ')';
2554  break;
2555 
2556  case '\u00B2':
2557  // ² [SUPERSCRIPT TWO]
2558  case '\u2082':
2559  // â‚‚ [SUBSCRIPT TWO]
2560  case '\u2461':
2561  // â‘¡ [CIRCLED DIGIT TWO]
2562  case '\u24F6':
2563  // ⓶ [DOUBLE CIRCLED DIGIT TWO]
2564  case '\u2777':
2565  // � [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
2566  case '\u2781':
2567  // � [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
2568  case '\u278B':
2569  // âž‹ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
2570  case '\uFF12': // ï¼’ [FULLWIDTH DIGIT TWO]
2571  output[outputPos++] = '2';
2572  break;
2573 
2574  case '\u2489': // â’‰ [DIGIT TWO FULL STOP]
2575  output[outputPos++] = '2';
2576  output[outputPos++] = '.';
2577  break;
2578 
2579  case '\u2475': // ⑵ [PARENTHESIZED DIGIT TWO]
2580  output[outputPos++] = '(';
2581  output[outputPos++] = '2';
2582  output[outputPos++] = ')';
2583  break;
2584 
2585  case '\u00B3':
2586  // ³ [SUPERSCRIPT THREE]
2587  case '\u2083':
2588  // ₃ [SUBSCRIPT THREE]
2589  case '\u2462':
2590  // â‘¢ [CIRCLED DIGIT THREE]
2591  case '\u24F7':
2592  // â“· [DOUBLE CIRCLED DIGIT THREE]
2593  case '\u2778':
2594  // � [DINGBAT NEGATIVE CIRCLED DIGIT THREE]
2595  case '\u2782':
2596  // âž‚ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
2597  case '\u278C':
2598  // ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
2599  case '\uFF13': // 3 [FULLWIDTH DIGIT THREE]
2600  output[outputPos++] = '3';
2601  break;
2602 
2603  case '\u248A': // â’Š [DIGIT THREE FULL STOP]
2604  output[outputPos++] = '3';
2605  output[outputPos++] = '.';
2606  break;
2607 
2608  case '\u2476': // ⑶ [PARENTHESIZED DIGIT THREE]
2609  output[outputPos++] = '(';
2610  output[outputPos++] = '3';
2611  output[outputPos++] = ')';
2612  break;
2613 
2614  case '\u2074':
2615  // � [SUPERSCRIPT FOUR]
2616  case '\u2084':
2617  // â‚„ [SUBSCRIPT FOUR]
2618  case '\u2463':
2619  // â‘£ [CIRCLED DIGIT FOUR]
2620  case '\u24F8':
2621  // ⓸ [DOUBLE CIRCLED DIGIT FOUR]
2622  case '\u2779':
2623  // � [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
2624  case '\u2783':
2625  // ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
2626  case '\u278D':
2627  // � [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
2628  case '\uFF14': // �? [FULLWIDTH DIGIT FOUR]
2629  output[outputPos++] = '4';
2630  break;
2631 
2632  case '\u248B': // â’‹ [DIGIT FOUR FULL STOP]
2633  output[outputPos++] = '4';
2634  output[outputPos++] = '.';
2635  break;
2636 
2637  case '\u2477': // â‘· [PARENTHESIZED DIGIT FOUR]
2638  output[outputPos++] = '(';
2639  output[outputPos++] = '4';
2640  output[outputPos++] = ')';
2641  break;
2642 
2643  case '\u2075':
2644  // � [SUPERSCRIPT FIVE]
2645  case '\u2085':
2646  // â‚… [SUBSCRIPT FIVE]
2647  case '\u2464':
2648  // ⑤ [CIRCLED DIGIT FIVE]
2649  case '\u24F9':
2650  // ⓹ [DOUBLE CIRCLED DIGIT FIVE]
2651  case '\u277A':
2652  // � [DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
2653  case '\u2784':
2654  // âž„ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
2655  case '\u278E':
2656  // ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
2657  case '\uFF15': // 5 [FULLWIDTH DIGIT FIVE]
2658  output[outputPos++] = '5';
2659  break;
2660 
2661  case '\u248C': // â’Œ [DIGIT FIVE FULL STOP]
2662  output[outputPos++] = '5';
2663  output[outputPos++] = '.';
2664  break;
2665 
2666  case '\u2478': // ⑸ [PARENTHESIZED DIGIT FIVE]
2667  output[outputPos++] = '(';
2668  output[outputPos++] = '5';
2669  output[outputPos++] = ')';
2670  break;
2671 
2672  case '\u2076':
2673  // � [SUPERSCRIPT SIX]
2674  case '\u2086':
2675  // ₆ [SUBSCRIPT SIX]
2676  case '\u2465':
2677  // â‘¥ [CIRCLED DIGIT SIX]
2678  case '\u24FA':
2679  // ⓺ [DOUBLE CIRCLED DIGIT SIX]
2680  case '\u277B':
2681  // � [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
2682  case '\u2785':
2683  // âž… [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
2684  case '\u278F':
2685  // � [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
2686  case '\uFF16': // ï¼– [FULLWIDTH DIGIT SIX]
2687  output[outputPos++] = '6';
2688  break;
2689 
2690  case '\u248D': // â’� [DIGIT SIX FULL STOP]
2691  output[outputPos++] = '6';
2692  output[outputPos++] = '.';
2693  break;
2694 
2695  case '\u2479': // ⑹ [PARENTHESIZED DIGIT SIX]
2696  output[outputPos++] = '(';
2697  output[outputPos++] = '6';
2698  output[outputPos++] = ')';
2699  break;
2700 
2701  case '\u2077':
2702  // � [SUPERSCRIPT SEVEN]
2703  case '\u2087':
2704  // ₇ [SUBSCRIPT SEVEN]
2705  case '\u2466':
2706  // ⑦ [CIRCLED DIGIT SEVEN]
2707  case '\u24FB':
2708  // â“» [DOUBLE CIRCLED DIGIT SEVEN]
2709  case '\u277C':
2710  // � [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
2711  case '\u2786':
2712  // ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
2713  case '\u2790':
2714  // � [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
2715  case '\uFF17': // ï¼— [FULLWIDTH DIGIT SEVEN]
2716  output[outputPos++] = '7';
2717  break;
2718 
2719  case '\u248E': // â’Ž [DIGIT SEVEN FULL STOP]
2720  output[outputPos++] = '7';
2721  output[outputPos++] = '.';
2722  break;
2723 
2724  case '\u247A': // ⑺ [PARENTHESIZED DIGIT SEVEN]
2725  output[outputPos++] = '(';
2726  output[outputPos++] = '7';
2727  output[outputPos++] = ')';
2728  break;
2729 
2730  case '\u2078':
2731  // � [SUPERSCRIPT EIGHT]
2732  case '\u2088':
2733  // ₈ [SUBSCRIPT EIGHT]
2734  case '\u2467':
2735  // ⑧ [CIRCLED DIGIT EIGHT]
2736  case '\u24FC':
2737  // ⓼ [DOUBLE CIRCLED DIGIT EIGHT]
2738  case '\u277D':
2739  // � [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
2740  case '\u2787':
2741  // ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
2742  case '\u2791':
2743  // âž‘ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
2744  case '\uFF18': // 8 [FULLWIDTH DIGIT EIGHT]
2745  output[outputPos++] = '8';
2746  break;
2747 
2748  case '\u248F': // â’� [DIGIT EIGHT FULL STOP]
2749  output[outputPos++] = '8';
2750  output[outputPos++] = '.';
2751  break;
2752 
2753  case '\u247B': // â‘» [PARENTHESIZED DIGIT EIGHT]
2754  output[outputPos++] = '(';
2755  output[outputPos++] = '8';
2756  output[outputPos++] = ')';
2757  break;
2758 
2759  case '\u2079':
2760  // � [SUPERSCRIPT NINE]
2761  case '\u2089':
2762  // ₉ [SUBSCRIPT NINE]
2763  case '\u2468':
2764  // ⑨ [CIRCLED DIGIT NINE]
2765  case '\u24FD':
2766  // ⓽ [DOUBLE CIRCLED DIGIT NINE]
2767  case '\u277E':
2768  // � [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
2769  case '\u2788':
2770  // ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
2771  case '\u2792':
2772  // âž’ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
2773  case '\uFF19': // ï¼™ [FULLWIDTH DIGIT NINE]
2774  output[outputPos++] = '9';
2775  break;
2776 
2777  case '\u2490': // â’� [DIGIT NINE FULL STOP]
2778  output[outputPos++] = '9';
2779  output[outputPos++] = '.';
2780  break;
2781 
2782  case '\u247C': // ⑼ [PARENTHESIZED DIGIT NINE]
2783  output[outputPos++] = '(';
2784  output[outputPos++] = '9';
2785  output[outputPos++] = ')';
2786  break;
2787 
2788  case '\u2469':
2789  // â‘© [CIRCLED NUMBER TEN]
2790  case '\u24FE':
2791  // ⓾ [DOUBLE CIRCLED NUMBER TEN]
2792  case '\u277F':
2793  // � [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
2794  case '\u2789':
2795  // ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
2796  case '\u2793': // âž“ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
2797  output[outputPos++] = '1';
2798  output[outputPos++] = '0';
2799  break;
2800 
2801  case '\u2491': // â’‘ [NUMBER TEN FULL STOP]
2802  output[outputPos++] = '1';
2803  output[outputPos++] = '0';
2804  output[outputPos++] = '.';
2805  break;
2806 
2807  case '\u247D': // ⑽ [PARENTHESIZED NUMBER TEN]
2808  output[outputPos++] = '(';
2809  output[outputPos++] = '1';
2810  output[outputPos++] = '0';
2811  output[outputPos++] = ')';
2812  break;
2813 
2814  case '\u246A':
2815  // ⑪ [CIRCLED NUMBER ELEVEN]
2816  case '\u24EB': // â“« [NEGATIVE CIRCLED NUMBER ELEVEN]
2817  output[outputPos++] = '1';
2818  output[outputPos++] = '1';
2819  break;
2820 
2821  case '\u2492': // â’’ [NUMBER ELEVEN FULL STOP]
2822  output[outputPos++] = '1';
2823  output[outputPos++] = '1';
2824  output[outputPos++] = '.';
2825  break;
2826 
2827  case '\u247E': // ⑾ [PARENTHESIZED NUMBER ELEVEN]
2828  output[outputPos++] = '(';
2829  output[outputPos++] = '1';
2830  output[outputPos++] = '1';
2831  output[outputPos++] = ')';
2832  break;
2833 
2834  case '\u246B':
2835  // â‘« [CIRCLED NUMBER TWELVE]
2836  case '\u24EC': // ⓬ [NEGATIVE CIRCLED NUMBER TWELVE]
2837  output[outputPos++] = '1';
2838  output[outputPos++] = '2';
2839  break;
2840 
2841  case '\u2493': // â’“ [NUMBER TWELVE FULL STOP]
2842  output[outputPos++] = '1';
2843  output[outputPos++] = '2';
2844  output[outputPos++] = '.';
2845  break;
2846 
2847  case '\u247F': // â‘¿ [PARENTHESIZED NUMBER TWELVE]
2848  output[outputPos++] = '(';
2849  output[outputPos++] = '1';
2850  output[outputPos++] = '2';
2851  output[outputPos++] = ')';
2852  break;
2853 
2854  case '\u246C':
2855  // ⑬ [CIRCLED NUMBER THIRTEEN]
2856  case '\u24ED': // â“­ [NEGATIVE CIRCLED NUMBER THIRTEEN]
2857  output[outputPos++] = '1';
2858  output[outputPos++] = '3';
2859  break;
2860 
2861  case '\u2494': // â’�? [NUMBER THIRTEEN FULL STOP]
2862  output[outputPos++] = '1';
2863  output[outputPos++] = '3';
2864  output[outputPos++] = '.';
2865  break;
2866 
2867  case '\u2480': // â’€ [PARENTHESIZED NUMBER THIRTEEN]
2868  output[outputPos++] = '(';
2869  output[outputPos++] = '1';
2870  output[outputPos++] = '3';
2871  output[outputPos++] = ')';
2872  break;
2873 
2874  case '\u246D':
2875  // â‘­ [CIRCLED NUMBER FOURTEEN]
2876  case '\u24EE': // â“® [NEGATIVE CIRCLED NUMBER FOURTEEN]
2877  output[outputPos++] = '1';
2878  output[outputPos++] = '4';
2879  break;
2880 
2881  case '\u2495': // â’• [NUMBER FOURTEEN FULL STOP]
2882  output[outputPos++] = '1';
2883  output[outputPos++] = '4';
2884  output[outputPos++] = '.';
2885  break;
2886 
2887  case '\u2481': // â’� [PARENTHESIZED NUMBER FOURTEEN]
2888  output[outputPos++] = '(';
2889  output[outputPos++] = '1';
2890  output[outputPos++] = '4';
2891  output[outputPos++] = ')';
2892  break;
2893 
2894  case '\u246E':
2895  // â‘® [CIRCLED NUMBER FIFTEEN]
2896  case '\u24EF': // ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN]
2897  output[outputPos++] = '1';
2898  output[outputPos++] = '5';
2899  break;
2900 
2901  case '\u2496': // â’– [NUMBER FIFTEEN FULL STOP]
2902  output[outputPos++] = '1';
2903  output[outputPos++] = '5';
2904  output[outputPos++] = '.';
2905  break;
2906 
2907  case '\u2482': // â’‚ [PARENTHESIZED NUMBER FIFTEEN]
2908  output[outputPos++] = '(';
2909  output[outputPos++] = '1';
2910  output[outputPos++] = '5';
2911  output[outputPos++] = ')';
2912  break;
2913 
2914  case '\u246F':
2915  // ⑯ [CIRCLED NUMBER SIXTEEN]
2916  case '\u24F0': // â“° [NEGATIVE CIRCLED NUMBER SIXTEEN]
2917  output[outputPos++] = '1';
2918  output[outputPos++] = '6';
2919  break;
2920 
2921  case '\u2497': // â’— [NUMBER SIXTEEN FULL STOP]
2922  output[outputPos++] = '1';
2923  output[outputPos++] = '6';
2924  output[outputPos++] = '.';
2925  break;
2926 
2927  case '\u2483': // â’ƒ [PARENTHESIZED NUMBER SIXTEEN]
2928  output[outputPos++] = '(';
2929  output[outputPos++] = '1';
2930  output[outputPos++] = '6';
2931  output[outputPos++] = ')';
2932  break;
2933 
2934  case '\u2470':
2935  // â‘° [CIRCLED NUMBER SEVENTEEN]
2936  case '\u24F1': // ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN]
2937  output[outputPos++] = '1';
2938  output[outputPos++] = '7';
2939  break;
2940 
2941  case '\u2498': // â’˜ [NUMBER SEVENTEEN FULL STOP]
2942  output[outputPos++] = '1';
2943  output[outputPos++] = '7';
2944  output[outputPos++] = '.';
2945  break;
2946 
2947  case '\u2484': // â’„ [PARENTHESIZED NUMBER SEVENTEEN]
2948  output[outputPos++] = '(';
2949  output[outputPos++] = '1';
2950  output[outputPos++] = '7';
2951  output[outputPos++] = ')';
2952  break;
2953 
2954  case '\u2471':
2955  // ⑱ [CIRCLED NUMBER EIGHTEEN]
2956  case '\u24F2': // ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN]
2957  output[outputPos++] = '1';
2958  output[outputPos++] = '8';
2959  break;
2960 
2961  case '\u2499': // â’™ [NUMBER EIGHTEEN FULL STOP]
2962  output[outputPos++] = '1';
2963  output[outputPos++] = '8';
2964  output[outputPos++] = '.';
2965  break;
2966 
2967  case '\u2485': // â’… [PARENTHESIZED NUMBER EIGHTEEN]
2968  output[outputPos++] = '(';
2969  output[outputPos++] = '1';
2970  output[outputPos++] = '8';
2971  output[outputPos++] = ')';
2972  break;
2973 
2974  case '\u2472':
2975  // ⑲ [CIRCLED NUMBER NINETEEN]
2976  case '\u24F3': // ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN]
2977  output[outputPos++] = '1';
2978  output[outputPos++] = '9';
2979  break;
2980 
2981  case '\u249A': // â’š [NUMBER NINETEEN FULL STOP]
2982  output[outputPos++] = '1';
2983  output[outputPos++] = '9';
2984  output[outputPos++] = '.';
2985  break;
2986 
2987  case '\u2486': // â’† [PARENTHESIZED NUMBER NINETEEN]
2988  output[outputPos++] = '(';
2989  output[outputPos++] = '1';
2990  output[outputPos++] = '9';
2991  output[outputPos++] = ')';
2992  break;
2993 
2994  case '\u2473':
2995  // ⑳ [CIRCLED NUMBER TWENTY]
2996  case '\u24F4': // â“´ [NEGATIVE CIRCLED NUMBER TWENTY]
2997  output[outputPos++] = '2';
2998  output[outputPos++] = '0';
2999  break;
3000 
3001  case '\u249B': // â’› [NUMBER TWENTY FULL STOP]
3002  output[outputPos++] = '2';
3003  output[outputPos++] = '0';
3004  output[outputPos++] = '.';
3005  break;
3006 
3007  case '\u2487': // â’‡ [PARENTHESIZED NUMBER TWENTY]
3008  output[outputPos++] = '(';
3009  output[outputPos++] = '2';
3010  output[outputPos++] = '0';
3011  output[outputPos++] = ')';
3012  break;
3013 
3014  case '\u00AB':
3015  // « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
3016  case '\u00BB':
3017  // » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
3018  case '\u201C':
3019  // “ [LEFT DOUBLE QUOTATION MARK]
3020  case '\u201D':
3021  // � [RIGHT DOUBLE QUOTATION MARK]
3022  case '\u201E':
3023  // „ [DOUBLE LOW-9 QUOTATION MARK]
3024  case '\u2033':
3025  // ″ [DOUBLE PRIME]
3026  case '\u2036':
3027  // ‶ [REVERSED DOUBLE PRIME]
3028  case '\u275D':
3029  // � [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
3030  case '\u275E':
3031  // � [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
3032  case '\u276E':
3033  // � [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
3034  case '\u276F':
3035  // � [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
3036  case '\uFF02': // " [FULLWIDTH QUOTATION MARK]
3037  output[outputPos++] = '"';
3038  break;
3039 
3040  case '\u2018':
3041  // ‘ [LEFT SINGLE QUOTATION MARK]
3042  case '\u2019':
3043  // ’ [RIGHT SINGLE QUOTATION MARK]
3044  case '\u201A':
3045  // ‚ [SINGLE LOW-9 QUOTATION MARK]
3046  case '\u201B':
3047  // ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
3048  case '\u2032':
3049  // ′ [PRIME]
3050  case '\u2035':
3051  // ‵ [REVERSED PRIME]
3052  case '\u2039':
3053  // ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
3054  case '\u203A':
3055  // › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
3056  case '\u275B':
3057  // � [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
3058  case '\u275C':
3059  // � [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
3060  case '\uFF07': // ' [FULLWIDTH APOSTROPHE]
3061  output[outputPos++] = '\'';
3062  break;
3063 
3064  case '\u2010':
3065  // � [HYPHEN]
3066  case '\u2011':
3067  // ‑ [NON-BREAKING HYPHEN]
3068  case '\u2012':
3069  // ‒ [FIGURE DASH]
3070  case '\u2013':
3071  // – [EN DASH]
3072  case '\u2014':
3073  // �? [EM DASH]
3074  case '\u207B':
3075  // � [SUPERSCRIPT MINUS]
3076  case '\u208B':
3077  // â‚‹ [SUBSCRIPT MINUS]
3078  case '\uFF0D': // � [FULLWIDTH HYPHEN-MINUS]
3079  output[outputPos++] = '-';
3080  break;
3081 
3082  case '\u2045':
3083  // � [LEFT SQUARE BRACKET WITH QUILL]
3084  case '\u2772':
3085  // � [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
3086  case '\uFF3B': // ï¼» [FULLWIDTH LEFT SQUARE BRACKET]
3087  output[outputPos++] = '[';
3088  break;
3089 
3090  case '\u2046':
3091  // � [RIGHT SQUARE BRACKET WITH QUILL]
3092  case '\u2773':
3093  // � [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
3094  case '\uFF3D': // ï¼½ [FULLWIDTH RIGHT SQUARE BRACKET]
3095  output[outputPos++] = ']';
3096  break;
3097 
3098  case '\u207D':
3099  // � [SUPERSCRIPT LEFT PARENTHESIS]
3100  case '\u208D':
3101  // � [SUBSCRIPT LEFT PARENTHESIS]
3102  case '\u2768':
3103  // � [MEDIUM LEFT PARENTHESIS ORNAMENT]
3104  case '\u276A':
3105  // � [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
3106  case '\uFF08': // ( [FULLWIDTH LEFT PARENTHESIS]
3107  output[outputPos++] = '(';
3108  break;
3109 
3110  case '\u2E28': // ⸨ [LEFT DOUBLE PARENTHESIS]
3111  output[outputPos++] = '(';
3112  output[outputPos++] = '(';
3113  break;
3114 
3115  case '\u207E':
3116  // � [SUPERSCRIPT RIGHT PARENTHESIS]
3117  case '\u208E':
3118  // â‚Ž [SUBSCRIPT RIGHT PARENTHESIS]
3119  case '\u2769':
3120  // � [MEDIUM RIGHT PARENTHESIS ORNAMENT]
3121  case '\u276B':
3122  // � [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
3123  case '\uFF09': // ) [FULLWIDTH RIGHT PARENTHESIS]
3124  output[outputPos++] = ')';
3125  break;
3126 
3127  case '\u2E29': // ⸩ [RIGHT DOUBLE PARENTHESIS]
3128  output[outputPos++] = ')';
3129  output[outputPos++] = ')';
3130  break;
3131 
3132  case '\u276C':
3133  // � [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
3134  case '\u2770':
3135  // � [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
3136  case '\uFF1C': // < [FULLWIDTH LESS-THAN SIGN]
3137  output[outputPos++] = '<';
3138  break;
3139 
3140  case '\u276D':
3141  // � [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
3142  case '\u2771':
3143  // � [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
3144  case '\uFF1E': // > [FULLWIDTH GREATER-THAN SIGN]
3145  output[outputPos++] = '>';
3146  break;
3147 
3148  case '\u2774':
3149  // � [MEDIUM LEFT CURLY BRACKET ORNAMENT]
3150  case '\uFF5B': // ï½› [FULLWIDTH LEFT CURLY BRACKET]
3151  output[outputPos++] = '{';
3152  break;
3153 
3154  case '\u2775':
3155  // � [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
3156  case '\uFF5D': // � [FULLWIDTH RIGHT CURLY BRACKET]
3157  output[outputPos++] = '}';
3158  break;
3159 
3160  case '\u207A':
3161  // � [SUPERSCRIPT PLUS SIGN]
3162  case '\u208A':
3163  // â‚Š [SUBSCRIPT PLUS SIGN]
3164  case '\uFF0B': // + [FULLWIDTH PLUS SIGN]
3165  output[outputPos++] = '+';
3166  break;
3167 
3168  case '\u207C':
3169  // � [SUPERSCRIPT EQUALS SIGN]
3170  case '\u208C':
3171  // â‚Œ [SUBSCRIPT EQUALS SIGN]
3172  case '\uFF1D': // � [FULLWIDTH EQUALS SIGN]
3173  output[outputPos++] = '=';
3174  break;
3175 
3176  case '\uFF01': // � [FULLWIDTH EXCLAMATION MARK]
3177  output[outputPos++] = '!';
3178  break;
3179 
3180  case '\u203C': // ‼ [DOUBLE EXCLAMATION MARK]
3181  output[outputPos++] = '!';
3182  output[outputPos++] = '!';
3183  break;
3184 
3185  case '\u2049': // � [EXCLAMATION QUESTION MARK]
3186  output[outputPos++] = '!';
3187  output[outputPos++] = '?';
3188  break;
3189 
3190  case '\uFF03': // # [FULLWIDTH NUMBER SIGN]
3191  output[outputPos++] = '#';
3192  break;
3193 
3194  case '\uFF04': // $ [FULLWIDTH DOLLAR SIGN]
3195  output[outputPos++] = '$';
3196  break;
3197 
3198  case '\u2052':
3199  // � [COMMERCIAL MINUS SIGN]
3200  case '\uFF05': // ï¼… [FULLWIDTH PERCENT SIGN]
3201  output[outputPos++] = '%';
3202  break;
3203 
3204  case '\uFF06': // & [FULLWIDTH AMPERSAND]
3205  output[outputPos++] = '&';
3206  break;
3207 
3208  case '\u204E':
3209  // � [LOW ASTERISK]
3210  case '\uFF0A': // * [FULLWIDTH ASTERISK]
3211  output[outputPos++] = '*';
3212  break;
3213 
3214  case '\uFF0C': // , [FULLWIDTH COMMA]
3215  output[outputPos++] = ',';
3216  break;
3217 
3218  case '\uFF0E': // . [FULLWIDTH FULL STOP]
3219  output[outputPos++] = '.';
3220  break;
3221 
3222  case '\u2044':
3223  // � [FRACTION SLASH]
3224  case '\uFF0F': // � [FULLWIDTH SOLIDUS]
3225  output[outputPos++] = '/';
3226  break;
3227 
3228  case '\uFF1A': // : [FULLWIDTH COLON]
3229  output[outputPos++] = ':';
3230  break;
3231 
3232  case '\u204F':
3233  // � [REVERSED SEMICOLON]
3234  case '\uFF1B': // ï¼› [FULLWIDTH SEMICOLON]
3235  output[outputPos++] = ';';
3236  break;
3237 
3238  case '\uFF1F': // ? [FULLWIDTH QUESTION MARK]
3239  output[outputPos++] = '?';
3240  break;
3241 
3242  case '\u2047': // � [DOUBLE QUESTION MARK]
3243  output[outputPos++] = '?';
3244  output[outputPos++] = '?';
3245  break;
3246 
3247  case '\u2048': // � [QUESTION EXCLAMATION MARK]
3248  output[outputPos++] = '?';
3249  output[outputPos++] = '!';
3250  break;
3251 
3252  case '\uFF20': // ï¼  [FULLWIDTH COMMERCIAL AT]
3253  output[outputPos++] = '@';
3254  break;
3255 
3256  case '\uFF3C': // ï¼¼ [FULLWIDTH REVERSE SOLIDUS]
3257  output[outputPos++] = '\\';
3258  break;
3259 
3260  case '\u2038':
3261  // ‸ [CARET]
3262  case '\uFF3E': // ï¼¾ [FULLWIDTH CIRCUMFLEX ACCENT]
3263  output[outputPos++] = '^';
3264  break;
3265 
3266  case '\uFF3F': // _ [FULLWIDTH LOW LINE]
3267  output[outputPos++] = '_';
3268  break;
3269 
3270  case '\u2053':
3271  // � [SWUNG DASH]
3272  case '\uFF5E': // ~ [FULLWIDTH TILDE]
3273  output[outputPos++] = '~';
3274  break;
3275 
3276  default:
3277  output[outputPos++] = c;
3278  break;
3279 
3280  }
3281  }
3282  }
3283  }
3284  }
3285 }