Original 2.4
[marc4j.git] / src / org / marc4j / converter / impl / UnicodeToIso5426.java
1 // $Id: UnicodeToIso5426.java,v 1.3 2008/10/17 06:47:06 haschart Exp $\r
2 /**\r
3  * Copyright (C) 2002 Bas Peters (mail@bpeters.com)\r
4  *\r
5  * This file is part of MARC4J\r
6  *\r
7  * MARC4J is free software; you can redistribute it and/or\r
8  * modify it under the terms of the GNU Lesser General Public \r
9  * License as published by the Free Software Foundation; either \r
10  * version 2.1 of the License, or (at your option) any later version.\r
11  *\r
12  * MARC4J is distributed in the hope that it will be useful,\r
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
15  * Lesser General Public License for more details.\r
16  *\r
17  * You should have received a copy of the GNU Lesser General Public \r
18  * License along with MARC4J; if not, write to the Free Software\r
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
20  */\r
21 package org.marc4j.converter.impl;\r
22 \r
23 import org.marc4j.converter.CharConverter;\r
24 \r
25 /**\r
26  * <p>\r
27  * A utility to convert UCS/Unicode data to UNIMARC (ISO 5426 charset).\r
28  * </p>\r
29  * \r
30  * @author Bas Peters\r
31  * @author Yves Pratter\r
32  * @version $Revision: 1.3 $\r
33  */\r
34 public class UnicodeToIso5426 extends CharConverter {\r
35 \r
36   /**\r
37    * <p>\r
38    * Converts UCS/Unicode data to UNIMARC (ISO 5426 charset).\r
39    * </p>\r
40    * \r
41    * <p>\r
42    * A question mark (0x3F) is returned if there is no match.\r
43    * </p>\r
44    * \r
45    * @param data - the UCS/Unicode data in an array of char\r
46    * @return {@link String}- the UNIMARC (ISO 5426 charset) data\r
47    */\r
48   public String convert(char data[]) {\r
49     StringBuffer sb = new StringBuffer();\r
50     for (int i = 0; i < data.length; i++) {\r
51       char c = data[i];\r
52       if (c < 128)\r
53         sb.append(c);\r
54       else {\r
55         int d = convert(c);\r
56         if (d < 256) {\r
57           sb.append((char) d);\r
58         } else {\r
59           sb.append((char) (d / 256));\r
60           sb.append((char) (d % 256));\r
61         }\r
62       }\r
63     }\r
64     return sb.toString();\r
65   }\r
66 \r
67   private int convert(int i) {\r
68     switch (i) {\r
69     case 0x0024:\r
70       return 0xA4; // 2/4 dollar sign\r
71     case 0x005F:\r
72       return 0xD820; // underline\r
73     case 0x00A1:\r
74       return 0xA1; // 2/1 inverted exclamation mark\r
75     case 0x00A3:\r
76       return 0xA3; // 2/3 pound sign\r
77     case 0x00A5:\r
78       return 0xA5; // 2/5 yen sign\r
79     case 0x00A7:\r
80       return 0xA7; // 2/7 paragraph (section)\r
81     case 0x00A8:\r
82       return 0xC820; // diaeresis\r
83     case 0x00A9:\r
84       return 0xAD; // 2/13 copyright sign\r
85     case 0x00AB:\r
86       return 0xAB; // 2/11 left angle quotation mark\r
87     case 0x00AE:\r
88       return 0xAF; // 2/15 trade mark sign\r
89     case 0x00B7:\r
90       return 0xB7; // 3/7 middle dot\r
91     case 0x00B8:\r
92       return 0xD020; // cedilla\r
93     case 0x00BB:\r
94       return 0xBB; // 3/11 right angle quotation mark\r
95     case 0x00BF:\r
96       return 0xBF; // 3/15 inverted question mark\r
97     case 0x00C0:\r
98       return 0xC141; // CAPITAL A WITH GRAVE ACCENT\r
99     case 0x00C1:\r
100       return 0xC241; // CAPITAL A WITH ACUTE ACCENT\r
101     case 0x00C2:\r
102       return 0xC341; // CAPITAL A WITH CIRCUMFLEX ACCENT\r
103     case 0x00C3:\r
104       return 0xC441; // CAPITAL A WITH TILDE\r
105     case 0x00C4:\r
106       return 0xC841; // CAPITAL A WITH DIAERESIS\r
107     case 0x00C5:\r
108       return 0xCA41; // CAPITAL A WITH RING ABOVE\r
109     case 0x00C6:\r
110       return 0xE1; // 6/1 CAPITAL DIPHTHONG A WITH E\r
111     case 0x00C7:\r
112       return 0xD043; // CAPITAL C WITH CEDILLA\r
113     case 0x00C8:\r
114       return 0xC145; // CAPITAL E WITH GRAVE ACCENT\r
115     case 0x00C9:\r
116       return 0xC245; // CAPITAL E WITH ACUTE ACCENT\r
117     case 0x00CA:\r
118       return 0xC345; // CAPITAL E WITH CIRCUMFLEX ACCENT\r
119     case 0x00CB:\r
120       return 0xC845; // CAPITAL E WITH DIAERESIS\r
121     case 0x00CC:\r
122       return 0xC149; // CAPITAL I WITH GRAVE ACCENT\r
123     case 0x00CD:\r
124       return 0xC249; // CAPITAL I WITH ACUTE ACCENT\r
125     case 0x00CE:\r
126       return 0xC349; // CAPITAL I WITH CIRCUMFLEX ACCENT\r
127     case 0x00CF:\r
128       return 0xC849; // CAPITAL I WITH DIAERESIS\r
129     case 0x00D1:\r
130       return 0xC44E; // CAPITAL N WITH TILDE\r
131     case 0x00D2:\r
132       return 0xC14F; // CAPITAL O WITH GRAVE ACCENT\r
133     case 0x00D3:\r
134       return 0xC24F; // CAPITAL O WITH ACUTE ACCENT\r
135     case 0x00D4:\r
136       return 0xC34F; // CAPITAL O WITH CIRCUMFLEX ACCENT\r
137     case 0x00D5:\r
138       return 0xC44F; // CAPITAL O WITH TILDE\r
139     case 0x00D6:\r
140       return 0xC84F; // CAPITAL O WITH DIAERESIS\r
141     case 0x00D8:\r
142       return 0xE9; // 6/9 CAPITAL LETTER O WITH SOLIDUS [oblique stroke]\r
143     case 0x00D9:\r
144       return 0xC155; // CAPITAL U WITH GRAVE ACCENT\r
145     case 0x00DA:\r
146       return 0xC255; // CAPITAL U WITH ACUTE ACCENT\r
147     case 0x00DB:\r
148       return 0xC355; // CAPITAL U WITH CIRCUMFLEX\r
149     case 0x00DC:\r
150       return 0xC855; // CAPITAL U WITH DIAERESIS\r
151     case 0x00DD:\r
152       return 0xC259; // CAPITAL Y WITH ACUTE ACCENT\r
153     case 0x00DE:\r
154       return 0xEC; // 6/12 CAPITAL LETTER THORN\r
155     case 0x00DF:\r
156       return 0xFB; // 7/11 small letter sharp s\r
157     case 0x00E0:\r
158       return 0xC161; // small a with grave accent\r
159     case 0x00E1:\r
160       return 0xC261; // small a with acute accent\r
161     case 0x00E2:\r
162       return 0xC361; // small a with circumflex accent\r
163     case 0x00E3:\r
164       return 0xC461; // small a with tilde\r
165     case 0x00E4:\r
166       return 0xC861; // small a with diaeresis\r
167     case 0x00E5:\r
168       return 0xCA61; // small a with ring above\r
169     case 0x00E6:\r
170       return 0xF1; // 7/1 small diphthong a with e\r
171     case 0x00E7:\r
172       return 0xD063; // small c with cedilla\r
173     case 0x00E8:\r
174       return 0xC165; // small e with grave accent\r
175     case 0x00E9:\r
176       return 0xC265; // small e with acute accent\r
177     case 0x00EA:\r
178       return 0xC365; // small e with circumflex accent\r
179     case 0x00EB:\r
180       return 0xC865; // small e with diaeresis\r
181     case 0x00EC:\r
182       return 0xC169; // small i with grave accent\r
183     case 0x00ED:\r
184       return 0xC269; // small i with acute accent\r
185     case 0x00EE:\r
186       return 0xC369; // small i with circumflex accent\r
187     case 0x00EF:\r
188       return 0xC869; // small i with diaeresis\r
189     case 0x00F1:\r
190       return 0xC46E; // small n with tilde\r
191     case 0x00F2:\r
192       return 0xC16F; // small o with grave accent\r
193     case 0x00F3:\r
194       return 0xC26F; // small o with acute accent\r
195     case 0x00F4:\r
196       return 0xC36F; // small o with circumflex accent\r
197     case 0x00F5:\r
198       return 0xC46F; // small o with tilde\r
199     case 0x00F6:\r
200       return 0xC86F; // small o with diaeresis\r
201     case 0x00F8:\r
202       return 0xF9; // 7/9 small letter o with solidus (oblique stroke)\r
203     case 0x00F9:\r
204       return 0xC175; // small u with grave accent\r
205     case 0x00FA:\r
206       return 0xC275; // small u with acute accent\r
207     case 0x00FB:\r
208       return 0xC375; // small u with circumflex\r
209     case 0x00FC:\r
210       return 0xC875; // small u with diaeresis\r
211     case 0x00FD:\r
212       return 0xC279; // small y with acute accent\r
213     case 0x00FE:\r
214       return 0xFC; // 7/12 small letter thorn\r
215     case 0x00FF:\r
216       return 0xC879; // small y with diaeresis\r
217     case 0x0100:\r
218       return 0xC541; // CAPITAL A WITH MACRON\r
219     case 0x0101:\r
220       return 0xC561; // small a with macron\r
221     case 0x0102:\r
222       return 0xC641; // CAPITAL A WITH BREVE\r
223     case 0x0103:\r
224       return 0xC661; // small a with breve\r
225     case 0x0104:\r
226       return 0xD341; // CAPITAL A WITH OGONEK\r
227     case 0x0105:\r
228       return 0xD361; // small a with ogonek\r
229     case 0x0106:\r
230       return 0xC243; // CAPITAL C WITH ACUTE ACCENT\r
231     case 0x0107:\r
232       return 0xC263; // small c with acute accent\r
233     case 0x0108:\r
234       return 0xC343; // CAPITAL C WITH CIRCUMFLEX\r
235     case 0x0109:\r
236       return 0xC363; // small c with circumflex\r
237     case 0x010A:\r
238       return 0xC743; // CAPITAL C WITH DOT ABOVE\r
239     case 0x010B:\r
240       return 0xC763; // small c with dot above\r
241     case 0x010C:\r
242       return 0xCF43; // CAPITAL C WITH CARON\r
243     case 0x010D:\r
244       return 0xCF63; // small c with caron\r
245     case 0x010E:\r
246       return 0xCF44; // CAPITAL D WITH CARON\r
247     case 0x010F:\r
248       return 0xCF64; // small d with caron\r
249     case 0x0110:\r
250       return 0xE2; // 6/2 CAPITAL LETTER D WITH STROKE\r
251     case 0x0112:\r
252       return 0xC545; // CAPITAL E WITH MACRON\r
253     case 0x0113:\r
254       return 0xC565; // small e with macron\r
255     case 0x0114:\r
256       return 0xC645; // CAPITAL E WITH BREVE\r
257     case 0x0115:\r
258       return 0xC665; // small e with breve\r
259     case 0x0116:\r
260       return 0xC745; // CAPITAL E WITH DOT ABOVE\r
261     case 0x0117:\r
262       return 0xC765; // small e with dot above\r
263     case 0x0118:\r
264       return 0xD345; // CAPITAL E WITH OGONEK\r
265     case 0x0119:\r
266       return 0xD365; // small e with ogonek\r
267     case 0x011A:\r
268       return 0xCF45; // CAPITAL E WITH CARON\r
269     case 0x011B:\r
270       return 0xCF65; // small e with caron\r
271     case 0x011C:\r
272       return 0xC347; // CAPITAL G WITH CIRCUMFLEX\r
273     case 0x011D:\r
274       return 0xC367; // small g with circumflex\r
275     case 0x011E:\r
276       return 0xC647; // CAPITAL G WITH BREVE\r
277     case 0x011F:\r
278       return 0xC667; // small g with breve\r
279     case 0x0120:\r
280       return 0xC747; // CAPITAL G WITH DOT ABOVE\r
281     case 0x0121:\r
282       return 0xC767; // small g with dot above\r
283     case 0x0122:\r
284       return 0xD047; // CAPITAL G WITH CEDILLA\r
285     case 0x0123:\r
286       return 0xD067; // small g with cedilla\r
287     case 0x0124:\r
288       return 0xC348; // CAPITAL H WITH CIRCUMFLEX\r
289     case 0x0125:\r
290       return 0xC368; // small h with circumflex\r
291     case 0x0128:\r
292       return 0xC449; // CAPITAL I WITH TILDE\r
293     case 0x0129:\r
294       return 0xC469; // small i with tilde\r
295     case 0x012A:\r
296       return 0xC549; // CAPITAL I WITH MACRON\r
297     case 0x012B:\r
298       return 0xC569; // small i with macron\r
299     case 0x012C:\r
300       return 0xC649; // CAPITAL I WITH BREVE\r
301     case 0x012D:\r
302       return 0xC669; // small i with breve\r
303     case 0x012E:\r
304       return 0xD349; // CAPITAL I WITH OGONEK\r
305     case 0x012F:\r
306       return 0xD369; // small i with ogonek\r
307     case 0x0130:\r
308       return 0xC749; // CAPITAL I WITH DOT ABOVE\r
309     case 0x0131:\r
310       return 0xF5; // 7/5 small letter i without dot\r
311     case 0x0132:\r
312       return 0xE6; // 6/6 CAPITAL LETTER IJ\r
313     case 0x0133:\r
314       return 0xF6; // 7/6 small letter ij\r
315     case 0x0134:\r
316       return 0xC34A; // CAPITAL J WITH CIRCUMFLEX\r
317     case 0x0135:\r
318       return 0xC36A; // small j with circumflex\r
319     case 0x0136:\r
320       return 0xD04B; // CAPITAL K WITH CEDILLA\r
321     case 0x0137:\r
322       return 0xD06B; // small k with cedilla\r
323     case 0x0139:\r
324       return 0xC24C; // CAPITAL L WITH ACUTE ACCENT\r
325     case 0x013A:\r
326       return 0xC26C; // small l with acute accent\r
327     case 0x013B:\r
328       return 0xD04C; // CAPITAL L WITH CEDILLA\r
329     case 0x013C:\r
330       return 0xD06C; // small l with cedilla\r
331     case 0x013D:\r
332       return 0xCF4C; // CAPITAL L WITH CARON\r
333     case 0x013E:\r
334       return 0xCF6C; // small l with caron\r
335     case 0x0141:\r
336       return 0xE8; // 6/8 CAPITAL LETTER L WITH STROKE\r
337     case 0x0142:\r
338       return 0xF8; // 7/8 small letter l with stroke\r
339     case 0x0143:\r
340       return 0xC24E; // CAPITAL N WITH ACUTE ACCENT\r
341     case 0x0144:\r
342       return 0xC26E; // small n with acute accent\r
343     case 0x0145:\r
344       return 0xD04E; // CAPITAL N WITH CEDILLA\r
345     case 0x0146:\r
346       return 0xD06E; // small n with cedilla\r
347     case 0x0147:\r
348       return 0xCF4E; // CAPITAL N WITH CARON\r
349     case 0x0148:\r
350       return 0xCF6E; // small n with caron\r
351     case 0x014C:\r
352       return 0xC54F; // CAPITAL O WITH MACRON\r
353     case 0x014D:\r
354       return 0xC56F; // small o with macron\r
355     case 0x014E:\r
356       return 0xC64F; // CAPITAL O WITH BREVE\r
357     case 0x014F:\r
358       return 0xC66F; // small o with breve\r
359     case 0x0150:\r
360       return 0xCD4F; // CAPITAL O WITH DOUBLE ACUTE\r
361     case 0x0151:\r
362       return 0xCD6F; // small o with double acute\r
363     case 0x0152:\r
364       return 0xEA; // 6/10 CAPITAL DIPHTONG OE\r
365     case 0x0153:\r
366       return 0xFA; // 7/10 small diphtong oe\r
367     case 0x0154:\r
368       return 0xC252; // CAPITAL R WITH ACUTE ACCENT\r
369     case 0x0155:\r
370       return 0xC272; // small r with acute accent\r
371     case 0x0156:\r
372       return 0xD052; // CAPITAL R WITH CEDILLA\r
373     case 0x0157:\r
374       return 0xD072; // small r with cedilla\r
375     case 0x0158:\r
376       return 0xCF52; // CAPITAL R WITH CARON\r
377     case 0x0159:\r
378       return 0xCF72; // small r with caron\r
379     case 0x015A:\r
380       return 0xC253; // CAPITAL S WITH ACUTE ACCENT\r
381     case 0x015B:\r
382       return 0xC273; // small s with acute accent\r
383     case 0x015C:\r
384       return 0xC353; // CAPITAL S WITH CIRCUMFLEX\r
385     case 0x015D:\r
386       return 0xC373; // small s with circumflex\r
387     case 0x015E:\r
388       return 0xD053; // CAPITAL S WITH CEDILLA\r
389     case 0x015F:\r
390       return 0xD073; // small s with cedilla\r
391     case 0x0160:\r
392       return 0xCF53; // CAPITAL S WITH CARON\r
393     case 0x0161:\r
394       return 0xCF73; // small s with caron\r
395     case 0x0162:\r
396       return 0xD054; // CAPITAL T WITH CEDILLA\r
397     case 0x0163:\r
398       return 0xD074; // small t with cedilla\r
399     case 0x0164:\r
400       return 0xCF54; // CAPITAL T WITH CARON\r
401     case 0x0165:\r
402       return 0xCF74; // small t with caron\r
403     case 0x0168:\r
404       return 0xC455; // CAPITAL U WITH TILDE\r
405     case 0x0169:\r
406       return 0xC475; // small u with tilde\r
407     case 0x016A:\r
408       return 0xC555; // CAPITAL U WITH MACRON\r
409     case 0x016B:\r
410       return 0xC575; // small u with macron\r
411     case 0x016C:\r
412       return 0xC655; // CAPITAL U WITH BREVE\r
413     case 0x016D:\r
414       return 0xC675; // small u with breve\r
415     case 0x016E:\r
416       return 0xCAAD; // CAPITAL U WITH RING ABOVE\r
417     case 0x016F:\r
418       return 0xCA75; // small u with ring above\r
419     case 0x0170:\r
420       return 0xCD55; // CAPITAL U WITH DOUBLE ACUTE\r
421     case 0x0171:\r
422       return 0xCD75; // small u with double acute\r
423     case 0x0172:\r
424       return 0xD355; // CAPITAL U WITH OGONEK\r
425     case 0x0173:\r
426       return 0xD375; // small u with ogonek\r
427     case 0x0174:\r
428       return 0xC357; // CAPITAL W WITH CIRCUMFLEX\r
429     case 0x0175:\r
430       return 0xC377; // small w with circumflex\r
431     case 0x0176:\r
432       return 0xC359; // CAPITAL Y WITH CIRCUMFLEX\r
433     case 0x0177:\r
434       return 0xC379; // small y with circumflex\r
435     case 0x0178:\r
436       return 0xC859; // CAPITAL Y WITH DIAERESIS\r
437     case 0x0179:\r
438       return 0xC25A; // CAPITAL Z WITH ACUTE ACCENT\r
439     case 0x017A:\r
440       return 0xC27A; // small z with acute accent\r
441     case 0x017B:\r
442       return 0xC75A; // CAPITAL Z WITH DOT ABOVE\r
443     case 0x017C:\r
444       return 0xC77A; // small z with dot above\r
445     case 0x017D:\r
446       return 0xCF5A; // CAPITAL Z WITH CARON\r
447     case 0x017E:\r
448       return 0xCF7A; // small z with caron\r
449     case 0x01A0:\r
450       return 0xCE54; // LATIN CAPITAL LETTER O WITH HORN\r
451     case 0x01A1:\r
452       return 0xCE74; // latin small letter o with horn\r
453     case 0x01AF:\r
454       return 0xCE55; // LATIN CAPITAL LETTER U WITH HORN\r
455     case 0x01B0:\r
456       return 0xCE75; // latin small letter u with horn\r
457     case 0x01CD:\r
458       return 0xCF41; // CAPITAL A WITH CARON\r
459     case 0x01CE:\r
460       return 0xCF61; // small a with caron\r
461     case 0x01CF:\r
462       return 0xCF49; // CAPITAL I WITH CARON\r
463     case 0x01D0:\r
464       return 0xCF69; // small i with caron\r
465     case 0x01D1:\r
466       return 0xCF4F; // CAPITAL O WITH CARON\r
467     case 0x01D2:\r
468       return 0xCF6F; // small o with caron\r
469     case 0x01D3:\r
470       return 0xCF55; // CAPITAL U WITH CARON\r
471     case 0x01D4:\r
472       return 0xCF75; // small u with caron\r
473     case 0x01E2:\r
474       return 0xC5E1; // CAPITAL AE WITH MACRON\r
475     case 0x01E3:\r
476       return 0xC5F1; // small ae with macron\r
477     case 0x01E6:\r
478       return 0xCF47; // CAPITAL G WITH CARON\r
479     case 0x01E7:\r
480       return 0xCF67; // small g with caron\r
481     case 0x01E8:\r
482       return 0xCF4B; // CAPITAL K WITH CARON\r
483     case 0x01E9:\r
484       return 0xCF6B; // small k with caron\r
485     case 0x01EA:\r
486       return 0xD34F; // CAPITAL O WITH OGONEK\r
487     case 0x01EB:\r
488       return 0xD36F; // small o with ogonek\r
489     case 0x01F0:\r
490       return 0xCF6A; // small j with caron\r
491     case 0x01F4:\r
492       return 0xC247; // CAPITAL G WITH ACUTE\r
493     case 0x01F5:\r
494       return 0xC267; // small g with acute\r
495     case 0x01FC:\r
496       return 0xC2E1; // CAPITAL AE WITH ACUTE\r
497     case 0x01FD:\r
498       return 0xC2F1; // small ae with acute\r
499     case 0x02B9:\r
500       return 0xBD; // 3/13 mjagkij znak\r
501     case 0x02BA:\r
502       return 0xBE; // 3/14 tverdyj znak\r
503     case 0x02CC:\r
504       return 0xDA20; // small low vertical bar\r
505     case 0x02DB:\r
506       return 0xD320; // ogonek\r
507     case 0x0623:\r
508       return 0xB1; // 3/1 alif/hamzah [alef with hamza above]\r
509     case 0x0639:\r
510       return 0xB0; // 3/0 ayn [ain]\r
511     case 0x1E00:\r
512       return 0xD441; // CAPITAL A WITH RING BELOW\r
513     case 0x1E01:\r
514       return 0xD461; // small a with ring below\r
515     case 0x1E02:\r
516       return 0xC742; // CAPITAL B WITH DOT ABOVE\r
517     case 0x1E03:\r
518       return 0xC762; // small b with dot above\r
519     case 0x1E04:\r
520       return 0xD642; // CAPITAL B WITH DOT BELOW\r
521     case 0x1E05:\r
522       return 0xD662; // small b with dot below\r
523     case 0x1E0A:\r
524       return 0xC744; // CAPITAL D WITH DOT ABOVE\r
525     case 0x1E0B:\r
526       return 0xC764; // small d with dot above\r
527     case 0x1E0C:\r
528       return 0xD644; // CAPITAL D WITH DOT BELOW\r
529     case 0x1E0D:\r
530       return 0xD664; // small d with dot below\r
531     case 0x1E10:\r
532       return 0xD044; // CAPITAL D WITH CEDILLA\r
533     case 0x1E11:\r
534       return 0xD064; // small d with cedilla\r
535     case 0x1E1E:\r
536       return 0xC746; // CAPITAL F WITH DOT ABOVE\r
537     case 0x1E1F:\r
538       return 0xC766; // small f with dot above\r
539     case 0x1E20:\r
540       return 0xC547; // CAPITAL G WITH MACRON\r
541     case 0x1E21:\r
542       return 0xC567; // small g with macron\r
543     case 0x1E22:\r
544       return 0xC748; // CAPITAL H WITH DOT ABOVE\r
545     case 0x1E23:\r
546       return 0xC768; // small h with dot above\r
547     case 0x1E24:\r
548       return 0xD648; // CAPITAL H WITH DOT BELOW\r
549     case 0x1E25:\r
550       return 0xD668; // small h with dot below\r
551     case 0x1E26:\r
552       return 0xC848; // CAPITAL H WITH DIAERESIS\r
553     case 0x1E27:\r
554       return 0xC868; // small h with diaeresis\r
555     case 0x1E28:\r
556       return 0xD048; // CAPITAL H WITH CEDILLA\r
557     case 0x1E29:\r
558       return 0xD068; // small h with cedilla\r
559     case 0x1E2A:\r
560       return 0xF948; // CAPITAL H WITH BREVE BELOW\r
561     case 0x1E2B:\r
562       return 0xF968; // small h with breve below\r
563     case 0x1E30:\r
564       return 0xC24B; // CAPITAL K WITH ACUTE\r
565     case 0x1E31:\r
566       return 0xC26B; // small k with acute\r
567     case 0x1E32:\r
568       return 0xD64B; // CAPITAL K WITH DOT BELOW\r
569     case 0x1E33:\r
570       return 0xD66B; // small k with dot below\r
571     case 0x1E36:\r
572       return 0xD64C; // CAPITAL L WITH DOT BELOW\r
573     case 0x1E37:\r
574       return 0xD66C; // small l with dot below\r
575     case 0x1E3E:\r
576       return 0xC24D; // CAPITAL M WITH ACUTE\r
577     case 0x1E3F:\r
578       return 0xC26D; // small m with acute\r
579     case 0x1E40:\r
580       return 0xC74D; // CAPITAL M WITH DOT ABOVE\r
581     case 0x1E41:\r
582       return 0xC76D; // small m with dot above\r
583     case 0x1E42:\r
584       return 0xD64D; // CAPITAL M WITH DOT BELOW\r
585     case 0x1E43:\r
586       return 0xD66D; // small m with dot below\r
587     case 0x1E44:\r
588       return 0xC74E; // CAPITAL N WITH DOT ABOVE\r
589     case 0x1E45:\r
590       return 0xC76E; // small n with dot above\r
591     case 0x1E46:\r
592       return 0xD64E; // CAPITAL N WITH DOT BELOW\r
593     case 0x1E47:\r
594       return 0xD66E; // small n with dot below\r
595     case 0x1E54:\r
596       return 0xC250; // CAPITAL P WITH ACUTE\r
597     case 0x1E55:\r
598       return 0xC270; // small p with acute\r
599     case 0x1E56:\r
600       return 0xC750; // CAPITAL P WITH DOT ABOVE\r
601     case 0x1E57:\r
602       return 0xC770; // small p with dot above\r
603     case 0x1E58:\r
604       return 0xC752; // CAPITAL R WITH DOT ABOVE\r
605     case 0x1E59:\r
606       return 0xC772; // small r with dot above\r
607     case 0x1E5A:\r
608       return 0xD652; // CAPITAL R WITH DOT BELOW\r
609     case 0x1E5B:\r
610       return 0xD672; // small r with dot below\r
611     case 0x1E60:\r
612       return 0xC753; // CAPITAL S WITH DOT ABOVE\r
613     case 0x1E61:\r
614       return 0xC773; // small s with dot above\r
615     case 0x1E62:\r
616       return 0xD653; // CAPITAL S WITH DOT BELOW\r
617     case 0x1E63:\r
618       return 0xD673; // small s with dot below\r
619     case 0x1E6A:\r
620       return 0xC754; // CAPITAL T WITH DOT ABOVE\r
621     case 0x1E6B:\r
622       return 0xC774; // small t with dot above\r
623     case 0x1E6C:\r
624       return 0xD654; // CAPITAL T WITH DOT BELOW\r
625     case 0x1E6D:\r
626       return 0xD674; // small t with dot below\r
627     case 0x1E72:\r
628       return 0xD755; // CAPITAL U WITH DIAERESIS BELOW\r
629     case 0x1E73:\r
630       return 0xD775; // small u with diaeresis below\r
631     case 0x1E7C:\r
632       return 0xC456; // CAPITAL V WITH TILDE\r
633     case 0x1E7D:\r
634       return 0xC476; // small v with tilde\r
635     case 0x1E7E:\r
636       return 0xD656; // CAPITAL V WITH DOT BELOW\r
637     case 0x1E7F:\r
638       return 0xD676; // small v with dot below\r
639     case 0x1E80:\r
640       return 0xC157; // CAPITAL W WITH GRAVE\r
641     case 0x1E81:\r
642       return 0xC177; // small w with grave\r
643     case 0x1E82:\r
644       return 0xC257; // CAPITAL W WITH ACUTE\r
645     case 0x1E83:\r
646       return 0xC277; // small w with acute\r
647     case 0x1E84:\r
648       return 0xC857; // CAPITAL W WITH DIAERESIS\r
649     case 0x1E85:\r
650       return 0xC877; // small w with diaeresis\r
651     case 0x1E86:\r
652       return 0xC757; // CAPITAL W WITH DOT ABOVE\r
653     case 0x1E87:\r
654       return 0xC777; // small w with dot above\r
655     case 0x1E88:\r
656       return 0xD657; // CAPITAL W WITH DOT BELOW\r
657     case 0x1E89:\r
658       return 0xD677; // small w with dot below\r
659     case 0x1E8A:\r
660       return 0xC758; // CAPITAL X WITH DOT ABOVE\r
661     case 0x1E8B:\r
662       return 0xC778; // small x with dot above\r
663     case 0x1E8C:\r
664       return 0xC858; // CAPITAL X WITH DIAERESIS\r
665     case 0x1E8D:\r
666       return 0xC878; // small x with diaeresis\r
667     case 0x1E8E:\r
668       return 0xC759; // CAPITAL Y WITH DOT ABOVE\r
669     case 0x1E8F:\r
670       return 0xC779; // small y with dot above\r
671     case 0x1E90:\r
672       return 0xC35A; // CAPITAL Z WITH CIRCUMFLEX\r
673     case 0x1E91:\r
674       return 0xC37A; // small z with circumflex\r
675     case 0x1E92:\r
676       return 0xD65A; // CAPITAL Z WITH DOT BELOW\r
677     case 0x1E93:\r
678       return 0xD67A; // small z with dot below\r
679     case 0x1E97:\r
680       return 0xC874; // small t with diaeresis\r
681     case 0x1E98:\r
682       return 0xCA77; // small w with ring above\r
683     case 0x1E99:\r
684       return 0xCA79; // small y with ring above\r
685     case 0x1EA0:\r
686       return 0xD641; // CAPITAL A WITH DOT BELOW\r
687     case 0x1EA1:\r
688       return 0xD661; // small a with dot below\r
689     case 0x1EA2:\r
690       return 0xC041; // CAPITAL A WITH HOOK ABOVE\r
691     case 0x1EA3:\r
692       return 0xC061; // small a with hook above\r
693     case 0x1EB8:\r
694       return 0xD645; // CAPITAL E WITH DOT BELOW\r
695     case 0x1EB9:\r
696       return 0xD665; // small e with dot below\r
697     case 0x1EBA:\r
698       return 0xC045; // CAPITAL E WITH HOOK ABOVE\r
699     case 0x1EBB:\r
700       return 0xC065; // small e with hook above\r
701     case 0x1EBC:\r
702       return 0xC445; // CAPITAL E WITH TILDE\r
703     case 0x1EBD:\r
704       return 0xC465; // small e with tilde\r
705     case 0x1EC8:\r
706       return 0xC049; // CAPITAL I WITH HOOK ABOVE\r
707     case 0x1EC9:\r
708       return 0xC069; // small i with hook above\r
709     case 0x1ECA:\r
710       return 0xD649; // CAPITAL I WITH DOT BELOW\r
711     case 0x1ECB:\r
712       return 0xD669; // small i with dot below\r
713     case 0x1ECC:\r
714       return 0xD64F; // CAPITAL O WITH DOT BELOW\r
715     case 0x1ECD:\r
716       return 0xD66F; // small o with dot below\r
717     case 0x1ECE:\r
718       return 0xC04F; // CAPITAL O WITH HOOK ABOVE\r
719     case 0x1ECF:\r
720       return 0xC06F; // small o with hook above\r
721     case 0x1EE4:\r
722       return 0xD655; // CAPITAL U WITH DOT BELOW\r
723     case 0x1EE5:\r
724       return 0xD675; // small u with dot below\r
725     case 0x1EE6:\r
726       return 0xC055; // CAPITAL U WITH HOOK ABOVE\r
727     case 0x1EE7:\r
728       return 0xC075; // small u with hook above\r
729     case 0x1EF2:\r
730       return 0xC159; // CAPITAL Y WITH GRAVE\r
731     case 0x1EF3:\r
732       return 0xC179; // small y with grave\r
733     case 0x1EF4:\r
734       return 0xD659; // CAPITAL Y WITH DOT BELOW\r
735     case 0x1EF5:\r
736       return 0xD679; // small y with dot below\r
737     case 0x1EF6:\r
738       return 0xC059; // CAPITAL Y WITH HOOK ABOVE\r
739     case 0x1EF7:\r
740       return 0xC079; // small y with hook above\r
741     case 0x1EF8:\r
742       return 0xC459; // CAPITAL Y WITH TILDE\r
743     case 0x1EF9:\r
744       return 0xC479; // small y with tilde\r
745     case 0x2017:\r
746       return 0xD920; // double underline\r
747     case 0x2018:\r
748       return 0xA9; // 2/9 left high single quotation mark\r
749     //          case 0x2018: return 0xB2; // 3/2 left low single quotation mark\r
750     case 0x2019:\r
751       return 0xB9; // 3/9 right high single quotation mark\r
752     case 0x201C:\r
753       return 0xA2; // 2/2 left low double quotation mark\r
754     //          case 0x201C: return 0xAA; // 2/10 left high double quotation mark\r
755     case 0x201D:\r
756       return 0xBA; // 3/10 right high double quotation mark\r
757     case 0x2020:\r
758       return 0xA6; // 2/6 single dagger\r
759     case 0x2021:\r
760       return 0xB6; // 3/6 double dagger\r
761     case 0x2032:\r
762       return 0xA8; // 2/8 prime\r
763     case 0x2033:\r
764       return 0xB8; // 3/8 double prime\r
765     case 0x2117:\r
766       return 0xAE; // 2/14 sound recording copyright sign\r
767     case 0x266D:\r
768       return 0xAC; // 2/12 music flat\r
769     case 0x266F:\r
770       return 0xBC; // 3/12 musical sharp\r
771 \r
772     default:\r
773       return 0x3F; // if no match, return question mark\r
774     }\r
775   }\r
776 }