~slub.team/goobi-indexserver/3.x

« back to all changes in this revision

Viewing changes to lucene/src/java/org/apache/lucene/analysis/ASCIIFoldingFilter.java

  • Committer: Sebastian Meyer
  • Date: 2012-08-03 09:12:40 UTC
  • Revision ID: sebastian.meyer@slub-dresden.de-20120803091240-x6861b0vabq1xror
Remove Lucene and Solr source code and add patches instead
Fix Bug #985487: Auto-suggestion for the search interface

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package org.apache.lucene.analysis;
2
 
 
3
 
/**
4
 
 * Licensed to the Apache Software Foundation (ASF) under one or more
5
 
 * contributor license agreements.  See the NOTICE file distributed with
6
 
 * this work for additional information regarding copyright ownership.
7
 
 * The ASF licenses this file to You under the Apache License, Version 2.0
8
 
 * (the "License"); you may not use this file except in compliance with
9
 
 * the License.  You may obtain a copy of the License at
10
 
 *
11
 
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 
 *
13
 
 * Unless required by applicable law or agreed to in writing, software
14
 
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 
 * See the License for the specific language governing permissions and
17
 
 * limitations under the License.
18
 
 */
19
 
 
20
 
import java.io.IOException;
21
 
 
22
 
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
23
 
import org.apache.lucene.util.ArrayUtil;
24
 
import org.apache.lucene.util.RamUsageEstimator;
25
 
 
26
 
/**
27
 
 * This class converts alphabetic, numeric, and symbolic Unicode characters
28
 
 * which are not in the first 127 ASCII characters (the "Basic Latin" Unicode
29
 
 * block) into their ASCII equivalents, if one exists.
30
 
 *
31
 
 * Characters from the following Unicode blocks are converted; however, only
32
 
 * those characters with reasonable ASCII alternatives are converted:
33
 
 *
34
 
 * <ul>
35
 
 *   <li>C1 Controls and Latin-1 Supplement: <a href="http://www.unicode.org/charts/PDF/U0080.pdf">http://www.unicode.org/charts/PDF/U0080.pdf</a>
36
 
 *   <li>Latin Extended-A: <a href="http://www.unicode.org/charts/PDF/U0100.pdf">http://www.unicode.org/charts/PDF/U0100.pdf</a>
37
 
 *   <li>Latin Extended-B: <a href="http://www.unicode.org/charts/PDF/U0180.pdf">http://www.unicode.org/charts/PDF/U0180.pdf</a>
38
 
 *   <li>Latin Extended Additional: <a href="http://www.unicode.org/charts/PDF/U1E00.pdf">http://www.unicode.org/charts/PDF/U1E00.pdf</a>
39
 
 *   <li>Latin Extended-C: <a href="http://www.unicode.org/charts/PDF/U2C60.pdf">http://www.unicode.org/charts/PDF/U2C60.pdf</a>
40
 
 *   <li>Latin Extended-D: <a href="http://www.unicode.org/charts/PDF/UA720.pdf">http://www.unicode.org/charts/PDF/UA720.pdf</a>
41
 
 *   <li>IPA Extensions: <a href="http://www.unicode.org/charts/PDF/U0250.pdf">http://www.unicode.org/charts/PDF/U0250.pdf</a>
42
 
 *   <li>Phonetic Extensions: <a href="http://www.unicode.org/charts/PDF/U1D00.pdf">http://www.unicode.org/charts/PDF/U1D00.pdf</a>
43
 
 *   <li>Phonetic Extensions Supplement: <a href="http://www.unicode.org/charts/PDF/U1D80.pdf">http://www.unicode.org/charts/PDF/U1D80.pdf</a>
44
 
 *   <li>General Punctuation: <a href="http://www.unicode.org/charts/PDF/U2000.pdf">http://www.unicode.org/charts/PDF/U2000.pdf</a>
45
 
 *   <li>Superscripts and Subscripts: <a href="http://www.unicode.org/charts/PDF/U2070.pdf">http://www.unicode.org/charts/PDF/U2070.pdf</a>
46
 
 *   <li>Enclosed Alphanumerics: <a href="http://www.unicode.org/charts/PDF/U2460.pdf">http://www.unicode.org/charts/PDF/U2460.pdf</a>
47
 
 *   <li>Dingbats: <a href="http://www.unicode.org/charts/PDF/U2700.pdf">http://www.unicode.org/charts/PDF/U2700.pdf</a>
48
 
 *   <li>Supplemental Punctuation: <a href="http://www.unicode.org/charts/PDF/U2E00.pdf">http://www.unicode.org/charts/PDF/U2E00.pdf</a>
49
 
 *   <li>Alphabetic Presentation Forms: <a href="http://www.unicode.org/charts/PDF/UFB00.pdf">http://www.unicode.org/charts/PDF/UFB00.pdf</a>
50
 
 *   <li>Halfwidth and Fullwidth Forms: <a href="http://www.unicode.org/charts/PDF/UFF00.pdf">http://www.unicode.org/charts/PDF/UFF00.pdf</a>
51
 
 * </ul>
52
 
 *  
53
 
 * See: <a href="http://en.wikipedia.org/wiki/Latin_characters_in_Unicode">http://en.wikipedia.org/wiki/Latin_characters_in_Unicode</a>
54
 
 *
55
 
 * The set of character conversions supported by this class is a superset of
56
 
 * those supported by Lucene's {@link ISOLatin1AccentFilter} which strips
57
 
 * accents from Latin1 characters.  For example, '&agrave;' will be replaced by
58
 
 * 'a'.
59
 
 */
60
 
public final class ASCIIFoldingFilter extends TokenFilter {
61
 
  public ASCIIFoldingFilter(TokenStream input)
62
 
  {
63
 
    super(input);
64
 
  }
65
 
 
66
 
  private char[] output = new char[512];
67
 
  private int outputPos;
68
 
  private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
69
 
 
70
 
  @Override
71
 
  public boolean incrementToken() throws IOException {
72
 
    if (input.incrementToken()) {
73
 
      final char[] buffer = termAtt.buffer();
74
 
      final int length = termAtt.length();
75
 
 
76
 
      // If no characters actually require rewriting then we
77
 
      // just return token as-is:
78
 
      for(int i = 0 ; i < length ; ++i) {
79
 
        final char c = buffer[i];
80
 
        if (c >= '\u0080')
81
 
        {
82
 
          foldToASCII(buffer, length);
83
 
          termAtt.copyBuffer(output, 0, outputPos);
84
 
          break;
85
 
        }
86
 
      }
87
 
      return true;
88
 
    } else {
89
 
      return false;
90
 
    }
91
 
  }
92
 
 
93
 
  /**
94
 
   * Converts characters above ASCII to their ASCII equivalents.  For example,
95
 
   * accents are removed from accented characters.
96
 
   * @param input The string to fold
97
 
   * @param length The number of characters in the input string
98
 
   */
99
 
  public void foldToASCII(char[] input, int length)
100
 
  {
101
 
    // Worst-case length required:
102
 
    final int maxSizeNeeded = 4 * length;
103
 
    if (output.length < maxSizeNeeded) {
104
 
      output = new char[ArrayUtil.oversize(maxSizeNeeded, RamUsageEstimator.NUM_BYTES_CHAR)];
105
 
    }
106
 
 
107
 
    outputPos = foldToASCII(input, 0, output, 0, length);
108
 
  }
109
 
 
110
 
  /**
111
 
   * Converts characters above ASCII to their ASCII equivalents.  For example,
112
 
   * accents are removed from accented characters.
113
 
   * @param input     The characters to fold
114
 
   * @param inputPos  Index of the first character to fold
115
 
   * @param output    The result of the folding. Should be of size >= {@code length * 4}.
116
 
   * @param outputPos Index of output where to put the result of the folding
117
 
   * @param length    The number of characters to fold
118
 
   * @return length of output
119
 
   * @lucene.internal
120
 
   */
121
 
  public static final int foldToASCII(char input[], int inputPos, char output[], int outputPos, int length)
122
 
