Imported version 0.2-1
[mstardict] / src / lib / ctype-utf8.cpp
1 /* Copyright (C) 2000 MySQL AB
2
3    This library is free software; you can redistribute it and/or
4    modify it under the terms of the GNU Library General Public
5    License as published by the Free Software Foundation; either
6    version 2 of the License, or (at your option) any later version.
7
8    This library is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11    Library General Public License for more details.
12
13    You should have received a copy of the GNU Library General Public
14    License along with this library; if not, write to the Free
15    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
16    MA 02111-1307, USA */
17
18 /* UTF8 according RFC 2279 */
19 /* Written by Alexander Barkov <bar@udm.net> */
20
21 /* Modified by Hu Zheng <huzheng_001@163.com> for StarDict. 2006.6.13 */
22
23 #ifdef HAVE_CONFIG_H
24 #  include "config.h"
25 #endif
26
27 #include "my_global.h"
28 #include "m_string.h"
29 #include "m_ctype.h"
30 //#include <errno.h>
31
32 using namespace stardict_collation;
33
34 //#ifndef EILSEQ
35 //#define EILSEQ ENOENT
36 //#endif
37
38 #ifndef HAVE_CHARSET_utf8
39 #define HAVE_CHARSET_utf8
40 #endif
41
42 #ifdef HAVE_CHARSET_utf8
43 #define HAVE_UNIDATA
44 #endif
45
46 #ifdef HAVE_CHARSET_ucs2
47 #define HAVE_UNIDATA
48 #endif
49
50 #ifdef HAVE_UNIDATA
51
52 //#include "my_uctype.h"
53
54 static MY_UNICASE_INFO plane00[]={
55   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
56   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
57   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
58   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
59   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
60   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
61   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
62   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
63   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
64   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
65   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
66   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
67   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
68   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
69   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
70   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
71   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
72   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
73   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
74   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
75   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
76   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
77   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
78   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
79   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
80   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
81   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
82   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
83   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
84   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
85   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
86   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
87   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
88   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
89   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
90   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
91   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
92   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
93   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
94   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
95   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
96   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
97   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
98   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
99   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
100   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
101   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
102   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
103   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
104   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
105   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
106   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
107   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
108   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
109   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
110   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
111   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
112   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
113   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
114   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
115   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
116   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
117   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
118   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
119   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
120   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
121   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
122   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
123   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
124   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
125   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
126   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
127   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
128   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
129   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
130   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
131   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
132   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
133   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
134   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
135   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
136   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
137   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
138   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
139   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
140   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
141   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
142   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
143   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
144   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
145   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
146   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
147   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
148   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
149   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
150   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
151   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
152   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
153   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
154   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
155   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
156   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
157   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
158   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
159   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
160   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
161   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
162   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
163   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
164   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
165   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
166   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
167   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
168   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
169   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
170   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
171   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
172   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
173   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
174   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
175   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
176   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
177   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
178   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
179   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
180   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
181   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
182   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
183 };
184
185
186
187 static MY_UNICASE_INFO plane01[]={
188   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
189   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
190   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
191   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
192   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
193   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
194   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
195   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
196   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
197   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
198   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
199   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
200   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
201   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
202   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
203   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
204   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
205   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
206   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
207   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
208   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
209   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
210   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
211   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
212   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
213   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
214   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
215   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
216   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
217   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
218   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
219   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
220   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
221   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
222   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
223   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
224   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
225   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
226   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
227   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
228   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
229   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
230   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
231   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
232   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
233   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
234   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
235   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
236   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
237   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
238   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
239   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
240   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
241   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
242   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
243   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
244   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
245   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
246   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
247   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
248   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
249   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
250   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
251   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
252   {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
253   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
254   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
255   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
256   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
257   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
258   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
259   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
260   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
261   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
262   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
263   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
264   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
265   {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
266   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
267   {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
268   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
269   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
270   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
271   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
272   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
273   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
274   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
275   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
276   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
277   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
278   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
279   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
280   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
281   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
282   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
283   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
284   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
285   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
286   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
287   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
288   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
289   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
290   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
291   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
292   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
293   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
294   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
295   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
296   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
297   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
298   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
299   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
300   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
301   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
302   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
303   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
304   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
305   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
306   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
307   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
308   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
309   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
310   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
311   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
312   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
313   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
314   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
315   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
316 };
317
318 static MY_UNICASE_INFO plane02[]={
319   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
320   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
321   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
322   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
323   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
324   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
325   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
326   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
327   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
328   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
329   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
330   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
331   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
332   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
333   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
334   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
335   {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
336   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
337   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
338   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
339   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
340   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
341   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
342   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
343   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
344   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
345   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
346   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
347   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
348   {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
349   {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
350   {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
351   {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
352   {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
353   {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
354   {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
355   {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
356   {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
357   {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
358   {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
359   {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
360   {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
361   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
362   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
363   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
364   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
365   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
366   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
367   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
368   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
369   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
370   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
371   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
372   {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
373   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
374   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
375   {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
376   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
377   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
378   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
379   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
380   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
381   {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
382   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
383   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
384   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
385   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
386   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
387   {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
388   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
389   {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
390   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
391   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
392   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
393   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
394   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
395   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
396   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
397   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
398   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
399   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
400   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
401   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
402   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
403   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
404   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
405   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
406   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
407   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
408   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
409   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
410   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
411   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
412   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
413   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
414   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
415   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
416   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
417   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
418   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
419   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
420   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
421   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
422   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
423   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
424   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
425   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
426   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
427   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
428   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
429   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
430   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
431   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
432   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
433   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
434   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
435   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
436   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
437   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
438   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
439   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
440   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
441   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
442   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
443   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
444   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
445   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
446   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
447 };
448
449 static MY_UNICASE_INFO plane03[]={
450   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
451   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
452   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
453   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
454   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
455   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
456   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
457   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
458   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
459   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
460   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
461   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
462   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
463   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
464   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
465   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
466   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
467   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
468   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
469   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
470   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
471   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
472   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
473   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
474   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
475   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
476   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
477   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
478   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
479   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
480   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
481   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
482   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
483   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
484   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
485   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
486   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
487   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
488   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
489   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
490   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
491   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
492   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
493   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
494   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
495   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
496   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
497   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
498   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
499   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
500   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
501   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
502   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
503   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
504   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
505   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
506   {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
507   {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
508   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
509   {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
510   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
511   {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
512   {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
513   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
514   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
515   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
516   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
517   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
518   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
519   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
520   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
521   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
522   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
523   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
524   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
525   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
526   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
527   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
528   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
529   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
530   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
531   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
532   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
533   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
534   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
535   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
536   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
537   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
538   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
539   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
540   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
541   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
542   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
543   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
544   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
545   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
546   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
547   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
548   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
549   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
550   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
551   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
552   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
553   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
554   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
555   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
556   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
557   {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
558   {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
559   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
560   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
561   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
562   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
563   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
564   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
565   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
566   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
567   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
568   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
569   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
570   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
571   {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
572   {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
573   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
574   {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
575   {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
576   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
577   {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
578 };
579
580 static MY_UNICASE_INFO plane04[]={
581   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
582   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
583   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
584   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
585   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
586   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
587   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
588   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
589   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
590   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
591   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
592   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
593   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
594   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
595   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
596   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
597   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
598   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
599   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
600   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
601   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
602   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
603   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
604   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
605   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
606   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
607   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
608   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
609   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
610   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
611   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
612   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
613   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
614   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
615   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
616   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
617   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
618   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
619   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
620   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
621   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
622   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
623   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
624   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
625   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
626   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
627   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
628   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
629   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
630   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
631   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
632   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
633   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
634   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
635   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
636   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
637   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
638   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
639   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
640   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
641   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
642   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
643   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
644   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
645   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
646   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
647   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
648   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
649   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
650   {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
651   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
652   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
653   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
654   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
655   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
656   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
657   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
658   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
659   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
660   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
661   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
662   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
663   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
664   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
665   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
666   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
667   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
668   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
669   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
670   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
671   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
672   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
673   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
674   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
675   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
676   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
677   {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
678   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
679   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
680   {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
681   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
682   {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
683   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
684   {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
685   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
686   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
687   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
688   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
689   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
690   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
691   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
692   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
693   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
694   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
695   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
696   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
697   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
698   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
699   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
700   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
701   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
702   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
703   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
704   {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
705   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
706   {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
707   {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
708   {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
709 };
710
711 static MY_UNICASE_INFO plane05[]={
712   {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
713   {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
714   {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
715   {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
716   {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
717   {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
718   {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
719   {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
720   {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
721   {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
722   {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
723   {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
724   {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
725   {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
726   {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
727   {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
728   {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
729   {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
730   {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
731   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
732   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
733   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
734   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
735   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
736   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
737   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
738   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
739   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
740   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
741   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
742   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
743   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
744   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
745   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
746   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
747   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
748   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
749   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
750   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
751   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
752   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
753   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
754   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
755   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
756   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
757   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
758   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
759   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
760   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
761   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
762   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
763   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
764   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
765   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
766   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
767   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
768   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
769   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
770   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
771   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
772   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
773   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
774   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
775   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
776   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
777   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
778   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
779   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
780   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
781   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
782   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
783   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
784   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
785   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
786   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
787   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
788   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
789   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
790   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
791   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
792   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
793   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
794   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
795   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
796   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
797   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
798   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
799   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
800   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
801   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
802   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
803   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
804   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
805   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
806   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
807   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
808   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
809   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
810   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
811   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
812   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
813   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
814   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
815   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
816   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
817   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
818   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
819   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
820   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
821   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
822   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
823   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
824   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
825   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
826   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
827   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
828   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
829   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
830   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
831   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
832   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
833   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
834   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
835   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
836   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
837   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
838   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
839   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
840 };
841
842 static MY_UNICASE_INFO plane1E[]={
843   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
844   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
845   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
846   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
847   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
848   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
849   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
850   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
851   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
852   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
853   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
854   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
855   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
856   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
857   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
858   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
859   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
860   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
861   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
862   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
863   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
864   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
865   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
866   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
867   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
868   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
869   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
870   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
871   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
872   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
873   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
874   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
875   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
876   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
877   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
878   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
879   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
880   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
881   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
882   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
883   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
884   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
885   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
886   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
887   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
888   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
889   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
890   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
891   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
892   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
893   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
894   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
895   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
896   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
897   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
898   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
899   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
900   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
901   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
902   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
903   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
904   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
905   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
906   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
907   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
908   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
909   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
910   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
911   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
912   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
913   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
914   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
915   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
916   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
917   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
918   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
919   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
920   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
921   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
922   {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
923   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
924   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
925   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
926   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
927   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
928   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
929   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
930   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
931   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
932   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
933   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
934   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
935   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
936   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
937   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
938   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
939   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
940   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
941   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
942   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
943   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
944   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
945   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
946   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
947   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
948   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
949   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
950   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
951   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
952   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
953   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
954   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
955   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
956   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
957   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
958   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
959   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
960   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
961   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
962   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
963   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
964   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
965   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
966   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
967   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
968   {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
969   {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
970   {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
971 };
972
973 static MY_UNICASE_INFO plane1F[]={
974   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
975   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
976   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
977   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
978   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
979   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
980   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
981   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
982   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
983   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
984   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
985   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
986   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
987   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
988   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
989   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
990   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
991   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
992   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
993   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
994   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
995   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
996   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
997   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
998   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
999   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1000   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1001   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1002   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
1003   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1004   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1005   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1006   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1007   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1008   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1009   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
1010   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1011   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1012   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1013   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
1014   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
1015   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
1016   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
1017   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
1018   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
1019   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
1020   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
1021   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
1022   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1023   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1024   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1025   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1026   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1027   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1028   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1029   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1030   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1031   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1032   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1033   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1034   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1035   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1036   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1037   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
1038   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1039   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1040   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1041   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1042   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1043   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1044   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1045   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1046   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1047   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1048   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1049   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1050   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1051   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1052   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1053   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1054   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1055   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1056   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1057   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1058   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1059   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1060   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1061   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1062   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1063   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
1064   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
1065   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
1066   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1067   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1068   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
1069   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
1070   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
1071   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
1072   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
1073   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
1074   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1075   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1076   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
1077   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
1078   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1079   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
1080   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
1081   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
1082   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1083   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1084   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
1085   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
1086   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1087   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
1088   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
1089   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
1090   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1091   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1092   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
1093   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
1094   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
1095   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
1096   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
1097   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
1098   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1099   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1100   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
1101   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
1102 };
1103
1104 static MY_UNICASE_INFO plane21[]={
1105   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
1106   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
1107   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
1108   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
1109   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
1110   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
1111   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
1112   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
1113   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
1114   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
1115   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
1116   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
1117   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
1118   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
1119   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
1120   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
1121   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
1122   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
1123   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
1124   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
1125   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
1126   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
1127   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
1128   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
1129   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
1130   {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
1131   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
1132   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
1133   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
1134   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
1135   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
1136   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
1137   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
1138   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
1139   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
1140   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
1141   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
1142   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
1143   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
1144   {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
1145   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
1146   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
1147   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
1148   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
1149   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
1150   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
1151   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
1152   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
1153   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1154   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1155   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1156   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1157   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1158   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1159   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1160   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1161   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1162   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1163   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1164   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1165   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1166   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1167   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1168   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1169   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
1170   {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
1171   {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
1172   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
1173   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
1174   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
1175   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
1176   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
1177   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
1178   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
1179   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
1180   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
1181   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
1182   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
1183   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
1184   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
1185   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
1186   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
1187   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
1188   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
1189   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
1190   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
1191   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
1192   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
1193   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
1194   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
1195   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
1196   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
1197   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
1198   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
1199   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
1200   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
1201   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
1202   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
1203   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
1204   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
1205   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
1206   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
1207   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
1208   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
1209   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
1210   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
1211   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
1212   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
1213   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
1214   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
1215   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
1216   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
1217   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
1218   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
1219   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
1220   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
1221   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
1222   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
1223   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
1224   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
1225   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
1226   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
1227   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
1228   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
1229   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
1230   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
1231   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
1232   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
1233 };
1234
1235 static MY_UNICASE_INFO plane24[]={
1236   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
1237   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
1238   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
1239   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
1240   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
1241   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
1242   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
1243   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
1244   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
1245   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
1246   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
1247   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
1248   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
1249   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
1250   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
1251   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
1252   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
1253   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
1254   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
1255   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
1256   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
1257   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
1258   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
1259   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
1260   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
1261   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
1262   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
1263   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
1264   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
1265   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
1266   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
1267   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
1268   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
1269   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
1270   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
1271   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
1272   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
1273   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
1274   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
1275   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
1276   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
1277   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
1278   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
1279   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
1280   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
1281   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
1282   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
1283   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
1284   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
1285   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
1286   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
1287   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
1288   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
1289   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
1290   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
1291   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
1292   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
1293   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
1294   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
1295   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
1296   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
1297   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
1298   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
1299   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
1300   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
1301   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
1302   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
1303   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
1304   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
1305   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
1306   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
1307   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
1308   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
1309   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
1310   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
1311   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
1312   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
1313   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
1314   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
1315   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
1316   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
1317   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
1318   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
1319   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
1320   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
1321   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
1322   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
1323   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
1324   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
1325   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
1326   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
1327   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1328   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1329   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1330   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1331   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1332   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1333   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1334   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1335   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1336   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1337   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1338   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1339   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1340   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1341   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1342   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1343   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1344   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1345   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1346   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1347   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1348   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1349   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1350   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1351   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1352   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1353   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
1354   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
1355   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
1356   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
1357   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
1358   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
1359   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
1360   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
1361   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
1362   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
1363   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
1364 };
1365
1366 static MY_UNICASE_INFO planeFF[]={
1367   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
1368   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
1369   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
1370   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
1371   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
1372   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
1373   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
1374   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
1375   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
1376   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
1377   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
1378   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
1379   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
1380   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
1381   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
1382   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
1383   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
1384   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1385   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1386   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1387   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1388   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1389   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1390   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1391   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1392   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1393   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1394   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1395   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1396   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
1397   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
1398   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
1399   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
1400   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1401   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1402   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1403   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1404   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1405   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1406   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1407   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1408   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1409   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1410   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1411   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1412   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
1413   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
1414   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
1415   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
1416   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
1417   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
1418   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
1419   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
1420   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
1421   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
1422   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
1423   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
1424   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
1425   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
1426   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
1427   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
1428   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
1429   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
1430   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
1431   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
1432   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
1433   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
1434   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
1435   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
1436   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
1437   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
1438   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
1439   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
1440   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
1441   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
1442   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
1443   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
1444   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
1445   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
1446   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
1447   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
1448   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
1449   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
1450   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
1451   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
1452   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
1453   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
1454   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
1455   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
1456   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
1457   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
1458   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
1459   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
1460   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
1461   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
1462   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
1463   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
1464   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
1465   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
1466   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
1467   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
1468   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
1469   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
1470   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
1471   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
1472   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
1473   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
1474   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
1475   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
1476   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
1477   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
1478   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
1479   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
1480   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
1481   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
1482   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
1483   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
1484   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
1485   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
1486   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
1487   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
1488   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
1489   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
1490   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
1491   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
1492   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
1493   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
1494   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
1495 };
1496
1497 namespace stardict_collation {
1498 MY_UNICASE_INFO *my_unicase_default[256]={
1499  plane00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1500     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1501     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1502     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1503     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1504     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1505     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1506     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1507     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1508     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1509     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1510     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1511     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1512     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1513     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1514     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1515     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1516     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1517     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1518     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1519     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1520     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1521     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1522     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1523     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1524     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1525     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1526     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1527     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1528     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1529     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1530     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1531
1532 };
1533
1534 }; //namespace
1535
1536 #if 0
1537 /*
1538   Turkish lower/upper mapping:
1539   1. LOWER(0x0049 LATIN CAPITAL LETTER I) -> 
1540            0x0131 LATIN SMALL   LETTER DOTLESS I
1541   2. UPPER(0x0069 LATIN SMALL   LETTER I) -> 
1542            0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1543 */
1544
1545 static MY_UNICASE_INFO turk00[]=
1546 {
1547   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
1548   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
1549   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
1550   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
1551   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
1552   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
1553   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
1554   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
1555   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
1556   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
1557   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
1558   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
1559   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
1560   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
1561   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
1562   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
1563   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
1564   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
1565   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
1566   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
1567   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
1568   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
1569   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
1570   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
1571   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
1572   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
1573   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
1574   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
1575   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
1576   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
1577   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
1578   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
1579   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
1580   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1581   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1582   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1583   {0x0048,0x0068,0x0048},  {0x0049,0x0131,0x0049},
1584   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1585   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1586   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1587   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1588   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1589   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1590   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1591   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1592   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
1593   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
1594   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
1595   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
1596   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1597   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1598   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1599   {0x0048,0x0068,0x0048},  {0x0130,0x0069,0x0049},
1600   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1601   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1602   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1603   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1604   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1605   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1606   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1607   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1608   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
1609   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
1610   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
1611   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
1612   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
1613   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
1614   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
1615   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
1616   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
1617   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
1618   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
1619   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
1620   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
1621   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
1622   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
1623   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
1624   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
1625   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
1626   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
1627   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
1628   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
1629   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
1630   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
1631   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
1632   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
1633   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
1634   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
1635   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
1636   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
1637   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
1638   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
1639   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
1640   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
1641   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
1642   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
1643   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1644   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1645   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1646   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1647   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1648   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1649   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1650   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1651   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1652   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1653   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1654   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
1655   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1656   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1657   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1658   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
1659   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1660   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1661   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1662   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1663   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1664   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1665   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1666   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1667   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1668   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1669   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1670   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
1671   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1672   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1673   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1674   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
1675 };
1676
1677
1678
1679 MY_UNICASE_INFO *my_unicase_turkish[256]=
1680 {
1681   turk00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1682     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1683     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1684     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1685     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1686     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1687     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1688     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1689     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1690     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1691     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1692     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1693     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1694     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1695     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1696     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1697     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1698     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1699     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1700     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1701     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1702     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1703     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1704     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1705     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1706     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1707     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1708     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1709     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1710     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1711     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1712     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1713 };
1714 #endif
1715
1716
1717 #if 0
1718 /*
1719 ** Compare string against string with wildcard
1720 ** This function is used in UTF8 and UCS2
1721 **
1722 **      0 if matched
1723 **      -1 if not matched with wildcard
1724 **       1 if matched with wildcard
1725 */
1726
1727 int my_wildcmp_unicode(CHARSET_INFO *cs,
1728                        const char *str,const char *str_end,
1729                        const char *wildstr,const char *wildend,
1730                        int escape, int w_one, int w_many,
1731                        MY_UNICASE_INFO **weights)
1732 {
1733   int result= -1;                       /* Not found, using wildcards */
1734   my_wc_t s_wc, w_wc;
1735   int scan, plane;
1736   int (*mb_wc)(struct charset_info_st *cs, my_wc_t *wc,
1737                const unsigned char *s,const unsigned char *e);
1738   mb_wc= cs->cset->mb_wc;
1739   
1740   while (wildstr != wildend)
1741   {
1742     while (1)
1743     {
1744       my_bool escaped= 0;
1745       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
1746                        (const uchar*)wildend)) <= 0)
1747         return 1;
1748
1749       if (w_wc == (my_wc_t)w_many)
1750       {
1751         result= 1;                              /* Found an anchor char */
1752         break;
1753       }
1754
1755       wildstr+= scan;
1756       if (w_wc ==  (my_wc_t)escape && wildstr < wildend)
1757       {
1758         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
1759                          (const uchar*)wildend)) <= 0)
1760           return 1;
1761         wildstr+= scan;
1762         escaped= 1;
1763       }
1764       
1765       if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
1766                        (const uchar*)str_end)) <= 0)
1767         return 1;
1768       str+= scan;
1769       
1770       if (!escaped && w_wc == (my_wc_t)w_one)
1771       {
1772         result= 1;                              /* Found an anchor char */
1773       }
1774       else
1775       {
1776         if (weights)
1777         {
1778           plane=(s_wc>>8) & 0xFF;
1779           s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
1780           plane=(w_wc>>8) & 0xFF;
1781           w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
1782         }
1783         if (s_wc != w_wc)
1784           return 1;                             /* No match */
1785       }
1786       if (wildstr == wildend)
1787         return (str != str_end);                /* Match if both are at end */
1788     }
1789     
1790     
1791     if (w_wc == (my_wc_t)w_many)
1792     {                                           /* Found w_many */
1793     
1794       /* Remove any '%' and '_' from the wild search string */
1795       for ( ; wildstr != wildend ; )
1796       {
1797         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
1798                          (const uchar*)wildend)) <= 0)
1799           return 1;
1800         
1801         if (w_wc == (my_wc_t)w_many)
1802         {
1803           wildstr+= scan;
1804           continue;
1805         } 
1806         
1807         if (w_wc == (my_wc_t)w_one)
1808         {
1809           wildstr+= scan;
1810           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
1811                            (const uchar*)str_end)) <=0)
1812             return 1;
1813           str+= scan;
1814           continue;
1815         }
1816         break;                                  /* Not a wild character */
1817       }
1818       
1819       if (wildstr == wildend)
1820         return 0;                               /* Ok if w_many is last */
1821       
1822       if (str == str_end)
1823         return -1;
1824       
1825       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
1826                        (const uchar*)wildend)) <=0)
1827         return 1;
1828       wildstr+= scan;
1829       
1830       if (w_wc ==  (my_wc_t)escape)
1831       {
1832         if (wildstr < wildend)
1833         {
1834           if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
1835                            (const uchar*)wildend)) <=0)
1836             return 1;
1837           wildstr+= scan;
1838         }
1839       }
1840       
1841       while (1)
1842       {
1843         /* Skip until the first character from wildstr is found */
1844         while (str != str_end)
1845         {
1846           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
1847                            (const uchar*)str_end)) <=0)
1848             return 1;
1849           if (weights)
1850           {
1851             plane=(s_wc>>8) & 0xFF;
1852             s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
1853             plane=(w_wc>>8) & 0xFF;
1854             w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
1855           }
1856           
1857           if (s_wc == w_wc)
1858             break;
1859           str+= scan;
1860         }
1861         if (str == str_end)
1862           return -1;
1863         
1864         str+= scan;
1865         result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
1866                                    escape, w_one, w_many,
1867                                    weights);
1868         if (result <= 0)
1869           return result;
1870       } 
1871     }
1872   }
1873   return (str != str_end ? 1 : 0);
1874 }
1875 #endif
1876
1877 #endif
1878
1879
1880
1881 #ifdef HAVE_CHARSET_utf8
1882
1883 #if 0
1884 /*
1885   We consider bytes with code more than 127 as a letter.
1886   This garantees that word boundaries work fine with regular
1887   expressions. Note, there is no need to mark byte 255  as a
1888   letter, it is illegal byte in UTF8.
1889 */
1890 static uchar ctype_utf8[] = {
1891     0,
1892    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
1893    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1894    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1895   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
1896    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
1897     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
1898    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
1899     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
1900     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1901     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1902     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1903     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1904     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1905     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1906     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1907     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
1908 };
1909
1910 /* The below are taken from usa7 implementation */
1911
1912 static uchar to_lower_utf8[] = {
1913     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1914    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1915    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1916    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1917    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
1918   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
1919    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
1920   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
1921   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
1922   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
1923   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
1924   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
1925   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
1926   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
1927   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
1928   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
1929 };
1930
1931 static uchar to_upper_utf8[] = {
1932     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1933    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1934    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1935    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1936    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1937    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1938    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1939    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
1940   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
1941   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
1942   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
1943   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
1944   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
1945   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
1946   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
1947   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
1948 };
1949 #endif
1950
1951 static inline int bincmp(const uchar *s, const uchar *se,
1952                          const uchar *t, const uchar *te)
1953 {
1954   int slen= (int) (se-s), tlen= (int) (te-t);
1955   int len=min(slen,tlen);
1956   int cmp= memcmp(s,t,len);
1957   return cmp ? cmp : slen-tlen;
1958 }
1959
1960 static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)),
1961                        my_wc_t * pwc, const uchar *s, const uchar *e)
1962 {
1963   unsigned char c;
1964
1965   if (s >= e)
1966     return MY_CS_TOOSMALL;
1967
1968   c= s[0];
1969   if (c < 0x80)
1970   {
1971     *pwc = c;
1972     return 1;
1973   }
1974   else if (c < 0xc2)
1975     return MY_CS_ILSEQ;
1976   else if (c < 0xe0)
1977   {
1978     if (s+2 > e) /* We need 2 characters */
1979       return MY_CS_TOOSMALL2;
1980
1981     if (!((s[1] ^ 0x80) < 0x40))
1982       return MY_CS_ILSEQ;
1983
1984     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
1985     return 2;
1986   }
1987   else if (c < 0xf0)
1988   {
1989     if (s+3 > e) /* We need 3 characters */
1990       return MY_CS_TOOSMALL3;
1991
1992     if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0)))
1993       return MY_CS_ILSEQ;
1994
1995     *pwc = ((my_wc_t) (c & 0x0f) << 12)   |
1996            ((my_wc_t) (s[1] ^ 0x80) << 6) |
1997             (my_wc_t) (s[2] ^ 0x80);
1998
1999     return 3;
2000   }
2001 #ifdef UNICODE_32BIT
2002   else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32)
2003   {
2004     if (s+4 > e) /* We need 4 characters */
2005       return MY_CS_TOOSMALL4;
2006
2007     if (!((s[1] ^ 0x80) < 0x40 &&
2008           (s[2] ^ 0x80) < 0x40 &&
2009           (s[3] ^ 0x80) < 0x40 &&
2010           (c >= 0xf1 || s[1] >= 0x90)))
2011       return MY_CS_ILSEQ;
2012
2013     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
2014            ((my_wc_t) (s[1] ^ 0x80) << 12) |
2015            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
2016             (my_wc_t) (s[3] ^ 0x80);
2017
2018     return 4;
2019   }
2020    else if (c < 0xfc && sizeof(my_wc_t)*8 >= 32)
2021   {
2022     if (s+5 >e) /* We need 5 characters */
2023       return MY_CS_TOOSMALL5;
2024
2025     if (!((s[1] ^ 0x80) < 0x40 &&
2026           (s[2] ^ 0x80) < 0x40 &&
2027           (s[3] ^ 0x80) < 0x40 &&
2028           (s[4] ^ 0x80) < 0x40 &&
2029           (c >= 0xf9 || s[1] >= 0x88)))
2030       return MY_CS_ILSEQ;
2031
2032     *pwc = ((my_wc_t) (c & 0x03) << 24) |
2033            ((my_wc_t) (s[1] ^ 0x80) << 18) |
2034            ((my_wc_t) (s[2] ^ 0x80) << 12) |
2035            ((my_wc_t) (s[3] ^ 0x80) << 6) |
2036             (my_wc_t) (s[4] ^ 0x80);
2037     return 5;
2038   }
2039   else if (c < 0xfe && sizeof(my_wc_t)*8 >= 32)
2040   {
2041     if ( s+6 >e ) /* We need 6 characters */
2042       return MY_CS_TOOSMALL6;
2043
2044     if (!((s[1] ^ 0x80) < 0x40   &&
2045           (s[2] ^ 0x80) < 0x40   &&
2046           (s[3] ^ 0x80) < 0x40   &&
2047           (s[4] ^ 0x80) < 0x40   &&
2048           (s[5] ^ 0x80) < 0x40   &&
2049           (c >= 0xfd || s[1] >= 0x84)))
2050       return MY_CS_ILSEQ;
2051
2052     *pwc = ((my_wc_t) (c & 0x01) << 30)
2053       | ((my_wc_t) (s[1] ^ 0x80) << 24)
2054       | ((my_wc_t) (s[2] ^ 0x80) << 18)
2055       | ((my_wc_t) (s[3] ^ 0x80) << 12)
2056       | ((my_wc_t) (s[4] ^ 0x80) << 6)
2057       | (my_wc_t) (s[5] ^ 0x80);
2058     return 6;
2059   }
2060 #endif
2061   return MY_CS_ILSEQ;
2062 }
2063
2064 #if 0
2065 static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)) ,
2066                  my_wc_t wc, uchar *r, uchar *e)
2067 {
2068   int count;
2069
2070   if (r >= e)
2071     return MY_CS_TOOSMALL;
2072
2073   if (wc < 0x80)
2074     count = 1;
2075   else if (wc < 0x800)
2076     count = 2;
2077   else if (wc < 0x10000)
2078     count = 3;
2079 #ifdef UNICODE_32BIT
2080   else if (wc < 0x200000)
2081     count = 4;
2082   else if (wc < 0x4000000)
2083     count = 5;
2084   else if (wc <= 0x7fffffff)
2085     count = 6;
2086 #endif
2087     else return MY_CS_ILUNI;
2088
2089   /*
2090     e is a character after the string r, not the last character of it.
2091     Because of it (r+count > e), not (r+count-1 >e )
2092    */
2093   if ( r+count > e )
2094     return MY_CS_TOOSMALLN(count);
2095
2096   switch (count) {
2097     /* Fall through all cases!!! */
2098 #ifdef UNICODE_32BIT
2099     case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000;
2100     case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000;
2101     case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
2102 #endif
2103     case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
2104     case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;
2105     case 1: r[0] = (uchar) wc;
2106   }
2107   return count;
2108 }
2109
2110
2111 static uint my_caseup_utf8(CHARSET_INFO *cs, char *src, uint srclen,
2112                                              char *dst, uint dstlen)
2113 {
2114   my_wc_t wc;
2115   int srcres, dstres;
2116   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
2117   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2118   //DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
2119
2120   while ((src < srcend) &&
2121          (srcres= my_utf8_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0)
2122   {
2123     int plane= (wc>>8) & 0xFF;
2124     wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].toupper : wc;
2125     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
2126       break;
2127     src+= srcres;
2128     dst+= dstres;
2129   }
2130   return (uint) (dst - dst0);
2131 }
2132
2133 static void my_hash_sort_utf8(CHARSET_INFO *cs, const uchar *s, uint slen,
2134                               ulong *n1, ulong *n2)
2135 {
2136   my_wc_t wc;
2137   int res;
2138   const uchar *e=s+slen;
2139   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2140
2141   /*
2142     Remove end space. We have to do this to be able to compare
2143     'A ' and 'A' as identical
2144   */
2145   while (e > s && e[-1] == ' ')
2146     e--;
2147
2148   while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
2149   {
2150     int plane = (wc>>8) & 0xFF;
2151     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc;
2152     n1[0]^= (((n1[0] & 63)+n2[0])*(wc & 0xFF))+ (n1[0] << 8);
2153     n2[0]+=3;
2154     n1[0]^= (((n1[0] & 63)+n2[0])*(wc >> 8))+ (n1[0] << 8);
2155     n2[0]+=3;
2156     s+=res;
2157   }
2158 }
2159
2160
2161 static void my_caseup_str_utf8(CHARSET_INFO * cs, char * s)
2162 {
2163   uint len= (uint) strlen(s);
2164   my_caseup_utf8(cs, s, len, s, len);
2165 }
2166
2167
2168 static uint my_casedn_utf8(CHARSET_INFO *cs, char *src, uint srclen,
2169                                              char *dst, uint dstlen)
2170 {
2171   my_wc_t wc;
2172   int srcres, dstres;
2173   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
2174   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2175   //DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
2176
2177   while ((src < srcend) &&
2178          (srcres= my_utf8_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0)
2179   {
2180     int plane= (wc>>8) & 0xFF;
2181     wc= uni_plane[plane] ? uni_plane[plane][wc & 0xFF].tolower : wc;
2182     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
2183       break;
2184     src+= srcres;
2185     dst+= dstres;
2186   }
2187   return (uint) (dst - dst0);
2188 }
2189
2190 static void my_casedn_str_utf8(CHARSET_INFO *cs, char * s)
2191 {
2192   uint len= (uint) strlen(s);
2193   my_casedn_utf8(cs, s, len, s, len);
2194 }
2195 #endif
2196
2197
2198 static int my_strnncoll_utf8(CHARSET_INFO *cs,
2199                              const uchar *s, uint slen,
2200                              const uchar *t, uint tlen,
2201                              my_bool t_is_prefix)
2202 {
2203   int s_res,t_res;
2204   my_wc_t s_wc,t_wc;
2205   const uchar *se=s+slen;
2206   const uchar *te=t+tlen;
2207   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2208
2209   while ( s < se && t < te )
2210   {
2211     int plane;
2212     s_res=my_utf8_uni(cs,&s_wc, s, se);
2213     t_res=my_utf8_uni(cs,&t_wc, t, te);
2214
2215     if ( s_res <= 0 || t_res <= 0 )
2216     {
2217       /* Incorrect string, compare byte by byte value */
2218       return bincmp(s, se, t, te);
2219     }
2220
2221     plane=(s_wc>>8) & 0xFF;
2222     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
2223     plane=(t_wc>>8) & 0xFF;
2224     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
2225     if ( s_wc != t_wc )
2226     {
2227       return  s_wc > t_wc ? 1 : -1;
2228     }
2229
2230     s+=s_res;
2231     t+=t_res;
2232   }
2233   return (int) (t_is_prefix ? t-te : ((se-s) - (te-t)));
2234 }
2235
2236 #if 0
2237 /*
2238   Compare strings, discarding end space
2239
2240   SYNOPSIS
2241     my_strnncollsp_utf8()
2242     cs                  character set handler
2243     a                   First string to compare
2244     a_length            Length of 'a'
2245     b                   Second string to compare
2246     b_length            Length of 'b'
2247     diff_if_only_endspace_difference
2248                         Set to 1 if the strings should be regarded as different
2249                         if they only difference in end space
2250
2251   IMPLEMENTATION
2252     If one string is shorter as the other, then we space extend the other
2253     so that the strings have equal length.
2254
2255     This will ensure that the following things hold:
2256
2257     "a"  == "a "
2258     "a\0" < "a"
2259     "a\0" < "a "
2260
2261   RETURN
2262     < 0  a <  b
2263     = 0  a == b
2264     > 0  a > b
2265 */
2266
2267 /*static int my_strnncollsp_utf8(CHARSET_INFO *cs,
2268                                const uchar *s, uint slen,
2269                                const uchar *t, uint tlen,
2270                                my_bool diff_if_only_endspace_difference)*/
2271 int my_strnncollsp_utf8(const uchar *s, uint slen,
2272                                const uchar *t, uint tlen,
2273                                my_bool diff_if_only_endspace_difference)
2274 {
2275   int s_res, t_res, res;
2276   my_wc_t s_wc,t_wc;
2277   const uchar *se= s+slen, *te= t+tlen;
2278   //MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2279   MY_UNICASE_INFO **uni_plane= my_unicase_default;
2280
2281 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
2282   diff_if_only_endspace_difference= 0;
2283 #endif
2284
2285   while ( s < se && t < te )
2286   {
2287     int plane;
2288     s_res=my_utf8_uni(&s_wc, s, se);
2289     t_res=my_utf8_uni(&t_wc, t, te);
2290
2291     if ( s_res <= 0 || t_res <= 0 )
2292     {
2293       /* Incorrect string, compare byte by byte value */
2294       return bincmp(s, se, t, te);
2295     }
2296
2297     plane=(s_wc>>8) & 0xFF;
2298     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
2299     plane=(t_wc>>8) & 0xFF;
2300     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
2301     if ( s_wc != t_wc )
2302     {
2303       return  s_wc > t_wc ? 1 : -1;
2304     }
2305
2306     s+=s_res;
2307     t+=t_res;
2308   }
2309
2310   slen= (uint) (se-s);
2311   tlen= (uint) (te-t);
2312   res= 0;
2313
2314   if (slen != tlen)
2315   {
2316     int swap= 1;
2317     if (diff_if_only_endspace_difference)
2318       res= 1;                                   /* Assume 'a' is bigger */
2319     if (slen < tlen)
2320     {
2321       slen= tlen;
2322       s= t;
2323       se= te;
2324       swap= -1;
2325       res= -res;
2326     }
2327     /*
2328       This following loop uses the fact that in UTF-8
2329       all multibyte characters are greater than space,
2330       and all multibyte head characters are greater than
2331       space. It means if we meet a character greater
2332       than space, it always means that the longer string
2333       is greater. So we can reuse the same loop from the
2334       8bit version, without having to process full multibute
2335       sequences.
2336     */
2337     for ( ; s < se; s++)
2338     {
2339       if (*s != ' ')
2340         return (*s < ' ') ? -swap : swap;
2341     }
2342   }
2343   return res;
2344 }
2345
2346
2347 /*
2348   Compare 0-terminated UTF8 strings.
2349
2350   SYNOPSIS
2351     my_strcasecmp_utf8()
2352     cs                  character set handler
2353     s                   First 0-terminated string to compare
2354     t                   Second 0-terminated string to compare
2355
2356   IMPLEMENTATION
2357
2358   RETURN
2359     - negative number if s < t
2360     - positive number if s > t
2361     - 0 is the strings are equal
2362 */
2363
2364 static
2365 int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t)
2366 {
2367   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2368   while (s[0] && t[0])
2369   {
2370     my_wc_t s_wc,t_wc;
2371     
2372     if ((uchar) s[0] < 128)
2373     {
2374       /* 
2375         s[0] is between 0 and 127.
2376         It represents a single byte character.
2377         Convert it into weight according to collation.
2378       */
2379       s_wc= plane00[(uchar) s[0]].tolower;
2380       s++;
2381     }
2382     else
2383     {
2384       int plane, res;
2385       
2386       /*
2387         Scan a multibyte character.
2388
2389         In the future it is worth to write a special version of my_utf8_uni()
2390         for 0-terminated strings which will not take in account length. Now
2391         we call the regular version of my_utf8_uni() with s+3 in the
2392         last argument. s+3 is enough to scan any multibyte sequence.
2393
2394         Calling the regular version of my_utf8_uni is safe for 0-terminated
2395         strings: we will never lose the end of the string:
2396         If we have 0 character in the middle of a multibyte sequence,
2397         then my_utf8_uni will always return a negative number, so the
2398         loop with finish.
2399       */
2400       
2401       res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3);
2402       
2403       /* 
2404          In the case of wrong multibyte sequence we will
2405          call strcmp() for byte-to-byte comparison.
2406       */
2407       if (res <= 0)
2408         return strcmp(s, t);
2409       s+= res;
2410       
2411       /* Convert Unicode code into weight according to collation */
2412       plane=(s_wc>>8) & 0xFF;
2413       s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].tolower : s_wc;
2414     }
2415     
2416     
2417     /* Do the same for the second string */
2418     
2419     if ((uchar) t[0] < 128)
2420     {
2421       /* Convert single byte character into weight */
2422       t_wc= plane00[(uchar) t[0]].tolower;
2423       t++;
2424     }
2425     else
2426     {
2427       int plane;
2428       int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3);
2429       if (res <= 0)
2430         return strcmp(s, t);
2431       t+= res;
2432       
2433       /* Convert code into weight */
2434       plane=(t_wc>>8) & 0xFF;
2435       t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].tolower : t_wc;
2436     }
2437     
2438     /* Now we have two weights, let's compare them */
2439     if ( s_wc != t_wc )
2440       return  ((int) s_wc) - ((int) t_wc);
2441   }
2442   return ((int)(uchar)s[0]) - ((int) (uchar) t[0]);
2443 }
2444
2445
2446 static
2447 int my_wildcmp_utf8(CHARSET_INFO *cs,
2448                     const char *str,const char *str_end,
2449                     const char *wildstr,const char *wildend,
2450                     int escape, int w_one, int w_many)
2451 {
2452   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2453   return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
2454                             escape,w_one,w_many,uni_plane); 
2455 }
2456
2457
2458 static
2459 uint my_strnxfrmlen_utf8(CHARSET_INFO *cs __attribute__((unused)), uint len)
2460 {
2461   return (len * 2 + 2) / 3;
2462 }
2463
2464 static int my_strnxfrm_utf8(CHARSET_INFO *cs,
2465                             uchar *dst, uint dstlen,
2466                             const uchar *src, uint srclen)
2467 {
2468   my_wc_t wc;
2469   int res;
2470   int plane;
2471   uchar *de= dst + dstlen;
2472   uchar *de_beg= de - 1;
2473   const uchar *se = src + srclen;
2474   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2475
2476   while (dst < de_beg)
2477   {
2478     if ((res=my_utf8_uni(cs,&wc, src, se)) <= 0)
2479       break;
2480     src+=res;
2481
2482     plane=(wc>>8) & 0xFF;
2483     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc;
2484
2485     *dst++= (uchar)(wc >> 8);
2486     *dst++= (uchar)(wc & 0xFF);
2487     
2488   }
2489   
2490   while (dst < de_beg) /* Fill the tail with keys for space character */
2491   {
2492     *dst++= 0x00;
2493     *dst++= 0x20;
2494   }
2495   
2496   if (dst < de)  /* Clear the last byte, if "dstlen" was an odd number */
2497     *dst= 0x00;
2498   
2499   return dstlen;
2500 }
2501
2502 static int my_ismbchar_utf8(CHARSET_INFO *cs,const char *b, const char *e)
2503 {
2504   my_wc_t wc;
2505   int  res=my_utf8_uni(cs,&wc, (const uchar*)b, (const uchar*)e);
2506   return (res>1) ? res : 0;
2507 }
2508
2509 static int my_mbcharlen_utf8(CHARSET_INFO *cs  __attribute__((unused)) , uint c)
2510 {
2511   if (c < 0x80)
2512     return 1;
2513   else if (c < 0xc2)
2514     return 0; /* Illegal mb head */
2515   else if (c < 0xe0)
2516     return 2;
2517   else if (c < 0xf0)
2518     return 3;
2519 #ifdef UNICODE_32BIT
2520   else if (c < 0xf8)
2521     return 4;
2522   else if (c < 0xfc)
2523     return 5;
2524   else if (c < 0xfe)
2525     return 6;
2526 #endif
2527   return 0; /* Illegal mb head */;
2528 }
2529 #endif
2530
2531 static MY_COLLATION_HANDLER my_collation_ci_handler =
2532 {
2533     NULL,               /* init */
2534     my_strnncoll_utf8,
2535     //my_strnncollsp_utf8,
2536     //my_strnxfrm_utf8,
2537     //my_strnxfrmlen_utf8,
2538     //my_like_range_mb,
2539     //my_wildcmp_utf8,
2540     //my_strcasecmp_utf8,
2541     //my_instr_mb,
2542     //my_hash_sort_utf8,
2543     //my_propagate_complex
2544 };
2545
2546 namespace stardict_collation {
2547
2548 MY_CHARSET_HANDLER my_charset_utf8_handler=
2549 {
2550     NULL,               /* init */
2551     //my_ismbchar_utf8,
2552     //my_mbcharlen_utf8,
2553     //my_numchars_mb,
2554     //my_charpos_mb,
2555     //my_well_formed_len_mb,
2556     //my_lengthsp_8bit,
2557     //my_numcells_mb,
2558     my_utf8_uni,
2559     //my_uni_utf8,
2560     //my_mb_ctype_mb,
2561     //my_caseup_str_utf8,
2562     //my_casedn_str_utf8,
2563     //my_caseup_utf8,
2564     //my_casedn_utf8,
2565     //my_snprintf_8bit,
2566     //my_long10_to_str_8bit,
2567     //my_longlong10_to_str_8bit,
2568     //my_fill_8bit,
2569     //my_strntol_8bit,
2570     //my_strntoul_8bit,
2571     //my_strntoll_8bit,
2572     //my_strntoull_8bit,
2573     //my_strntod_8bit,
2574     //my_strtoll10_8bit,
2575     //my_scan_8bit
2576 };
2577
2578 CHARSET_INFO my_charset_utf8_general_ci=
2579 {
2580     //33,0,0,             /* number       */
2581     //MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
2582     //"utf8",             /* cs name      */
2583     //"utf8_general_ci",  /* name         */
2584     //"",                 /* comment      */
2585     NULL,               /* tailoring    */
2586     //ctype_utf8,         /* ctype        */
2587     //to_lower_utf8,      /* to_lower     */
2588     //to_upper_utf8,      /* to_upper     */
2589     //to_upper_utf8,      /* sort_order   */
2590     NULL,
2591     NULL,               /* contractions */
2592     NULL,               /* sort_order_big*/
2593     //NULL,               /* tab_to_uni   */
2594     //NULL,               /* tab_from_uni */
2595     my_unicase_default, /* caseinfo     */
2596     //NULL,               /* state_map    */
2597     //NULL,               /* ident_map    */
2598     //1,                  /* strxfrm_multiply */
2599     //1,                  /* caseup_multiply  */
2600     //1,                  /* casedn_multiply  */
2601     //1,                  /* mbminlen     */
2602     //3,                  /* mbmaxlen     */
2603     //0,                  /* min_sort_char */
2604     //0xFFFF,             /* max_sort_char */
2605     //' ',                /* pad char      */
2606     //0,                  /* escape_with_backslash_is_dangerous */
2607     &my_charset_utf8_handler,
2608     &my_collation_ci_handler
2609 };
2610
2611
2612 CHARSET_INFO my_charset_utf8_bin=
2613 {
2614     //83,0,0,             /* number       */
2615     //MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE, /* state  */
2616     //"utf8",             /* cs name      */
2617     //"utf8_bin",         /* name         */
2618     //"",                 /* comment      */
2619     NULL,               /* tailoring    */
2620     //ctype_utf8,         /* ctype        */
2621     //to_lower_utf8,      /* to_lower     */
2622     //to_upper_utf8,      /* to_upper     */
2623     NULL,               /* sort_order   */
2624     NULL,               /* contractions */
2625     NULL,               /* sort_order_big*/
2626     //NULL,               /* tab_to_uni   */
2627     //NULL,               /* tab_from_uni */
2628     my_unicase_default, /* caseinfo     */
2629     //NULL,               /* state_map    */
2630     //NULL,               /* ident_map    */
2631     //1,                  /* strxfrm_multiply */
2632     //1,                  /* caseup_multiply  */
2633     //1,                  /* casedn_multiply  */
2634     //1,                  /* mbminlen     */
2635     //3,                  /* mbmaxlen     */
2636     //0,                  /* min_sort_char */
2637     //255,                /* max_sort_char */
2638     //' ',                /* pad char      */
2639     //0,                  /* escape_with_backslash_is_dangerous */
2640     &my_charset_utf8_handler,
2641     &my_collation_mb_bin_handler
2642 };
2643
2644 }; //namespace
2645
2646 //#ifdef HAVE_UTF8_GENERAL_CS
2647 #if 0
2648
2649 /*
2650  * These functions bacically do the same as their original, except
2651  * that they return 0 only when two comparing unicode strings are
2652  * strictly the same in case-sensitive way.  See "save_diff" local
2653  * variable to what they actually do.
2654  */
2655
2656 static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, 
2657                                 const uchar *s, uint slen,
2658                                 const uchar *t, uint tlen,
2659                                 my_bool t_is_prefix)
2660 {
2661   int s_res,t_res;
2662   my_wc_t s_wc,t_wc;
2663   const uchar *se=s+slen;
2664   const uchar *te=t+tlen;
2665   int save_diff = 0;
2666   int diff;
2667
2668   while ( s < se && t < te )
2669   {
2670     int plane;
2671     s_res=my_utf8_uni(cs,&s_wc, s, se);
2672     t_res=my_utf8_uni(cs,&t_wc, t, te);
2673     
2674     if ( s_res <= 0 || t_res <= 0 )
2675
2676     {
2677       /* Incorrect string, compare by char value */
2678       return ((int)s[0]-(int)t[0]); 
2679     }
2680     
2681     if ( save_diff == 0 )
2682     {
2683       save_diff = ((int)s_wc) - ((int)t_wc);
2684     }
2685     plane=(s_wc>>8) & 0xFF;
2686     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
2687     plane=(t_wc>>8) & 0xFF;
2688     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
2689     if ( s_wc != t_wc )
2690     {
2691       return  ((int) s_wc) - ((int) t_wc);
2692     }
2693     
2694     s+=s_res;
2695     t+=t_res;
2696   }
2697   diff = ( (se-s) - (te-t) );
2698   return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff);
2699 }
2700
2701 static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, 
2702                                   const uchar *s, uint slen,
2703                                   const uchar *t, uint tlen)
2704 {
2705   int s_res,t_res;
2706   my_wc_t s_wc,t_wc;
2707   const uchar *se= s+slen;
2708   const uchar *te= t+tlen;
2709   int save_diff = 0;
2710   
2711   while ( s < se && t < te )
2712   {
2713     int plane;
2714     s_res=my_utf8_uni(cs,&s_wc, s, se);
2715     t_res=my_utf8_uni(cs,&t_wc, t, te);
2716     
2717     if ( s_res <= 0 || t_res <= 0 )
2718     {
2719       /* Incorrect string, compare by char value */
2720       return ((int)s[0]-(int)t[0]); 
2721     }
2722     
2723     if ( save_diff == 0 )
2724     {
2725       save_diff = ((int)s_wc) - ((int)t_wc);
2726     }
2727     plane=(s_wc>>8) & 0xFF;
2728     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
2729     plane=(t_wc>>8) & 0xFF;
2730     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
2731     if ( s_wc != t_wc )
2732     {
2733       return  ((int) s_wc) - ((int) t_wc);
2734     }
2735     
2736     s+=s_res;
2737     t+=t_res;
2738   }
2739   
2740   slen= se-s;
2741   tlen= te-t;
2742   
2743   if (slen != tlen)
2744   {
2745     int swap= 0;
2746     if (slen < tlen)
2747     {
2748       slen= tlen;
2749       s= t;
2750       se= te;
2751       swap= -1;
2752     }
2753     /*
2754       This following loop uses the fact that in UTF-8
2755       all multibyte characters are greater than space,
2756       and all multibyte head characters are greater than
2757       space. It means if we meet a character greater
2758       than space, it always means that the longer string
2759       is greater. So we can reuse the same loop from the
2760       8bit version, without having to process full multibute
2761       sequences.
2762     */
2763     for ( ; s < se; s++)
2764     {
2765       if (*s != ' ')
2766         return ((int)*s -  (int) ' ') ^ swap;
2767     }
2768   }
2769   return save_diff;
2770 }
2771
2772 static MY_COLLATION_HANDLER my_collation_cs_handler =
2773 {
2774     NULL,               /* init */
2775     my_strnncoll_utf8_cs,
2776     my_strnncollsp_utf8_cs,
2777     my_strnxfrm_utf8,
2778     my_like_range_simple,
2779     my_wildcmp_mb,
2780     my_strcasecmp_utf8,
2781     my_instr_mb,
2782     my_hash_sort_utf8,
2783     my_propagate_simple
2784 };
2785
2786 CHARSET_INFO my_charset_utf8_general_cs=
2787 {
2788     254,0,0,            /* number       */
2789     MY_CS_COMPILED|MY_CS_UNICODE,       /* state  */
2790     "utf8",             /* cs name      */
2791     "utf8_general_cs",  /* name         */
2792     "",                 /* comment      */
2793     NULL,               /* tailoring    */
2794     ctype_utf8,         /* ctype        */
2795     to_lower_utf8,      /* to_lower     */
2796     to_upper_utf8,      /* to_upper     */
2797     to_upper_utf8,      /* sort_order   */
2798     NULL,               /* contractions */
2799     NULL,               /* sort_order_big*/
2800     NULL,               /* tab_to_uni   */
2801     NULL,               /* tab_from_uni */
2802     my_unicase_default, /* caseinfo     */
2803     NULL,               /* state_map    */
2804     NULL,               /* ident_map    */
2805     1,                  /* strxfrm_multiply */
2806     1,                  /* caseup_multiply  */
2807     1,                  /* casedn_multiply  */
2808     1,                  /* mbminlen     */
2809     3,                  /* mbmaxlen     */
2810     0,                  /* min_sort_char */
2811     255,                /* max_sort_char */
2812     ' ',                /* pad char      */
2813     0,                  /* escape_with_backslash_is_dangerous */
2814     &my_charset_utf8_handler,
2815     &my_collation_cs_handler
2816 };
2817 #endif  /* Cybozu Hack */
2818
2819
2820 #if 0
2821
2822 /*
2823   File system encoding components:
2824
2825 Code range Pattern            Number   Used Unused  Blocks
2826 -----------------------------------------------------------------------------
2827 00C0..017F [.][0..4][g..z] 5*20= 100   97     3  Latin1 Supplement + Ext A
2828 0370..03FF [.][5..9][g..z] 5*20= 100   88    12  Greek + Coptic
2829 0400..052F [.][g..z][0..6] 20*7= 140  140   137  Cyrillic
2830 0530..058F [.][g..z][7..8] 20*2=  40   38     2  Armenian
2831 2160..217F [.][g..z][9]    20*1=  20   16     4  Number Forms
2832 0180..02AF [.][g..z][a..k] 28*11=220  203    17  Latin Ext B + IPA
2833 1E00..0EFF [.][g..z][l..r] 20*7= 140  136     4  Latin Additional Extended
2834 1F00..1FFF [.][g..z][s..z] 20*8= 160  144    16  Greek Extended
2835 ....  .... [.][a..f][g..z] 6*20= 120    0   120  RESERVED
2836 24B6..24E9 [.][@][a..z]           26   26     0  Enclosed Alphanumerics
2837 FF21..FF5A [.][a..z][@]           26   26     0  Full Width forms
2838
2839 All other characters are encoded using five bytes:
2840
2841 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
2842
2843 */
2844
2845
2846 static uint16 touni[5994]=
2847 {
2848   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2849   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2850   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0,
2851   0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,
2852   0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,
2853   0x00D1,0x00D2,0x00D3,0x0000,0x0000,0x0000,0x0000,0x0000,
2854   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00E0,
2855   0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,
2856   0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,
2857   0x00F1,0x00F2,0x00F3,0x0000,0x0000,0x0000,0x0000,0x0000,
2858   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2859   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2860   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00D4,
2861   0x00D5,0x00D6,0x0000,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,
2862   0x00DD,0x00DE,0x0178,0x0100,0x0102,0x0104,0x0106,0x0108,
2863   0x010A,0x010C,0x010E,0x0000,0x0000,0x0000,0x0000,0x0000,
2864   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F4,
2865   0x00F5,0x00F6,0x00DF,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,
2866   0x00FD,0x00FE,0x00FF,0x0101,0x0103,0x0105,0x0107,0x0109,
2867   0x010B,0x010D,0x010F,0x0000,0x0000,0x0000,0x0000,0x0000,
2868   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2869   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2870   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0110,
2871   0x0112,0x0114,0x0116,0x0118,0x011A,0x011C,0x011E,0x0120,
2872   0x0122,0x0124,0x0126,0x0128,0x012A,0x012C,0x012E,0x0000,
2873   0x0132,0x0134,0x0136,0x0000,0x0000,0x0000,0x0000,0x0000,
2874   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0111,
2875   0x0113,0x0115,0x0117,0x0119,0x011B,0x011D,0x011F,0x0121,
2876   0x0123,0x0125,0x0127,0x0129,0x012B,0x012D,0x012F,0x0131,
2877   0x0133,0x0135,0x0137,0x0000,0x0000,0x0000,0x0000,0x0000,
2878   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2879   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2880   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2881   0x0139,0x013B,0x013D,0x013F,0x0141,0x0143,0x0145,0x0147,
2882   0x0000,0x014A,0x014C,0x014E,0x0150,0x0152,0x0154,0x0156,
2883   0x0158,0x015A,0x015C,0x0000,0x0000,0x0000,0x0000,0x0000,
2884   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0138,
2885   0x013A,0x013C,0x013E,0x0140,0x0142,0x0144,0x0146,0x0148,
2886   0x0149,0x014B,0x014D,0x014F,0x0151,0x0153,0x0155,0x0157,
2887   0x0159,0x015B,0x015D,0x0000,0x0000,0x0000,0x0000,0x0000,
2888   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2889   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2890   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015E,
2891   0x0160,0x0162,0x0164,0x0166,0x0168,0x016A,0x016C,0x016E,
2892   0x0170,0x0172,0x0174,0x0176,0x0179,0x017B,0x017D,0x0000,
2893   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2894   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015F,
2895   0x0161,0x0163,0x0165,0x0167,0x0169,0x016B,0x016D,0x016F,
2896   0x0171,0x0173,0x0175,0x0177,0x017A,0x017C,0x017E,0x017F,
2897   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2898   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2899   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2900   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2901   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2902   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2903   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2904   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2905   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2906   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2907   0x0000,0x0390,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2908   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2909   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2910   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0386,
2911   0x0388,0x0389,0x038A,0x0000,0x0391,0x0000,0x0393,0x0394,
2912   0x0395,0x0396,0x0397,0x0000,0x0399,0x0000,0x039B,0x039C,
2913   0x039D,0x039E,0x039F,0x0000,0x0000,0x0000,0x0000,0x0000,
2914   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03AC,
2915   0x03AD,0x03AE,0x03AF,0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,
2916   0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,
2917   0x03BD,0x03BE,0x03BF,0x0000,0x0000,0x0000,0x0000,0x0000,
2918   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2919   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2920   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2921   0x03A1,0x0000,0x0000,0x03A4,0x03A5,0x0000,0x03A7,0x03A8,
2922   0x03A9,0x03AA,0x03AB,0x038C,0x038E,0x038F,0x0000,0x0392,
2923   0x0398,0x03D2,0x03D3,0x0000,0x0000,0x0000,0x0000,0x0000,
2924   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03C0,
2925   0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,
2926   0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000,0x03D0,
2927   0x03D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2928   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2929   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2930   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03D4,
2931   0x03A6,0x03A0,0x0000,0x0000,0x03DA,0x03DC,0x03DE,0x03E0,
2932   0x03E2,0x03E4,0x03E6,0x03E8,0x03EA,0x03EC,0x03EE,0x039A,
2933   0x0000,0x03A3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2934   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2935   0x03D5,0x03D6,0x03D7,0x03D9,0x03DB,0x03DD,0x03DF,0x03E1,
2936   0x03E3,0x03E5,0x03E7,0x03E9,0x03EB,0x03ED,0x03EF,0x03F0,
2937   0x03F1,0x03F2,0x03F3,0x0000,0x0000,0x0000,0x0000,0x0000,
2938   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2939   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2940   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2941   0x0000,0x0000,0x0000,0x0000,0x03FD,0x03FE,0x03FF,0x0000,
2942   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2943   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2944   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F5,
2945   0x03F6,0x03F8,0x03FB,0x03FC,0x0000,0x0000,0x0000,0x0000,
2946   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2947   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2948   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2949   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2950   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2951   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2952   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2953   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2954   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2955   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2956   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2957   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2958   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2959   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2960   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2961   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2962   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2963   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2964   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2965   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2966   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2967   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2968   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2969   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2970   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2971   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2972   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2973   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2974   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2975   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2976   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2977   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2978   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2979   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2980   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2981   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2982   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2983   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2984   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2985   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2986   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2987   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2988   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2989   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2990   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2991   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2992   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2993   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2994   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2995   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2996   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2997   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2998   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
2999   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3000   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3001   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3002   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3003   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3004   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3005   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3006   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3007   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3008   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3009   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3010   0x0000,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,
3011   0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,
3012   0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,
3013   0x24CD,0x24CE,0x24CF,0x0000,0x0000,0x0000,0x0000,0x0000,
3014   0x0000,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,
3015   0x24D7,0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,
3016   0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,
3017   0x24E7,0x24E8,0x24E9,0x0000,0x0000,0x0000,0x0000,0x0000,
3018   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3019   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3020   0xFF21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3021   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3022   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3023   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3024   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3025   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3026   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3027   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3028   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3029   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3030   0xFF22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3031   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3032   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3033   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3034   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3035   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3036   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3037   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3038   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3039   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3040   0xFF23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3041   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3042   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3043   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3044   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3045   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3046   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3047   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3048   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3049   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3050   0xFF24,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3051   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3052   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3053   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3054   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3055   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3056   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3057   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3058   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3059   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3060   0xFF25,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3061   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3062   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3063   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3064   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3065   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3066   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3067   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3068   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3069   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3070   0xFF26,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3071   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3072   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3073   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3074   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3075   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3076   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3077   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3078   0x0410,0x0424,0x0408,0x0478,0x04A6,0x04CD,0x04F4,0x0000,
3079   0x0544,0x2160,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3080   0xFF27,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3081   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3082   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3083   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3084   0x0000,0x0000,0x01B3,0x01DE,0x0208,0x0230,0x0000,0x0000,
3085   0x0000,0x0000,0x0000,0x0000,0x1E00,0x1E28,0x1E50,0x1E78,
3086   0x1E60,0x1EBE,0x1EE6,0x1F08,0x1F2A,0x0000,0x1F6C,0x1F88,
3087   0x1FAC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3088   0x0411,0x0425,0x0409,0x047A,0x04A8,0x0000,0x04F6,0x0531,
3089   0x0545,0x2161,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3090   0xFF28,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3091   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3092   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3093   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3094   0x0000,0x0182,0x01B5,0x01E0,0x020A,0x0232,0x0000,0x0000,
3095   0x019D,0x0000,0x0000,0x0000,0x1E02,0x1E2A,0x1E52,0x1E7A,
3096   0x0000,0x1EC0,0x1EE8,0x1F09,0x1F2B,0x0000,0x1F6D,0x1F89,
3097   0x1FAD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3098   0x0412,0x0426,0x040A,0x047C,0x04AA,0x04D0,0x04F8,0x0532,
3099   0x0546,0x2162,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3100   0xFF29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3101   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3102   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3103   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3104   0x0000,0x0184,0x01B8,0x01E2,0x020C,0x0000,0x0000,0x0000,
3105   0x0000,0x0000,0x0000,0x0000,0x1E04,0x1E2C,0x1E54,0x1E7C,
3106   0x0000,0x1EC2,0x1EEA,0x1F0A,0x1F2C,0x0000,0x1F6E,0x1F8A,
3107   0x1FAE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3108   0x0413,0x0427,0x040B,0x047E,0x04AC,0x04D2,0x0000,0x0533,
3109   0x0547,0x2163,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3110   0xFF2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3111   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3112   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3113   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3114   0x0000,0x0187,0x0000,0x01E4,0x020E,0x0000,0x0000,0x0193,
3115   0x0000,0x01AE,0x0000,0x0000,0x1E06,0x1E2E,0x1E56,0x1E7E,
3116   0x0000,0x1EC4,0x1EEC,0x1F0B,0x1F2D,0x0000,0x1F6F,0x1F8B,
3117   0x1FAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3118   0x0414,0x0428,0x040C,0x0480,0x04AE,0x04D4,0x0000,0x0534,
3119   0x0548,0x2164,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3120   0xFF2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3121   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3122   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3123   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3124   0x0000,0x018B,0x0000,0x01E6,0x0210,0x0000,0x0000,0x0000,
3125   0x019F,0x0000,0x0000,0x0000,0x1E08,0x1E30,0x1E58,0x1E80,
3126   0x0000,0x1EC6,0x1EEE,0x1F0C,0x1F2E,0x0000,0x1FBA,0x1F8C,
3127   0x1FB8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3128   0x0415,0x0429,0x040D,0x0000,0x04B0,0x04D6,0x0000,0x0535,
3129   0x0549,0x2165,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3130   0xFF2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3131   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3132   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3133   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3134   0x0000,0x0000,0x0000,0x01E8,0x0212,0x0000,0x0000,0x0000,
3135   0x0000,0x01B1,0x0000,0x0000,0x1E0A,0x1E32,0x1E5A,0x1E82,
3136   0x1EA0,0x1EC8,0x1EF0,0x1F0D,0x1F2F,0x1F59,0x1FBB,0x1F8D,
3137   0x1FB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3138   0x0416,0x042A,0x040E,0x048A,0x04B2,0x04D8,0x0000,0x0536,
3139   0x054A,0x2166,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3140   0xFF2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3141   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3142   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3143   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3144   0x0000,0x0191,0x0000,0x01EA,0x0214,0x0000,0x0000,0x0194,
3145   0x0000,0x01B2,0x0000,0x0000,0x1E0C,0x1E34,0x1E5C,0x1E84,
3146   0x1EA2,0x1ECA,0x1EF2,0x1F0E,0x1F38,0x0000,0x1FC8,0x1F8E,
3147   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3148   0x0417,0x042B,0x040F,0x048C,0x04B4,0x04DA,0x0000,0x0537,
3149   0x054B,0x2167,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3150   0xFF2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3151   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3152   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3153   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3154   0x0000,0x01F6,0x01BC,0x01EC,0x0216,0x0000,0x0000,0x0000,
3155   0x0000,0x0000,0x0000,0x0000,0x1E0E,0x1E36,0x1E5E,0x1E86,
3156   0x1EA4,0x1ECC,0x1EF4,0x1F0F,0x1F39,0x1F5B,0x1FC9,0x1F8F,
3157   0x1FBC,0x1FE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3158   0x0418,0x042C,0x0460,0x048E,0x04B6,0x04DC,0x0000,0x0538,
3159   0x054C,0x2168,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3160   0xFF2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3161   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3162   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3163   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3164   0x0000,0x0198,0x01C4,0x01EE,0x0218,0x023A,0x0000,0x0000,
3165   0x0000,0x0000,0x0000,0x0000,0x1E10,0x1E38,0x0000,0x1E88,
3166   0x1EA6,0x1ECE,0x1EF6,0x1F18,0x1F3A,0x0000,0x1FCA,0x1F98,
3167   0x0000,0x1FE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3168   0x0419,0x042D,0x0462,0x0490,0x04B8,0x04DE,0x0500,0x0539,
3169   0x054D,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3170   0xFF30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3171   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3172   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3173   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3174   0x0000,0x023D,0x01C7,0x0000,0x021A,0x023B,0x0000,0x0000,
3175   0x0000,0x0000,0x0000,0x0000,0x1E12,0x1E3A,0x1E62,0x1E8A,
3176   0x1EA8,0x1ED0,0x1EF8,0x1F19,0x1F3B,0x1F5D,0x1FCB,0x1F99,
3177   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3178   0x041A,0x042E,0x0464,0x0492,0x04BA,0x04E0,0x0502,0x053A,
3179   0x054E,0x216A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3180   0xFF31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3181   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3182   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3183   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3184   0x0000,0x0000,0x01CA,0x01F1,0x021C,0x023E,0x0181,0x0000,
3185   0x0000,0x0000,0x0000,0x0000,0x1E14,0x1E3C,0x1E64,0x1E8C,
3186   0x1EAA,0x1ED2,0x0000,0x1F1A,0x1F3C,0x0000,0x1FDA,0x1F9A,
3187   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3188   0x041B,0x042F,0x0466,0x0494,0x04BC,0x04E2,0x0504,0x053B,
3189   0x054F,0x216B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3190   0xFF32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3191   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3192   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3193   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3194   0x0000,0x0220,0x01CD,0x01F4,0x021E,0x0000,0x0186,0x0197,
3195   0x0000,0x0000,0x0000,0x0000,0x1E16,0x1E3E,0x1E66,0x1E8E,
3196   0x1EAC,0x1ED4,0x0000,0x1F1B,0x1F3D,0x1F5F,0x1FDB,0x1F9B,
3197   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3198   0x041C,0x0400,0x0468,0x0496,0x04BE,0x04E4,0x0506,0x053C,
3199   0x0550,0x216C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3200   0xFF33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3201   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3202   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3203   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3204   0x0000,0x01A0,0x01CF,0x01F8,0x0000,0x0000,0x0000,0x0196,
3205   0x0000,0x0000,0x0000,0x0000,0x1E18,0x1E40,0x1E68,0x1E90,
3206   0x1EAE,0x1ED6,0x0000,0x1F1C,0x1F3E,0x0000,0x1FF8,0x1F9C,
3207   0x0000,0x1FEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3208   0x041D,0x0401,0x046A,0x0498,0x04C0,0x04E6,0x0508,0x053D,
3209   0x0551,0x216D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3210   0xFF34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3211   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3212   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3213   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3214   0x0000,0x01A2,0x01D1,0x01FA,0x0222,0x0000,0x0189,0x0000,
3215   0x0000,0x01B7,0x0000,0x0000,0x1E1A,0x1E42,0x1E6A,0x1E92,
3216   0x1EB0,0x1ED8,0x0000,0x1F1D,0x1F3F,0x0000,0x1FF9,0x1F9D,
3217   0x1FCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3218   0x041E,0x0402,0x046C,0x049A,0x04C1,0x04E8,0x050A,0x053E,
3219   0x0552,0x216E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3220   0xFF35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3221   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3222   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3223   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3224   0x0000,0x01A4,0x01D3,0x01FC,0x0224,0x0000,0x018A,0x0000,
3225   0x0000,0x0000,0x0000,0x0000,0x1E1C,0x1E44,0x1E6C,0x1E94,
3226   0x1EB2,0x1EDA,0x0000,0x0000,0x1F48,0x0000,0x1FEA,0x1F9E,
3227   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3228   0x041F,0x0403,0x046E,0x049C,0x04C3,0x04EA,0x050C,0x053F,
3229   0x0553,0x216F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3230   0xFF36,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3231   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3232   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3233   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3234   0x0000,0x01A7,0x01D5,0x01FE,0x0226,0x0000,0x0000,0x0000,
3235   0x01A6,0x0241,0x0000,0x0000,0x1E1E,0x1E46,0x1E6E,0x0000,
3236   0x1EB4,0x1EDC,0x0000,0x0000,0x1F49,0x0000,0x1FEB,0x1F9F,
3237   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3238   0x0420,0x0404,0x0470,0x049E,0x04C5,0x04EC,0x050E,0x0540,
3239   0x0554,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3240   0xFF37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3241   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3242   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3243   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3244   0x0000,0x0000,0x01D7,0x0200,0x0228,0x0000,0x018F,0x0000,
3245   0x0000,0x0000,0x0000,0x0000,0x1E20,0x1E48,0x1E70,0x0000,
3246   0x1EB6,0x1EDE,0x0000,0x0000,0x1F4A,0x1F68,0x1FFA,0x1FA8,
3247   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3248   0x0421,0x0405,0x0472,0x04A0,0x04C7,0x04EE,0x0000,0x0541,
3249   0x0555,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3250   0xFF38,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3251   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3252   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3253   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3254   0x0000,0x0000,0x01D9,0x0202,0x022A,0x0000,0x0000,0x0000,
3255   0x0000,0x0000,0x0000,0x0000,0x1E22,0x1E4A,0x1E72,0x0000,
3256   0x1EB8,0x1EE0,0x0000,0x0000,0x1F4B,0x1F69,0x1FFB,0x1FA9,
3257   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3258   0x0422,0x0406,0x0474,0x04A2,0x04C9,0x04F0,0x0000,0x0542,
3259   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3260   0xFF39,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3261   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3262   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3263   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3264   0x0000,0x01AC,0x01DB,0x0204,0x022C,0x0000,0x0190,0x019C,
3265   0x01A9,0x0000,0x0000,0x0000,0x1E24,0x1E4C,0x1E74,0x0000,
3266   0x1EBA,0x1EE2,0x0000,0x1F28,0x1F4C,0x1F6A,0x0000,0x1FAA,
3267   0x1FD8,0x1FFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3268   0x0423,0x0407,0x0476,0x04A4,0x04CB,0x04F2,0x0000,0x0543,
3269   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3270   0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3271   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3272   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3273   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3274   0x0000,0x01AF,0x018E,0x0206,0x022E,0x0000,0x0000,0x0000,
3275   0x0000,0x0000,0x0000,0x0000,0x1E26,0x1E4E,0x1E76,0x0000,
3276   0x1EBC,0x1EE4,0x0000,0x1F29,0x1F4D,0x1F6B,0x0000,0x1FAB,
3277   0x1FD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3278   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3279   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3280   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3281   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3282   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3283   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3284   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3285   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3286   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3287   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3288   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3289   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3290   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3291   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3292   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3293   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3294   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3295   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3296   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3297   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3298   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3299   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3300   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3301   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3302   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3303   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3304   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3305   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3306   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3307   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3308   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3309   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3310   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3311   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3312   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3313   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3314   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3315   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3316   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3317   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3318   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3319   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3320   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3321   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3322   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3323   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3324   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3325   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3326   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3327   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3328   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3329   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3330   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3331   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3332   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3333   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3334   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3335   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3336   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3337   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3338   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3339   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3340   0xFF41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3341   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3342   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3343   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3344   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3345   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3346   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3347   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3348   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3349   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3350   0xFF42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3351   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3352   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3353   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3354   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3355   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3356   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3357   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3358   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3359   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3360   0xFF43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3361   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3362   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3363   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3364   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3365   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3366   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3367   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3368   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3369   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3370   0xFF44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3371   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3372   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3373   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3374   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3375   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3376   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3377   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3378   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3379   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3380   0xFF45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3381   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3382   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3383   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3384   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3385   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3386   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3387   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3388   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3389   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3390   0xFF46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3391   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3392   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3393   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3394   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3395   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3396   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3397   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3398   0x0430,0x0444,0x0458,0x0479,0x04A7,0x04CE,0x04F5,0x0000,
3399   0x0574,0x2170,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3400   0xFF47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3401   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3402   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3403   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3404   0x0000,0x0180,0x01B4,0x01DF,0x0209,0x0231,0x0000,0x025D,
3405   0x0271,0x0285,0x0299,0x02AD,0x1E01,0x1E29,0x1E51,0x1E79,
3406   0x1E9B,0x1EBF,0x1EE7,0x1F00,0x1F22,0x0000,0x1F64,0x1F80,
3407   0x1FA4,0x1FD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3408   0x0431,0x0445,0x0459,0x047B,0x04A9,0x0000,0x04F7,0x0561,
3409   0x0575,0x2171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3410   0xFF48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3411   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3412   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3413   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3414   0x0000,0x0183,0x01B6,0x01E1,0x020B,0x0233,0x0000,0x025E,
3415   0x0272,0x0286,0x029A,0x02AE,0x1E03,0x1E2B,0x1E53,0x1E7B,
3416   0x0000,0x1EC1,0x1EE9,0x1F01,0x1F23,0x0000,0x1F65,0x1F81,
3417   0x1FA5,0x1FD3,0x1FF6,0x0000,0x0000,0x0000,0x0000,0x0000,
3418   0x0432,0x0446,0x045A,0x047D,0x04AB,0x04D1,0x04F9,0x0562,
3419   0x0576,0x2172,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3420   0xFF49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3421   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3422   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3423   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3424   0x0000,0x0185,0x01B9,0x01E3,0x020D,0x0234,0x0000,0x025F,
3425   0x0273,0x0287,0x029B,0x02AF,0x1E05,0x1E2D,0x1E55,0x1E7D,
3426   0x0000,0x1EC3,0x1EEB,0x1F02,0x1F24,0x0000,0x1F66,0x1F82,
3427   0x1FA6,0x0000,0x1FF7,0x0000,0x0000,0x0000,0x0000,0x0000,
3428   0x0433,0x0447,0x045B,0x047F,0x04AD,0x04D3,0x0000,0x0563,
3429   0x0577,0x2173,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3430   0xFF4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3431   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3432   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3433   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3434   0x0000,0x0188,0x01BA,0x01E5,0x020F,0x0235,0x0000,0x0260,
3435   0x0274,0x0288,0x029C,0x0000,0x1E07,0x1E2F,0x1E57,0x1E7F,
3436   0x0000,0x1EC5,0x1EED,0x1F03,0x1F25,0x0000,0x1F67,0x1F83,
3437   0x1FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3438   0x0434,0x0448,0x045C,0x0481,0x04AF,0x04D5,0x0000,0x0564,
3439   0x0578,0x2174,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3440   0xFF4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3441   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3442   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3443   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3444   0x0000,0x018C,0x01BB,0x01E7,0x0211,0x0236,0x0000,0x0261,
3445   0x0275,0x0289,0x029D,0x0000,0x1E09,0x1E31,0x1E59,0x1E81,
3446   0x0000,0x1EC7,0x1EEF,0x1F04,0x1F26,0x1F50,0x1F70,0x1F84,
3447   0x1FB0,0x1FD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3448   0x0435,0x0449,0x045D,0x0000,0x04B1,0x04D7,0x0000,0x0565,
3449   0x0579,0x2175,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3450   0xFF4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3451   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3452   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3453   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3454   0x0000,0x018D,0x0000,0x01E9,0x0213,0x0237,0x0000,0x0262,
3455   0x0276,0x028A,0x029E,0x0000,0x1E0B,0x1E33,0x1E5B,0x1E83,
3456   0x1EA1,0x1EC9,0x1EF1,0x1F05,0x1F27,0x1F51,0x1F71,0x1F85,
3457   0x1FB1,0x1FD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3458   0x0436,0x044A,0x045E,0x048B,0x04B3,0x04D9,0x0000,0x0566,
3459   0x057A,0x2176,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3460   0xFF4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3461   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3462   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3463   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3464   0x0000,0x0192,0x01BE,0x01EB,0x0215,0x0238,0x0000,0x0263,
3465   0x0277,0x028B,0x029F,0x0000,0x1E0D,0x1E35,0x1E5D,0x1E85,
3466   0x1EA3,0x1ECB,0x1EF3,0x1F06,0x1F30,0x1F52,0x1F72,0x1F86,
3467   0x1FB2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3468   0x0437,0x044B,0x045F,0x048D,0x04B5,0x04DB,0x0000,0x0567,
3469   0x057B,0x2177,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3470   0xFF4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3471   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3472   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3473   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3474   0x0000,0x0195,0x01BD,0x01ED,0x0217,0x0239,0x0250,0x0264,
3475   0x0278,0x028C,0x02A0,0x0000,0x1E0F,0x1E37,0x1E5F,0x1E87,
3476   0x1EA5,0x1ECD,0x1EF5,0x1F07,0x1F31,0x1F53,0x1F73,0x1F87,
3477   0x1FB3,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3478   0x0438,0x044C,0x0461,0x048F,0x04B7,0x04DD,0x0000,0x0568,
3479   0x057C,0x2178,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3480   0xFF4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3481   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3482   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3483   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3484   0x0000,0x0199,0x01C6,0x01EF,0x0219,0x0000,0x0251,0x0265,
3485   0x0279,0x028D,0x02A1,0x0000,0x1E11,0x1E39,0x1E61,0x1E89,
3486   0x1EA7,0x1ECF,0x1EF7,0x1F10,0x1F32,0x1F54,0x1F74,0x1F90,
3487   0x1FB4,0x1FE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3488   0x0439,0x044D,0x0463,0x0491,0x04B9,0x04DF,0x0501,0x0569,
3489   0x057D,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3490   0xFF50,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3491   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3492   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3493   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3494   0x0000,0x019A,0x01C9,0x01F0,0x021B,0x023C,0x0252,0x0266,
3495   0x027A,0x028E,0x02A2,0x0000,0x1E13,0x1E3B,0x1E63,0x1E8B,
3496   0x1EA9,0x1ED1,0x1EF9,0x1F11,0x1F33,0x1F55,0x1F75,0x1F91,
3497   0x0000,0x1FE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3498   0x043A,0x044E,0x0465,0x0493,0x04BB,0x04E1,0x0503,0x056A,
3499   0x057E,0x217A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3500   0xFF51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3501   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3502   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3503   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3504   0x0000,0x019B,0x01CC,0x01F3,0x021D,0x0000,0x0253,0x0267,
3505   0x027B,0x028F,0x02A3,0x0000,0x1E15,0x1E3D,0x1E65,0x1E8D,
3506   0x1EAB,0x1ED3,0x0000,0x1F12,0x1F34,0x1F56,0x1F76,0x1F92,
3507   0x1FB6,0x1FE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3508   0x043B,0x044F,0x0467,0x0495,0x04BD,0x04E3,0x0505,0x056B,
3509   0x057F,0x217B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3510   0xFF52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3511   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3512   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3513   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3514   0x0000,0x019E,0x01CE,0x01F5,0x021F,0x023F,0x0254,0x0268,
3515   0x027C,0x0290,0x02A4,0x0000,0x1E17,0x1E3F,0x1E67,0x1E8F,
3516   0x1EAD,0x1ED5,0x0000,0x1F13,0x1F35,0x1F57,0x1F77,0x1F93,
3517   0x1FB7,0x1FE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3518   0x043C,0x0450,0x0469,0x0497,0x04BF,0x04E5,0x0507,0x056C,
3519   0x0580,0x217C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3520   0xFF53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3521   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3522   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3523   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3524   0x0000,0x01A1,0x01D0,0x01F9,0x0221,0x0240,0x0255,0x0269,
3525   0x027D,0x0291,0x02A5,0x0000,0x1E19,0x1E41,0x1E69,0x1E91,
3526   0x1EAF,0x1ED7,0x0000,0x1F14,0x1F36,0x0000,0x1F78,0x1F94,
3527   0x1FC2,0x1FE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3528   0x043D,0x0451,0x046B,0x0499,0x0000,0x04E7,0x0509,0x056D,
3529   0x0581,0x217D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3530   0xFF54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3531   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3532   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3533   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3534   0x0000,0x01A3,0x01D2,0x01FB,0x0223,0x0000,0x0256,0x026A,
3535   0x027E,0x0292,0x02A6,0x0000,0x1E1B,0x1E43,0x1E6B,0x1E93,
3536   0x1EB1,0x1ED9,0x0000,0x1F15,0x1F37,0x0000,0x1F79,0x1F95,
3537   0x1FC3,0x1FE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3538   0x043E,0x0452,0x046D,0x049B,0x04C2,0x04E9,0x050B,0x056E,
3539   0x0582,0x217E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3540   0xFF55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3541   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3542   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3543   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3544   0x0000,0x01A5,0x01D4,0x01FD,0x0225,0x0000,0x0257,0x026B,
3545   0x027F,0x0293,0x02A7,0x0000,0x1E1D,0x1E45,0x1E6D,0x1E95,
3546   0x1EB3,0x1EDB,0x0000,0x0000,0x1F40,0x0000,0x1F7A,0x1F96,
3547   0x1FC4,0x1FE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3548   0x043F,0x0453,0x046F,0x049D,0x04C4,0x04EB,0x050D,0x056F,
3549   0x0583,0x217F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3550   0xFF56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3551   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3552   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3553   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3554   0x0000,0x01A8,0x01D6,0x01FF,0x0227,0x0000,0x0258,0x026C,
3555   0x0280,0x0294,0x02A8,0x0000,0x1E1F,0x1E47,0x1E6F,0x1E96,
3556   0x1EB5,0x1EDD,0x0000,0x0000,0x1F41,0x0000,0x1F7B,0x1F97,
3557   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3558   0x0440,0x0454,0x0471,0x049F,0x04C6,0x04ED,0x050F,0x0570,
3559   0x0584,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3560   0xFF57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3561   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3562   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3563   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3564   0x0000,0x01AA,0x01D8,0x0201,0x0229,0x0000,0x0259,0x026D,
3565   0x0281,0x0295,0x02A9,0x0000,0x1E21,0x1E49,0x1E71,0x1E97,
3566   0x1EB7,0x1EDF,0x0000,0x0000,0x1F42,0x1F60,0x1F7C,0x1FA0,
3567   0x1FC6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3568   0x0441,0x0455,0x0473,0x04A1,0x04C8,0x04EF,0x0000,0x0571,
3569   0x0585,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3570   0xFF58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3571   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3572   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3573   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3574   0x0000,0x01AB,0x01DA,0x0203,0x022B,0x0000,0x025A,0x026E,
3575   0x0282,0x0296,0x02AA,0x0000,0x1E23,0x1E4B,0x1E73,0x1E98,
3576   0x1EB9,0x1EE1,0x0000,0x0000,0x1F43,0x1F61,0x1F7D,0x1FA1,
3577   0x1FC7,0x1FF2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3578   0x0442,0x0456,0x0475,0x04A3,0x04CA,0x04F1,0x0000,0x0572,
3579   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3580   0xFF59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3581   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3582   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3583   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3584   0x0000,0x01AD,0x01DC,0x0205,0x022D,0x0000,0x025B,0x026F,
3585   0x0283,0x0297,0x02AB,0x0000,0x1E25,0x1E4D,0x1E75,0x1E99,
3586   0x1EBB,0x1EE3,0x0000,0x1F20,0x1F44,0x1F62,0x0000,0x1FA2,
3587   0x1FD0,0x1FF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3588   0x0443,0x0457,0x0477,0x04A5,0x04CC,0x04F3,0x0000,0x0573,
3589   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3590   0xFF5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3591   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3592   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3593   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3594   0x0000,0x01B0,0x01DD,0x0207,0x022F,0x0000,0x025C,0x0270,
3595   0x0284,0x0298,0x02AC,0x0000,0x1E27,0x1E4F,0x1E77,0x1E9A,
3596   0x1EBD,0x1EE5,0x0000,0x1F21,0x1F45,0x1F63,0x0000,0x1FA3,
3597   0x1FD1,0x1FF4
3598 };
3599
3600
3601 /* 00C0-05FF */
3602 static uint16 uni_0C00_05FF[1344]=
3603 {
3604   0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,
3605   0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,
3606   0x0027,0x0028,0x0029,0x002A,0x0067,0x0068,0x0069,0x0000,
3607   0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x008A,
3608   0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,
3609   0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,
3610   0x0047,0x0048,0x0049,0x004A,0x0087,0x0088,0x0089,0x0000,
3611   0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,
3612   0x0073,0x0093,0x0074,0x0094,0x0075,0x0095,0x0076,0x0096,
3613   0x0077,0x0097,0x0078,0x0098,0x0079,0x0099,0x007A,0x009A,
3614   0x00B7,0x00D7,0x00B8,0x00D8,0x00B9,0x00D9,0x00BA,0x00DA,
3615   0x00BB,0x00DB,0x00BC,0x00DC,0x00BD,0x00DD,0x00BE,0x00DE,
3616   0x00BF,0x00DF,0x00C0,0x00E0,0x00C1,0x00E1,0x00C2,0x00E2,
3617   0x00C3,0x00E3,0x00C4,0x00E4,0x00C5,0x00E5,0x00C6,0x00E6,
3618   0x0000,0x00E7,0x00C8,0x00E8,0x00C9,0x00E9,0x00CA,0x00EA,
3619   0x0127,0x0108,0x0128,0x0109,0x0129,0x010A,0x012A,0x010B,
3620   0x012B,0x010C,0x012C,0x010D,0x012D,0x010E,0x012E,0x010F,
3621   0x012F,0x0130,0x0111,0x0131,0x0112,0x0132,0x0113,0x0133,
3622   0x0114,0x0134,0x0115,0x0135,0x0116,0x0136,0x0117,0x0137,
3623   0x0118,0x0138,0x0119,0x0139,0x011A,0x013A,0x0157,0x0177,
3624   0x0158,0x0178,0x0159,0x0179,0x015A,0x017A,0x015B,0x017B,
3625   0x015C,0x017C,0x015D,0x017D,0x015E,0x017E,0x015F,0x017F,
3626   0x0160,0x0180,0x0161,0x0181,0x0162,0x0182,0x0163,0x0183,
3627   0x0072,0x0164,0x0184,0x0165,0x0185,0x0166,0x0186,0x0187,
3628   0x1161,0x0A86,0x07B1,0x11B1,0x0801,0x1201,0x0AD6,0x0851,
3629   0x1251,0x0B76,0x0BC6,0x08A1,0x12A1,0x12F1,0x0D52,0x0C66,
3630   0x0D06,0x0941,0x1341,0x0857,0x0947,0x1391,0x0B27,0x0AD7,
3631   0x09E1,0x13E1,0x1431,0x1481,0x0D07,0x07B8,0x14D1,0x08A8,
3632   0x0B21,0x1521,0x0B71,0x1571,0x0BC1,0x15C1,0x0C18,0x0C11,
3633   0x1611,0x0D08,0x1661,0x16B1,0x0D01,0x1701,0x0859,0x0D51,
3634   0x1751,0x08F9,0x0949,0x0762,0x1162,0x07B2,0x11B2,0x0B79,
3635   0x0802,0x1202,0x1252,0x12A2,0x0992,0x1392,0x1342,0x0000,
3636   0x0000,0x0000,0x0000,0x0000,0x09E2,0x0000,0x13E2,0x0A32,
3637   0x0000,0x1432,0x0A82,0x0000,0x1482,0x0AD2,0x14D2,0x0B22,
3638   0x1522,0x0B72,0x1572,0x0BC2,0x15C2,0x0C12,0x1612,0x0C62,
3639   0x1662,0x0CB2,0x16B2,0x0D02,0x1702,0x1752,0x0763,0x1163,
3640   0x07B3,0x11B3,0x0803,0x1203,0x0853,0x1253,0x08A3,0x12A3,
3641   0x08F3,0x12F3,0x0943,0x1343,0x0993,0x1393,0x09E3,0x13E3,
3642   0x1433,0x0A83,0x0000,0x1483,0x0AD3,0x14D3,0x0991,0x0000,
3643   0x0B23,0x1523,0x0B73,0x1573,0x0BC3,0x15C3,0x0C13,0x1613,
3644   0x0C63,0x1663,0x0CB3,0x16B3,0x0D03,0x1703,0x0D53,0x1753,
3645   0x0764,0x1164,0x07B4,0x11B4,0x0804,0x1204,0x0854,0x1254,
3646   0x08A4,0x12A4,0x08F4,0x12F4,0x0944,0x1344,0x0994,0x1394,
3647   0x09E4,0x13E4,0x0A34,0x1434,0x0A84,0x1484,0x0AD4,0x14D4,
3648   0x0AD1,0x1524,0x0B74,0x1574,0x0BC4,0x15C4,0x0C14,0x1614,
3649   0x0C64,0x1664,0x0CB4,0x16B4,0x0D04,0x1704,0x0D54,0x1754,
3650   0x0765,0x1165,0x07B5,0x11B5,0x1205,0x1255,0x12A5,0x12F5,
3651   0x1345,0x1395,0x09E5,0x0A35,0x1435,0x0A31,0x0A85,0x14D5,
3652   0x1525,0x0C19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3653   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3654   0x1396,0x13E6,0x1436,0x1486,0x14D6,0x1526,0x1576,0x15C6,
3655   0x1616,0x1666,0x16B6,0x1706,0x1756,0x1167,0x11B7,0x1207,
3656   0x1257,0x12A7,0x12F7,0x1347,0x1397,0x13E7,0x1437,0x1487,
3657   0x14D7,0x1527,0x1577,0x15C7,0x1617,0x1667,0x16B7,0x1707,
3658   0x1757,0x1168,0x11B8,0x1208,0x1258,0x12A8,0x12F8,0x1348,
3659   0x1398,0x13E8,0x1438,0x1488,0x14D8,0x1528,0x1578,0x15C8,
3660   0x1618,0x1668,0x16B8,0x1708,0x1758,0x1169,0x11B9,0x1209,
3661   0x1259,0x12A9,0x12F9,0x1349,0x1399,0x13E9,0x1439,0x1489,
3662   0x14D9,0x1529,0x1579,0x15C9,0x1619,0x1669,0x16B9,0x1709,
3663   0x1759,0x116A,0x11BA,0x120A,0x125A,0x12AA,0x12FA,0x134A,
3664   0x139A,0x13EA,0x143A,0x148A,0x14DA,0x152A,0x157A,0x15CA,
3665   0x161A,0x166A,0x16BA,0x170A,0x175A,0x116B,0x11BB,0x120B,
3666   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3667   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3668   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3669   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3670   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3671   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3672   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3673   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3674   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3675   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3676   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3677   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3678   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3679   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3680   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3681   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3682   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3683   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3684   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3685   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3686   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3687   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3688   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3689   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3690   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3691   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3692   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01F7,0x0000,
3693   0x01F8,0x01F9,0x01FA,0x0000,0x0253,0x0000,0x0254,0x0255,
3694   0x01D9,0x01FC,0x0257,0x01FE,0x01FF,0x0200,0x0201,0x0202,
3695   0x0258,0x0204,0x02A7,0x0206,0x0207,0x0208,0x0209,0x020A,
3696   0x0299,0x0248,0x0000,0x02A9,0x024B,0x024C,0x0298,0x024E,
3697   0x024F,0x0250,0x0251,0x0252,0x0217,0x0218,0x0219,0x021A,
3698   0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,0x0221,0x0222,
3699   0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,0x0229,0x022A,
3700   0x0267,0x0268,0x0269,0x026A,0x026B,0x026C,0x026D,0x026E,
3701   0x026F,0x0270,0x0271,0x0272,0x0273,0x0274,0x0275,0x0000,
3702   0x0277,0x0278,0x0259,0x025A,0x0297,0x02B8,0x02B9,0x02BA,
3703   0x0000,0x02BB,0x029C,0x02BC,0x029D,0x02BD,0x029E,0x02BE,
3704   0x029F,0x02BF,0x02A0,0x02C0,0x02A1,0x02C1,0x02A2,0x02C2,
3705   0x02A3,0x02C3,0x02A4,0x02C4,0x02A5,0x02C5,0x02A6,0x02C6,
3706   0x02C7,0x02C8,0x02C9,0x02CA,0x0000,0x0307,0x0308,0x0000,
3707   0x0309,0x0000,0x0000,0x030A,0x030B,0x02EC,0x02ED,0x02EE,
3708   0x0AF1,0x0B41,0x0B91,0x0BE1,0x0C31,0x0C81,0x0CD1,0x0D21,
3709   0x0732,0x0782,0x07D2,0x0822,0x0872,0x08C2,0x0912,0x0962,
3710   0x0730,0x0780,0x07D0,0x0820,0x0870,0x08C0,0x0910,0x0960,
3711   0x09B0,0x0A00,0x0A50,0x0AA0,0x0AF0,0x0B40,0x0B90,0x0BE0,
3712   0x0C30,0x0C80,0x0CD0,0x0D20,0x0731,0x0781,0x07D1,0x0821,
3713   0x0871,0x08C1,0x0911,0x0961,0x09B1,0x0A01,0x0A51,0x0AA1,
3714   0x1130,0x1180,0x11D0,0x1220,0x1270,0x12C0,0x1310,0x1360,
3715   0x13B0,0x1400,0x1450,0x14A0,0x14F0,0x1540,0x1590,0x15E0,
3716   0x1630,0x1680,0x16D0,0x1720,0x1131,0x1181,0x11D1,0x1221,
3717   0x1271,0x12C1,0x1311,0x1361,0x13B1,0x1401,0x1451,0x14A1,
3718   0x14F1,0x1541,0x1591,0x15E1,0x1631,0x1681,0x16D1,0x1721,
3719   0x1132,0x1182,0x11D2,0x1222,0x1272,0x12C2,0x1312,0x1362,
3720   0x09B2,0x13B2,0x0A02,0x1402,0x0A52,0x1452,0x0AA2,0x14A2,
3721   0x0AF2,0x14F2,0x0B42,0x1542,0x0B92,0x1592,0x0BE2,0x15E2,
3722   0x0C32,0x1632,0x0C82,0x1682,0x0CD2,0x16D2,0x0D22,0x1722,
3723   0x0733,0x1133,0x0783,0x1183,0x07D3,0x11D3,0x0823,0x1223,
3724   0x0873,0x1273,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3725   0x0000,0x0000,0x0913,0x1313,0x0963,0x1363,0x09B3,0x13B3,
3726   0x0A03,0x1403,0x0A53,0x1453,0x0AA3,0x14A3,0x0AF3,0x14F3,
3727   0x0B43,0x1543,0x0B93,0x1593,0x0BE3,0x15E3,0x0C33,0x1633,
3728   0x0C83,0x1683,0x0CD3,0x16D3,0x0D23,0x1723,0x0734,0x1134,
3729   0x0784,0x1184,0x07D4,0x11D4,0x0824,0x1224,0x0874,0x1274,
3730   0x08C4,0x12C4,0x0914,0x1314,0x0964,0x1364,0x09B4,0x13B4,
3731   0x0A04,0x1404,0x0A54,0x1454,0x0AA4,0x14A4,0x0AF4,0x14F4,
3732   0x0B44,0x0B94,0x1594,0x0BE4,0x15E4,0x0C34,0x1634,0x0C84,
3733   0x1684,0x0CD4,0x16D4,0x0D24,0x1724,0x0735,0x1135,0x0000,
3734   0x07D5,0x11D5,0x0825,0x1225,0x0875,0x1275,0x08C5,0x12C5,
3735   0x0915,0x1315,0x0965,0x1365,0x09B5,0x13B5,0x0A05,0x1405,
3736   0x0A55,0x1455,0x0AA5,0x14A5,0x0AF5,0x14F5,0x0B45,0x1545,
3737   0x0B95,0x1595,0x0BE5,0x15E5,0x0C35,0x1635,0x0C85,0x1685,
3738   0x0CD5,0x16D5,0x0D25,0x1725,0x0736,0x1136,0x0786,0x1186,
3739   0x07D6,0x11D6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3740   0x0A06,0x1406,0x0A56,0x1456,0x0AA6,0x14A6,0x0AF6,0x14F6,
3741   0x0B46,0x1546,0x0B96,0x1596,0x0BE6,0x15E6,0x0C36,0x1636,
3742   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3743   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3744   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3745   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3746   0x0000,0x0787,0x07D7,0x0827,0x0877,0x08C7,0x0917,0x0967,
3747   0x09B7,0x0A07,0x0A57,0x0AA7,0x0AF7,0x0B47,0x0B97,0x0BE7,
3748   0x0C37,0x0C87,0x0CD7,0x0D27,0x0738,0x0788,0x07D8,0x0828,
3749   0x0878,0x08C8,0x0918,0x0968,0x09B8,0x0A08,0x0A58,0x0AA8,
3750   0x0AF8,0x0B48,0x0B98,0x0BE8,0x0C38,0x0C88,0x0000,0x0000,
3751   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3752   0x0000,0x1187,0x11D7,0x1227,0x1277,0x12C7,0x1317,0x1367,
3753   0x13B7,0x1407,0x1457,0x14A7,0x14F7,0x1547,0x1597,0x15E7,
3754   0x1637,0x1687,0x16D7,0x1727,0x1138,0x1188,0x11D8,0x1228,
3755   0x1278,0x12C8,0x1318,0x1368,0x13B8,0x1408,0x1458,0x14A8,
3756   0x14F8,0x1548,0x1598,0x15E8,0x1638,0x1688,0x0000,0x0000,
3757   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3758   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3759   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3760   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3761   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3762   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3763   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3764   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3765   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3766   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3767   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3768   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3769   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3770   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3771   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
3772 };
3773
3774
3775 /* 1E00-1FFF */
3776 static uint16 uni_1E00_1FFF[512]=
3777 {
3778   0x076C,0x116C,0x07BC,0x11BC,0x080C,0x120C,0x085C,0x125C,
3779   0x08AC,0x12AC,0x08FC,0x12FC,0x094C,0x134C,0x099C,0x139C,
3780   0x09EC,0x13EC,0x0A3C,0x143C,0x0A8C,0x148C,0x0ADC,0x14DC,
3781   0x0B2C,0x152C,0x0B7C,0x157C,0x0BCC,0x15CC,0x0C1C,0x161C,
3782   0x0C6C,0x166C,0x0CBC,0x16BC,0x0D0C,0x170C,0x0D5C,0x175C,
3783   0x076D,0x116D,0x07BD,0x11BD,0x080D,0x120D,0x085D,0x125D,
3784   0x08AD,0x12AD,0x08FD,0x12FD,0x094D,0x134D,0x099D,0x139D,
3785   0x09ED,0x13ED,0x0A3D,0x143D,0x0A8D,0x148D,0x0ADD,0x14DD,
3786   0x0B2D,0x152D,0x0B7D,0x157D,0x0BCD,0x15CD,0x0C1D,0x161D,
3787   0x0C6D,0x166D,0x0CBD,0x16BD,0x0D0D,0x170D,0x0D5D,0x175D,
3788   0x076E,0x116E,0x07BE,0x11BE,0x080E,0x120E,0x085E,0x125E,
3789   0x08AE,0x12AE,0x08FE,0x12FE,0x094E,0x134E,0x099E,0x139E,
3790   0x0770,0x13EE,0x0A3E,0x143E,0x0A8E,0x148E,0x0ADE,0x14DE,
3791   0x0B2E,0x152E,0x0B7E,0x157E,0x0BCE,0x15CE,0x0C1E,0x161E,
3792   0x0C6E,0x166E,0x0CBE,0x16BE,0x0D0E,0x170E,0x0D5E,0x175E,
3793   0x076F,0x116F,0x07BF,0x11BF,0x080F,0x120F,0x085F,0x125F,
3794   0x08AF,0x12AF,0x08FF,0x12FF,0x094F,0x134F,0x099F,0x139F,
3795   0x09EF,0x13EF,0x0A3F,0x143F,0x0A8F,0x148F,0x0ADF,0x14DF,
3796   0x0B2F,0x152F,0x0B7F,0x157F,0x0BCF,0x15CF,0x161F,0x166F,
3797   0x16BF,0x170F,0x175F,0x1170,0x0000,0x0000,0x0000,0x0000,
3798   0x0900,0x1300,0x0950,0x1350,0x09A0,0x13A0,0x09F0,0x13F0,
3799   0x0A40,0x1440,0x0A90,0x1490,0x0AE0,0x14E0,0x0B30,0x1530,
3800   0x0B80,0x1580,0x0BD0,0x15D0,0x0C20,0x1620,0x0C70,0x1670,
3801   0x0CC0,0x16C0,0x0D10,0x1710,0x0D60,0x1760,0x0771,0x1171,
3802   0x07C1,0x11C1,0x0811,0x1211,0x0861,0x1261,0x08B1,0x12B1,
3803   0x0901,0x1301,0x0951,0x1351,0x09A1,0x13A1,0x09F1,0x13F1,
3804   0x0A41,0x1441,0x0A91,0x1491,0x0AE1,0x14E1,0x0B31,0x1531,
3805   0x0B81,0x1581,0x0BD1,0x15D1,0x0C21,0x1621,0x0C71,0x1671,
3806   0x0CC1,0x16C1,0x0D11,0x1711,0x0D61,0x1761,0x0772,0x1172,
3807   0x07C2,0x11C2,0x0812,0x1212,0x0862,0x1262,0x08B2,0x12B2,
3808   0x0902,0x1302,0x0952,0x1352,0x09A2,0x13A2,0x09F2,0x13F2,
3809   0x0A42,0x1442,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
3810   0x1173,0x11C3,0x1213,0x1263,0x12B3,0x1303,0x1353,0x13A3,
3811   0x0773,0x07C3,0x0813,0x0863,0x08B3,0x0903,0x0953,0x09A3,
3812   0x13F3,0x1443,0x1493,0x14E3,0x1533,0x1583,0x0000,0x0000,
3813   0x09F3,0x0A43,0x0A93,0x0AE3,0x0B33,0x0B83,0x0000,0x0000,
3814   0x1713,0x1763,0x1174,0x11C4,0x1214,0x1264,0x12B4,0x1304,
3815   0x0D13,0x0D63,0x0774,0x07C4,0x0814,0x0864,0x08B4,0x0904,
3816   0x1354,0x13A4,0x13F4,0x1444,0x1494,0x14E4,0x1534,0x1584,
3817   0x0954,0x09A4,0x09F4,0x0A44,0x0A94,0x0AE4,0x0B34,0x0B84,
3818   0x15D4,0x1624,0x1674,0x16C4,0x1714,0x1764,0x0000,0x0000,
3819   0x0BD4,0x0C24,0x0C74,0x0CC4,0x0D14,0x0D64,0x0000,0x0000,
3820   0x12B5,0x1305,0x1355,0x13A5,0x13F5,0x1445,0x1495,0x14E5,
3821   0x0000,0x0905,0x0000,0x09A5,0x0000,0x0A45,0x0000,0x0AE5,
3822   0x1675,0x16C5,0x1715,0x1765,0x1176,0x11C6,0x1216,0x1266,
3823   0x0C75,0x0CC5,0x0D15,0x0D65,0x0776,0x07C6,0x0816,0x0866,
3824   0x12B6,0x1306,0x1356,0x13A6,0x13F6,0x1446,0x1496,0x14E6,
3825   0x1536,0x1586,0x15D6,0x1626,0x1676,0x16C6,0x0000,0x0000,
3826   0x1177,0x11C7,0x1217,0x1267,0x12B7,0x1307,0x1357,0x13A7,
3827   0x0777,0x07C7,0x0817,0x0867,0x08B7,0x0907,0x0957,0x09A7,
3828   0x13F7,0x1447,0x1497,0x14E7,0x1537,0x1587,0x15D7,0x1627,
3829   0x09F7,0x0A47,0x0A97,0x0AE7,0x0B37,0x0B87,0x0BD7,0x0C27,
3830   0x1677,0x16C7,0x1717,0x1767,0x1178,0x11C8,0x1218,0x1268,
3831   0x0C77,0x0CC7,0x0D17,0x0D67,0x0778,0x07C8,0x0818,0x0868,
3832   0x12B8,0x1308,0x1358,0x13A8,0x13F8,0x0000,0x1498,0x14E8,
3833   0x08B8,0x0908,0x08B6,0x0906,0x09A8,0x0000,0x0000,0x0000,
3834   0x0000,0x0000,0x1538,0x1588,0x15D8,0x0000,0x1678,0x16C8,
3835   0x0956,0x09A6,0x09F6,0x0A46,0x0B88,0x0000,0x0000,0x0000,
3836   0x1718,0x1768,0x1179,0x11C9,0x0000,0x0000,0x12B9,0x1309,
3837   0x0D18,0x0D68,0x0A96,0x0AE6,0x0000,0x0000,0x0000,0x0000,
3838   0x13A9,0x13F9,0x1449,0x1499,0x14E9,0x1539,0x1589,0x15D9,
3839   0x09A9,0x09F9,0x0BD6,0x0C26,0x0B39,0x0000,0x0000,0x0000,
3840   0x0000,0x0000,0x16C9,0x1719,0x0000,0x0000,0x11CA,0x121A,
3841   0x0B36,0x0B86,0x0C76,0x0CC6,0x0D19,0x0000,0x0000,0x0000
3842 };
3843
3844
3845 /* 2160-217F */
3846 static uint16 uni_2160_217F[32]=
3847 {
3848   0x0739,0x0789,0x07D9,0x0829,0x0879,0x08C9,0x0919,0x0969,
3849   0x09B9,0x0A09,0x0A59,0x0AA9,0x0AF9,0x0B49,0x0B99,0x0BE9,
3850   0x1139,0x1189,0x11D9,0x1229,0x1279,0x12C9,0x1319,0x1369,
3851   0x13B9,0x1409,0x1459,0x14A9,0x14F9,0x1549,0x1599,0x15E9
3852 };
3853
3854
3855 /* 24B0-24EF */
3856 static uint16 uni_24B0_24EF[64]=
3857 {
3858   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0511,0x0512,
3859   0x0513,0x0514,0x0515,0x0516,0x0517,0x0518,0x0519,0x051A,
3860   0x051B,0x051C,0x051D,0x051E,0x051F,0x0520,0x0521,0x0522,
3861   0x0523,0x0524,0x0525,0x0526,0x0527,0x0528,0x0529,0x052A,
3862   0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537,0x0538,
3863   0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F,0x0540,
3864   0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547,0x0548,
3865   0x0549,0x054A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
3866 };
3867
3868
3869 /* FF20-FF5F */
3870 static uint16 uni_FF20_FF5F[64]=
3871 {
3872   0x0000,0x0560,0x05B0,0x0600,0x0650,0x06A0,0x06F0,0x0740,
3873   0x0790,0x07E0,0x0830,0x0880,0x08D0,0x0920,0x0970,0x09C0,
3874   0x0A10,0x0A60,0x0AB0,0x0B00,0x0B50,0x0BA0,0x0BF0,0x0C40,
3875   0x0C90,0x0CE0,0x0D30,0x0000,0x0000,0x0000,0x0000,0x0000,
3876   0x0000,0x0F60,0x0FB0,0x1000,0x1050,0x10A0,0x10F0,0x1140,
3877   0x1190,0x11E0,0x1230,0x1280,0x12D0,0x1320,0x1370,0x13C0,
3878   0x1410,0x1460,0x14B0,0x1500,0x1550,0x15A0,0x15F0,0x1640,
3879   0x1690,0x16E0,0x1730,0x0000,0x0000,0x0000,0x0000,0x0000
3880 };
3881
3882
3883
3884
3885
3886 /*
3887   Returns
3888    a number 0..15, if a valid HEX digit in lower case,
3889    -1 otherwise.
3890 */
3891
3892 static int hexlo(int x)
3893 {
3894   static char hex_lo_digit[256]=
3895   {
3896     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3897     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3898     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /*  !"#$%&'()*+,-./ */
3899      0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, /* 0123456789:;<=>? */
3900     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* @ABCDEFGHIJKLMNO */
3901     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ[\]^_ */
3902     -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* `abcdefghijklmno */
3903     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* pqrstuvwxyz{|}~. */
3904     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3905     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3906     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3907     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3908     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3909     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3910     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3911     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
3912   };
3913   return hex_lo_digit[(unsigned int) x];
3914 }
3915
3916
3917 /*
3918   Safe characters:
3919    '\0'  NULL
3920    A..Z  capital letters,
3921    a..z  small letters
3922    0..9  digits
3923    _     underscore
3924 */
3925 static char filename_safe_char[128]=
3926 {
3927   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
3928   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
3929   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /*  !"#$%&'()*+,-./ */
3930   1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 0123456789:;<=>? */
3931   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* @ABCDEFGHIJKLMNO */
3932   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* PQRSTUVWXYZ[\]^_ */
3933   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* `abcdefghijklmno */
3934   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz{|}~. */
3935 };
3936
3937 #define MY_FILENAME_ESCAPE '@'
3938
3939 static int
3940 my_mb_wc_filename(CHARSET_INFO *cs __attribute__((unused)),
3941                   my_wc_t *pwc, const uchar *s, const uchar *e)
3942 {
3943   int byte1, byte2;
3944   if (s >= e)
3945     return MY_CS_TOOSMALL;
3946
3947   if (*s < 128 && filename_safe_char[*s])  
3948   {
3949     *pwc= *s;
3950     return 1;
3951   }
3952   
3953   if (*s != MY_FILENAME_ESCAPE)
3954     return MY_CS_ILSEQ;
3955   
3956   if (s + 3 > e)
3957     return MY_CS_TOOSMALL3;
3958   
3959   byte1= s[1];
3960   byte2= s[2];
3961   
3962   if (byte1 >= 0x30 && byte1 <= 0x7F &&
3963       byte2 >= 0x30 && byte2 <= 0x7F)
3964   {
3965     int code= (byte1 - 0x30) * 80 + byte2 - 0x30;
3966     if (code < 5994 && touni[code])
3967     {
3968       *pwc= touni[code];
3969       return 3;
3970     }
3971   }
3972   
3973   if (s + 4 > e)
3974     return MY_CS_TOOSMALL4;
3975
3976   if ((byte1= hexlo(byte1)) >= 0 &&
3977       (byte2= hexlo(byte2)) >= 0)
3978   {
3979     int byte3= hexlo(s[3]);
3980     int byte4= hexlo(s[4]);
3981     if (byte3 >=0 && byte4 >=0)
3982     {
3983       *pwc= (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
3984       return 5;
3985     }
3986   }
3987   
3988   return MY_CS_ILSEQ;
3989 }
3990
3991
3992 static int
3993 my_wc_mb_filename(CHARSET_INFO *cs __attribute__((unused)),
3994                   my_wc_t wc, unsigned char *s, unsigned char *e)
3995 {
3996   int code;
3997   char hex[]= "0123456789abcdef";
3998   if (wc < 128 && filename_safe_char[wc])
3999   {
4000     *s= wc;
4001     return 1;
4002   }
4003   
4004   if (s + 3 > e)
4005     return MY_CS_TOOSMALL3;
4006
4007   *s++= MY_FILENAME_ESCAPE;
4008   if ((wc >= 0x00C0 && wc <= 0x05FF && (code= uni_0C00_05FF[wc - 0x00C0])) ||
4009       (wc >= 0x1E00 && wc <= 0x1FFF && (code= uni_1E00_1FFF[wc - 0x1E00])) ||
4010       (wc >= 0x2160 && wc <= 0x217F && (code= uni_2160_217F[wc - 0x2160])) ||
4011       (wc >= 0x24B0 && wc <= 0x24EF && (code= uni_24B0_24EF[wc - 0x24B0])) ||
4012       (wc >= 0xFF20 && wc <= 0xFF5F && (code= uni_FF20_FF5F[wc - 0xFF20])))
4013   {
4014     *s++= (code / 80) + 0x30;
4015     *s++= (code % 80) + 0x30;
4016     return 3;
4017   }
4018
4019   /* Non letter */
4020   if (s + 5 > e)
4021     return MY_CS_TOOSMALL5;
4022
4023   *s++= hex[(wc >> 12) & 15];
4024   *s++= hex[(wc >> 8) & 15];
4025   *s++= hex[(wc >> 4) & 15];
4026   *s++= hex[(wc)      & 15];
4027   return 5;
4028 }
4029
4030
4031 static MY_COLLATION_HANDLER my_collation_filename_handler =
4032 {
4033     NULL,               /* init */
4034     my_strnncoll_utf8,
4035     my_strnncollsp_utf8,
4036     my_strnxfrm_utf8,
4037     my_strnxfrmlen_utf8,
4038     my_like_range_mb,
4039     my_wildcmp_utf8,
4040     my_strcasecmp_utf8,
4041     my_instr_mb,
4042     my_hash_sort_utf8,
4043     my_propagate_complex
4044 };
4045
4046 static MY_CHARSET_HANDLER my_charset_filename_handler=
4047 {
4048     NULL,               /* init */
4049     my_ismbchar_utf8,
4050     my_mbcharlen_utf8,
4051     my_numchars_mb,
4052     my_charpos_mb,
4053     my_well_formed_len_mb,
4054     my_lengthsp_8bit,
4055     my_numcells_mb,
4056     my_mb_wc_filename,
4057     my_wc_mb_filename,
4058     my_mb_ctype_mb,
4059     my_caseup_str_utf8,
4060     my_casedn_str_utf8,
4061     my_caseup_utf8,
4062     my_casedn_utf8,
4063     my_snprintf_8bit,
4064     my_long10_to_str_8bit,
4065     my_longlong10_to_str_8bit,
4066     my_fill_8bit,
4067     my_strntol_8bit,
4068     my_strntoul_8bit,
4069     my_strntoll_8bit,
4070     my_strntoull_8bit,
4071     my_strntod_8bit,
4072     my_strtoll10_8bit,
4073     my_scan_8bit
4074 };
4075
4076
4077
4078 CHARSET_INFO my_charset_filename=
4079 {
4080     17,0,0,             /* number       */
4081     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_HIDDEN,
4082     "filename",         /* cs name      */
4083     "filename",         /* name         */
4084     "",                 /* comment      */
4085     NULL,               /* tailoring    */
4086     ctype_utf8,         /* ctype        */
4087     to_lower_utf8,      /* to_lower     */
4088     to_upper_utf8,      /* to_upper     */
4089     to_upper_utf8,      /* sort_order   */
4090     NULL,               /* contractions */
4091     NULL,               /* sort_order_big*/
4092     NULL,               /* tab_to_uni   */
4093     NULL,               /* tab_from_uni */
4094     my_unicase_default, /* caseinfo     */
4095     NULL,               /* state_map    */
4096     NULL,               /* ident_map    */
4097     1,                  /* strxfrm_multiply */
4098     1,                  /* caseup_multiply  */
4099     1,                  /* casedn_multiply  */
4100     1,                  /* mbminlen     */
4101     5,                  /* mbmaxlen     */
4102     0,                  /* min_sort_char */
4103     0xFFFF,             /* max_sort_char */
4104     ' ',                /* pad char      */
4105     0,                  /* escape_with_backslash_is_dangerous */
4106     &my_charset_filename_handler,
4107     &my_collation_filename_handler
4108 };
4109
4110 #ifdef MY_TEST_UTF8
4111 #include <stdio.h>
4112
4113 static void test_mb(CHARSET_INFO *cs, uchar *s)
4114 {
4115   while(*s)
4116   {
4117     if (my_ismbhead_utf8(cs,*s))
4118     {
4119       int len=my_mbcharlen_utf8(cs,*s);
4120       while(len--)
4121       {
4122         printf("%c",*s);
4123         s++;
4124       }
4125       printf("\n");
4126     }
4127     else
4128     {
4129       printf("%c\n",*s);
4130       s++;
4131     }
4132   }
4133 }
4134
4135 int main()
4136 {
4137   char str[1024]=" utf8 test проба ПЕРА по-РУССКИ";
4138   CHARSET_INFO *cs;
4139
4140   test_mb(cs,(uchar*)str);
4141
4142   printf("orig      :'%s'\n",str);
4143
4144   my_caseup_utf8(cs,str,15);
4145   printf("caseup    :'%s'\n",str);
4146
4147   my_caseup_str_utf8(cs,str);
4148   printf("caseup_str:'%s'\n",str);
4149
4150   my_casedn_utf8(cs,str,15);
4151   printf("casedn    :'%s'\n",str);
4152
4153   my_casedn_str_utf8(cs,str);
4154   printf("casedn_str:'%s'\n",str);
4155
4156   return 0;
4157 }
4158
4159 #endif
4160
4161 #endif
4162
4163 #endif /* HAVE_CHARSET_UTF8 */
4164
4165
4166