| AnselInputStreamReader.java |
1 /****************************************************************************
2 * This demo file is part of yFiles for Java 2.14.
3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28,
4 * 72070 Tuebingen, Germany. All rights reserved.
5 *
6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution
7 * of demo files in source code or binary form, with or without
8 * modification, is not permitted.
9 *
10 * Owners of a valid software license for a yFiles for Java version that this
11 * demo is shipped with are allowed to use the demo source code as basis
12 * for their own yFiles for Java powered applications. Use of such programs is
13 * governed by the rights and conditions as set out in the yFiles for Java
14 * license agreement.
15 *
16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 ***************************************************************************/
28 package demo.layout.genealogy.iohandler;
29
30 import java.io.InputStreamReader;
31 import java.io.InputStream;
32 import java.io.IOException;
33
34 public class AnselInputStreamReader extends InputStreamReader {
35 private InputStream input;
36 private int pending;
37
38 public AnselInputStreamReader(InputStream in)
39 throws IOException {
40 super(in);
41 input = in;
42 pending = input.read(); // we read one character ahead to cope
43 // with non-spacing diacriticals
44 }
45
46 /*
47 * Return one UNICODE character
48 */
49
50 public int read() throws IOException
51 {
52 int b = pending;
53 if (b<0) return b; // return EOF unchanged
54 pending = input.read();
55 if (b<128) return b; // return ASCII characters unchanged
56
57 // try to match two ansel chars if we can
58 if (pending>0 && b>=0xE0 && b<=0xFF) {
59 int u = convert2(b*256 + pending);
60 if (u>0) {
61 pending = input.read();
62 return u;
63 }
64 }
65 // else match one char
66 return(convert1(b));
67 }
68
69 /*
70 * Fill a supplied buffer with UNICODE characters
71 */
72
73 public int read(char[] cbuf, int off, int len)
74 throws IOException
75 {
76 if (pending<0) return -1; // have already hit EOF
77 for (int i=off; i<off+len; i++) {
78 int c = read();
79 if (c<0) return i-off;
80 cbuf[off+i] = (char)c;
81 }
82 return len;
83 }
84
85 /*
86 * Determine the character code in use
87 */
88
89 public String getEncoding() {
90 return "ANSEL";
91 }
92
93 /*
94 * Conversion table for ANSEL characters coded in one byte
95 */
96
97 private int convert1( int ansel )
98 {
99 switch(ansel) {
100 case 0x8D: return 0x200D; // zero width joiner
101 case 0x8E: return 0x200C; // zero width non-joiner
102 case 0xA1: return 0x0141; // capital L with stroke
103 case 0xA2: return 0x00D8; // capital O with oblique stroke
104 // case 0xA3: return 0x0110; capital D with stroke
105 case 0xA3: return 0x00D0; // capital icelandic letter Eth
106 case 0xA4: return 0x00DE; // capital Icelandic letter Thorn
107 case 0xA5: return 0x00C6; // capital diphthong A with E
108 case 0xA6: return 0x0152; // capital ligature OE
109 case 0xA7: return 0x02B9; // modified letter prime
110 case 0xA8: return 0x00B7; // middle dot
111 case 0xA9: return 0x266D; // music flat sign
112 case 0xAA: return 0x00AE; // registered trade mark sign
113 case 0xAB: return 0x00B1; // plus-minus sign
114 case 0xAC: return 0x01A0; // capital O with horn
115 case 0xAD: return 0x01AF; // capital U with horn
116 case 0xAE: return 0x02BE; // modifier letter right half ring
117 case 0xB0: return 0x02BF; // modifier letter left half ring
118 case 0xB1: return 0x0142; // small l with stroke
119 case 0xB2: return 0x00F8; // small o with oblique stroke
120 case 0xB3: return 0x0111; // small D with stroke
121 case 0xB4: return 0x00FE; // small Icelandic letter Thorn
122 case 0xB5: return 0x00E6; // small diphthong a with e
123 case 0xB6: return 0x0153; // small ligature OE
124 case 0xB7: return 0x02BA; // modified letter double prime
125 case 0xB8: return 0x0131; // small dotless i
126 case 0xB9: return 0x00A3; // pound sign
127 case 0xBA: return 0x00F0; // small Icelandic letter Eth
128 case 0xBC: return 0x01A1; // small o with horn
129 case 0xBD: return 0x01B0; // small u with horn
130 case 0xC0: return 0x00B0; // degree sign, ring above
131 case 0xC1: return 0x2113; // script small l
132 case 0xC2: return 0x2117; // sound recording copyright
133 case 0xC3: return 0x00A9; // copyright sign
134 case 0xC4: return 0x266F; // music sharp sign
135 case 0xC5: return 0x00BF; // inverted question mark
136 case 0xC6: return 0x00A1; // inverted exclamation mark
137 case 0xCF: return 0x00DF; // small German letter sharp s
138 case 0xE0: return 0x0309; // hook above
139 case 0xE1: return 0x0300; // grave accent
140 case 0xE2: return 0x0301; // acute accent
141 case 0xE3: return 0x0302; // circumflex accent
142 case 0xE4: return 0x0303; // tilde
143 case 0xE5: return 0x0304; // combining macron
144 case 0xE6: return 0x0306; // breve
145 case 0xE7: return 0x0307; // dot above
146 case 0xE9: return 0x030C; // caron
147 case 0xEA: return 0x030A; // ring above
148 case 0xEB: return 0xFE20; // ligature left half
149 case 0xEC: return 0xFE21; // ligature right half
150 case 0xED: return 0x0315; // comma above right
151 case 0xEE: return 0x030B; // double acute accent
152 case 0xEF: return 0x0310; // candrabindu
153 case 0xF0: return 0x0327; // combining cedilla
154 case 0xF1: return 0x0328; // ogonek
155 case 0xF2: return 0x0323; // dot below
156 case 0xF3: return 0x0324; // diaeresis below
157 case 0xF4: return 0x0325; // ring below
158 case 0xF5: return 0x0333; // double low line
159 case 0xF6: return 0x0332; // low line (= line below?)
160 case 0xF7: return 0x0326; // comma below
161 case 0xF8: return 0x031C; // combining half ring below
162 case 0xF9: return 0x032E; // breve below
163 case 0xFA: return 0xFE22; // double tilde left half
164 case 0xFB: return 0xFE23; // double tilde right half
165 case 0xFE: return 0x0313; // comma above
166
167 default: return 0xFFFD; // if no match, use Unicode REPLACEMENT CHARACTER
168 } //end switch
169 }
170
171 /*
172 * Conversion table for ANSEL characters coded in two bytes
173 */
174
175 private int convert2( int ansel )
176 {
177 switch(ansel) {
178 case 0xE041: return 0x1EA2; // capital a with hook above
179 case 0xE045: return 0x1EBA; // capital e with hook above
180 case 0xE049: return 0x1EC8; // capital i with hook above
181 case 0xE04F: return 0x1ECE; // capital o with hook above
182 case 0xE055: return 0x1EE6; // capital u with hook above
183 case 0xE059: return 0x1EF6; // capital y with hook above
184 case 0xE061: return 0x1EA3; // small a with hook above
185 case 0xE065: return 0x1EBB; // small e with hook above
186 case 0xE069: return 0x1EC9; // small i with hook above
187 case 0xE06F: return 0x1ECF; // small o with hook above
188 case 0xE075: return 0x1EE7; // small u with hook above
189 case 0xE079: return 0x1EF7; // small y with hook above
190 case 0xE141: return 0x00C0; // capital A with grave accent
191 case 0xE145: return 0x00C8; // capital E with grave accent
192 case 0xE149: return 0x00CC; // capital I with grave accent
193 case 0xE14F: return 0x00D2; // capital O with grave accent
194 case 0xE155: return 0x00D9; // capital U with grave accent
195 case 0xE157: return 0x1E80; // capital w with grave
196 case 0xE159: return 0x1EF2; // capital y with grave
197 case 0xE161: return 0x00E0; // small a with grave accent
198 case 0xE165: return 0x00E8; // small e with grave accent
199 case 0xE169: return 0x00EC; // small i with grave accent
200 case 0xE16F: return 0x00F2; // small o with grave accent
201 case 0xE175: return 0x00F9; // small u with grave accent
202 case 0xE177: return 0x1E81; // small w with grave
203 case 0xE179: return 0x1EF3; // small y with grave
204 case 0xE241: return 0x00C1; // capital A with acute accent
205 case 0xE243: return 0x0106; // capital C with acute accent
206 case 0xE245: return 0x00C9; // capital E with acute accent
207 case 0xE247: return 0x01F4; // capital g with acute
208 case 0xE249: return 0x00CD; // capital I with acute accent
209 case 0xE24B: return 0x1E30; // capital k with acute
210 case 0xE24C: return 0x0139; // capital L with acute accent
211 case 0xE24D: return 0x1E3E; // capital m with acute
212 case 0xE24E: return 0x0143; // capital N with acute accent
213 case 0xE24F: return 0x00D3; // capital O with acute accent
214 case 0xE250: return 0x1E54; // capital p with acute
215 case 0xE252: return 0x0154; // capital R with acute accent
216 case 0xE253: return 0x015A; // capital S with acute accent
217 case 0xE255: return 0x00DA; // capital U with acute accent
218 case 0xE257: return 0x1E82; // capital w with acute
219 case 0xE259: return 0x00DD; // capital Y with acute accent
220 case 0xE25A: return 0x0179; // capital Z with acute accent
221 case 0xE261: return 0x00E1; // small a with acute accent
222 case 0xE263: return 0x0107; // small c with acute accent
223 case 0xE265: return 0x00E9; // small e with acute accent
224 case 0xE267: return 0x01F5; // small g with acute
225 case 0xE269: return 0x00ED; // small i with acute accent
226 case 0xE26B: return 0x1E31; // small k with acute
227 case 0xE26C: return 0x013A; // small l with acute accent
228 case 0xE26D: return 0x1E3F; // small m with acute
229 case 0xE26E: return 0x0144; // small n with acute accent
230 case 0xE26F: return 0x00F3; // small o with acute accent
231 case 0xE270: return 0x1E55; // small p with acute
232 case 0xE272: return 0x0155; // small r with acute accent
233 case 0xE273: return 0x015B; // small s with acute accent
234 case 0xE275: return 0x00FA; // small u with acute accent
235 case 0xE277: return 0x1E83; // small w with acute
236 case 0xE279: return 0x00FD; // small y with acute accent
237 case 0xE27A: return 0x017A; // small z with acute accent
238 case 0xE2A5: return 0x01FC; // capital ae with acute
239 case 0xE2B5: return 0x01FD; // small ae with acute
240 case 0xE341: return 0x00C2; // capital A with circumflex accent
241 case 0xE343: return 0x0108; // capital c with circumflex
242 case 0xE345: return 0x00CA; // capital E with circumflex accent
243 case 0xE347: return 0x011C; // capital g with circumflex
244 case 0xE348: return 0x0124; // capital h with circumflex
245 case 0xE349: return 0x00CE; // capital I with circumflex accent
246 case 0xE34A: return 0x0134; // capital j with circumflex
247 case 0xE34F: return 0x00D4; // capital O with circumflex accent
248 case 0xE353: return 0x015C; // capital s with circumflex
249 case 0xE355: return 0x00DB; // capital U with circumflex
250 case 0xE357: return 0x0174; // capital w with circumflex
251 case 0xE359: return 0x0176; // capital y with circumflex
252 case 0xE35A: return 0x1E90; // capital z with circumflex
253 case 0xE361: return 0x00E2; // small a with circumflex accent
254 case 0xE363: return 0x0109; // small c with circumflex
255 case 0xE365: return 0x00EA; // small e with circumflex accent
256 case 0xE367: return 0x011D; // small g with circumflex
257 case 0xE368: return 0x0125; // small h with circumflex
258 case 0xE369: return 0x00EE; // small i with circumflex accent
259 case 0xE36A: return 0x0135; // small j with circumflex
260 case 0xE36F: return 0x00F4; // small o with circumflex accent
261 case 0xE373: return 0x015D; // small s with circumflex
262 case 0xE375: return 0x00FB; // small u with circumflex
263 case 0xE377: return 0x0175; // small w with circumflex
264 case 0xE379: return 0x0177; // small y with circumflex
265 case 0xE37A: return 0x1E91; // small z with circumflex
266 case 0xE441: return 0x00C3; // capital A with tilde
267 case 0xE445: return 0x1EBC; // capital e with tilde
268 case 0xE449: return 0x0128; // capital i with tilde
269 case 0xE44E: return 0x00D1; // capital N with tilde
270 case 0xE44F: return 0x00D5; // capital O with tilde
271 case 0xE455: return 0x0168; // capital u with tilde
272 case 0xE456: return 0x1E7C; // capital v with tilde
273 case 0xE459: return 0x1EF8; // capital y with tilde
274 case 0xE461: return 0x00E3; // small a with tilde
275 case 0xE465: return 0x1EBD; // small e with tilde
276 case 0xE469: return 0x0129; // small i with tilde
277 case 0xE46E: return 0x00F1; // small n with tilde
278 case 0xE46F: return 0x00F5; // small o with tilde
279 case 0xE475: return 0x0169; // small u with tilde
280 case 0xE476: return 0x1E7D; // small v with tilde
281 case 0xE479: return 0x1EF9; // small y with tilde
282 case 0xE541: return 0x0100; // capital a with macron
283 case 0xE545: return 0x0112; // capital e with macron
284 case 0xE547: return 0x1E20; // capital g with macron
285 case 0xE549: return 0x012A; // capital i with macron
286 case 0xE54F: return 0x014C; // capital o with macron
287 case 0xE555: return 0x016A; // capital u with macron
288 case 0xE561: return 0x0101; // small a with macron
289 case 0xE565: return 0x0113; // small e with macron
290 case 0xE567: return 0x1E21; // small g with macron
291 case 0xE569: return 0x012B; // small i with macron
292 case 0xE56F: return 0x014D; // small o with macron
293 case 0xE575: return 0x016B; // small u with macron
294 case 0xE5A5: return 0x01E2; // capital ae with macron
295 case 0xE5B5: return 0x01E3; // small ae with macron
296 case 0xE641: return 0x0102; // capital A with breve
297 case 0xE645: return 0x0114; // capital e with breve
298 case 0xE647: return 0x011E; // capital g with breve
299 case 0xE649: return 0x012C; // capital i with breve
300 case 0xE64F: return 0x014E; // capital o with breve
301 case 0xE655: return 0x016C; // capital u with breve
302 case 0xE661: return 0x0103; // small a with breve
303 case 0xE665: return 0x0115; // small e with breve
304 case 0xE667: return 0x011F; // small g with breve
305 case 0xE669: return 0x012D; // small i with breve
306 case 0xE66F: return 0x014F; // small o with breve
307 case 0xE675: return 0x016D; // small u with breve
308 case 0xE742: return 0x1E02; // capital b with dot above
309 case 0xE743: return 0x010A; // capital c with dot above
310 case 0xE744: return 0x1E0A; // capital d with dot above
311 case 0xE745: return 0x0116; // capital e with dot above
312 case 0xE746: return 0x1E1E; // capital f with dot above
313 case 0xE747: return 0x0120; // capital g with dot above
314 case 0xE748: return 0x1E22; // capital h with dot above
315 case 0xE749: return 0x0130; // capital i with dot above
316 case 0xE74D: return 0x1E40; // capital m with dot above
317 case 0xE74E: return 0x1E44; // capital n with dot above
318 case 0xE750: return 0x1E56; // capital p with dot above
319 case 0xE752: return 0x1E58; // capital r with dot above
320 case 0xE753: return 0x1E60; // capital s with dot above
321 case 0xE754: return 0x1E6A; // capital t with dot above
322 case 0xE757: return 0x1E86; // capital w with dot above
323 case 0xE758: return 0x1E8A; // capital x with dot above
324 case 0xE759: return 0x1E8E; // capital y with dot above
325 case 0xE75A: return 0x017B; // capital Z with dot above
326 case 0xE762: return 0x1E03; // small b with dot above
327 case 0xE763: return 0x010B; // small c with dot above
328 case 0xE764: return 0x1E0B; // small d with dot above
329 case 0xE765: return 0x0117; // small e with dot above
330 case 0xE766: return 0x1E1F; // small f with dot above
331 case 0xE767: return 0x0121; // small g with dot above
332 case 0xE768: return 0x1E23; // small h with dot above
333 case 0xE76D: return 0x1E41; // small m with dot above
334 case 0xE76E: return 0x1E45; // small n with dot above
335 case 0xE770: return 0x1E57; // small p with dot above
336 case 0xE772: return 0x1E59; // small r with dot above
337 case 0xE773: return 0x1E61; // small s with dot above
338 case 0xE774: return 0x1E6B; // small t with dot above
339 case 0xE777: return 0x1E87; // small w with dot above
340 case 0xE778: return 0x1E8B; // small x with dot above
341 case 0xE779: return 0x1E8F; // small y with dot above
342 case 0xE77A: return 0x017C; // small z with dot above
343 case 0xE841: return 0x00C4; // capital A with diaeresis
344 case 0xE845: return 0x00CB; // capital E with diaeresis
345 case 0xE848: return 0x1E26; // capital h with diaeresis
346 case 0xE849: return 0x00CF; // capital I with diaeresis
347 case 0xE84F: return 0x00D6; // capital O with diaeresis
348 case 0xE855: return 0x00DC; // capital U with diaeresis
349 case 0xE857: return 0x1E84; // capital w with diaeresis
350 case 0xE858: return 0x1E8C; // capital x with diaeresis
351 case 0xE859: return 0x0178; // capital y with diaeresis
352 case 0xE861: return 0x00E4; // small a with diaeresis
353 case 0xE865: return 0x00EB; // small e with diaeresis
354 case 0xE868: return 0x1E27; // small h with diaeresis
355 case 0xE869: return 0x00EF; // small i with diaeresis
356 case 0xE86F: return 0x00F6; // small o with diaeresis
357 case 0xE874: return 0x1E97; // small t with diaeresis
358 case 0xE875: return 0x00FC; // small u with diaeresis
359 case 0xE877: return 0x1E85; // small w with diaeresis
360 case 0xE878: return 0x1E8D; // small x with diaeresis
361 case 0xE879: return 0x00FF; // small y with diaeresis
362 case 0xE941: return 0x01CD; // capital a with caron
363 case 0xE943: return 0x010C; // capital C with caron
364 case 0xE944: return 0x010E; // capital D with caron
365 case 0xE945: return 0x011A; // capital E with caron
366 case 0xE947: return 0x01E6; // capital g with caron
367 case 0xE949: return 0x01CF; // capital i with caron
368 case 0xE94B: return 0x01E8; // capital k with caron
369 case 0xE94C: return 0x013D; // capital L with caron
370 case 0xE94E: return 0x0147; // capital N with caron
371 case 0xE94F: return 0x01D1; // capital o with caron
372 case 0xE952: return 0x0158; // capital R with caron
373 case 0xE953: return 0x0160; // capital S with caron
374 case 0xE954: return 0x0164; // capital T with caron
375 case 0xE955: return 0x01D3; // capital u with caron
376 case 0xE95A: return 0x017D; // capital Z with caron
377 case 0xE961: return 0x01CE; // small a with caron
378 case 0xE963: return 0x010D; // small c with caron
379 case 0xE964: return 0x010F; // small d with caron
380 case 0xE965: return 0x011B; // small e with caron
381 case 0xE967: return 0x01E7; // small g with caron
382 case 0xE969: return 0x01D0; // small i with caron
383 case 0xE96A: return 0x01F0; // small j with caron
384 case 0xE96B: return 0x01E9; // small k with caron
385 case 0xE96C: return 0x013E; // small l with caron
386 case 0xE96E: return 0x0148; // small n with caron
387 case 0xE96F: return 0x01D2; // small o with caron
388 case 0xE972: return 0x0159; // small r with caron
389 case 0xE973: return 0x0161; // small s with caron
390 case 0xE974: return 0x0165; // small t with caron
391 case 0xE975: return 0x01D4; // small u with caron
392 case 0xE97A: return 0x017E; // small z with caron
393 case 0xEA41: return 0x00C5; // capital A with ring above
394 case 0xEA61: return 0x00E5; // small a with ring above
395 case 0xEA75: return 0x016F; // small u with ring above
396 case 0xEA77: return 0x1E98; // small w with ring above
397 case 0xEA79: return 0x1E99; // small y with ring above
398 case 0xEAAD: return 0x016E; // capital U with ring above
399 case 0xEE4F: return 0x0150; // capital O with double acute
400 case 0xEE55: return 0x0170; // capital U with double acute
401 case 0xEE6F: return 0x0151; // small o with double acute
402 case 0xEE75: return 0x0171; // small u with double acute
403 case 0xF020: return 0x00B8; // cedilla
404 case 0xF043: return 0x00C7; // capital C with cedilla
405 case 0xF044: return 0x1E10; // capital d with cedilla
406 case 0xF047: return 0x0122; // capital g with cedilla
407 case 0xF048: return 0x1E28; // capital h with cedilla
408 case 0xF04B: return 0x0136; // capital k with cedilla
409 case 0xF04C: return 0x013B; // capital l with cedilla
410 case 0xF04E: return 0x0145; // capital n with cedilla
411 case 0xF052: return 0x0156; // capital r with cedilla
412 case 0xF053: return 0x015E; // capital S with cedilla
413 case 0xF054: return 0x0162; // capital T with cedilla
414 case 0xF063: return 0x00E7; // small c with cedilla
415 case 0xF064: return 0x1E11; // small d with cedilla
416 case 0xF067: return 0x0123; // small g with cedilla
417 case 0xF068: return 0x1E29; // small h with cedilla
418 case 0xF06B: return 0x0137; // small k with cedilla
419 case 0xF06C: return 0x013C; // small l with cedilla
420 case 0xF06E: return 0x0146; // small n with cedilla
421 case 0xF072: return 0x0157; // small r with cedilla
422 case 0xF073: return 0x015F; // small s with cedilla
423 case 0xF074: return 0x0163; // small t with cedilla
424 case 0xF141: return 0x0104; // capital A with ogonek
425 case 0xF145: return 0x0118; // capital E with ogonek
426 case 0xF149: return 0x012E; // capital i with ogonek
427 case 0xF14F: return 0x01EA; // capital o with ogonek
428 case 0xF155: return 0x0172; // capital u with ogonek
429 case 0xF161: return 0x0105; // small a with ogonek
430 case 0xF165: return 0x0119; // small e with ogonek
431 case 0xF169: return 0x012F; // small i with ogonek
432 case 0xF16F: return 0x01EB; // small o with ogonek
433 case 0xF175: return 0x0173; // small u with ogonek
434 case 0xF241: return 0x1EA0; // capital a with dot below
435 case 0xF242: return 0x1E04; // capital b with dot below
436 case 0xF244: return 0x1E0C; // capital d with dot below
437 case 0xF245: return 0x1EB8; // capital e with dot below
438 case 0xF248: return 0x1E24; // capital h with dot below
439 case 0xF249: return 0x1ECA; // capital i with dot below
440 case 0xF24B: return 0x1E32; // capital k with dot below
441 case 0xF24C: return 0x1E36; // capital l with dot below
442 case 0xF24D: return 0x1E42; // capital m with dot below
443 case 0xF24E: return 0x1E46; // capital n with dot below
444 case 0xF24F: return 0x1ECC; // capital o with dot below
445 case 0xF252: return 0x1E5A; // capital r with dot below
446 case 0xF253: return 0x1E62; // capital s with dot below
447 case 0xF254: return 0x1E6C; // capital t with dot below
448 case 0xF255: return 0x1EE4; // capital u with dot below
449 case 0xF256: return 0x1E7E; // capital v with dot below
450 case 0xF257: return 0x1E88; // capital w with dot below
451 case 0xF259: return 0x1EF4; // capital y with dot below
452 case 0xF25A: return 0x1E92; // capital z with dot below
453 case 0xF261: return 0x1EA1; // small a with dot below
454 case 0xF262: return 0x1E05; // small b with dot below
455 case 0xF264: return 0x1E0D; // small d with dot below
456 case 0xF265: return 0x1EB9; // small e with dot below
457 case 0xF268: return 0x1E25; // small h with dot below
458 case 0xF269: return 0x1ECB; // small i with dot below
459 case 0xF26B: return 0x1E33; // small k with dot below
460 case 0xF26C: return 0x1E37; // small l with dot below
461 case 0xF26D: return 0x1E43; // small m with dot below
462 case 0xF26E: return 0x1E47; // small n with dot below
463 case 0xF26F: return 0x1ECD; // small o with dot below
464 case 0xF272: return 0x1E5B; // small r with dot below
465 case 0xF273: return 0x1E63; // small s with dot below
466 case 0xF274: return 0x1E6D; // small t with dot below
467 case 0xF275: return 0x1EE5; // small u with dot below
468 case 0xF276: return 0x1E7F; // small v with dot below
469 case 0xF277: return 0x1E89; // small w with dot below
470 case 0xF279: return 0x1EF5; // small y with dot below
471 case 0xF27A: return 0x1E93; // small z with dot below
472 case 0xF355: return 0x1E72; // capital u with diaeresis below
473 case 0xF375: return 0x1E73; // small u with diaeresis below
474 case 0xF441: return 0x1E00; // capital a with ring below
475 case 0xF461: return 0x1E01; // small a with ring below
476 case 0xF948: return 0x1E2A; // capital h with breve below
477 case 0xF968: return 0x1E2B; // small h with breve below
478
479 default: return -1;
480 } //end switch
481 }
482
483 }
484