  {
123
 
    final int end = inputPos + length;
124
 
    for (int pos = inputPos; pos < end ; ++pos) {
125
 
      final char c = input[pos];
126
 
 
127
 
      // Quick test: if it's not in range then just keep current character
128
 
      if (c < '\u0080') {
129
 
        output[outputPos++] = c;
130
 
      } else {
131
 
        switch (c) {
132
 
          case '\u00C0': // À  [LATIN CAPITAL LETTER A WITH GRAVE]
133
 
          case '\u00C1': // Á  [LATIN CAPITAL LETTER A WITH ACUTE]
134
 
          case '\u00C2': // Â  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
135
 
          case '\u00C3': // Ã  [LATIN CAPITAL LETTER A WITH TILDE]
136
 
          case '\u00C4': // Ä  [LATIN CAPITAL LETTER A WITH DIAERESIS]
137
 
          case '\u00C5': // Å  [LATIN CAPITAL LETTER A WITH RING ABOVE]
138
 
          case '\u0100': // Ā  [LATIN CAPITAL LETTER A WITH MACRON]
139
 
          case '\u0102': // Ă  [LATIN CAPITAL LETTER A WITH BREVE]
140
 
          case '\u0104': // Ą  [LATIN CAPITAL LETTER A WITH OGONEK]
141
 
          case '\u018F': // Ə  http://en.wikipedia.org/wiki/Schwa  [LATIN CAPITAL LETTER SCHWA]
142
 
          case '\u01CD': // Ǎ  [LATIN CAPITAL LETTER A WITH CARON]
143
 
          case '\u01DE': // Ǟ  [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
144
 
          case '\u01E0': // Ǡ  [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
145
 
          case '\u01FA': // Ǻ  [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
146
 
          case '\u0200': // Ȁ  [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
147
 
          case '\u0202': // Ȃ  [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
148
 
          case '\u0226': // Ȧ  [LATIN CAPITAL LETTER A WITH DOT ABOVE]
149
 
          case '\u023A': // Ⱥ  [LATIN CAPITAL LETTER A WITH STROKE]
150
 
          case '\u1D00': // ᴀ  [LATIN LETTER SMALL CAPITAL A]
151
 
          case '\u1E00': // Ḁ  [LATIN CAPITAL LETTER A WITH RING BELOW]
152
 
          case '\u1EA0': // Ạ  [LATIN CAPITAL LETTER A WITH DOT BELOW]
153
 
          case '\u1EA2': // Ả  [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
154
 
          case '\u1EA4': // Ấ  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
155
 
          case '\u1EA6': // Ầ  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
156
 
          case '\u1EA8': // Ẩ  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
157
 
          case '\u1EAA': // Ẫ  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
158
 
          case '\u1EAC': // Ậ  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
159
 
          case '\u1EAE': // Ắ  [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
160
 
          case '\u1EB0': // Ằ  [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
161
 
          case '\u1EB2': // Ẳ  [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
162
 
          case '\u1EB4': // Ẵ  [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
163
 
          case '\u1EB6': // Ặ  [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
164
 
          case '\u24B6': // Ⓐ  [CIRCLED LATIN CAPITAL LETTER A]
165
 
          case '\uFF21': // A  [FULLWIDTH LATIN CAPITAL LETTER A]
166
 
            output[outputPos++] = 'A';
167
 
            break;
168
 
          case '\u00E0': // à  [LATIN SMALL LETTER A WITH GRAVE]
169
 
          case '\u00E1': // á  [LATIN SMALL LETTER A WITH ACUTE]
170
 
          case '\u00E2': // â  [LATIN SMALL LETTER A WITH CIRCUMFLEX]
171
 
          case '\u00E3': // ã  [LATIN SMALL LETTER A WITH TILDE]
172
 
          case '\u00E4': // ä  [LATIN SMALL LETTER A WITH DIAERESIS]
173
 
          case '\u00E5': // å  [LATIN SMALL LETTER A WITH RING ABOVE]
174
 
          case '\u0101': // ā  [LATIN SMALL LETTER A WITH MACRON]
175
 
          case '\u0103': // ă  [LATIN SMALL LETTER A WITH BREVE]
176
 
          case '\u0105': // ą  [LATIN SMALL LETTER A WITH OGONEK]
177
 
          case '\u01CE': // ǎ  [LATIN SMALL LETTER A WITH CARON]
178
 
          case '\u01DF': // ǟ  [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
179
 
          case '\u01E1': // ǡ  [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
180
 
          case '\u01FB': // ǻ  [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
181
 
          case '\u0201': // ȁ  [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
182
 
          case '\u0203': // ȃ  [LATIN SMALL LETTER A WITH INVERTED BREVE]
183
 
          case '\u0227': // ȧ  [LATIN SMALL LETTER A WITH DOT ABOVE]
184
 
          case '\u0250': // ɐ  [LATIN SMALL LETTER TURNED A]
185
 
          case '\u0259': // ə  [LATIN SMALL LETTER SCHWA]
186
 
          case '\u025A': // ɚ  [LATIN SMALL LETTER SCHWA WITH HOOK]
187
 
          case '\u1D8F': // ᶏ  [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
188
 
          case '\u1D95': // ᶕ  [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
189
 
          case '\u1E01': // ạ  [LATIN SMALL LETTER A WITH RING BELOW]
190
 
          case '\u1E9A': // ả  [LATIN SMALL LETTER A WITH RIGHT HALF RING]
191
 
          case '\u1EA1': // ạ  [LATIN SMALL LETTER A WITH DOT BELOW]
192
 
          case '\u1EA3': // ả  [LATIN SMALL LETTER A WITH HOOK ABOVE]
193
 
          case '\u1EA5': // ấ  [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
194
 
          case '\u1EA7': // ầ  [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
195
 
          case '\u1EA9': // ẩ  [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
196
 
          case '\u1EAB': // ẫ  [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
197
 
          case '\u1EAD': // ậ  [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
198
 
          case '\u1EAF': // ắ  [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
199
 
          case '\u1EB1': // ằ  [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
200
 
          case '\u1EB3': // ẳ  [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
201
 
          case '\u1EB5': // ẵ  [LATIN SMALL LETTER A WITH BREVE AND TILDE]
202
 
          case '\u1EB7': // ặ  [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
203
 
          case '\u2090': // ₐ  [LATIN SUBSCRIPT SMALL LETTER A]
204
 
          case '\u2094': // ₔ  [LATIN SUBSCRIPT SMALL LETTER SCHWA]
205
 
          case '\u24D0': // ⓐ  [CIRCLED LATIN SMALL LETTER A]
206
 
          case '\u2C65': // ⱥ  [LATIN SMALL LETTER A WITH STROKE]
207
 
          case '\u2C6F': // Ɐ  [LATIN CAPITAL LETTER TURNED A]
208
 
          case '\uFF41': // a  [FULLWIDTH LATIN SMALL LETTER A]
209
 
            output[outputPos++] = 'a';
210
 
            break;
211
 
          case '\uA732': // Ꜳ  [LATIN CAPITAL LETTER AA]
212
 
            output[outputPos++] = 'A';
213
 
            output[outputPos++] = 'A';
214
 
            break;
215
 
          case '\u00C6': // Æ  [LATIN CAPITAL LETTER AE]
216
 
          case '\u01E2': // Ǣ  [LATIN CAPITAL LETTER AE WITH MACRON]
217
 
          case '\u01FC': // Ǽ  [LATIN CAPITAL LETTER AE WITH ACUTE]
218
 
          case '\u1D01': // ᴁ  [LATIN LETTER SMALL CAPITAL AE]
219
 
            output[outputPos++] = 'A';
220
 
            output[outputPos++] = 'E';
221
 
            break;
222
 
          case '\uA734': // Ꜵ  [LATIN CAPITAL LETTER AO]
223
 
            output[outputPos++] = 'A';                    
224
 
            output[outputPos++] = 'O';
225
 
            break;
226
 
          case '\uA736': // Ꜷ  [LATIN CAPITAL LETTER AU]
227
 
            output[outputPos++] = 'A';
228
 
            output[outputPos++] = 'U';
229
 
            break;
230
 
          case '\uA738': // Ꜹ  [LATIN CAPITAL LETTER AV]
231
 
          case '\uA73A': // Ꜻ  [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
232
 
            output[outputPos++] = 'A';
233
 
            output[outputPos++] = 'V';
234
 
            break;
235
 
          case '\uA73C': // Ꜽ  [LATIN CAPITAL LETTER AY]
236
 
            output[outputPos++] = 'A';
237
 
            output[outputPos++] = 'Y';
238
 
            break;
239
 
          case '\u249C': // ⒜  [PARENTHESIZED LATIN SMALL LETTER A]
240
 
            output[outputPos++] = '(';
241
 
            output[outputPos++] = 'a';
242
 
            output[outputPos++] = ')';
243
 
            break;
244
 
          case '\uA733': // ꜳ  [LATIN SMALL LETTER AA]
245
 
            output[outputPos++] = 'a';
246
 
            output[outputPos++] = 'a';
247
 
            break;
248
 
          case '\u00E6': // æ  [LATIN SMALL LETTER AE]
249
 
          case '\u01E3': // ǣ  [LATIN SMALL LETTER AE WITH MACRON]
250
 
          case '\u01FD': // ǽ  [LATIN SMALL LETTER AE WITH ACUTE]
251
 
          case '\u1D02': // ᴂ  [LATIN SMALL LETTER TURNED AE]
252
 
            output[outputPos++] = 'a';
253
 
            output[outputPos++] = 'e';
254
 
            break;
255
 
          case '\uA735': // ꜵ  [LATIN SMALL LETTER AO]
256
 
            output[outputPos++] = 'a';
257
 
            output[outputPos++] = 'o';
258
 
            break;
259
 
          case '\uA737': // ꜷ  [LATIN SMALL LETTER AU]
260
 
            output[outputPos++] = 'a';
261
 
            output[outputPos++] = 'u';
262
 
            break;
263
 
          case '\uA739': // ꜹ  [LATIN SMALL LETTER AV]
264
 
          case '\uA73B': // ꜻ  [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
265
 
            output[outputPos++] = 'a';
266
 
            output[outputPos++] = 'v';
267
 
            break;
268
 
          case '\uA73D': // ꜽ  [LATIN SMALL LETTER AY]
269
 
            output[outputPos++] = 'a';
270
 
            output[outputPos++] = 'y';
271
 
            break;
272
 
          case '\u0181': // Ɓ  [LATIN CAPITAL LETTER B WITH HOOK]
273
 
          case '\u0182': // Ƃ  [LATIN CAPITAL LETTER B WITH TOPBAR]
274
 
          case '\u0243': // Ƀ  [LATIN CAPITAL LETTER B WITH STROKE]
275
 
          case '\u0299': // ʙ  [LATIN LETTER SMALL CAPITAL B]
276
 
          case '\u1D03': // ᴃ  [LATIN LETTER SMALL CAPITAL BARRED B]
277
 
          case '\u1E02': // Ḃ  [LATIN CAPITAL LETTER B WITH DOT ABOVE]
278
 
          case '\u1E04': // Ḅ  [LATIN CAPITAL LETTER B WITH DOT BELOW]
279
 
          case '\u1E06': // Ḇ  [LATIN CAPITAL LETTER B WITH LINE BELOW]
280
 
          case '\u24B7': // Ⓑ  [CIRCLED LATIN CAPITAL LETTER B]
281
 
          case '\uFF22': // B  [FULLWIDTH LATIN CAPITAL LETTER B]
282
 
            output[outputPos++] = 'B';
283
 
            break;
284
 
          case '\u0180': // ƀ  [LATIN SMALL LETTER B WITH STROKE]
285
 
          case '\u0183': // ƃ  [LATIN SMALL LETTER B WITH TOPBAR]
286
 
          case '\u0253': // ɓ  [LATIN SMALL LETTER B WITH HOOK]
287
 
          case '\u1D6C': // ᵬ  [LATIN SMALL LETTER B WITH MIDDLE TILDE]
288
 
          case '\u1D80': // ᶀ  [LATIN SMALL LETTER B WITH PALATAL HOOK]
289
 
          case '\u1E03': // ḃ  [LATIN SMALL LETTER B WITH DOT ABOVE]
290
 
          case '\u1E05': // ḅ  [LATIN SMALL LETTER B WITH DOT BELOW]
291
 
          case '\u1E07': // ḇ  [LATIN SMALL LETTER B WITH LINE BELOW]
292
 
          case '\u24D1': // ⓑ  [CIRCLED LATIN SMALL LETTER B]
293
 
          case '\uFF42': // b  [FULLWIDTH LATIN SMALL LETTER B]
294
 
            output[outputPos++] = 'b';
295
 
            break;
296
 
          case '\u249D': // ⒝  [PARENTHESIZED LATIN SMALL LETTER B]
297
 
            output[outputPos++] = '(';                    
298
 
            output[outputPos++] = 'b';
299
 
            output[outputPos++] = ')';
300
 
            break;
301
 
          case '\u00C7': // Ç  [LATIN CAPITAL LETTER C WITH CEDILLA]
302
 
          case '\u0106': // Ć  [LATIN CAPITAL LETTER C WITH ACUTE]
303
 
          case '\u0108': // Ĉ  [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
304
 
          case '\u010A': // Ċ  [LATIN CAPITAL LETTER C WITH DOT ABOVE]
305
 
          case '\u010C': // Č  [LATIN CAPITAL LETTER C WITH CARON]
306
 
          case '\u0187': // Ƈ  [LATIN CAPITAL LETTER C WITH HOOK]
307
 
          case '\u023B': // Ȼ  [LATIN CAPITAL LETTER C WITH STROKE]
308
 
          case '\u0297': // ʗ  [LATIN LETTER STRETCHED C]
309
 
          case '\u1D04': // ᴄ  [LATIN LETTER SMALL CAPITAL C]
310
 
          case '\u1E08': // Ḉ  [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
311
 
          case '\u24B8': // Ⓒ  [CIRCLED LATIN CAPITAL LETTER C]
312
 
          case '\uFF23': // C  [FULLWIDTH LATIN CAPITAL LETTER C]
313
 
            output[outputPos++] = 'C';
314
 
            break;
315
 
          case '\u00E7': // ç  [LATIN SMALL LETTER C WITH CEDILLA]
316
 
          case '\u0107': // ć  [LATIN SMALL LETTER C WITH ACUTE]
317
 
          case '\u0109': // ĉ  [LATIN SMALL LETTER C WITH CIRCUMFLEX]
318
 
          case '\u010B': // ċ  [LATIN SMALL LETTER C WITH DOT ABOVE]
319
 
          case '\u010D': // č  [LATIN SMALL LETTER C WITH CARON]
320
 
          case '\u0188': // ƈ  [LATIN SMALL LETTER C WITH HOOK]
321
 
          case '\u023C': // ȼ  [LATIN SMALL LETTER C WITH STROKE]
322
 
          case '\u0255': // ɕ  [LATIN SMALL LETTER C WITH CURL]
323
 
          case '\u1E09': // ḉ  [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
324
 
          case '\u2184': // ↄ  [LATIN SMALL LETTER REVERSED C]
325
 
          case '\u24D2': // ⓒ  [CIRCLED LATIN SMALL LETTER C]
326
 
          case '\uA73E': // Ꜿ  [LATIN CAPITAL LETTER REVERSED C WITH DOT]
327
 
          case '\uA73F': // ꜿ  [LATIN SMALL LETTER REVERSED C WITH DOT]
328
 
          case '\uFF43': // c  [FULLWIDTH LATIN SMALL LETTER C]
329
 
            output[outputPos++] = 'c';
330
 
            break;
331
 
          case '\u249E': // ⒞  [PARENTHESIZED LATIN SMALL LETTER C]
332
 
            output[outputPos++] = '(';
333
 
            output[outputPos++] = 'c';
334
 
            output[outputPos++] = ')';
335
 
            break;
336
 
          case '\u00D0': // Ð  [LATIN CAPITAL LETTER ETH]
337
 
          case '\u010E': // Ď  [LATIN CAPITAL LETTER D WITH CARON]
338
 
          case '\u0110': // Đ  [LATIN CAPITAL LETTER D WITH STROKE]
339
 
          case '\u0189': // Ɖ  [LATIN CAPITAL LETTER AFRICAN D]
340
 
          case '\u018A': // Ɗ  [LATIN CAPITAL LETTER D WITH HOOK]
341
 
          case '\u018B': // Ƌ  [LATIN CAPITAL LETTER D WITH TOPBAR]
342
 
          case '\u1D05': // ᴅ  [LATIN LETTER SMALL CAPITAL D]
343
 
          case '\u1D06': // ᴆ  [LATIN LETTER SMALL CAPITAL ETH]
344
 
          case '\u1E0A': // Ḋ  [LATIN CAPITAL LETTER D WITH DOT ABOVE]
345
 
          case '\u1E0C': // Ḍ  [LATIN CAPITAL LETTER D WITH DOT BELOW]
346
 
          case '\u1E0E': // Ḏ  [LATIN CAPITAL LETTER D WITH LINE BELOW]
347
 
          case '\u1E10': // Ḑ  [LATIN CAPITAL LETTER D WITH CEDILLA]
348
 
          case '\u1E12': // Ḓ  [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
349
 
          case '\u24B9': // Ⓓ  [CIRCLED LATIN CAPITAL LETTER D]
350
 
          case '\uA779': // Ꝺ  [LATIN CAPITAL LETTER INSULAR D]
351
 
          case '\uFF24': // D  [FULLWIDTH LATIN CAPITAL LETTER D]
352
 
            output[outputPos++] = 'D';
353
 
            break;
354
 
          case '\u00F0': // ð  [LATIN SMALL LETTER ETH]
355
 
          case '\u010F': // ď  [LATIN SMALL LETTER D WITH CARON]
356
 
          case '\u0111': // đ  [LATIN SMALL LETTER D WITH STROKE]
357
 
          case '\u018C': // ƌ  [LATIN SMALL LETTER D WITH TOPBAR]
358
 
          case '\u0221': // ȡ  [LATIN SMALL LETTER D WITH CURL]
359
 
          case '\u0256': // ɖ  [LATIN SMALL LETTER D WITH TAIL]
360
 
          case '\u0257': // ɗ  [LATIN SMALL LETTER D WITH HOOK]
361
 
          case '\u1D6D': // ᵭ  [LATIN SMALL LETTER D WITH MIDDLE TILDE]
362
 
          case '\u1D81': // ᶁ  [LATIN SMALL LETTER D WITH PALATAL HOOK]
363
 
          case '\u1D91': // ᶑ  [LATIN SMALL LETTER D WITH HOOK AND TAIL]
364
 
          case '\u1E0B': // ḋ  [LATIN SMALL LETTER D WITH DOT ABOVE]
365
 
          case '\u1E0D': // ḍ  [LATIN SMALL LETTER D WITH DOT BELOW]
366
 
          case '\u1E0F': // ḏ  [LATIN SMALL LETTER D WITH LINE BELOW]
367
 
          case '\u1E11': // ḑ  [LATIN SMALL LETTER D WITH CEDILLA]
368
 
          case '\u1E13': // ḓ  [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
369
 
          case '\u24D3': // ⓓ  [CIRCLED LATIN SMALL LETTER D]
370
 
          case '\uA77A': // ꝺ  [LATIN SMALL LETTER INSULAR D]
371
 
          case '\uFF44': // d  [FULLWIDTH LATIN SMALL LETTER D]
372
 
            output[outputPos++] = 'd';
373
 
            break;
374
 
          case '\u01C4': // DŽ  [LATIN CAPITAL LETTER DZ WITH CARON]
375
 
          case '\u01F1': // DZ  [LATIN CAPITAL LETTER DZ]
376
 
            output[outputPos++] = 'D';
377
 
            output[outputPos++] = 'Z';
378
 
            break;
379
 
          case '\u01C5': // Dž  [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
380
 
          case '\u01F2': // Dz  [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
381
 
            output[outputPos++] = 'D';
382
 
            output[outputPos++] = 'z';
383
 
            break;
384
 
          case '\u249F': // ⒟  [PARENTHESIZED LATIN SMALL LETTER D]
385
 
            output[outputPos++] = '(';
386
 
            output[outputPos++] = 'd';
387
 
            output[outputPos++] = ')';
388
 
            break;
389
 
          case '\u0238': // ȸ  [LATIN SMALL LETTER DB DIGRAPH]
390
 
            output[outputPos++] = 'd';
391
 
            output[outputPos++] = 'b';
392
 
            break;
393
 
          case '\u01C6': // dž  [LATIN SMALL LETTER DZ WITH CARON]
394
 
          case '\u01F3': // dz  [LATIN SMALL LETTER DZ]
395
 
          case '\u02A3': // ʣ  [LATIN SMALL LETTER DZ DIGRAPH]
396
 
          case '\u02A5': // ʥ  [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
397
 
            output[outputPos++] = 'd';
398
 
            output[outputPos++] = 'z';
399
 
            break;
400
 
          case '\u00C8': // È  [LATIN CAPITAL LETTER E WITH GRAVE]
401
 
          case '\u00C9': // É  [LATIN CAPITAL LETTER E WITH ACUTE]
402
 
          case '\u00CA': // Ê  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
403
 
          case '\u00CB': // Ë  [LATIN CAPITAL LETTER E WITH DIAERESIS]
404
 
          case '\u0112': // Ē  [LATIN CAPITAL LETTER E WITH MACRON]
405
 
          case '\u0114': // Ĕ  [LATIN CAPITAL LETTER E WITH BREVE]
406
 
          case '\u0116': // Ė  [LATIN CAPITAL LETTER E WITH DOT ABOVE]
407
 
          case '\u0118': // Ę  [LATIN CAPITAL LETTER E WITH OGONEK]
408
 
          case '\u011A': // Ě  [LATIN CAPITAL LETTER E WITH CARON]
409
 
          case '\u018E': // Ǝ  [LATIN CAPITAL LETTER REVERSED E]
410
 
          case '\u0190': // Ɛ  [LATIN CAPITAL LETTER OPEN E]
411
 
          case '\u0204': // Ȅ  [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
412
 
          case '\u0206': // Ȇ  [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
413
 
          case '\u0228': // Ȩ  [LATIN CAPITAL LETTER E WITH CEDILLA]
414
 
          case '\u0246': // Ɇ  [LATIN CAPITAL LETTER E WITH STROKE]
415
 
          case '\u1D07': // ᴇ  [LATIN LETTER SMALL CAPITAL E]
416
 
          case '\u1E14': // Ḕ  [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
417
 
          case '\u1E16': // Ḗ  [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
418
 
          case '\u1E18': // Ḙ  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
419
 
          case '\u1E1A': // Ḛ  [LATIN CAPITAL LETTER E WITH TILDE BELOW]
420
 
          case '\u1E1C': // Ḝ  [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
421
 
          case '\u1EB8': // Ẹ  [LATIN CAPITAL LETTER E WITH DOT BELOW]
422
 
          case '\u1EBA': // Ẻ  [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
423
 
          case '\u1EBC': // Ẽ  [LATIN CAPITAL LETTER E WITH TILDE]
424
 
          case '\u1EBE': // Ế  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
425
 
          case '\u1EC0': // Ề  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
426
 
          case '\u1EC2': // Ể  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
427
 
          case '\u1EC4': // Ễ  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
428
 
          case '\u1EC6': // Ệ  [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
429
 
          case '\u24BA': // Ⓔ  [CIRCLED LATIN CAPITAL LETTER E]
430
 
          case '\u2C7B': // ⱻ  [LATIN LETTER SMALL CAPITAL TURNED E]
431
 
          case '\uFF25': // E  [FULLWIDTH LATIN CAPITAL LETTER E]
432
 
            output[outputPos++] = 'E';
433
 
            break;
434
 
          case '\u00E8': // è  [LATIN SMALL LETTER E WITH GRAVE]
435
 
          case '\u00E9': // é  [LATIN SMALL LETTER E WITH ACUTE]
436
 
          case '\u00EA': // ê  [LATIN SMALL LETTER E WITH CIRCUMFLEX]
437
 
          case '\u00EB': // ë  [LATIN SMALL LETTER E WITH DIAERESIS]
438
 
          case '\u0113': // ē  [LATIN SMALL LETTER E WITH MACRON]
439
 
          case '\u0115': // ĕ  [LATIN SMALL LETTER E WITH BREVE]
440
 
          case '\u0117': // ė  [LATIN SMALL LETTER E WITH DOT ABOVE]
441
 
          case '\u0119': // ę  [LATIN SMALL LETTER E WITH OGONEK]
442
 
          case '\u011B': // ě  [LATIN SMALL LETTER E WITH CARON]
443
 
          case '\u01DD': // ǝ  [LATIN SMALL LETTER TURNED E]
444
 
          case '\u0205': // ȅ  [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
445
 
          case '\u0207': // ȇ  [LATIN SMALL LETTER E WITH INVERTED BREVE]
446
 
          case '\u0229': // ȩ  [LATIN SMALL LETTER E WITH CEDILLA]
447
 
          case '\u0247': // ɇ  [LATIN SMALL LETTER E WITH STROKE]
448
 
          case '\u0258': // ɘ  [LATIN SMALL LETTER REVERSED E]
449
 
          case '\u025B': // ɛ  [LATIN SMALL LETTER OPEN E]
450
 
          case '\u025C': // ɜ  [LATIN SMALL LETTER REVERSED OPEN E]
451
 
          case '\u025D': // ɝ  [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
452
 
          case '\u025E': // ɞ  [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
453
 
          case '\u029A': // ʚ  [LATIN SMALL LETTER CLOSED OPEN E]
454
 
          case '\u1D08': // ᴈ  [LATIN SMALL LETTER TURNED OPEN E]
455
 
          case '\u1D92': // ᶒ  [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
456
 
          case '\u1D93': // ᶓ  [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
457
 
          case '\u1D94': // ᶔ  [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
458
 
          case '\u1E15': // ḕ  [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
459
 
          case '\u1E17': // ḗ  [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
460
 
          case '\u1E19': // ḙ  [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
461
 
          case '\u1E1B': // ḛ  [LATIN SMALL LETTER E WITH TILDE BELOW]
462
 
          case '\u1E1D': // ḝ  [LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
463
 
          case '\u1EB9': // ẹ  [LATIN SMALL LETTER E WITH DOT BELOW]
464
 
          case '\u1EBB': // ẻ  [LATIN SMALL LETTER E WITH HOOK ABOVE]
465
 
          case '\u1EBD': // ẽ  [LATIN SMALL LETTER E WITH TILDE]
466
 
          case '\u1EBF': // ế  [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
467
 
          case '\u1EC1': // ề  [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
468
 
          case '\u1EC3': // ể  [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
469
 
          case '\u1EC5': // ễ  [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
470
 
          case '\u1EC7': // ệ  [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
471
 
          case '\u2091': // ₑ  [LATIN SUBSCRIPT SMALL LETTER E]
472
 
          case '\u24D4': // ⓔ  [CIRCLED LATIN SMALL LETTER E]
473
 
          case '\u2C78': // ⱸ  [LATIN SMALL LETTER E WITH NOTCH]
474
 
          case '\uFF45': // e  [FULLWIDTH LATIN SMALL LETTER E]
475
 
            output[outputPos++] = 'e';
476
 
            break;
477
 
          case '\u24A0': // ⒠  [PARENTHESIZED LATIN SMALL LETTER E]
478
 
            output[outputPos++] = '(';
479
 
            output[outputPos++] = 'e';
480
 
            output[outputPos++] = ')';
481
 
            break;
482
 
          case '\u0191': // Ƒ  [LATIN CAPITAL LETTER F WITH HOOK]
483
 
          case '\u1E1E': // Ḟ  [LATIN CAPITAL LETTER F WITH DOT ABOVE]
484
 
          case '\u24BB': // Ⓕ  [CIRCLED LATIN CAPITAL LETTER F]
485
 
          case '\uA730': // ꜰ  [LATIN LETTER SMALL CAPITAL F]
486
 
          case '\uA77B': // Ꝼ  [LATIN CAPITAL LETTER INSULAR F]
487
 
          case '\uA7FB': // ꟻ  [LATIN EPIGRAPHIC LETTER REVERSED F]
488
 
          case '\uFF26': // F  [FULLWIDTH LATIN CAPITAL LETTER F]
489
 
            output[outputPos++] = 'F';
490
 
            break;
491
 
          case '\u0192': // ƒ  [LATIN SMALL LETTER F WITH HOOK]
492
 
          case '\u1D6E': // ᵮ  [LATIN SMALL LETTER F WITH MIDDLE TILDE]
493
 
          case '\u1D82': // ᶂ  [LATIN SMALL LETTER F WITH PALATAL HOOK]
494
 
          case '\u1E1F': // ḟ  [LATIN SMALL LETTER F WITH DOT ABOVE]
495
 
          case '\u1E9B': // ẛ  [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
496
 
          case '\u24D5': // ⓕ  [CIRCLED LATIN SMALL LETTER F]
497
 
          case '\uA77C': // ꝼ  [LATIN SMALL LETTER INSULAR F]
498
 
          case '\uFF46': // f  [FULLWIDTH LATIN SMALL LETTER F]
499
 
            output[outputPos++] = 'f';
500
 
            break;
501
 
          case '\u24A1': // ⒡  [PARENTHESIZED LATIN SMALL LETTER F]
502
 
            output[outputPos++] = '(';
503
 
            output[outputPos++] = 'f';
504
 
            output[outputPos++] = ')';
505
 
            break;
506
 
          case '\uFB00': // ff  [LATIN SMALL LIGATURE FF]
507
 
            output[outputPos++] = 'f';
508
 
            output[outputPos++] = 'f';
509
 
            break;
510
 
          case '\uFB03': // ffi  [LATIN SMALL LIGATURE FFI]
511
 
            output[outputPos++] = 'f';
512
 
            output[outputPos++] = 'f';
513
 
            output[outputPos++] = 'i';
514
 
            break;
515
 
          case '\uFB04': // ffl  [LATIN SMALL LIGATURE FFL]
516
 
            output[outputPos++] = 'f';
517
 
            output[outputPos++] = 'f';
518
 
            output[outputPos++] = 'l';
519
 
            break;
520
 
          case '\uFB01': // fi  [LATIN SMALL LIGATURE FI]
521
 
            output[outputPos++] = 'f';
522
 
            output[outputPos++] = 'i';
523
 
            break;
524
 
          case '\uFB02': // fl  [LATIN SMALL LIGATURE FL]
525
 
            output[outputPos++] = 'f';
526
 
            output[outputPos++] = 'l';
527
 
            break;
528
 
          case '\u011C': // Ĝ  [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
529
 
          case '\u011E': // Ğ  [LATIN CAPITAL LETTER G WITH BREVE]
530
 
          case '\u0120': // Ġ  [LATIN CAPITAL LETTER G WITH DOT ABOVE]
531
 
          case '\u0122': // Ģ  [LATIN CAPITAL LETTER G WITH CEDILLA]
532
 
          case '\u0193': // Ɠ  [LATIN CAPITAL LETTER G WITH HOOK]
533
 
          case '\u01E4': // Ǥ  [LATIN CAPITAL LETTER G WITH STROKE]
534
 
          case '\u01E5': // ǥ  [LATIN SMALL LETTER G WITH STROKE]
535
 
          case '\u01E6': // Ǧ  [LATIN CAPITAL LETTER G WITH CARON]
536
 
          case '\u01E7': // ǧ  [LATIN SMALL LETTER G WITH CARON]
537
 
          case '\u01F4': // Ǵ  [LATIN CAPITAL LETTER G WITH ACUTE]
538
 
          case '\u0262': // ɢ  [LATIN LETTER SMALL CAPITAL G]
539
 
          case '\u029B': // ʛ  [LATIN LETTER SMALL CAPITAL G WITH HOOK]
540
 
          case '\u1E20': // Ḡ  [LATIN CAPITAL LETTER G WITH MACRON]
541
 
          case '\u24BC': // Ⓖ  [CIRCLED LATIN CAPITAL LETTER G]
542
 
          case '\uA77D': // Ᵹ  [LATIN CAPITAL LETTER INSULAR G]
543
 
          case '\uA77E': // Ꝿ  [LATIN CAPITAL LETTER TURNED INSULAR G]
544
 
          case '\uFF27': // G  [FULLWIDTH LATIN CAPITAL LETTER G]
545
 
            output[outputPos++] = 'G';
546
 
            break;
547
 
          case '\u011D': // ĝ  [LATIN SMALL LETTER G WITH CIRCUMFLEX]
548
 
          case '\u011F': // ğ  [LATIN SMALL LETTER G WITH BREVE]
549
 
          case '\u0121': // ġ  [LATIN SMALL LETTER G WITH DOT ABOVE]
550
 
          case '\u0123': // ģ  [LATIN SMALL LETTER G WITH CEDILLA]
551
 
          case '\u01F5': // ǵ  [LATIN SMALL LETTER G WITH ACUTE]
552
 
          case '\u0260': // ɠ  [LATIN SMALL LETTER G WITH HOOK]
553
 
          case '\u0261': // ɡ  [LATIN SMALL LETTER SCRIPT G]
554
 
          case '\u1D77': // ᵷ  [LATIN SMALL LETTER TURNED G]
555
 
          case '\u1D79': // ᵹ  [LATIN SMALL LETTER INSULAR G]
556
 
          case '\u1D83': // ᶃ  [LATIN SMALL LETTER G WITH PALATAL HOOK]
557
 
          case '\u1E21': // ḡ  [LATIN SMALL LETTER G WITH MACRON]
558
 
          case '\u24D6': // ⓖ  [CIRCLED LATIN SMALL LETTER G]
559
 
          case '\uA77F': // ꝿ  [LATIN SMALL LETTER TURNED INSULAR G]
560
 
          case '\uFF47': // g  [FULLWIDTH LATIN SMALL LETTER G]
561
 
            output[outputPos++] = 'g';
562
 
            break;
563
 
          case '\u24A2': // ⒢  [PARENTHESIZED LATIN SMALL LETTER G]
564
 
            output[outputPos++] = '(';
565
 
            output[outputPos++] = 'g';
566
 
            output[outputPos++] = ')';
567
 
            break;
568
 
          case '\u0124': // Ĥ  [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
569
 
          case '\u0126': // Ħ  [LATIN CAPITAL LETTER H WITH STROKE]
570
 
          case '\u021E': // Ȟ  [LATIN CAPITAL LETTER H WITH CARON]
571
 
          case '\u029C': // ʜ  [LATIN LETTER SMALL CAPITAL H]
572
 
          case '\u1E22': // Ḣ  [LATIN CAPITAL LETTER H WITH DOT ABOVE]
573
 
          case '\u1E24': // Ḥ  [LATIN CAPITAL LETTER H WITH DOT BELOW]
574
 
          case '\u1E26': // Ḧ  [LATIN CAPITAL LETTER H WITH DIAERESIS]
575
 
          case '\u1E28': // Ḩ  [LATIN CAPITAL LETTER H WITH CEDILLA]
576
 
          case '\u1E2A': // Ḫ  [LATIN CAPITAL LETTER H WITH BREVE BELOW]
577
 
          case '\u24BD': // Ⓗ  [CIRCLED LATIN CAPITAL LETTER H]
578
 
          case '\u2C67': // Ⱨ  [LATIN CAPITAL LETTER H WITH DESCENDER]
579
 
          case '\u2C75': // Ⱶ  [LATIN CAPITAL LETTER HALF H]
580
 
          case '\uFF28': // H  [FULLWIDTH LATIN CAPITAL LETTER H]
581
 
            output[outputPos++] = 'H';
582
 
            break;
583
 
          case '\u0125': // ĥ  [LATIN SMALL LETTER H WITH CIRCUMFLEX]
584
 
          case '\u0127': // ħ  [LATIN SMALL LETTER H WITH STROKE]
585
 
          case '\u021F': // ȟ  [LATIN SMALL LETTER H WITH CARON]
586
 
          case '\u0265': // ɥ  [LATIN SMALL LETTER TURNED H]
587
 
          case '\u0266': // ɦ  [LATIN SMALL LETTER H WITH HOOK]
588
 
          case '\u02AE': // ʮ  [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
589
 
          case '\u02AF': // ʯ  [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
590
 
          case '\u1E23': // ḣ  [LATIN SMALL LETTER H WITH DOT ABOVE]
591
 
          case '\u1E25': // ḥ  [LATIN SMALL LETTER H WITH DOT BELOW]
592
 
          case '\u1E27': // ḧ  [LATIN SMALL LETTER H WITH DIAERESIS]
593
 
          case '\u1E29': // ḩ  [LATIN SMALL LETTER H WITH CEDILLA]
594
 
          case '\u1E2B': // ḫ  [LATIN SMALL LETTER H WITH BREVE BELOW]
595
 
          case '\u1E96': // ẖ  [LATIN SMALL LETTER H WITH LINE BELOW]
596
 
          case '\u24D7': // ⓗ  [CIRCLED LATIN SMALL LETTER H]
597
 
          case '\u2C68': // ⱨ  [LATIN SMALL LETTER H WITH DESCENDER]
598
 
          case '\u2C76': // ⱶ  [LATIN SMALL LETTER HALF H]
599
 
          case '\uFF48': // h  [FULLWIDTH LATIN SMALL LETTER H]
600
 
            output[outputPos++] = 'h';
601
 
            break;
602
 
          case '\u01F6': // Ƕ  http://en.wikipedia.org/wiki/Hwair  [LATIN CAPITAL LETTER HWAIR]
603
 
            output[outputPos++] = 'H';
604
 
            output[outputPos++] = 'V';
605
 
            break;
606
 
          case '\u24A3': // ⒣  [PARENTHESIZED LATIN SMALL LETTER H]
607
 
            output[outputPos++] = '(';
608
 
            output[outputPos++] = 'h';
609
 
            output[outputPos++] = ')';
610
 
            break;
611
 
          case '\u0195': // ƕ  [LATIN SMALL LETTER HV]
612
 
            output[outputPos++] = 'h';
613
 
            output[outputPos++] = 'v';
614
 
            break;
615
 
          case '\u00CC': // Ì  [LATIN CAPITAL LETTER I WITH GRAVE]
616
 
          case '\u00CD': // Í  [LATIN CAPITAL LETTER I WITH ACUTE]
617
 
          case '\u00CE': // Î  [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
618
 
          case '\u00CF': // Ï  [LATIN CAPITAL LETTER I WITH DIAERESIS]
619
 
          case '\u0128': // Ĩ  [LATIN CAPITAL LETTER I WITH TILDE]
620
 
          case '\u012A': // Ī  [LATIN CAPITAL LETTER I WITH MACRON]
621
 
          case '\u012C': // Ĭ  [LATIN CAPITAL LETTER I WITH BREVE]
622
 
          case '\u012E': // Į  [LATIN CAPITAL LETTER I WITH OGONEK]
623
 
          case '\u0130': // İ  [LATIN CAPITAL LETTER I WITH DOT ABOVE]
624
 
          case '\u0196': // Ɩ  [LATIN CAPITAL LETTER IOTA]
625
 
          case '\u0197': // Ɨ  [LATIN CAPITAL LETTER I WITH STROKE]
626
 
          case '\u01CF': // Ǐ  [LATIN CAPITAL LETTER I WITH CARON]
627
 
          case '\u0208': // Ȉ  [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
628
 
          case '\u020A': // Ȋ  [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
629
 
          case '\u026A': // ɪ  [LATIN LETTER SMALL CAPITAL I]
630
 
          case '\u1D7B': // ᵻ  [LATIN SMALL CAPITAL LETTER I WITH STROKE]
631
 
          case '\u1E2C': // Ḭ  [LATIN CAPITAL LETTER I WITH TILDE BELOW]
632
 
          case '\u1E2E': // Ḯ  [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
633
 
          case '\u1EC8': // Ỉ  [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
634
 
          case '\u1ECA': // Ị  [LATIN CAPITAL LETTER I WITH DOT BELOW]
635
 
          case '\u24BE': // Ⓘ  [CIRCLED LATIN CAPITAL LETTER I]
636
 
          case '\uA7FE': // ꟾ  [LATIN EPIGRAPHIC LETTER I LONGA]
637
 
          case '\uFF29': // I  [FULLWIDTH LATIN CAPITAL LETTER I]
638
 
            output[outputPos++] = 'I';
639
 
            break;
640
 
          case '\u00EC': // ì  [LATIN SMALL LETTER I WITH GRAVE]
641
 
          case '\u00ED': // í  [LATIN SMALL LETTER I WITH ACUTE]
642
 
          case '\u00EE': // î  [LATIN SMALL LETTER I WITH CIRCUMFLEX]
643
 
          case '\u00EF': // ï  [LATIN SMALL LETTER I WITH DIAERESIS]
644
 
          case '\u0129': // ĩ  [LATIN SMALL LETTER I WITH TILDE]
645
 
          case '\u012B': // ī  [LATIN SMALL LETTER I WITH MACRON]
646
 
          case '\u012D': // ĭ  [LATIN SMALL LETTER I WITH BREVE]
647
 
          case '\u012F': // į  [LATIN SMALL LETTER I WITH OGONEK]
648
 
          case '\u0131': // ı  [LATIN SMALL LETTER DOTLESS I]
649
 
          case '\u01D0': // ǐ  [LATIN SMALL LETTER I WITH CARON]
650
 
          case '\u0209': // ȉ  [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
651
 
          case '\u020B': // ȋ  [LATIN SMALL LETTER I WITH INVERTED BREVE]
652
 
          case '\u0268': // ɨ  [LATIN SMALL LETTER I WITH STROKE]
653
 
          case '\u1D09': // ᴉ  [LATIN SMALL LETTER TURNED I]
654
 
          case '\u1D62': // ᵢ  [LATIN SUBSCRIPT SMALL LETTER I]
655
 
          case '\u1D7C': // ᵼ  [LATIN SMALL LETTER IOTA WITH STROKE]
656
 
          case '\u1D96': // ᶖ  [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
657
 
          case '\u1E2D': // ḭ  [LATIN SMALL LETTER I WITH TILDE BELOW]
658
 
          case '\u1E2F': // ḯ  [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
659
 
          case '\u1EC9': // ỉ  [LATIN SMALL LETTER I WITH HOOK ABOVE]
660
 
          case '\u1ECB': // ị  [LATIN SMALL LETTER I WITH DOT BELOW]
661
 
          case '\u2071': // ⁱ  [SUPERSCRIPT LATIN SMALL LETTER I]
662
 
          case '\u24D8': // ⓘ  [CIRCLED LATIN SMALL LETTER I]
663
 
          case '\uFF49': // i  [FULLWIDTH LATIN SMALL LETTER I]
664
 
            output[outputPos++] = 'i';
665
 
            break;
666
 
          case '\u0132': // IJ  [LATIN CAPITAL LIGATURE IJ]
667
 
            output[outputPos++] = 'I';
668
 
            output[outputPos++] = 'J';
669
 
            break;
670
 
          case '\u24A4': // ⒤  [PARENTHESIZED LATIN SMALL LETTER I]
671
 
            output[outputPos++] = '(';
672
 
            output[outputPos++] = 'i';
673
 
            output[outputPos++] = ')';
674
 
            break;
675
 
          case '\u0133': // ij  [LATIN SMALL LIGATURE IJ]
676
 
            output[outputPos++] = 'i';
677
 
            output[outputPos++] = 'j';
678
 
            break;
679
 
          case '\u0134': // Ĵ  [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
680
 
          case '\u0248': // Ɉ  [LATIN CAPITAL LETTER J WITH STROKE]
681
 
          case '\u1D0A': // ᴊ  [LATIN LETTER SMALL CAPITAL J]
682
 
          case '\u24BF': // Ⓙ  [CIRCLED LATIN CAPITAL LETTER J]
683
 
          case '\uFF2A': // J  [FULLWIDTH LATIN CAPITAL LETTER J]
684
 
            output[outputPos++] = 'J';
685
 
            break;
686
 
          case '\u0135': // ĵ  [LATIN SMALL LETTER J WITH CIRCUMFLEX]
687
 
          case '\u01F0': // ǰ  [LATIN SMALL LETTER J WITH CARON]
688
 
          case '\u0237': // ȷ  [LATIN SMALL LETTER DOTLESS J]
689
 
          case '\u0249': // ɉ  [LATIN SMALL LETTER J WITH STROKE]
690
 
          case '\u025F': // ɟ  [LATIN SMALL LETTER DOTLESS J WITH STROKE]
691
 
          case '\u0284': // ʄ  [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
692
 
          case '\u029D': // ʝ  [LATIN SMALL LETTER J WITH CROSSED-TAIL]
693
 
          case '\u24D9': // ⓙ  [CIRCLED LATIN SMALL LETTER J]
694
 
          case '\u2C7C': // ⱼ  [LATIN SUBSCRIPT SMALL LETTER J]
695
 
          case '\uFF4A': // j  [FULLWIDTH LATIN SMALL LETTER J]
696
 
            output[outputPos++] = 'j';
697
 
            break;
698
 
          case '\u24A5': // ⒥  [PARENTHESIZED LATIN SMALL LETTER J]
699
 
            output[outputPos++] = '(';
700
 
            output[outputPos++] = 'j';
701
 
            output[outputPos++] = ')';
702
 
            break;
703
 
          case '\u0136': // Ķ  [LATIN CAPITAL LETTER K WITH CEDILLA]
704
 
          case '\u0198': // Ƙ  [LATIN CAPITAL LETTER K WITH HOOK]
705
 
          case '\u01E8': // Ǩ  [LATIN CAPITAL LETTER K WITH CARON]
706
 
          case '\u1D0B': // ᴋ  [LATIN LETTER SMALL CAPITAL K]
707
 
          case '\u1E30': // Ḱ  [LATIN CAPITAL LETTER K WITH ACUTE]
708
 
          case '\u1E32': // Ḳ  [LATIN CAPITAL LETTER K WITH DOT BELOW]
709
 
          case '\u1E34': // Ḵ  [LATIN CAPITAL LETTER K WITH LINE BELOW]
710
 
          case '\u24C0': // Ⓚ  [CIRCLED LATIN CAPITAL LETTER K]
711
 
          case '\u2C69': // Ⱪ  [LATIN CAPITAL LETTER K WITH DESCENDER]
712
 
          case '\uA740': // Ꝁ  [LATIN CAPITAL LETTER K WITH STROKE]
713
 
          case '\uA742': // Ꝃ  [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
714
 
          case '\uA744': // Ꝅ  [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
715
 
          case '\uFF2B': // K  [FULLWIDTH LATIN CAPITAL LETTER K]
716
 
            output[outputPos++] = 'K';
717
 
            break;
718
 
          case '\u0137': // ķ  [LATIN SMALL LETTER K WITH CEDILLA]
719
 
          case '\u0199': // ƙ  [LATIN SMALL LETTER K WITH HOOK]
720
 
          case '\u01E9': // ǩ  [LATIN SMALL LETTER K WITH CARON]
721
 
          case '\u029E': // ʞ  [LATIN SMALL LETTER TURNED K]
722
 
          case '\u1D84': // ᶄ  [LATIN SMALL LETTER K WITH PALATAL HOOK]
723
 
          case '\u1E31': // ḱ  [LATIN SMALL LETTER K WITH ACUTE]
724
 
          case '\u1E33': // ḳ  [LATIN SMALL LETTER K WITH DOT BELOW]
725
 
          case '\u1E35': // ḵ  [LATIN SMALL LETTER K WITH LINE BELOW]
726
 
          case '\u24DA': // ⓚ  [CIRCLED LATIN SMALL LETTER K]
727
 
          case '\u2C6A': // ⱪ  [LATIN SMALL LETTER K WITH DESCENDER]
728
 
          case '\uA741': // ꝁ  [LATIN SMALL LETTER K WITH STROKE]
729
 
          case '\uA743': // ꝃ  [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
730
 
          case '\uA745': // ꝅ  [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
731
 
          case '\uFF4B': // k  [FULLWIDTH LATIN SMALL LETTER K]
732
 
            output[outputPos++] = 'k';
733
 
            break;
734
 
          case '\u24A6': // ⒦  [PARENTHESIZED LATIN SMALL LETTER K]
735
 
            output[outputPos++] = '(';
736
 
            output[outputPos++] = 'k';
737
 
            output[outputPos++] = ')';
738
 
            break;
739
 
          case '\u0139': // Ĺ  [LATIN CAPITAL LETTER L WITH ACUTE]
740
 
          case '\u013B': // Ļ  [LATIN CAPITAL LETTER L WITH CEDILLA]
741
 
          case '\u013D': // Ľ  [LATIN CAPITAL LETTER L WITH CARON]
742
 
          case '\u013F': // Ŀ  [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
743
 
          case '\u0141': // Ł  [LATIN CAPITAL LETTER L WITH STROKE]
744
 
          case '\u023D': // Ƚ  [LATIN CAPITAL LETTER L WITH BAR]
745
 
          case '\u029F': // ʟ  [LATIN LETTER SMALL CAPITAL L]
746
 
          case '\u1D0C': // ᴌ  [LATIN LETTER SMALL CAPITAL L WITH STROKE]
747
 
          case '\u1E36': // Ḷ  [LATIN CAPITAL LETTER L WITH DOT BELOW]
748
 
          case '\u1E38': // Ḹ  [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
749
 
          case '\u1E3A': // Ḻ  [LATIN CAPITAL LETTER L WITH LINE BELOW]
750
 
          case '\u1E3C': // Ḽ  [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
751
 
          case '\u24C1': // Ⓛ  [CIRCLED LATIN CAPITAL LETTER L]
752
 
          case '\u2C60': // Ⱡ  [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
753
 
          case '\u2C62': // Ɫ  [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
754
 
          case '\uA746': // Ꝇ  [LATIN CAPITAL LETTER BROKEN L]
755
 
          case '\uA748': // Ꝉ  [LATIN CAPITAL LETTER L WITH HIGH STROKE]
756
 
          case '\uA780': // Ꞁ  [LATIN CAPITAL LETTER TURNED L]
757
 
          case '\uFF2C': // L  [FULLWIDTH LATIN CAPITAL LETTER L]
758
 
            output[outputPos++] = 'L';
759
 
            break;
760
 
          case '\u013A': // ĺ  [LATIN SMALL LETTER L WITH ACUTE]
761
 
          case '\u013C': // ļ  [LATIN SMALL LETTER L WITH CEDILLA]
762
 
          case '\u013E': // ľ  [LATIN SMALL LETTER L WITH CARON]
763
 
          case '\u0140': // ŀ  [LATIN SMALL LETTER L WITH MIDDLE DOT]
764
 
          case '\u0142': // ł  [LATIN SMALL LETTER L WITH STROKE]
765
 
          case '\u019A': // ƚ  [LATIN SMALL LETTER L WITH BAR]
766
 
          case '\u0234': // ȴ  [LATIN SMALL LETTER L WITH CURL]
767
 
          case '\u026B': // ɫ  [LATIN SMALL LETTER L WITH MIDDLE TILDE]
768
 
          case '\u026C': // ɬ  [LATIN SMALL LETTER L WITH BELT]
769
 
          case '\u026D': // ɭ  [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
770
 
          case '\u1D85': // ᶅ  [LATIN SMALL LETTER L WITH PALATAL HOOK]
771
 
          case '\u1E37': // ḷ  [LATIN SMALL LETTER L WITH DOT BELOW]
772
 
          case '\u1E39': // ḹ  [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
773
 
          case '\u1E3B': // ḻ  [LATIN SMALL LETTER L WITH LINE BELOW]
774
 
          case '\u1E3D': // ḽ  [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
775
 
          case '\u24DB': // ⓛ  [CIRCLED LATIN SMALL LETTER L]
776
 
          case '\u2C61': // ⱡ  [LATIN SMALL LETTER L WITH DOUBLE BAR]
777
 
          case '\uA747': // ꝇ  [LATIN SMALL LETTER BROKEN L]
778
 
          case '\uA749': // ꝉ  [LATIN SMALL LETTER L WITH HIGH STROKE]
779
 
          case '\uA781': // ꞁ  [LATIN SMALL LETTER TURNED L]
780
 
          case '\uFF4C': // l  [FULLWIDTH LATIN SMALL LETTER L]
781
 
            output[outputPos++] = 'l';
782
 
            break;
783
 
          case '\u01C7': // LJ  [LATIN CAPITAL LETTER LJ]
784
 
            output[outputPos++] = 'L';
785
 
            output[outputPos++] = 'J';
786
 
            break;
787
 
          case '\u1EFA': // Ỻ  [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
788
 
            output[outputPos++] = 'L';
789
 
            output[outputPos++] = 'L';
790
 
            break;
791
 
          case '\u01C8': // Lj  [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
792
 
            output[outputPos++] = 'L';
793
 
            output[outputPos++] = 'j';
794
 
            break;
795
 
          case '\u24A7': // ⒧  [PARENTHESIZED LATIN SMALL LETTER L]
796
 
            output[outputPos++] = '(';
797
 
            output[outputPos++] = 'l';
798
 
            output[outputPos++] = ')';
799
 
            break;
800
 
          case '\u01C9': // lj  [LATIN SMALL LETTER LJ]
801
 
            output[outputPos++] = 'l';
802
 
            output[outputPos++] = 'j';
803
 
            break;
804
 
          case '\u1EFB': // ỻ  [LATIN SMALL LETTER MIDDLE-WELSH LL]
805
 
            output[outputPos++] = 'l';
806
 
            output[outputPos++] = 'l';
807
 
            break;
808
 
          case '\u02AA': // ʪ  [LATIN SMALL LETTER LS DIGRAPH]
809
 
            output[outputPos++] = 'l';
810
 
            output[outputPos++] = 's';
811
 
            break;
812
 
          case '\u02AB': // ʫ  [LATIN SMALL LETTER LZ DIGRAPH]
813
 
            output[outputPos++] = 'l';
814
 
            output[outputPos++] = 'z';
815
 
            break;
816
 
          case '\u019C': // Ɯ  [LATIN CAPITAL LETTER TURNED M]
817
 
          case '\u1D0D': // ᴍ  [LATIN LETTER SMALL CAPITAL M]
818
 
          case '\u1E3E': // Ḿ  [LATIN CAPITAL LETTER M WITH ACUTE]
819
 
          case '\u1E40': // Ṁ  [LATIN CAPITAL LETTER M WITH DOT ABOVE]
820
 
          case '\u1E42': // Ṃ  [LATIN CAPITAL LETTER M WITH DOT BELOW]
821
 
          case '\u24C2': // Ⓜ  [CIRCLED LATIN CAPITAL LETTER M]
822
 
          case '\u2C6E': // Ɱ  [LATIN CAPITAL LETTER M WITH HOOK]
823
 
          case '\uA7FD': // ꟽ  [LATIN EPIGRAPHIC LETTER INVERTED M]
824
 
          case '\uA7FF': // ꟿ  [LATIN EPIGRAPHIC LETTER ARCHAIC M]
825
 
          case '\uFF2D': // M  [FULLWIDTH LATIN CAPITAL LETTER M]
826
 
            output[outputPos++] = 'M';
827
 
            break;
828
 
          case '\u026F': // ɯ  [LATIN SMALL LETTER TURNED M]
829
 
          case '\u0270': // ɰ  [LATIN SMALL LETTER TURNED M WITH LONG LEG]
830
 
          case '\u0271': // ɱ  [LATIN SMALL LETTER M WITH HOOK]
831
 
          case '\u1D6F': // ᵯ  [LATIN SMALL LETTER M WITH MIDDLE TILDE]
832
 
          case '\u1D86': // ᶆ  [LATIN SMALL LETTER M WITH PALATAL HOOK]
833
 
          case '\u1E3F': // ḿ  [LATIN SMALL LETTER M WITH ACUTE]
834
 
          case '\u1E41': // ṁ  [LATIN SMALL LETTER M WITH DOT ABOVE]
835
 
          case '\u1E43': // ṃ  [LATIN SMALL LETTER M WITH DOT BELOW]
836
 
          case '\u24DC': // ⓜ  [CIRCLED LATIN SMALL LETTER M]
837
 
          case '\uFF4D': // m  [FULLWIDTH LATIN SMALL LETTER M]
838
 
            output[outputPos++] = 'm';
839
 
            break;
840
 
          case '\u24A8': // ⒨  [PARENTHESIZED LATIN SMALL LETTER M]
841
 
            output[outputPos++] = '(';
842
 
            output[outputPos++] = 'm';
843
 
            output[outputPos++] = ')';
844
 
            break;
845
 
          case '\u00D1': // Ñ  [LATIN CAPITAL LETTER N WITH TILDE]
846
 
          case '\u0143': // Ń  [LATIN CAPITAL LETTER N WITH ACUTE]
847
 
          case '\u0145': // Ņ  [LATIN CAPITAL LETTER N WITH CEDILLA]
848
 
          case '\u0147': // Ň  [LATIN CAPITAL LETTER N WITH CARON]
849
 
          case '\u014A': // Ŋ  http://en.wikipedia.org/wiki/Eng_(letter)  [LATIN CAPITAL LETTER ENG]
850
 
          case '\u019D': // Ɲ  [LATIN CAPITAL LETTER N WITH LEFT HOOK]
851
 
          case '\u01F8': // Ǹ  [LATIN CAPITAL LETTER N WITH GRAVE]
852
 
          case '\u0220': // Ƞ  [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
853
 
          case '\u0274': // ɴ  [LATIN LETTER SMALL CAPITAL N]
854
 
          case '\u1D0E': // ᴎ  [LATIN LETTER SMALL CAPITAL REVERSED N]
855
 
          case '\u1E44': // Ṅ  [LATIN CAPITAL LETTER N WITH DOT ABOVE]
856
 
          case '\u1E46': // Ṇ  [LATIN CAPITAL LETTER N WITH DOT BELOW]
857
 
          case '\u1E48': // Ṉ  [LATIN CAPITAL LETTER N WITH LINE BELOW]
858
 
          case '\u1E4A': // Ṋ  [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
859
 
          case '\u24C3': // Ⓝ  [CIRCLED LATIN CAPITAL LETTER N]
860
 
          case '\uFF2E': // N  [FULLWIDTH LATIN CAPITAL LETTER N]
861
 
            output[outputPos++] = 'N';
862
 
            break;
863
 
          case '\u00F1': // ñ  [LATIN SMALL LETTER N WITH TILDE]
864
 
          case '\u0144': // ń  [LATIN SMALL LETTER N WITH ACUTE]
865
 
          case '\u0146': // ņ  [LATIN SMALL LETTER N WITH CEDILLA]
866
 
          case '\u0148': // ň  [LATIN SMALL LETTER N WITH CARON]
867
 
          case '\u0149': // ʼn  [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
868
 
          case '\u014B': // ŋ  http://en.wikipedia.org/wiki/Eng_(letter)  [LATIN SMALL LETTER ENG]
869
 
          case '\u019E': // ƞ  [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
870
 
          case '\u01F9': // ǹ  [LATIN SMALL LETTER N WITH GRAVE]
871
 
          case '\u0235': // ȵ  [LATIN SMALL LETTER N WITH CURL]
872
 
          case '\u0272': // ɲ  [LATIN SMALL LETTER N WITH LEFT HOOK]
873
 
          case '\u0273': // ɳ  [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
874
 
          case '\u1D70': // ᵰ  [LATIN SMALL LETTER N WITH MIDDLE TILDE]
875
 
          case '\u1D87': // ᶇ  [LATIN SMALL LETTER N WITH PALATAL HOOK]
876
 
          case '\u1E45': // ṅ  [LATIN SMALL LETTER N WITH DOT ABOVE]
877
 
          case '\u1E47': // ṇ  [LATIN SMALL LETTER N WITH DOT BELOW]
878
 
          case '\u1E49': // ṉ  [LATIN SMALL LETTER N WITH LINE BELOW]
879
 
          case '\u1E4B': // ṋ  [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW]
880
 
          case '\u207F': // ⁿ  [SUPERSCRIPT LATIN SMALL LETTER N]
881
 
          case '\u24DD': // ⓝ  [CIRCLED LATIN SMALL LETTER N]
882
 
          case '\uFF4E': // n  [FULLWIDTH LATIN SMALL LETTER N]
883
 
            output[outputPos++] = 'n';
884
 
            break;
885
 
          case '\u01CA': // NJ  [LATIN CAPITAL LETTER NJ]
886
 
            output[outputPos++] = 'N';
887
 
            output[outputPos++] = 'J';
888
 
            break;
889
 
          case '\u01CB': // Nj  [LATIN CAPITAL LETTER N WITH SMALL LETTER J]
890
 
            output[outputPos++] = 'N';
891
 
            output[outputPos++] = 'j';
892
 
            break;
893
 
          case '\u24A9': // ⒩  [PARENTHESIZED LATIN SMALL LETTER N]
894
 
            output[outputPos++] = '(';
895
 
            output[outputPos++] = 'n';
896
 
            output[outputPos++] = ')';
897
 
            break;
898
 
          case '\u01CC': // nj  [LATIN SMALL LETTER NJ]
899
 
            output[outputPos++] = 'n';
900
 
            output[outputPos++] = 'j';
901
 
            break;
902
 
          case '\u00D2': // Ò  [LATIN CAPITAL LETTER O WITH GRAVE]
903
 
          case '\u00D3': // Ó  [LATIN CAPITAL LETTER O WITH ACUTE]
904
 
          case '\u00D4': // Ô  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX]
905
 
          case '\u00D5': // Õ  [LATIN CAPITAL LETTER O WITH TILDE]
906
 
          case '\u00D6': // Ö  [LATIN CAPITAL LETTER O WITH DIAERESIS]
907
 
          case '\u00D8': // Ø  [LATIN CAPITAL LETTER O WITH STROKE]
908
 
          case '\u014C': // Ō  [LATIN CAPITAL LETTER O WITH MACRON]
909
 
          case '\u014E': // Ŏ  [LATIN CAPITAL LETTER O WITH BREVE]
910
 
          case '\u0150': // Ő  [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE]
911
 
          case '\u0186': // Ɔ  [LATIN CAPITAL LETTER OPEN O]
912
 
          case '\u019F': // Ɵ  [LATIN CAPITAL LETTER O WITH MIDDLE TILDE]
913
 
          case '\u01A0': // Ơ  [LATIN CAPITAL LETTER O WITH HORN]
914
 
          case '\u01D1': // Ǒ  [LATIN CAPITAL LETTER O WITH CARON]
915
 
          case '\u01EA': // Ǫ  [LATIN CAPITAL LETTER O WITH OGONEK]
916
 
          case '\u01EC': // Ǭ  [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON]
917
 
          case '\u01FE': // Ǿ  [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE]
918
 
          case '\u020C': // Ȍ  [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE]
919
 
          case '\u020E': // Ȏ  [LATIN CAPITAL LETTER O WITH INVERTED BREVE]
920
 
          case '\u022A': // Ȫ  [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON]
921
 
          case '\u022C': // Ȭ  [LATIN CAPITAL LETTER O WITH TILDE AND MACRON]
922
 
          case '\u022E': // Ȯ  [LATIN CAPITAL LETTER O WITH DOT ABOVE]
923
 
          case '\u0230': // Ȱ  [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON]
924
 
          case '\u1D0F': // ᴏ  [LATIN LETTER SMALL CAPITAL O]
925
 
          case '\u1D10': // ᴐ  [LATIN LETTER SMALL CAPITAL OPEN O]
926
 
          case '\u1E4C': // Ṍ  [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE]
927
 
          case '\u1E4E': // Ṏ  [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS]
928
 
          case '\u1E50': // Ṑ  [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE]
929
 
          case '\u1E52': // Ṓ  [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE]
930
 
          case '\u1ECC': // Ọ  [LATIN CAPITAL LETTER O WITH DOT BELOW]
931
 
          case '\u1ECE': // Ỏ  [LATIN CAPITAL LETTER O WITH HOOK ABOVE]
932
 
          case '\u1ED0': // Ố  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE]
933
 
          case '\u1ED2': // Ồ  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE]
934
 
          case '\u1ED4': // Ổ  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
935
 
          case '\u1ED6': // Ỗ  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE]
936
 
          case '\u1ED8': // Ộ  [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
937
 
          case '\u1EDA': // Ớ  [LATIN CAPITAL LETTER O WITH HORN AND ACUTE]
938
 
          case '\u1EDC': // Ờ  [LATIN CAPITAL LETTER O WITH HORN AND GRAVE]
939
 
          case '\u1EDE': // Ở  [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE]
940
 
          case '\u1EE0': // Ỡ  [LATIN CAPITAL LETTER O WITH HORN AND TILDE]
941
 
          case '\u1EE2': // Ợ  [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW]
942
 
          case '\u24C4': // Ⓞ  [CIRCLED LATIN CAPITAL LETTER O]
943
 
          case '\uA74A': // Ꝋ  [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY]
944
 
          case '\uA74C': // Ꝍ  [LATIN CAPITAL LETTER O WITH LOOP]
945
 
          case '\uFF2F': // O  [FULLWIDTH LATIN CAPITAL LETTER O]
946
 
            output[outputPos++] = 'O';
947
 
            break;
948
 
          case '\u00F2': // ò  [LATIN SMALL LETTER O WITH GRAVE]
949
 
          case '\u00F3': // ó  [LATIN SMALL LETTER O WITH ACUTE]
950
 
          case '\u00F4': // ô  [LATIN SMALL LETTER O WITH CIRCUMFLEX]
951
 
          case '\u00F5': // õ  [LATIN SMALL LETTER O WITH TILDE]
952
 
          case '\u00F6': // ö  [LATIN SMALL LETTER O WITH DIAERESIS]
953
 
          case '\u00F8': // ø  [LATIN SMALL LETTER O WITH STROKE]
954
 
          case '\u014D': // ō  [LATIN SMALL LETTER O WITH MACRON]
955
 
          case '\u014F': // ŏ  [LATIN SMALL LETTER O WITH BREVE]
956
 
          case '\u0151': // ő  [LATIN SMALL LETTER O WITH DOUBLE ACUTE]
957
 
          case '\u01A1': // ơ  [LATIN SMALL LETTER O WITH HORN]
958
 
          case '\u01D2': // ǒ  [LATIN SMALL LETTER O WITH CARON]
959
 
          case '\u01EB': // ǫ  [LATIN SMALL LETTER O WITH OGONEK]
960
 
          case '\u01ED': // ǭ  [LATIN SMALL LETTER O WITH OGONEK AND MACRON]
961
 
          case '\u01FF': // ǿ  [LATIN SMALL LETTER O WITH STROKE AND ACUTE]
962
 
          case '\u020D': // ȍ  [LATIN SMALL LETTER O WITH DOUBLE GRAVE]
963
 
          case '\u020F': // ȏ  [LATIN SMALL LETTER O WITH INVERTED BREVE]
964
 
          case '\u022B': // ȫ  [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON]
965
 
          case '\u022D': // ȭ  [LATIN SMALL LETTER O WITH TILDE AND MACRON]
966
 
          case '\u022F': // ȯ  [LATIN SMALL LETTER O WITH DOT ABOVE]
967
 
          case '\u0231': // ȱ  [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON]
968
 
          case '\u0254': // ɔ  [LATIN SMALL LETTER OPEN O]
969
 
          case '\u0275': // ɵ  [LATIN SMALL LETTER BARRED O]
970
 
          case '\u1D16': // ᴖ  [LATIN SMALL LETTER TOP HALF O]
971
 
          case '\u1D17': // ᴗ  [LATIN SMALL LETTER BOTTOM HALF O]
972
 
          case '\u1D97': // ᶗ  [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK]
973
 
          case '\u1E4D': // ṍ  [LATIN SMALL LETTER O WITH TILDE AND ACUTE]
974
 
          case '\u1E4F': // ṏ  [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS]
975
 
          case '\u1E51': // ṑ  [LATIN SMALL LETTER O WITH MACRON AND GRAVE]
976
 
          case '\u1E53': // ṓ  [LATIN SMALL LETTER O WITH MACRON AND ACUTE]
977
 
          case '\u1ECD': // ọ  [LATIN SMALL LETTER O WITH DOT BELOW]
978
 
          case '\u1ECF': // ỏ  [LATIN SMALL LETTER O WITH HOOK ABOVE]
979
 
          case '\u1ED1': // ố  [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE]
980
 
          case '\u1ED3': // ồ  [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE]
981
 
          case '\u1ED5': // ổ  [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE]
982
 
          case '\u1ED7': // ỗ  [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE]
983
 
          case '\u1ED9': // ộ  [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW]
984
 
          case '\u1EDB': // ớ  [LATIN SMALL LETTER O WITH HORN AND ACUTE]
985
 
          case '\u1EDD': // ờ  [LATIN SMALL LETTER O WITH HORN AND GRAVE]
986
 
          case '\u1EDF': // ở  [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE]
987
 
          case '\u1EE1': // ỡ  [LATIN SMALL LETTER O WITH HORN AND TILDE]
988
 
          case '\u1EE3': // ợ  [LATIN SMALL LETTER O WITH HORN AND DOT BELOW]
989
 
          case '\u2092': // ₒ  [LATIN SUBSCRIPT SMALL LETTER O]
990
 
          case '\u24DE': // ⓞ  [CIRCLED LATIN SMALL LETTER O]
991
 
          case '\u2C7A': // ⱺ  [LATIN SMALL LETTER O WITH LOW RING INSIDE]
992
 
          case '\uA74B': // ꝋ  [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY]
993
 
          case '\uA74D': // ꝍ  [LATIN SMALL LETTER O WITH LOOP]
994
 
          case '\uFF4F': // o  [FULLWIDTH LATIN SMALL LETTER O]
995
 
            output[outputPos++] = 'o';
996
 
            break;
997
 
          case '\u0152': // Œ  [LATIN CAPITAL LIGATURE OE]
998
 
          case '\u0276': // ɶ  [LATIN LETTER SMALL CAPITAL OE]
999
 
            output[outputPos++] = 'O';
1000
 
            output[outputPos++] = 'E';
1001
 
            break;
1002
 
          case '\uA74E': // Ꝏ  [LATIN CAPITAL LETTER OO]
1003
 
            output[outputPos++] = 'O';
1004
 
            output[outputPos++] = 'O';
1005
 
            break;
1006
 
          case '\u0222': // Ȣ  http://en.wikipedia.org/wiki/OU  [LATIN CAPITAL LETTER OU]
1007
 
          case '\u1D15': // ᴕ  [LATIN LETTER SMALL CAPITAL OU]
1008
 
            output[outputPos++] = 'O';
1009
 
            output[outputPos++] = 'U';
1010
 
            break;
1011
 
          case '\u24AA': // ⒪  [PARENTHESIZED LATIN SMALL LETTER O]
1012
 
            output[outputPos++] = '(';
1013
 
            output[outputPos++] = 'o';
1014
 
            output[outputPos++] = ')';
1015
 
            break;
1016
 
          case '\u0153': // œ  [LATIN SMALL LIGATURE OE]
1017
 
          case '\u1D14': // ᴔ  [LATIN SMALL LETTER TURNED OE]
1018
 
            output[outputPos++] = 'o';
1019
 
            output[outputPos++] = 'e';
1020
 
            break;
1021
 
          case '\uA74F': // ꝏ  [LATIN SMALL LETTER OO]
1022
 
            output[outputPos++] = 'o';
1023
 
            output[outputPos++] = 'o';
1024
 
            break;
1025
 
          case '\u0223': // ȣ  http://en.wikipedia.org/wiki/OU  [LATIN SMALL LETTER OU]
1026
 
            output[outputPos++] = 'o';
1027
 
            output[outputPos++] = 'u';
1028
 
            break;
1029
 
          case '\u01A4': // Ƥ  [LATIN CAPITAL LETTER P WITH HOOK]
1030
 
          case '\u1D18': // ᴘ  [LATIN LETTER SMALL CAPITAL P]
1031
 
          case '\u1E54': // Ṕ  [LATIN CAPITAL LETTER P WITH ACUTE]
1032
 
          case '\u1E56': // Ṗ  [LATIN CAPITAL LETTER P WITH DOT ABOVE]
1033
 
          case '\u24C5': // Ⓟ  [CIRCLED LATIN CAPITAL LETTER P]
1034
 
          case '\u2C63': // Ᵽ  [LATIN CAPITAL LETTER P WITH STROKE]
1035
 
          case '\uA750': // Ꝑ  [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER]
1036
 
          case '\uA752': // Ꝓ  [LATIN CAPITAL LETTER P WITH FLOURISH]
1037
 
          case '\uA754': // Ꝕ  [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL]
1038
 
          case '\uFF30': // P  [FULLWIDTH LATIN CAPITAL LETTER P]
1039
 
            output[outputPos++] = 'P';
1040
 
            break;
1041
 
          case '\u01A5': // ƥ  [LATIN SMALL LETTER P WITH HOOK]
1042
 
          case '\u1D71': // ᵱ  [LATIN SMALL LETTER P WITH MIDDLE TILDE]
1043
 
          case '\u1D7D': // ᵽ  [LATIN SMALL LETTER P WITH STROKE]
1044
 
          case '\u1D88': // ᶈ  [LATIN SMALL LETTER P WITH PALATAL HOOK]
1045
 
          case '\u1E55': // ṕ  [LATIN SMALL LETTER P WITH ACUTE]
1046
 
          case '\u1E57': // ṗ  [LATIN SMALL LETTER P WITH DOT ABOVE]
1047
 
          case '\u24DF': // ⓟ  [CIRCLED LATIN SMALL LETTER P]
1048
 
          case '\uA751': // ꝑ  [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER]
1049
 
          case '\uA753': // ꝓ  [LATIN SMALL LETTER P WITH FLOURISH]
1050
 
          case '\uA755': // ꝕ  [LATIN SMALL LETTER P WITH SQUIRREL TAIL]
1051
 
          case '\uA7FC': // ꟼ  [LATIN EPIGRAPHIC LETTER REVERSED P]
1052
 
          case '\uFF50': // p  [FULLWIDTH LATIN SMALL LETTER P]
1053
 
            output[outputPos++] = 'p';
1054
 
            break;
1055
 
          case '\u24AB': // ⒫  [PARENTHESIZED LATIN SMALL LETTER P]
1056
 
            output[outputPos++] = '(';
1057
 
            output[outputPos++] = 'p';
1058
 
            output[outputPos++] = ')';
1059
 
            break;
1060
 
          case '\u024A': // Ɋ  [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL]
1061
 
          case '\u24C6': // Ⓠ  [CIRCLED LATIN CAPITAL LETTER Q]
1062
 
          case '\uA756': // Ꝗ  [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER]
1063
 
          case '\uA758': // Ꝙ  [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE]
1064
 
          case '\uFF31': // Q  [FULLWIDTH LATIN CAPITAL LETTER Q]
1065
 
            output[outputPos++] = 'Q';
1066
 
            break;
1067
 
          case '\u0138': // ĸ  http://en.wikipedia.org/wiki/Kra_(letter)  [LATIN SMALL LETTER KRA]
1068
 
          case '\u024B': // ɋ  [LATIN SMALL LETTER Q WITH HOOK TAIL]
1069
 
          case '\u02A0': // ʠ  [LATIN SMALL LETTER Q WITH HOOK]
1070
 
          case '\u24E0': // ⓠ  [CIRCLED LATIN SMALL LETTER Q]
1071
 
          case '\uA757': // ꝗ  [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER]
1072
 
          case '\uA759': // ꝙ  [LATIN SMALL LETTER Q WITH DIAGONAL STROKE]
1073
 
          case '\uFF51': // q  [FULLWIDTH LATIN SMALL LETTER Q]
1074
 
            output[outputPos++] = 'q';
1075
 
            break;
1076
 
          case '\u24AC': // ⒬  [PARENTHESIZED LATIN SMALL LETTER Q]
1077
 
            output[outputPos++] = '(';
1078
 
            output[outputPos++] = 'q';
1079
 
            output[outputPos++] = ')';
1080
 
            break;
1081
 
          case '\u0239': // ȹ  [LATIN SMALL LETTER QP DIGRAPH]
1082
 
            output[outputPos++] = 'q';
1083
 
            output[outputPos++] = 'p';
1084
 
            break;
1085
 
          case '\u0154': // Ŕ  [LATIN CAPITAL LETTER R WITH ACUTE]
1086
 
          case '\u0156': // Ŗ  [LATIN CAPITAL LETTER R WITH CEDILLA]
1087
 
          case '\u0158': // Ř  [LATIN CAPITAL LETTER R WITH CARON]
1088
 
          case '\u0210': // Ȓ  [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE]
1089
 
          case '\u0212': // Ȓ  [LATIN CAPITAL LETTER R WITH INVERTED BREVE]
1090
 
          case '\u024C': // Ɍ  [LATIN CAPITAL LETTER R WITH STROKE]
1091
 
          case '\u0280': // ʀ  [LATIN LETTER SMALL CAPITAL R]
1092
 
          case '\u0281': // ʁ  [LATIN LETTER SMALL CAPITAL INVERTED R]
1093
 
          case '\u1D19': // ᴙ  [LATIN LETTER SMALL CAPITAL REVERSED R]
1094
 
          case '\u1D1A': // ᴚ  [LATIN LETTER SMALL CAPITAL TURNED R]
1095
 
          case '\u1E58': // Ṙ  [LATIN CAPITAL LETTER R WITH DOT ABOVE]
1096
 
          case '\u1E5A': // Ṛ  [LATIN CAPITAL LETTER R WITH DOT BELOW]
1097
 
          case '\u1E5C': // Ṝ  [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON]
1098
 
          case '\u1E5E': // Ṟ  [LATIN CAPITAL LETTER R WITH LINE BELOW]
1099
 
          case '\u24C7': // Ⓡ  [CIRCLED LATIN CAPITAL LETTER R]
1100
 
          case '\u2C64': // Ɽ  [LATIN CAPITAL LETTER R WITH TAIL]
1101
 
          case '\uA75A': // Ꝛ  [LATIN CAPITAL LETTER R ROTUNDA]
1102
 
          case '\uA782': // Ꞃ  [LATIN CAPITAL LETTER INSULAR R]
1103
 
          case '\uFF32': // R  [FULLWIDTH LATIN CAPITAL LETTER R]
1104
 
            output[outputPos++] = 'R';
1105
 
            break;
1106
 
          case '\u0155': // ŕ  [LATIN SMALL LETTER R WITH ACUTE]
1107
 
          case '\u0157': // ŗ  [LATIN SMALL LETTER R WITH CEDILLA]
1108
 
          case '\u0159': // ř  [LATIN SMALL LETTER R WITH CARON]
1109
 
          case '\u0211': // ȑ  [LATIN SMALL LETTER R WITH DOUBLE GRAVE]
1110
 
          case '\u0213': // ȓ  [LATIN SMALL LETTER R WITH INVERTED BREVE]
1111
 
          case '\u024D': // ɍ  [LATIN SMALL LETTER R WITH STROKE]
1112
 
          case '\u027C': // ɼ  [LATIN SMALL LETTER R WITH LONG LEG]
1113
 
          case '\u027D': // ɽ  [LATIN SMALL LETTER R WITH TAIL]
1114
 
          case '\u027E': // ɾ  [LATIN SMALL LETTER R WITH FISHHOOK]
1115
 
          case '\u027F': // ɿ  [LATIN SMALL LETTER REVERSED R WITH FISHHOOK]
1116
 
          case '\u1D63': // ᵣ  [LATIN SUBSCRIPT SMALL LETTER R]
1117
 
          case '\u1D72': // ᵲ  [LATIN SMALL LETTER R WITH MIDDLE TILDE]
1118
 
          case '\u1D73': // ᵳ  [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE]
1119
 
          case '\u1D89': // ᶉ  [LATIN SMALL LETTER R WITH PALATAL HOOK]
1120
 
          case '\u1E59': // ṙ  [LATIN SMALL LETTER R WITH DOT ABOVE]
1121
 
          case '\u1E5B': // ṛ  [LATIN SMALL LETTER R WITH DOT BELOW]
1122
 
          case '\u1E5D': // ṝ  [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON]
1123
 
          case '\u1E5F': // ṟ  [LATIN SMALL LETTER R WITH LINE BELOW]
1124
 
          case '\u24E1': // ⓡ  [CIRCLED LATIN SMALL LETTER R]
1125
 
          case '\uA75B': // ꝛ  [LATIN SMALL LETTER R ROTUNDA]
1126
 
          case '\uA783': // ꞃ  [LATIN SMALL LETTER INSULAR R]
1127
 
          case '\uFF52': // r  [FULLWIDTH LATIN SMALL LETTER R]
1128
 
            output[outputPos++] = 'r';
1129
 
            break;
1130
 
          case '\u24AD': // ⒭  [PARENTHESIZED LATIN SMALL LETTER R]
1131
 
            output[outputPos++] = '(';
1132
 
            output[outputPos++] = 'r';
1133
 
            output[outputPos++] = ')';
1134
 
            break;
1135
 
          case '\u015A': // Ś  [LATIN CAPITAL LETTER S WITH ACUTE]
1136
 
          case '\u015C': // Ŝ  [LATIN CAPITAL LETTER S WITH CIRCUMFLEX]
1137
 
          case '\u015E': // Ş  [LATIN CAPITAL LETTER S WITH CEDILLA]
1138
 
          case '\u0160': // Š  [LATIN CAPITAL LETTER S WITH CARON]
1139
 
          case '\u0218': // Ș  [LATIN CAPITAL LETTER S WITH COMMA BELOW]
1140
 
          case '\u1E60': // Ṡ  [LATIN CAPITAL LETTER S WITH DOT ABOVE]
1141
 
          case '\u1E62': // Ṣ  [LATIN CAPITAL LETTER S WITH DOT BELOW]
1142
 
          case '\u1E64': // Ṥ  [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE]
1143
 
          case '\u1E66': // Ṧ  [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE]
1144
 
          case '\u1E68': // Ṩ  [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE]
1145
 
          case '\u24C8': // Ⓢ  [CIRCLED LATIN CAPITAL LETTER S]
1146
 
          case '\uA731': // ꜱ  [LATIN LETTER SMALL CAPITAL S]
1147
 
          case '\uA785': // ꞅ  [LATIN SMALL LETTER INSULAR S]
1148
 
          case '\uFF33': // S  [FULLWIDTH LATIN CAPITAL LETTER S]
1149
 
            output[outputPos++] = 'S';
1150
 
            break;
1151
 
          case '\u015B': // ś  [LATIN SMALL LETTER S WITH ACUTE]
1152
 
          case '\u015D': // ŝ  [LATIN SMALL LETTER S WITH CIRCUMFLEX]
1153
 
          case '\u015F': // ş  [LATIN SMALL LETTER S WITH CEDILLA]
1154
 
          case '\u0161': // š  [LATIN SMALL LETTER S WITH CARON]
1155
 
          case '\u017F': // ſ  http://en.wikipedia.org/wiki/Long_S  [LATIN SMALL LETTER LONG S]
1156
 
          case '\u0219': // ș  [LATIN SMALL LETTER S WITH COMMA BELOW]
1157
 
          case '\u023F': // ȿ  [LATIN SMALL LETTER S WITH SWASH TAIL]
1158
 
          case '\u0282': // ʂ  [LATIN SMALL LETTER S WITH HOOK]
1159
 
          case '\u1D74': // ᵴ  [LATIN SMALL LETTER S WITH MIDDLE TILDE]
1160
 
          case '\u1D8A': // ᶊ  [LATIN SMALL LETTER S WITH PALATAL HOOK]
1161
 
          case '\u1E61': // ṡ  [LATIN SMALL LETTER S WITH DOT ABOVE]
1162
 
          case '\u1E63': // ṣ  [LATIN SMALL LETTER S WITH DOT BELOW]
1163
 
          case '\u1E65': // ṥ  [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE]
1164
 
          case '\u1E67': // ṧ  [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE]
1165
 
          case '\u1E69': // ṩ  [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE]
1166
 
          case '\u1E9C': // ẜ  [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE]
1167
 
          case '\u1E9D': // ẝ  [LATIN SMALL LETTER LONG S WITH HIGH STROKE]
1168
 
          case '\u24E2': // ⓢ  [CIRCLED LATIN SMALL LETTER S]
1169
 
          case '\uA784': // Ꞅ  [LATIN CAPITAL LETTER INSULAR S]
1170
 
          case '\uFF53': // s  [FULLWIDTH LATIN SMALL LETTER S]
1171
 
            output[outputPos++] = 's';
1172
 
            break;
1173
 
          case '\u1E9E': // ẞ  [LATIN CAPITAL LETTER SHARP S]
1174
 
            output[outputPos++] = 'S';
1175
 
            output[outputPos++] = 'S';
1176
 
            break;
1177
 
          case '\u24AE': // ⒮  [PARENTHESIZED LATIN SMALL LETTER S]
1178
 
            output[outputPos++] = '(';
1179
 
            output[outputPos++] = 's';
1180
 
            output[outputPos++] = ')';
1181
 
            break;
1182
 
          case '\u00DF': // ß  [LATIN SMALL LETTER SHARP S]
1183
 
            output[outputPos++] = 's';
1184
 
            output[outputPos++] = 's';
1185
 
            break;
1186
 
          case '\uFB06': // st  [LATIN SMALL LIGATURE ST]
1187
 
            output[outputPos++] = 's';
1188
 
            output[outputPos++] = 't';
1189
 
            break;
1190
 
          case '\u0162': // Ţ  [LATIN CAPITAL LETTER T WITH CEDILLA]
1191
 
          case '\u0164': // Ť  [LATIN CAPITAL LETTER T WITH CARON]
1192
 
          case '\u0166': // Ŧ  [LATIN CAPITAL LETTER T WITH STROKE]
1193
 
          case '\u01AC': // Ƭ  [LATIN CAPITAL LETTER T WITH HOOK]
1194
 
          case '\u01AE': // Ʈ  [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK]
1195
 
          case '\u021A': // Ț  [LATIN CAPITAL LETTER T WITH COMMA BELOW]
1196
 
          case '\u023E': // Ⱦ  [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE]
1197
 
          case '\u1D1B': // ᴛ  [LATIN LETTER SMALL CAPITAL T]
1198
 
          case '\u1E6A': // Ṫ  [LATIN CAPITAL LETTER T WITH DOT ABOVE]
1199
 
          case '\u1E6C': // Ṭ  [LATIN CAPITAL LETTER T WITH DOT BELOW]
1200
 
          case '\u1E6E': // Ṯ  [LATIN CAPITAL LETTER T WITH LINE BELOW]
1201
 
          case '\u1E70': // Ṱ  [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW]
1202
 
          case '\u24C9': // Ⓣ  [CIRCLED LATIN CAPITAL LETTER T]
1203
 
          case '\uA786': // Ꞇ  [LATIN CAPITAL LETTER INSULAR T]
1204
 
          case '\uFF34': // T  [FULLWIDTH LATIN CAPITAL LETTER T]
1205
 
            output[outputPos++] = 'T';
1206
 
            break;
1207
 
          case '\u0163': // ţ  [LATIN SMALL LETTER T WITH CEDILLA]
1208
 
          case '\u0165': // ť  [LATIN SMALL LETTER T WITH CARON]
1209
 
          case '\u0167': // ŧ  [LATIN SMALL LETTER T WITH STROKE]
1210
 
          case '\u01AB': // ƫ  [LATIN SMALL LETTER T WITH PALATAL HOOK]
1211
 
          case '\u01AD': // ƭ  [LATIN SMALL LETTER T WITH HOOK]
1212
 
          case '\u021B': // ț  [LATIN SMALL LETTER T WITH COMMA BELOW]
1213
 
          case '\u0236': // ȶ  [LATIN SMALL LETTER T WITH CURL]
1214
 
          case '\u0287': // ʇ  [LATIN SMALL LETTER TURNED T]
1215
 
          case '\u0288': // ʈ  [LATIN SMALL LETTER T WITH RETROFLEX HOOK]
1216
 
          case '\u1D75': // ᵵ  [LATIN SMALL LETTER T WITH MIDDLE TILDE]
1217
 
          case '\u1E6B': // ṫ  [LATIN SMALL LETTER T WITH DOT ABOVE]
1218
 
          case '\u1E6D': // ṭ  [LATIN SMALL LETTER T WITH DOT BELOW]
1219
 
          case '\u1E6F': // ṯ  [LATIN SMALL LETTER T WITH LINE BELOW]
1220
 
          case '\u1E71': // ṱ  [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW]
1221
 
          case '\u1E97': // ẗ  [LATIN SMALL LETTER T WITH DIAERESIS]
1222
 
          case '\u24E3': // ⓣ  [CIRCLED LATIN SMALL LETTER T]
1223
 
          case '\u2C66': // ⱦ  [LATIN SMALL LETTER T WITH DIAGONAL STROKE]
1224
 
          case '\uFF54': // t  [FULLWIDTH LATIN SMALL LETTER T]
1225
 
            output[outputPos++] = 't';
1226
 
            break;
1227
 
          case '\u00DE': // Þ  [LATIN CAPITAL LETTER THORN]
1228
 
          case '\uA766': // Ꝧ  [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER]
1229
 
            output[outputPos++] = 'T';
1230
 
            output[outputPos++] = 'H';
1231
 
            break;
1232
 
          case '\uA728': // Ꜩ  [LATIN CAPITAL LETTER TZ]
1233
 
            output[outputPos++] = 'T';
1234
 
            output[outputPos++] = 'Z';
1235
 
            break;
1236
 
          case '\u24AF': // ⒯  [PARENTHESIZED LATIN SMALL LETTER T]
1237
 
            output[outputPos++] = '(';
1238
 
            output[outputPos++] = 't';
1239
 
            output[outputPos++] = ')';
1240
 
            break;
1241
 
          case '\u02A8': // ʨ  [LATIN SMALL LETTER TC DIGRAPH WITH CURL]
1242
 
            output[outputPos++] = 't';
1243
 
            output[outputPos++] = 'c';
1244
 
            break;
1245
 
          case '\u00FE': // þ  [LATIN SMALL LETTER THORN]
1246
 
          case '\u1D7A': // ᵺ  [LATIN SMALL LETTER TH WITH STRIKETHROUGH]
1247
 
          case '\uA767': // ꝧ  [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER]
1248
 
            output[outputPos++] = 't';
1249
 
            output[outputPos++] = 'h';
1250
 
            break;
1251
 
          case '\u02A6': // ʦ  [LATIN SMALL LETTER TS DIGRAPH]
1252
 
            output[outputPos++] = 't';
1253
 
            output[outputPos++] = 's';
1254
 
            break;
1255
 
          case '\uA729': // ꜩ  [LATIN SMALL LETTER TZ]
1256
 
            output[outputPos++] = 't';
1257
 
            output[outputPos++] = 'z';
1258
 
            break;
1259
 
          case '\u00D9': // Ù  [LATIN CAPITAL LETTER U WITH GRAVE]
1260
 
          case '\u00DA': // Ú  [LATIN CAPITAL LETTER U WITH ACUTE]
1261
 
          case '\u00DB': // Û  [LATIN CAPITAL LETTER U WITH CIRCUMFLEX]
1262
 
          case '\u00DC': // Ü  [LATIN CAPITAL LETTER U WITH DIAERESIS]
1263
 
          case '\u0168': // Ũ  [LATIN CAPITAL LETTER U WITH TILDE]
1264
 
          case '\u016A': // Ū  [LATIN CAPITAL LETTER U WITH MACRON]
1265
 
          case '\u016C': // Ŭ  [LATIN CAPITAL LETTER U WITH BREVE]
1266
 
          case '\u016E': // Ů  [LATIN CAPITAL LETTER U WITH RING ABOVE]
1267
 
          case '\u0170': // Ű  [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE]
1268
 
          case '\u0172': // Ų  [LATIN CAPITAL LETTER U WITH OGONEK]
1269
 
          case '\u01AF': // Ư  [LATIN CAPITAL LETTER U WITH HORN]
1270
 
          case '\u01D3': // Ǔ  [LATIN CAPITAL LETTER U WITH CARON]
1271
 
          case '\u01D5': // Ǖ  [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON]
1272
 
          case '\u01D7': // Ǘ  [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE]
1273
 
          case '\u01D9': // Ǚ  [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON]
1274
 
          case '\u01DB': // Ǜ  [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE]
1275
 
          case '\u0214': // Ȕ  [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE]
1276
 
          case '\u0216': // Ȗ  [LATIN CAPITAL LETTER U WITH INVERTED BREVE]
1277
 
          case '\u0244': // Ʉ  [LATIN CAPITAL LETTER U BAR]
1278
 
          case '\u1D1C': // ᴜ  [LATIN LETTER SMALL CAPITAL U]
1279
 
          case '\u1D7E': // ᵾ  [LATIN SMALL CAPITAL LETTER U WITH STROKE]
1280
 
          case '\u1E72': // Ṳ  [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW]
1281
 
          case '\u1E74': // Ṵ  [LATIN CAPITAL LETTER U WITH TILDE BELOW]
1282
 
          case '\u1E76': // Ṷ  [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW]
1283
 
          case '\u1E78': // Ṹ  [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE]
1284
 
          case '\u1E7A': // Ṻ  [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS]
1285
 
          case '\u1EE4': // Ụ  [LATIN CAPITAL LETTER U WITH DOT BELOW]
1286
 
          case '\u1EE6': // Ủ  [LATIN CAPITAL LETTER U WITH HOOK ABOVE]
1287
 
          case '\u1EE8': // Ứ  [LATIN CAPITAL LETTER U WITH HORN AND ACUTE]
1288
 
          case '\u1EEA': // Ừ  [LATIN CAPITAL LETTER U WITH HORN AND GRAVE]
1289
 
          case '\u1EEC': // Ử  [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE]
1290
 
          case '\u1EEE': // Ữ  [LATIN CAPITAL LETTER U WITH HORN AND TILDE]
1291
 
          case '\u1EF0': // Ự  [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW]
1292
 
          case '\u24CA': // Ⓤ  [CIRCLED LATIN CAPITAL LETTER U]
1293
 
          case '\uFF35': // U  [FULLWIDTH LATIN CAPITAL LETTER U]
1294
 
            output[outputPos++] = 'U';
1295
 
            break;
1296
 
          case '\u00F9': // ù  [LATIN SMALL LETTER U WITH GRAVE]
1297
 
          case '\u00FA': // ú  [LATIN SMALL LETTER U WITH ACUTE]
1298
 
          case '\u00FB': // û  [LATIN SMALL LETTER U WITH CIRCUMFLEX]
1299
 
          case '\u00FC': // ü  [LATIN SMALL LETTER U WITH DIAERESIS]
1300
 
          case '\u0169': // ũ  [LATIN SMALL LETTER U WITH TILDE]
1301
 
          case '\u016B': // ū  [LATIN SMALL LETTER U WITH MACRON]
1302
 
          case '\u016D': // ŭ  [LATIN SMALL LETTER U WITH BREVE]
1303
 
          case '\u016F': // ů  [LATIN SMALL LETTER U WITH RING ABOVE]
1304
 
          case '\u0171': // ű  [LATIN SMALL LETTER U WITH DOUBLE ACUTE]
1305
 
          case '\u0173': // ų  [LATIN SMALL LETTER U WITH OGONEK]
1306
 
          case '\u01B0': // ư  [LATIN SMALL LETTER U WITH HORN]
1307
 
          case '\u01D4': // ǔ  [LATIN SMALL LETTER U WITH CARON]
1308
 
          case '\u01D6': // ǖ  [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON]
1309
 
          case '\u01D8': // ǘ  [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE]
1310
 
          case '\u01DA': // ǚ  [LATIN SMALL LETTER U WITH DIAERESIS AND CARON]
1311
 
          case '\u01DC': // ǜ  [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE]
1312
 
          case '\u0215': // ȕ  [LATIN SMALL LETTER U WITH DOUBLE GRAVE]
1313
 
          case '\u0217': // ȗ  [LATIN SMALL LETTER U WITH INVERTED BREVE]
1314
 
          case '\u0289': // ʉ  [LATIN SMALL LETTER U BAR]
1315
 
          case '\u1D64': // ᵤ  [LATIN SUBSCRIPT SMALL LETTER U]
1316
 
          case '\u1D99': // ᶙ  [LATIN SMALL LETTER U WITH RETROFLEX HOOK]
1317
 
          case '\u1E73': // ṳ  [LATIN SMALL LETTER U WITH DIAERESIS BELOW]
1318
 
          case '\u1E75': // ṵ  [LATIN SMALL LETTER U WITH TILDE BELOW]
1319
 
          case '\u1E77': // ṷ  [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW]
1320
 
          case '\u1E79': // ṹ  [LATIN SMALL LETTER U WITH TILDE AND ACUTE]
1321
 
          case '\u1E7B': // ṻ  [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS]
1322
 
          case '\u1EE5': // ụ  [LATIN SMALL LETTER U WITH DOT BELOW]
1323
 
          case '\u1EE7': // ủ  [LATIN SMALL LETTER U WITH HOOK ABOVE]
1324
 
          case '\u1EE9': // ứ  [LATIN SMALL LETTER U WITH HORN AND ACUTE]
1325
 
          case '\u1EEB': // ừ  [LATIN SMALL LETTER U WITH HORN AND GRAVE]
1326
 
          case '\u1EED': // ử  [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE]
1327
 
          case '\u1EEF': // ữ  [LATIN SMALL LETTER U WITH HORN AND TILDE]
1328
 
          case '\u1EF1': // ự  [LATIN SMALL LETTER U WITH HORN AND DOT BELOW]
1329
 
          case '\u24E4': // ⓤ  [CIRCLED LATIN SMALL LETTER U]
1330
 
          case '\uFF55': // u  [FULLWIDTH LATIN SMALL LETTER U]
1331
 
            output[outputPos++] = 'u';
1332
 
            break;
1333
 
          case '\u24B0': // ⒰  [PARENTHESIZED LATIN SMALL LETTER U]
1334
 
            output[outputPos++] = '(';
1335
 
            output[outputPos++] = 'u';
1336
 
            output[outputPos++] = ')';
1337
 
            break;
1338
 
          case '\u1D6B': // ᵫ  [LATIN SMALL LETTER UE]
1339
 
            output[outputPos++] = 'u';
1340
 
            output[outputPos++] = 'e';
1341
 
            break;
1342
 
          case '\u01B2': // Ʋ  [LATIN CAPITAL LETTER V WITH HOOK]
1343
 
          case '\u0245': // Ʌ  [LATIN CAPITAL LETTER TURNED V]
1344
 
          case '\u1D20': // ᴠ  [LATIN LETTER SMALL CAPITAL V]
1345
 
          case '\u1E7C': // Ṽ  [LATIN CAPITAL LETTER V WITH TILDE]
1346
 
          case '\u1E7E': // Ṿ  [LATIN CAPITAL LETTER V WITH DOT BELOW]
1347
 
          case '\u1EFC': // Ỽ  [LATIN CAPITAL LETTER MIDDLE-WELSH V]
1348
 
          case '\u24CB': // Ⓥ  [CIRCLED LATIN CAPITAL LETTER V]
1349
 
          case '\uA75E': // Ꝟ  [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE]
1350
 
          case '\uA768': // Ꝩ  [LATIN CAPITAL LETTER VEND]
1351
 
          case '\uFF36': // V  [FULLWIDTH LATIN CAPITAL LETTER V]
1352
 
            output[outputPos++] = 'V';
1353
 
            break;
1354
 
          case '\u028B': // ʋ  [LATIN SMALL LETTER V WITH HOOK]
1355
 
          case '\u028C': // ʌ  [LATIN SMALL LETTER TURNED V]
1356
 
          case '\u1D65': // ᵥ  [LATIN SUBSCRIPT SMALL LETTER V]
1357
 
          case '\u1D8C': // ᶌ  [LATIN SMALL LETTER V WITH PALATAL HOOK]
1358
 
          case '\u1E7D': // ṽ  [LATIN SMALL LETTER V WITH TILDE]
1359
 
          case '\u1E7F': // ṿ  [LATIN SMALL LETTER V WITH DOT BELOW]
1360
 
          case '\u24E5': // ⓥ  [CIRCLED LATIN SMALL LETTER V]
1361
 
          case '\u2C71': // ⱱ  [LATIN SMALL LETTER V WITH RIGHT HOOK]
1362
 
          case '\u2C74': // ⱴ  [LATIN SMALL LETTER V WITH CURL]
1363
 
          case '\uA75F': // ꝟ  [LATIN SMALL LETTER V WITH DIAGONAL STROKE]
1364
 
          case '\uFF56': // v  [FULLWIDTH LATIN SMALL LETTER V]
1365
 
            output[outputPos++] = 'v';
1366
 
            break;
1367
 
          case '\uA760': // Ꝡ  [LATIN CAPITAL LETTER VY]
1368
 
            output[outputPos++] = 'V';
1369
 
            output[outputPos++] = 'Y';
1370
 
            break;
1371
 
          case '\u24B1': // ⒱  [PARENTHESIZED LATIN SMALL LETTER V]
1372
 
            output[outputPos++] = '(';
1373
 
            output[outputPos++] = 'v';
1374
 
            output[outputPos++] = ')';
1375
 
            break;
1376
 
          case '\uA761': // ꝡ  [LATIN SMALL LETTER VY]
1377
 
            output[outputPos++] = 'v';
1378
 
            output[outputPos++] = 'y';
1379
 
            break;
1380
 
          case '\u0174': // Ŵ  [LATIN CAPITAL LETTER W WITH CIRCUMFLEX]
1381
 
          case '\u01F7': // Ƿ  http://en.wikipedia.org/wiki/Wynn  [LATIN CAPITAL LETTER WYNN]
1382
 
          case '\u1D21': // ᴡ  [LATIN LETTER SMALL CAPITAL W]
1383
 
          case '\u1E80': // Ẁ  [LATIN CAPITAL LETTER W WITH GRAVE]
1384
 
          case '\u1E82': // Ẃ  [LATIN CAPITAL LETTER W WITH ACUTE]
1385
 
          case '\u1E84': // Ẅ  [LATIN CAPITAL LETTER W WITH DIAERESIS]
1386
 
          case '\u1E86': // Ẇ  [LATIN CAPITAL LETTER W WITH DOT ABOVE]
1387
 
          case '\u1E88': // Ẉ  [LATIN CAPITAL LETTER W WITH DOT BELOW]
1388
 
          case '\u24CC': // Ⓦ  [CIRCLED LATIN CAPITAL LETTER W]
1389
 
          case '\u2C72': // Ⱳ  [LATIN CAPITAL LETTER W WITH HOOK]
1390
 
          case '\uFF37': // W  [FULLWIDTH LATIN CAPITAL LETTER W]
1391
 
            output[outputPos++] = 'W';
1392
 
            break;
1393
 
          case '\u0175': // ŵ  [LATIN SMALL LETTER W WITH CIRCUMFLEX]
1394
 
          case '\u01BF': // ƿ  http://en.wikipedia.org/wiki/Wynn  [LATIN LETTER WYNN]
1395
 
          case '\u028D': // ʍ  [LATIN SMALL LETTER TURNED W]
1396
 
          case '\u1E81': // ẁ  [LATIN SMALL LETTER W WITH GRAVE]
1397
 
          case '\u1E83': // ẃ  [LATIN SMALL LETTER W WITH ACUTE]
1398
 
          case '\u1E85': // ẅ  [LATIN SMALL LETTER W WITH DIAERESIS]
1399
 
          case '\u1E87': // ẇ  [LATIN SMALL LETTER W WITH DOT ABOVE]
1400
 
          case '\u1E89': // ẉ  [LATIN SMALL LETTER W WITH DOT BELOW]
1401
 
          case '\u1E98': // ẘ  [LATIN SMALL LETTER W WITH RING ABOVE]
1402
 
          case '\u24E6': // ⓦ  [CIRCLED LATIN SMALL LETTER W]
1403
 
          case '\u2C73': // ⱳ  [LATIN SMALL LETTER W WITH HOOK]
1404
 
          case '\uFF57': // w  [FULLWIDTH LATIN SMALL LETTER W]
1405
 
            output[outputPos++] = 'w';
1406
 
            break;
1407
 
          case '\u24B2': // ⒲  [PARENTHESIZED LATIN SMALL LETTER W]
1408
 
            output[outputPos++] = '(';
1409
 
            output[outputPos++] = 'w';
1410
 
            output[outputPos++] = ')';
1411
 
            break;
1412
 
          case '\u1E8A': // Ẋ  [LATIN CAPITAL LETTER X WITH DOT ABOVE]
1413
 
          case '\u1E8C': // Ẍ  [LATIN CAPITAL LETTER X WITH DIAERESIS]
1414
 
          case '\u24CD': // Ⓧ  [CIRCLED LATIN CAPITAL LETTER X]
1415
 
          case '\uFF38': // X  [FULLWIDTH LATIN CAPITAL LETTER X]
1416
 
            output[outputPos++] = 'X';
1417
 
            break;
1418
 
          case '\u1D8D': // ᶍ  [LATIN SMALL LETTER X WITH PALATAL HOOK]
1419
 
          case '\u1E8B': // ẋ  [LATIN SMALL LETTER X WITH DOT ABOVE]
1420
 
          case '\u1E8D': // ẍ  [LATIN SMALL LETTER X WITH DIAERESIS]
1421
 
          case '\u2093': // ₓ  [LATIN SUBSCRIPT SMALL LETTER X]
1422
 
          case '\u24E7': // ⓧ  [CIRCLED LATIN SMALL LETTER X]
1423
 
          case '\uFF58': // x  [FULLWIDTH LATIN SMALL LETTER X]
1424
 
            output[outputPos++] = 'x';
1425
 
            break;
1426
 
          case '\u24B3': // ⒳  [PARENTHESIZED LATIN SMALL LETTER X]
1427
 
            output[outputPos++] = '(';
1428
 
            output[outputPos++] = 'x';
1429
 
            output[outputPos++] = ')';
1430
 
            break;
1431
 
          case '\u00DD': // Ý  [LATIN CAPITAL LETTER Y WITH ACUTE]
1432
 
          case '\u0176': // Ŷ  [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX]
1433
 
          case '\u0178': // Ÿ  [LATIN CAPITAL LETTER Y WITH DIAERESIS]
1434
 
          case '\u01B3': // Ƴ  [LATIN CAPITAL LETTER Y WITH HOOK]
1435
 
          case '\u0232': // Ȳ  [LATIN CAPITAL LETTER Y WITH MACRON]
1436
 
          case '\u024E': // Ɏ  [LATIN CAPITAL LETTER Y WITH STROKE]
1437
 
          case '\u028F': // ʏ  [LATIN LETTER SMALL CAPITAL Y]
1438
 
          case '\u1E8E': // Ẏ  [LATIN CAPITAL LETTER Y WITH DOT ABOVE]
1439
 
          case '\u1EF2': // Ỳ  [LATIN CAPITAL LETTER Y WITH GRAVE]
1440
 
          case '\u1EF4': // Ỵ  [LATIN CAPITAL LETTER Y WITH DOT BELOW]
1441
 
          case '\u1EF6': // Ỷ  [LATIN CAPITAL LETTER Y WITH HOOK ABOVE]
1442
 
          case '\u1EF8': // Ỹ  [LATIN CAPITAL LETTER Y WITH TILDE]
1443
 
          case '\u1EFE': // Ỿ  [LATIN CAPITAL LETTER Y WITH LOOP]
1444
 
          case '\u24CE': // Ⓨ  [CIRCLED LATIN CAPITAL LETTER Y]
1445
 
          case '\uFF39': // Y  [FULLWIDTH LATIN CAPITAL LETTER Y]
1446
 
            output[outputPos++] = 'Y';
1447
 
            break;
1448
 
          case '\u00FD': // ý  [LATIN SMALL LETTER Y WITH ACUTE]
1449
 
          case '\u00FF': // ÿ  [LATIN SMALL LETTER Y WITH DIAERESIS]
1450
 
          case '\u0177': // ŷ  [LATIN SMALL LETTER Y WITH CIRCUMFLEX]
1451
 
          case '\u01B4': // ƴ  [LATIN SMALL LETTER Y WITH HOOK]
1452
 
          case '\u0233': // ȳ  [LATIN SMALL LETTER Y WITH MACRON]
1453
 
          case '\u024F': // ɏ  [LATIN SMALL LETTER Y WITH STROKE]
1454
 
          case '\u028E': // ʎ  [LATIN SMALL LETTER TURNED Y]
1455
 
          case '\u1E8F': // ẏ  [LATIN SMALL LETTER Y WITH DOT ABOVE]
1456
 
          case '\u1E99': // ẙ  [LATIN SMALL LETTER Y WITH RING ABOVE]
1457
 
          case '\u1EF3': // ỳ  [LATIN SMALL LETTER Y WITH GRAVE]
1458
 
          case '\u1EF5': // ỵ  [LATIN SMALL LETTER Y WITH DOT BELOW]
1459
 
          case '\u1EF7': // ỷ  [LATIN SMALL LETTER Y WITH HOOK ABOVE]
1460
 
          case '\u1EF9': // ỹ  [LATIN SMALL LETTER Y WITH TILDE]
1461
 
          case '\u1EFF': // ỿ  [LATIN SMALL LETTER Y WITH LOOP]
1462
 
          case '\u24E8': // ⓨ  [CIRCLED LATIN SMALL LETTER Y]
1463
 
          case '\uFF59': // y  [FULLWIDTH LATIN SMALL LETTER Y]
1464
 
            output[outputPos++] = 'y';
1465
 
            break;
1466
 
          case '\u24B4': // ⒴  [PARENTHESIZED LATIN SMALL LETTER Y]
1467
 
            output[outputPos++] = '(';
1468
 
            output[outputPos++] = 'y';
1469
 
            output[outputPos++] = ')';
1470
 
            break;
1471
 
          case '\u0179': // Ź  [LATIN CAPITAL LETTER Z WITH ACUTE]
1472
 
          case '\u017B': // Ż  [LATIN CAPITAL LETTER Z WITH DOT ABOVE]
1473
 
          case '\u017D': // Ž  [LATIN CAPITAL LETTER Z WITH CARON]
1474
 
          case '\u01B5': // Ƶ  [LATIN CAPITAL LETTER Z WITH STROKE]
1475
 
          case '\u021C': // Ȝ  http://en.wikipedia.org/wiki/Yogh  [LATIN CAPITAL LETTER YOGH]
1476
 
          case '\u0224': // Ȥ  [LATIN CAPITAL LETTER Z WITH HOOK]
1477
 
          case '\u1D22': // ᴢ  [LATIN LETTER SMALL CAPITAL Z]
1478
 
          case '\u1E90': // Ẑ  [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX]
1479
 
          case '\u1E92': // Ẓ  [LATIN CAPITAL LETTER Z WITH DOT BELOW]
1480
 
          case '\u1E94': // Ẕ  [LATIN CAPITAL LETTER Z WITH LINE BELOW]
1481
 
          case '\u24CF': // Ⓩ  [CIRCLED LATIN CAPITAL LETTER Z]
1482
 
          case '\u2C6B': // Ⱬ  [LATIN CAPITAL LETTER Z WITH DESCENDER]
1483
 
          case '\uA762': // Ꝣ  [LATIN CAPITAL LETTER VISIGOTHIC Z]
1484
 
          case '\uFF3A': // Z  [FULLWIDTH LATIN CAPITAL LETTER Z]
1485
 
            output[outputPos++] = 'Z';
1486
 
            break;
1487
 
          case '\u017A': // ź  [LATIN SMALL LETTER Z WITH ACUTE]
1488
 
          case '\u017C': // ż  [LATIN SMALL LETTER Z WITH DOT ABOVE]
1489
 
          case '\u017E': // ž  [LATIN SMALL LETTER Z WITH CARON]
1490
 
          case '\u01B6': // ƶ  [LATIN SMALL LETTER Z WITH STROKE]
1491
 
          case '\u021D': // ȝ  http://en.wikipedia.org/wiki/Yogh  [LATIN SMALL LETTER YOGH]
1492
 
          case '\u0225': // ȥ  [LATIN SMALL LETTER Z WITH HOOK]
1493
 
          case '\u0240': // ɀ  [LATIN SMALL LETTER Z WITH SWASH TAIL]
1494
 
          case '\u0290': // ʐ  [LATIN SMALL LETTER Z WITH RETROFLEX HOOK]
1495
 
          case '\u0291': // ʑ  [LATIN SMALL LETTER Z WITH CURL]
1496
 
          case '\u1D76': // ᵶ  [LATIN SMALL LETTER Z WITH MIDDLE TILDE]
1497
 
          case '\u1D8E': // ᶎ  [LATIN SMALL LETTER Z WITH PALATAL HOOK]
1498
 
          case '\u1E91': // ẑ  [LATIN SMALL LETTER Z WITH CIRCUMFLEX]
1499
 
          case '\u1E93': // ẓ  [LATIN SMALL LETTER Z WITH DOT BELOW]
1500
 
          case '\u1E95': // ẕ  [LATIN SMALL LETTER Z WITH LINE BELOW]
1501
 
          case '\u24E9': // ⓩ  [CIRCLED LATIN SMALL LETTER Z]
1502
 
          case '\u2C6C': // ⱬ  [LATIN SMALL LETTER Z WITH DESCENDER]
1503
 
          case '\uA763': // ꝣ  [LATIN SMALL LETTER VISIGOTHIC Z]
1504
 
          case '\uFF5A': // z  [FULLWIDTH LATIN SMALL LETTER Z]
1505
 
            output[outputPos++] = 'z';
1506
 
            break;
1507
 
          case '\u24B5': // ⒵  [PARENTHESIZED LATIN SMALL LETTER Z]
1508
 
            output[outputPos++] = '(';
1509
 
            output[outputPos++] = 'z';
1510
 
            output[outputPos++] = ')';
1511
 
            break;
1512
 
          case '\u2070': // ⁰  [SUPERSCRIPT ZERO]
1513
 
          case '\u2080': // ₀  [SUBSCRIPT ZERO]
1514
 
          case '\u24EA': // ⓪  [CIRCLED DIGIT ZERO]
1515
 
          case '\u24FF': // ⓿  [NEGATIVE CIRCLED DIGIT ZERO]
1516
 
          case '\uFF10': // 0  [FULLWIDTH DIGIT ZERO]
1517
 
            output[outputPos++] = '0';
1518
 
            break;
1519
 
          case '\u00B9': // ¹  [SUPERSCRIPT ONE]
1520
 
          case '\u2081': // ₁  [SUBSCRIPT ONE]
1521
 
          case '\u2460': // ①  [CIRCLED DIGIT ONE]
1522
 
          case '\u24F5': // ⓵  [DOUBLE CIRCLED DIGIT ONE]
1523
 
          case '\u2776': // ❶  [DINGBAT NEGATIVE CIRCLED DIGIT ONE]
1524
 
          case '\u2780': // ➀  [DINGBAT CIRCLED SANS-SERIF DIGIT ONE]
1525
 
          case '\u278A': // ➊  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE]
1526
 
          case '\uFF11': // 1  [FULLWIDTH DIGIT ONE]
1527
 
            output[outputPos++] = '1';
1528
 
            break;
1529
 
          case '\u2488': // ⒈  [DIGIT ONE FULL STOP]
1530
 
            output[outputPos++] = '1';
1531
 
            output[outputPos++] = '.';
1532
 
            break;
1533
 
          case '\u2474': // ⑴  [PARENTHESIZED DIGIT ONE]
1534
 
            output[outputPos++] = '(';
1535
 
            output[outputPos++] = '1';
1536
 
            output[outputPos++] = ')';
1537
 
            break;
1538
 
          case '\u00B2': // ²  [SUPERSCRIPT TWO]
1539
 
          case '\u2082': // ₂  [SUBSCRIPT TWO]
1540
 
          case '\u2461': // ②  [CIRCLED DIGIT TWO]
1541
 
          case '\u24F6': // ⓶  [DOUBLE CIRCLED DIGIT TWO]
1542
 
          case '\u2777': // ❷  [DINGBAT NEGATIVE CIRCLED DIGIT TWO]
1543
 
          case '\u2781': // ➁  [DINGBAT CIRCLED SANS-SERIF DIGIT TWO]
1544
 
          case '\u278B': // ➋  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO]
1545
 
          case '\uFF12': // 2  [FULLWIDTH DIGIT TWO]
1546
 
            output[outputPos++] = '2';
1547
 
            break;
1548
 
          case '\u2489': // ⒉  [DIGIT TWO FULL STOP]
1549
 
            output[outputPos++] = '2';
1550
 
            output[outputPos++] = '.';
1551
 
            break;
1552
 
          case '\u2475': // ⑵  [PARENTHESIZED DIGIT TWO]
1553
 
            output[outputPos++] = '(';
1554
 
            output[outputPos++] = '2';
1555
 
            output[outputPos++] = ')';
1556
 
            break;
1557
 
          case '\u00B3': // ³  [SUPERSCRIPT THREE]
1558
 
          case '\u2083': // ₃  [SUBSCRIPT THREE]
1559
 
          case '\u2462': // ③  [CIRCLED DIGIT THREE]
1560
 
          case '\u24F7': // ⓷  [DOUBLE CIRCLED DIGIT THREE]
1561
 
          case '\u2778': // ❸  [DINGBAT NEGATIVE CIRCLED DIGIT THREE]
1562
 
          case '\u2782': // ➂  [DINGBAT CIRCLED SANS-SERIF DIGIT THREE]
1563
 
          case '\u278C': // ➌  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE]
1564
 
          case '\uFF13': // 3  [FULLWIDTH DIGIT THREE]
1565
 
            output[outputPos++] = '3';
1566
 
            break;
1567
 
          case '\u248A': // ⒊  [DIGIT THREE FULL STOP]
1568
 
            output[outputPos++] = '3';
1569
 
            output[outputPos++] = '.';
1570
 
            break;
1571
 
          case '\u2476': // ⑶  [PARENTHESIZED DIGIT THREE]
1572
 
            output[outputPos++] = '(';
1573
 
            output[outputPos++] = '3';
1574
 
            output[outputPos++] = ')';
1575
 
            break;
1576
 
          case '\u2074': // ⁴  [SUPERSCRIPT FOUR]
1577
 
          case '\u2084': // ₄  [SUBSCRIPT FOUR]
1578
 
          case '\u2463': // ④  [CIRCLED DIGIT FOUR]
1579
 
          case '\u24F8': // ⓸  [DOUBLE CIRCLED DIGIT FOUR]
1580
 
          case '\u2779': // ❹  [DINGBAT NEGATIVE CIRCLED DIGIT FOUR]
1581
 
          case '\u2783': // ➃  [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR]
1582
 
          case '\u278D': // ➍  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR]
1583
 
          case '\uFF14': // 4  [FULLWIDTH DIGIT FOUR]
1584
 
            output[outputPos++] = '4';
1585
 
            break;
1586
 
          case '\u248B': // ⒋  [DIGIT FOUR FULL STOP]
1587
 
            output[outputPos++] = '4';
1588
 
            output[outputPos++] = '.';
1589
 
            break;
1590
 
          case '\u2477': // ⑷  [PARENTHESIZED DIGIT FOUR]
1591
 
            output[outputPos++] = '(';
1592
 
            output[outputPos++] = '4';
1593
 
            output[outputPos++] = ')';
1594
 
            break;
1595
 
          case '\u2075': // ⁵  [SUPERSCRIPT FIVE]
1596
 
          case '\u2085': // ₅  [SUBSCRIPT FIVE]
1597
 
          case '\u2464': // ⑤  [CIRCLED DIGIT FIVE]
1598
 
          case '\u24F9': // ⓹  [DOUBLE CIRCLED DIGIT FIVE]
1599
 
          case '\u277A': // ❺  [DINGBAT NEGATIVE CIRCLED DIGIT FIVE]
1600
 
          case '\u2784': // ➄  [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE]
1601
 
          case '\u278E': // ➎  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE]
1602
 
          case '\uFF15': // 5  [FULLWIDTH DIGIT FIVE]
1603
 
            output[outputPos++] = '5';
1604
 
            break;
1605
 
          case '\u248C': // ⒌  [DIGIT FIVE FULL STOP]
1606
 
            output[outputPos++] = '5';
1607
 
            output[outputPos++] = '.';
1608
 
            break;
1609
 
          case '\u2478': // ⑸  [PARENTHESIZED DIGIT FIVE]
1610
 
            output[outputPos++] = '(';
1611
 
            output[outputPos++] = '5';
1612
 
            output[outputPos++] = ')';
1613
 
            break;
1614
 
          case '\u2076': // ⁶  [SUPERSCRIPT SIX]
1615
 
          case '\u2086': // ₆  [SUBSCRIPT SIX]
1616
 
          case '\u2465': // ⑥  [CIRCLED DIGIT SIX]
1617
 
          case '\u24FA': // ⓺  [DOUBLE CIRCLED DIGIT SIX]
1618
 
          case '\u277B': // ❻  [DINGBAT NEGATIVE CIRCLED DIGIT SIX]
1619
 
          case '\u2785': // ➅  [DINGBAT CIRCLED SANS-SERIF DIGIT SIX]
1620
 
          case '\u278F': // ➏  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX]
1621
 
          case '\uFF16': // 6  [FULLWIDTH DIGIT SIX]
1622
 
            output[outputPos++] = '6';
1623
 
            break;
1624
 
          case '\u248D': // ⒍  [DIGIT SIX FULL STOP]
1625
 
            output[outputPos++] = '6';
1626
 
            output[outputPos++] = '.';
1627
 
            break;
1628
 
          case '\u2479': // ⑹  [PARENTHESIZED DIGIT SIX]
1629
 
            output[outputPos++] = '(';
1630
 
            output[outputPos++] = '6';
1631
 
            output[outputPos++] = ')';
1632
 
            break;
1633
 
          case '\u2077': // ⁷  [SUPERSCRIPT SEVEN]
1634
 
          case '\u2087': // ₇  [SUBSCRIPT SEVEN]
1635
 
          case '\u2466': // ⑦  [CIRCLED DIGIT SEVEN]
1636
 
          case '\u24FB': // ⓻  [DOUBLE CIRCLED DIGIT SEVEN]
1637
 
          case '\u277C': // ❼  [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN]
1638
 
          case '\u2786': // ➆  [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN]
1639
 
          case '\u2790': // ➐  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN]
1640
 
          case '\uFF17': // 7  [FULLWIDTH DIGIT SEVEN]
1641
 
            output[outputPos++] = '7';
1642
 
            break;
1643
 
          case '\u248E': // ⒎  [DIGIT SEVEN FULL STOP]
1644
 
            output[outputPos++] = '7';
1645
 
            output[outputPos++] = '.';
1646
 
            break;
1647
 
          case '\u247A': // ⑺  [PARENTHESIZED DIGIT SEVEN]
1648
 
            output[outputPos++] = '(';
1649
 
            output[outputPos++] = '7';
1650
 
            output[outputPos++] = ')';
1651
 
            break;
1652
 
          case '\u2078': // ⁸  [SUPERSCRIPT EIGHT]
1653
 
          case '\u2088': // ₈  [SUBSCRIPT EIGHT]
1654
 
          case '\u2467': // ⑧  [CIRCLED DIGIT EIGHT]
1655
 
          case '\u24FC': // ⓼  [DOUBLE CIRCLED DIGIT EIGHT]
1656
 
          case '\u277D': // ❽  [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT]
1657
 
          case '\u2787': // ➇  [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT]
1658
 
          case '\u2791': // ➑  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT]
1659
 
          case '\uFF18': // 8  [FULLWIDTH DIGIT EIGHT]
1660
 
            output[outputPos++] = '8';
1661
 
            break;
1662
 
          case '\u248F': // ⒏  [DIGIT EIGHT FULL STOP]
1663
 
            output[outputPos++] = '8';
1664
 
            output[outputPos++] = '.';
1665
 
            break;
1666
 
          case '\u247B': // ⑻  [PARENTHESIZED DIGIT EIGHT]
1667
 
            output[outputPos++] = '(';
1668
 
            output[outputPos++] = '8';
1669
 
            output[outputPos++] = ')';
1670
 
            break;
1671
 
          case '\u2079': // ⁹  [SUPERSCRIPT NINE]
1672
 
          case '\u2089': // ₉  [SUBSCRIPT NINE]
1673
 
          case '\u2468': // ⑨  [CIRCLED DIGIT NINE]
1674
 
          case '\u24FD': // ⓽  [DOUBLE CIRCLED DIGIT NINE]
1675
 
          case '\u277E': // ❾  [DINGBAT NEGATIVE CIRCLED DIGIT NINE]
1676
 
          case '\u2788': // ➈  [DINGBAT CIRCLED SANS-SERIF DIGIT NINE]
1677
 
          case '\u2792': // ➒  [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE]
1678
 
          case '\uFF19': // 9  [FULLWIDTH DIGIT NINE]
1679
 
            output[outputPos++] = '9';
1680
 
            break;
1681
 
          case '\u2490': // ⒐  [DIGIT NINE FULL STOP]
1682
 
            output[outputPos++] = '9';
1683
 
            output[outputPos++] = '.';
1684
 
            break;
1685
 
          case '\u247C': // ⑼  [PARENTHESIZED DIGIT NINE]
1686
 
            output[outputPos++] = '(';
1687
 
            output[outputPos++] = '9';
1688
 
            output[outputPos++] = ')';
1689
 
            break;
1690
 
          case '\u2469': // ⑩  [CIRCLED NUMBER TEN]
1691
 
          case '\u24FE': // ⓾  [DOUBLE CIRCLED NUMBER TEN]
1692
 
          case '\u277F': // ❿  [DINGBAT NEGATIVE CIRCLED NUMBER TEN]
1693
 
          case '\u2789': // ➉  [DINGBAT CIRCLED SANS-SERIF NUMBER TEN]
1694
 
          case '\u2793': // ➓  [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN]
1695
 
            output[outputPos++] = '1';
1696
 
            output[outputPos++] = '0';
1697
 
            break;
1698
 
          case '\u2491': // ⒑  [NUMBER TEN FULL STOP]
1699
 
            output[outputPos++] = '1';
1700
 
            output[outputPos++] = '0';
1701
 
            output[outputPos++] = '.';
1702
 
            break;
1703
 
          case '\u247D': // ⑽  [PARENTHESIZED NUMBER TEN]
1704
 
            output[outputPos++] = '(';
1705
 
            output[outputPos++] = '1';
1706
 
            output[outputPos++] = '0';
1707
 
            output[outputPos++] = ')';
1708
 
            break;
1709
 
          case '\u246A': // ⑪  [CIRCLED NUMBER ELEVEN]
1710
 
          case '\u24EB': // ⓫  [NEGATIVE CIRCLED NUMBER ELEVEN]
1711
 
            output[outputPos++] = '1';
1712
 
            output[outputPos++] = '1';
1713
 
            break;
1714
 
          case '\u2492': // ⒒  [NUMBER ELEVEN FULL STOP]
1715
 
            output[outputPos++] = '1';
1716
 
            output[outputPos++] = '1';
1717
 
            output[outputPos++] = '.';
1718
 
            break;
1719
 
          case '\u247E': // ⑾  [PARENTHESIZED NUMBER ELEVEN]
1720
 
            output[outputPos++] = '(';
1721
 
            output[outputPos++] = '1';
1722
 
            output[outputPos++] = '1';
1723
 
            output[outputPos++] = ')';
1724
 
            break;
1725
 
          case '\u246B': // ⑫  [CIRCLED NUMBER TWELVE]
1726
 
          case '\u24EC': // ⓬  [NEGATIVE CIRCLED NUMBER TWELVE]
1727
 
            output[outputPos++] = '1';
1728
 
            output[outputPos++] = '2';
1729
 
            break;
1730
 
          case '\u2493': // ⒓  [NUMBER TWELVE FULL STOP]
1731
 
            output[outputPos++] = '1';
1732
 
            output[outputPos++] = '2';
1733
 
            output[outputPos++] = '.';
1734
 
            break;
1735
 
          case '\u247F': // ⑿  [PARENTHESIZED NUMBER TWELVE]
1736
 
            output[outputPos++] = '(';
1737
 
            output[outputPos++] = '1';
1738
 
            output[outputPos++] = '2';
1739
 
            output[outputPos++] = ')';
1740
 
            break;
1741
 
          case '\u246C': // ⑬  [CIRCLED NUMBER THIRTEEN]
1742
 
          case '\u24ED': // ⓭  [NEGATIVE CIRCLED NUMBER THIRTEEN]
1743
 
            output[outputPos++] = '1';
1744
 
            output[outputPos++] = '3';
1745
 
            break;
1746
 
          case '\u2494': // ⒔  [NUMBER THIRTEEN FULL STOP]
1747
 
            output[outputPos++] = '1';
1748
 
            output[outputPos++] = '3';
1749
 
            output[outputPos++] = '.';
1750
 
            break;
1751
 
          case '\u2480': // ⒀  [PARENTHESIZED NUMBER THIRTEEN]
1752
 
            output[outputPos++] = '(';
1753
 
            output[outputPos++] = '1';
1754
 
            output[outputPos++] = '3';
1755
 
            output[outputPos++] = ')';
1756
 
            break;
1757
 
          case '\u246D': // ⑭  [CIRCLED NUMBER FOURTEEN]
1758
 
          case '\u24EE': // ⓮  [NEGATIVE CIRCLED NUMBER FOURTEEN]
1759
 
            output[outputPos++] = '1';
1760
 
            output[outputPos++] = '4';
1761
 
            break;
1762
 
          case '\u2495': // ⒕  [NUMBER FOURTEEN FULL STOP]
1763
 
            output[outputPos++] = '1';
1764
 
            output[outputPos++] = '4';
1765
 
            output[outputPos++] = '.';
1766
 
            break;
1767
 
          case '\u2481': // ⒁  [PARENTHESIZED NUMBER FOURTEEN]
1768
 
            output[outputPos++] = '(';
1769
 
            output[outputPos++] = '1';
1770
 
            output[outputPos++] = '4';
1771
 
            output[outputPos++] = ')';
1772
 
            break;
1773
 
          case '\u246E': // ⑮  [CIRCLED NUMBER FIFTEEN]
1774
 
          case '\u24EF': // ⓯  [NEGATIVE CIRCLED NUMBER FIFTEEN]
1775
 
            output[outputPos++] = '1';
1776
 
            output[outputPos++] = '5';
1777
 
            break;
1778
 
          case '\u2496': // ⒖  [NUMBER FIFTEEN FULL STOP]
1779
 
            output[outputPos++] = '1';
1780
 
            output[outputPos++] = '5';
1781
 
            output[outputPos++] = '.';
1782
 
            break;
1783
 
          case '\u2482': // ⒂  [PARENTHESIZED NUMBER FIFTEEN]
1784
 
            output[outputPos++] = '(';
1785
 
            output[outputPos++] = '1';
1786
 
            output[outputPos++] = '5';
1787
 
            output[outputPos++] = ')';
1788
 
            break;
1789
 
          case '\u246F': // ⑯  [CIRCLED NUMBER SIXTEEN]
1790
 
          case '\u24F0': // ⓰  [NEGATIVE CIRCLED NUMBER SIXTEEN]
1791
 
            output[outputPos++] = '1';
1792
 
            output[outputPos++] = '6';
1793
 
            break;
1794
 
          case '\u2497': // ⒗  [NUMBER SIXTEEN FULL STOP]
1795
 
            output[outputPos++] = '1';
1796
 
            output[outputPos++] = '6';
1797
 
            output[outputPos++] = '.';
1798
 
            break;
1799
 
          case '\u2483': // ⒃  [PARENTHESIZED NUMBER SIXTEEN]
1800
 
            output[outputPos++] = '(';
1801
 
            output[outputPos++] = '1';
1802
 
            output[outputPos++] = '6';
1803
 
            output[outputPos++] = ')';
1804
 
            break;
1805
 
          case '\u2470': // ⑰  [CIRCLED NUMBER SEVENTEEN]
1806
 
          case '\u24F1': // ⓱  [NEGATIVE CIRCLED NUMBER SEVENTEEN]
1807
 
            output[outputPos++] = '1';
1808
 
            output[outputPos++] = '7';
1809
 
            break;
1810
 
          case '\u2498': // ⒘  [NUMBER SEVENTEEN FULL STOP]
1811
 
            output[outputPos++] = '1';
1812
 
            output[outputPos++] = '7';
1813
 
            output[outputPos++] = '.';
1814
 
            break;
1815
 
          case '\u2484': // ⒄  [PARENTHESIZED NUMBER SEVENTEEN]
1816
 
            output[outputPos++] = '(';
1817
 
            output[outputPos++] = '1';
1818
 
            output[outputPos++] = '7';
1819
 
            output[outputPos++] = ')';
1820
 
            break;
1821
 
          case '\u2471': // ⑱  [CIRCLED NUMBER EIGHTEEN]
1822
 
          case '\u24F2': // ⓲  [NEGATIVE CIRCLED NUMBER EIGHTEEN]
1823
 
            output[outputPos++] = '1';
1824
 
            output[outputPos++] = '8';
1825
 
            break;
1826
 
          case '\u2499': // ⒙  [NUMBER EIGHTEEN FULL STOP]
1827
 
            output[outputPos++] = '1';
1828
 
            output[outputPos++] = '8';
1829
 
            output[outputPos++] = '.';
1830
 
            break;
1831
 
          case '\u2485': // ⒅  [PARENTHESIZED NUMBER EIGHTEEN]
1832
 
            output[outputPos++] = '(';
1833
 
            output[outputPos++] = '1';
1834
 
            output[outputPos++] = '8';
1835
 
            output[outputPos++] = ')';
1836
 
            break;
1837
 
          case '\u2472': // ⑲  [CIRCLED NUMBER NINETEEN]
1838
 
          case '\u24F3': // ⓳  [NEGATIVE CIRCLED NUMBER NINETEEN]
1839
 
            output[outputPos++] = '1';
1840
 
            output[outputPos++] = '9';
1841
 
            break;
1842
 
          case '\u249A': // ⒚  [NUMBER NINETEEN FULL STOP]
1843
 
            output[outputPos++] = '1';
1844
 
            output[outputPos++] = '9';
1845
 
            output[outputPos++] = '.';
1846
 
            break;
1847
 
          case '\u2486': // ⒆  [PARENTHESIZED NUMBER NINETEEN]
1848
 
            output[outputPos++] = '(';
1849
 
            output[outputPos++] = '1';
1850
 
            output[outputPos++] = '9';
1851
 
            output[outputPos++] = ')';
1852
 
            break;
1853
 
          case '\u2473': // ⑳  [CIRCLED NUMBER TWENTY]
1854
 
          case '\u24F4': // ⓴  [NEGATIVE CIRCLED NUMBER TWENTY]
1855
 
            output[outputPos++] = '2';
1856
 
            output[outputPos++] = '0';
1857
 
            break;
1858
 
          case '\u249B': // ⒛  [NUMBER TWENTY FULL STOP]
1859
 
            output[outputPos++] = '2';
1860
 
            output[outputPos++] = '0';
1861
 
            output[outputPos++] = '.';
1862
 
            break;
1863
 
          case '\u2487': // ⒇  [PARENTHESIZED NUMBER TWENTY]
1864
 
            output[outputPos++] = '(';
1865
 
            output[outputPos++] = '2';
1866
 
            output[outputPos++] = '0';
1867
 
            output[outputPos++] = ')';
1868
 
            break;
1869
 
          case '\u00AB': // «  [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]
1870
 
          case '\u00BB': // »  [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]
1871
 
          case '\u201C': // “  [LEFT DOUBLE QUOTATION MARK]
1872
 
          case '\u201D': // ”  [RIGHT DOUBLE QUOTATION MARK]
1873
 
          case '\u201E': // „  [DOUBLE LOW-9 QUOTATION MARK]
1874
 
          case '\u2033': // ″  [DOUBLE PRIME]
1875
 
          case '\u2036': // ‶  [REVERSED DOUBLE PRIME]
1876
 
          case '\u275D': // ❝  [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT]
1877
 
          case '\u275E': // ❞  [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT]
1878
 
          case '\u276E': // ❮  [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT]
1879
 
          case '\u276F': // ❯  [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT]
1880
 
          case '\uFF02': // "  [FULLWIDTH QUOTATION MARK]
1881
 
            output[outputPos++] = '"';
1882
 
            break;
1883
 
          case '\u2018': // ‘  [LEFT SINGLE QUOTATION MARK]
1884
 
          case '\u2019': // ’  [RIGHT SINGLE QUOTATION MARK]
1885
 
          case '\u201A': // ‚  [SINGLE LOW-9 QUOTATION MARK]
1886
 
          case '\u201B': // ‛  [SINGLE HIGH-REVERSED-9 QUOTATION MARK]
1887
 
          case '\u2032': // ′  [PRIME]
1888
 
          case '\u2035': // ‵  [REVERSED PRIME]
1889
 
          case '\u2039': // ‹  [SINGLE LEFT-POINTING ANGLE QUOTATION MARK]
1890
 
          case '\u203A': // ›  [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK]
1891
 
          case '\u275B': // ❛  [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT]
1892
 
          case '\u275C': // ❜  [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT]
1893
 
          case '\uFF07': // '  [FULLWIDTH APOSTROPHE]
1894
 
            output[outputPos++] = '\'';
1895
 
            break;
1896
 
          case '\u2010': // ‐  [HYPHEN]
1897
 
          case '\u2011': // ‑  [NON-BREAKING HYPHEN]
1898
 
          case '\u2012': // ‒  [FIGURE DASH]
1899
 
          case '\u2013': // –  [EN DASH]
1900
 
          case '\u2014': // —  [EM DASH]
1901
 
          case '\u207B': // ⁻  [SUPERSCRIPT MINUS]
1902
 
          case '\u208B': // ₋  [SUBSCRIPT MINUS]
1903
 
          case '\uFF0D': // -  [FULLWIDTH HYPHEN-MINUS]
1904
 
            output[outputPos++] = '-';
1905
 
            break;
1906
 
          case '\u2045': // ⁅  [LEFT SQUARE BRACKET WITH QUILL]
1907
 
          case '\u2772': // ❲  [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT]
1908
 
          case '\uFF3B': // [  [FULLWIDTH LEFT SQUARE BRACKET]
1909
 
            output[outputPos++] = '[';
1910
 
            break;
1911
 
          case '\u2046': // ⁆  [RIGHT SQUARE BRACKET WITH QUILL]
1912
 
          case '\u2773': // ❳  [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT]
1913
 
          case '\uFF3D': // ]  [FULLWIDTH RIGHT SQUARE BRACKET]
1914
 
            output[outputPos++] = ']';
1915
 
            break;
1916
 
          case '\u207D': // ⁽  [SUPERSCRIPT LEFT PARENTHESIS]
1917
 
          case '\u208D': // ₍  [SUBSCRIPT LEFT PARENTHESIS]
1918
 
          case '\u2768': // ❨  [MEDIUM LEFT PARENTHESIS ORNAMENT]
1919
 
          case '\u276A': // ❪  [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT]
1920
 
          case '\uFF08': // (  [FULLWIDTH LEFT PARENTHESIS]
1921
 
            output[outputPos++] = '(';
1922
 
            break;
1923
 
          case '\u2E28': // ⸨  [LEFT DOUBLE PARENTHESIS]
1924
 
            output[outputPos++] = '(';
1925
 
            output[outputPos++] = '(';
1926
 
            break;
1927
 
          case '\u207E': // ⁾  [SUPERSCRIPT RIGHT PARENTHESIS]
1928
 
          case '\u208E': // ₎  [SUBSCRIPT RIGHT PARENTHESIS]
1929
 
          case '\u2769': // ❩  [MEDIUM RIGHT PARENTHESIS ORNAMENT]
1930
 
          case '\u276B': // ❫  [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT]
1931
 
          case '\uFF09': // )  [FULLWIDTH RIGHT PARENTHESIS]
1932
 
            output[outputPos++] = ')';
1933
 
            break;
1934
 
          case '\u2E29': // ⸩  [RIGHT DOUBLE PARENTHESIS]
1935
 
            output[outputPos++] = ')';
1936
 
            output[outputPos++] = ')';
1937
 
            break;
1938
 
          case '\u276C': // ❬  [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT]
1939
 
          case '\u2770': // ❰  [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT]
1940
 
          case '\uFF1C': // <  [FULLWIDTH LESS-THAN SIGN]
1941
 
            output[outputPos++] = '<';
1942
 
            break;
1943
 
          case '\u276D': // ❭  [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT]
1944
 
          case '\u2771': // ❱  [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT]
1945
 
          case '\uFF1E': // >  [FULLWIDTH GREATER-THAN SIGN]
1946
 
            output[outputPos++] = '>';
1947
 
            break;
1948
 
          case '\u2774': // ❴  [MEDIUM LEFT CURLY BRACKET ORNAMENT]
1949
 
          case '\uFF5B': // {  [FULLWIDTH LEFT CURLY BRACKET]
1950
 
            output[outputPos++] = '{';
1951
 
            break;
1952
 
          case '\u2775': // ❵  [MEDIUM RIGHT CURLY BRACKET ORNAMENT]
1953
 
          case '\uFF5D': // }  [FULLWIDTH RIGHT CURLY BRACKET]
1954
 
            output[outputPos++] = '}';
1955
 
            break;
1956
 
          case '\u207A': // ⁺  [SUPERSCRIPT PLUS SIGN]
1957
 
          case '\u208A': // ₊  [SUBSCRIPT PLUS SIGN]
1958
 
          case '\uFF0B': // +  [FULLWIDTH PLUS SIGN]
1959
 
            output[outputPos++] = '+';
1960
 
            break;
1961
 
          case '\u207C': // ⁼  [SUPERSCRIPT EQUALS SIGN]
1962
 
          case '\u208C': // ₌  [SUBSCRIPT EQUALS SIGN]
1963
 
          case '\uFF1D': // =  [FULLWIDTH EQUALS SIGN]
1964
 
            output[outputPos++] = '=';
1965
 
            break;
1966
 
          case '\uFF01': // !  [FULLWIDTH EXCLAMATION MARK]
1967
 
            output[outputPos++] = '!';
1968
 
            break;
1969
 
          case '\u203C': // ‼  [DOUBLE EXCLAMATION MARK]
1970
 
            output[outputPos++] = '!';
1971
 
            output[outputPos++] = '!';
1972
 
            break;
1973
 
          case '\u2049': // ⁉  [EXCLAMATION QUESTION MARK]
1974
 
            output[outputPos++] = '!';
1975
 
            output[outputPos++] = '?';
1976
 
            break;
1977
 
          case '\uFF03': // #  [FULLWIDTH NUMBER SIGN]
1978
 
            output[outputPos++] = '#';
1979
 
            break;
1980
 
          case '\uFF04': // $  [FULLWIDTH DOLLAR SIGN]
1981
 
            output[outputPos++] = '$';
1982
 
            break;
1983
 
          case '\u2052': // ⁒  [COMMERCIAL MINUS SIGN]
1984
 
          case '\uFF05': // %  [FULLWIDTH PERCENT SIGN]
1985
 
            output[outputPos++] = '%';
1986
 
            break;
1987
 
          case '\uFF06': // &  [FULLWIDTH AMPERSAND]
1988
 
            output[outputPos++] = '&';
1989
 
            break;
1990
 
          case '\u204E': // ⁎  [LOW ASTERISK]
1991
 
          case '\uFF0A': // *  [FULLWIDTH ASTERISK]
1992
 
            output[outputPos++] = '*';
1993
 
            break;
1994
 
          case '\uFF0C': // ,  [FULLWIDTH COMMA]
1995
 
            output[outputPos++] = ',';
1996
 
            break;
1997
 
          case '\uFF0E': // .  [FULLWIDTH FULL STOP]
1998
 
            output[outputPos++] = '.';
1999
 
            break;
2000
 
          case '\u2044': // ⁄  [FRACTION SLASH]
2001
 
          case '\uFF0F': // /  [FULLWIDTH SOLIDUS]
2002
 
            output[outputPos++] = '/';
2003
 
            break;
2004
 
          case '\uFF1A': // :  [FULLWIDTH COLON]
2005
 
            output[outputPos++] = ':';
2006
 
            break;
2007
 
          case '\u204F': // ⁏  [REVERSED SEMICOLON]
2008
 
          case '\uFF1B': // ;  [FULLWIDTH SEMICOLON]
2009
 
            output[outputPos++] = ';';
2010
 
            break;
2011
 
          case '\uFF1F': // ?  [FULLWIDTH QUESTION MARK]
2012
 
            output[outputPos++] = '?';
2013
 
            break;
2014
 
          case '\u2047': // ⁇  [DOUBLE QUESTION MARK]
2015
 
            output[outputPos++] = '?';
2016
 
            output[outputPos++] = '?';
2017
 
            break;
2018
 
          case '\u2048': // ⁈  [QUESTION EXCLAMATION MARK]
2019
 
            output[outputPos++] = '?';
2020
 
            output[outputPos++] = '!';
2021
 
            break;
2022
 
          case '\uFF20': // @  [FULLWIDTH COMMERCIAL AT]
2023
 
            output[outputPos++] = '@';
2024
 
            break;
2025
 
          case '\uFF3C': // \  [FULLWIDTH REVERSE SOLIDUS]
2026
 
            output[outputPos++] = '\\';
2027
 
            break;
2028
 
          case '\u2038': // ‸  [CARET]
2029
 
          case '\uFF3E': // ^  [FULLWIDTH CIRCUMFLEX ACCENT]
2030
 
            output[outputPos++] = '^';
2031
 
            break;
2032
 
          case '\uFF3F': // _  [FULLWIDTH LOW LINE]
2033
 
            output[outputPos++] = '_';
2034
 
            break;
2035
 
          case '\u2053': // ⁓  [SWUNG DASH]
2036
 
          case '\uFF5E': // ~  [FULLWIDTH TILDE]
2037
 
            output[outputPos++] = '~';
2038
 
            break;
2039
 
          default:
2040
 
            output[outputPos++] = c;
2041
 
            break;
2042
 
        }
2043
 
      }
2044
 
    }
2045
 
    return outputPos;
2046
 
  }
2047
 
}