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