~stewart/drizzle/embedded-innodb-create-select-transaction-arrgh

« back to all changes in this revision

Viewing changes to strings/ctype-utf8.c

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

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