~drizzle-trunk/drizzle/development

1 by brian
clean slate
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
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
15
   Software Foundation, Inc., 51 Franklin Place - Suite 330, Boston,
16
   MA 02110-1301, USA */
1 by brian
clean slate
17
18
/* UTF8 according RFC 2279 */
19
/* Written by Alexander Barkov <bar@udm.net> */
20
1241.9.1 by Monty Taylor
Removed global.h. Fixed all the headers.
21
#include "config.h"
1130.3.26 by Monty Taylor
Removed global.h from headers.
22
1241.9.64 by Monty Taylor
Moved remaining non-public portions of mysys and mystrings to drizzled/internal.
23
#include "drizzled/internal/m_string.h"
1241.9.61 by Monty Taylor
No more mystrings in drizzled/
24
#include "drizzled/charset_info.h"
1 by brian
clean slate
25
#include <errno.h>
26
1067.4.9 by Nathan Williams
Converted all usages of cmin/cmax in mystrings directory to use std::min/max
27
#include <algorithm>
28
1 by brian
clean slate
29
#ifndef EILSEQ
30
#define EILSEQ ENOENT
31
#endif
32
33
34
#define MY_UTF8MB3_GENERAL_CI MY_UTF8MB3 "_general_ci"
35
#define MY_UTF8MB3_BIN        MY_UTF8MB3 "_bin"
36
#define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
37
#define MY_UTF8MB4_BIN        MY_UTF8MB4 "_bin"
38
39
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
40
using namespace std;
41
42
namespace drizzled
43
{
44
1085.1.2 by Monty Taylor
Fixed -Wmissing-declarations
45
void my_hash_sort_utf8mb4(const CHARSET_INFO * const cs,
46
                          const unsigned char *s, size_t slen,
47
                          uint32_t *n1, uint32_t *n2);
48
1 by brian
clean slate
49
static MY_UNICASE_INFO plane00[]={
50
  {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
51
  {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
52
  {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
53
  {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
54
  {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
55
  {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
56
  {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
57
  {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
58
  {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
59
  {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
60
  {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
61
  {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
62
  {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
63
  {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
64
  {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
65
  {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
66
  {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
67
  {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
68
  {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
69
  {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
70
  {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
71
  {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
72
  {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
73
  {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
74
  {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
75
  {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
76
  {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
77
  {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
78
  {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
79
  {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
80
  {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
81
  {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
82
  {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
83
  {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
84
  {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
85
  {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
86
  {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
87
  {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
88
  {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
89
  {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
90
  {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
91
  {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
92
  {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
93
  {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
94
  {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
95
  {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
96
  {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
97
  {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
98
  {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
99
  {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
100
  {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
101
  {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
102
  {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
103
  {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
104
  {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
105
  {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
106
  {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
107
  {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
108
  {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
109
  {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
110
  {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
111
  {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
112
  {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
113
  {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
114
  {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
115
  {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
116
  {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
117
  {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
118
  {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
119
  {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
120
  {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
121
  {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
122
  {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
123
  {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
124
  {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
125
  {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
126
  {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
127
  {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
128
  {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
129
  {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
130
  {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
131
  {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
132
  {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
133
  {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
134
  {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
135
  {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
136
  {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
137
  {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
138
  {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
139
  {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
140
  {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
141
  {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
142
  {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
143
  {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
144
  {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
145
  {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
146
  {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
147
  {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
148
  {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
149
  {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
150
  {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
151
  {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
152
  {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
153
  {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
154
  {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
155
  {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
156
  {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
157
  {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
158
  {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
159
  {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
160
  {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
161
  {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053},
162
  {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
163
  {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
164
  {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
165
  {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
166
  {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
167
  {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
168
  {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
169
  {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
170
  {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
171
  {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
172
  {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
173
  {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
174
  {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
175
  {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
176
  {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
177
  {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
178
};
179
180
181
182
static MY_UNICASE_INFO plane01[]={
183
  {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
184
  {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
185
  {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
186
  {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
187
  {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
188
  {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
189
  {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
190
  {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
191
  {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
192
  {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
193
  {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
194
  {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
195
  {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
196
  {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
197
  {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
198
  {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
199
  {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
200
  {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
201
  {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
202
  {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
203
  {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
204
  {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
205
  {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
206
  {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
207
  {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
208
  {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
209
  {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
210
  {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
211
  {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
212
  {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
213
  {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
214
  {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
215
  {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
216
  {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
217
  {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
218
  {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
219
  {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
220
  {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
221
  {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
222
  {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
223
  {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
224
  {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
225
  {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
226
  {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
227
  {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
228
  {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
229
  {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
230
  {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
231
  {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
232
  {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
233
  {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
234
  {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
235
  {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
236
  {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
237
  {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
238
  {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
239
  {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
240
  {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
241
  {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
242
  {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
243
  {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
244
  {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
245
  {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
246
  {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
247
  {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
248
  {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
249
  {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
250
  {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
251
  {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
252
  {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
253
  {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
254
  {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
255
  {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
256
  {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
257
  {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
258
  {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
259
  {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
260
  {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
261
  {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
262
  {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
263
  {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
264
  {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
265
  {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
266
  {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
267
  {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
268
  {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
269
  {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
270
  {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
271
  {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
272
  {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
273
  {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
274
  {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
275
  {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
276
  {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
277
  {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
278
  {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
279
  {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
280
  {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
281
  {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
282
  {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
283
  {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
284
  {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
285
  {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
286
  {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
287
  {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
288
  {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
289
  {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
290
  {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
291
  {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
292
  {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
293
  {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
294
  {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
295
  {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
296
  {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
297
  {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
298
  {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
299
  {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
300
  {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
301
  {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
302
  {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
303
  {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
304
  {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
305
  {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
306
  {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
307
  {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
308
  {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
309
  {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
310
  {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
311
};
312
313
static MY_UNICASE_INFO plane02[]={
314
  {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
315
  {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
316
  {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
317
  {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
318
  {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
319
  {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
320
  {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
321
  {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
322
  {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
323
  {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
324
  {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
325
  {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
326
  {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
327
  {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
328
  {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
329
  {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
330
  {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
331
  {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
332
  {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
333
  {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
334
  {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
335
  {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
336
  {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
337
  {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
338
  {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
339
  {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
340
  {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
341
  {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
342
  {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
343
  {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
344
  {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
345
  {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
346
  {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
347
  {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
348
  {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
349
  {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
350
  {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
351
  {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
352
  {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
353
  {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
354
  {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
355
  {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
356
  {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
357
  {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
358
  {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
359
  {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
360
  {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
361
  {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
362
  {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
363
  {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
364
  {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
365
  {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
366
  {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
367
  {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
368
  {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
369
  {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
370
  {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
371
  {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
372
  {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
373
  {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
374
  {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
375
  {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
376
  {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
377
  {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
378
  {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
379
  {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
380
  {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
381
  {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
382
  {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
383
  {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
384
  {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
385
  {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
386
  {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
387
  {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
388
  {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
389
  {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
390
  {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
391
  {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
392
  {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
393
  {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
394
  {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
395
  {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
396
  {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
397
  {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
398
  {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
399
  {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
400
  {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
401
  {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
402
  {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
403
  {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
404
  {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
405
  {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
406
  {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
407
  {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
408
  {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
409
  {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
410
  {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
411
  {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
412
  {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
413
  {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
414
  {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
415
  {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
416
  {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
417
  {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
418
  {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
419
  {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
420
  {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
421
  {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
422
  {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
423
  {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
424
  {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
425
  {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
426
  {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
427
  {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
428
  {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
429
  {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
430
  {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
431
  {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
432
  {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
433
  {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
434
  {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
435
  {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
436
  {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
437
  {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
438
  {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
439
  {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
440
  {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
441
  {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
442
};
443
444
static MY_UNICASE_INFO plane03[]={
445
  {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
446
  {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
447
  {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
448
  {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
449
  {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
450
  {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
451
  {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
452
  {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
453
  {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
454
  {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
455
  {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
456
  {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
457
  {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
458
  {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
459
  {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
460
  {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
461
  {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
462
  {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
463
  {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
464
  {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
465
  {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
466
  {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
467
  {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
468
  {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
469
  {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
470
  {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
471
  {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
472
  {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
473
  {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
474
  {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
475
  {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
476
  {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
477
  {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
478
  {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
479
  {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
480
  {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
481
  {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
482
  {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
483
  {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
484
  {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
485
  {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
486
  {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
487
  {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
488
  {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
489
  {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
490
  {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
491
  {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
492
  {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
493
  {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
494
  {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
495
  {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
496
  {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
497
  {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
498
  {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
499
  {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
500
  {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
501
  {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
502
  {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
503
  {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
504
  {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
505
  {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
506
  {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
507
  {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
508
  {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
509
  {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
510
  {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
511
  {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
512
  {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
513
  {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
514
  {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
515
  {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
516
  {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
517
  {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
518
  {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
519
  {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
520
  {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
521
  {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
522
  {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
523
  {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
524
  {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
525
  {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
526
  {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
527
  {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
528
  {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
529
  {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
530
  {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
531
  {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
532
  {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
533
  {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
534
  {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
535
  {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
536
  {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
537
  {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
538
  {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
539
  {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
540
  {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
541
  {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
542
  {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
543
  {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
544
  {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
545
  {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
546
  {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
547
  {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
548
  {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
549
  {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
550
  {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
551
  {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
552
  {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
553
  {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
554
  {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
555
  {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
556
  {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
557
  {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
558
  {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
559
  {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
560
  {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
561
  {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
562
  {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
563
  {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
564
  {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
565
  {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
566
  {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
567
  {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
568
  {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
569
  {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
570
  {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
571
  {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
572
  {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
573
};
574
575
static MY_UNICASE_INFO plane04[]={
576
  {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
577
  {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
578
  {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
579
  {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
580
  {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
581
  {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
582
  {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
583
  {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
584
  {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
585
  {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
586
  {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
587
  {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
588
  {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
589
  {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
590
  {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
591
  {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
592
  {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
593
  {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
594
  {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
595
  {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
596
  {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
597
  {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
598
  {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
599
  {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
600
  {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
601
  {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
602
  {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
603
  {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
604
  {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
605
  {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
606
  {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
607
  {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
608
  {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
609
  {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
610
  {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
611
  {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
612
  {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
613
  {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
614
  {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
615
  {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
616
  {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
617
  {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
618
  {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
619
  {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
620
  {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
621
  {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
622
  {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
623
  {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
624
  {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
625
  {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
626
  {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
627
  {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
628
  {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
629
  {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
630
  {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
631
  {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
632
  {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
633
  {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
634
  {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
635
  {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
636
  {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
637
  {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
638
  {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
639
  {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
640
  {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
641
  {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
642
  {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
643
  {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
644
  {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
645
  {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
646
  {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
647
  {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
648
  {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
649
  {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
650
  {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
651
  {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
652
  {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
653
  {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
654
  {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
655
  {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
656
  {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
657
  {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
658
  {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
659
  {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
660
  {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
661
  {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
662
  {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
663
  {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
664
  {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
665
  {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
666
  {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
667
  {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
668
  {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
669
  {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
670
  {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
671
  {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
672
  {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
673
  {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
674
  {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
675
  {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
676
  {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
677
  {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
678
  {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
679
  {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
680
  {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
681
  {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
682
  {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
683
  {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
684
  {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
685
  {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
686
  {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
687
  {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
688
  {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
689
  {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
690
  {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
691
  {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
692
  {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
693
  {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
694
  {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
695
  {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
696
  {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
697
  {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
698
  {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
699
  {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
700
  {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
701
  {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
702
  {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
703
  {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
704
};
705
706
static MY_UNICASE_INFO plane05[]={
707
  {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
708
  {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
709
  {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
710
  {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
711
  {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
712
  {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
713
  {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
714
  {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
715
  {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
716
  {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
717
  {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
718
  {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
719
  {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
720
  {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
721
  {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
722
  {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
723
  {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
724
  {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
725
  {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
726
  {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
727
  {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
728
  {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
729
  {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
730
  {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
731
  {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
732
  {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
733
  {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
734
  {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
735
  {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
736
  {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
737
  {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
738
  {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
739
  {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
740
  {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
741
  {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
742
  {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
743
  {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
744
  {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
745
  {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
746
  {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
747
  {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
748
  {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
749
  {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
750
  {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
751
  {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
752
  {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
753
  {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
754
  {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
755
  {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
756
  {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
757
  {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
758
  {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
759
  {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
760
  {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
761
  {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
762
  {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
763
  {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
764
  {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
765
  {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
766
  {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
767
  {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
768
  {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
769
  {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
770
  {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
771
  {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
772
  {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
773
  {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
774
  {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
775
  {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
776
  {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
777
  {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
778
  {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
779
  {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
780
  {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
781
  {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
782
  {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
783
  {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
784
  {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
785
  {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
786
  {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
787
  {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
788
  {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
789
  {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
790
  {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
791
  {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
792
  {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
793
  {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
794
  {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
795
  {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
796
  {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
797
  {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
798
  {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
799
  {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
800
  {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
801
  {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
802
  {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
803
  {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
804
  {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
805
  {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
806
  {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
807
  {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
808
  {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
809
  {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
810
  {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
811
  {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
812
  {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
813
  {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
814
  {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
815
  {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
816
  {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
817
  {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
818
  {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
819
  {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
820
  {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
821
  {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
822
  {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
823
  {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
824
  {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
825
  {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
826
  {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
827
  {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
828
  {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
829
  {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
830
  {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
831
  {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
832
  {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
833
  {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
834
  {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
835
};
836
837
static MY_UNICASE_INFO plane1E[]={
838
  {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
839
  {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
840
  {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
841
  {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
842
  {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
843
  {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
844
  {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
845
  {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
846
  {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
847
  {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
848
  {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
849
  {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
850
  {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
851
  {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
852
  {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
853
  {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
854
  {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
855
  {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
856
  {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
857
  {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
858
  {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
859
  {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
860
  {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
861
  {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
862
  {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
863
  {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
864
  {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
865
  {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
866
  {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
867
  {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
868
  {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
869
  {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
870
  {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
871
  {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
872
  {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
873
  {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
874
  {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
875
  {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
876
  {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
877
  {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
878
  {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
879
  {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
880
  {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
881
  {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
882
  {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
883
  {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
884
  {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
885
  {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
886
  {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
887
  {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
888
  {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
889
  {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
890
  {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
891
  {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
892
  {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
893
  {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
894
  {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
895
  {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
896
  {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
897
  {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
898
  {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
899
  {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
900
  {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
901
  {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
902
  {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
903
  {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
904
  {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
905
  {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
906
  {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
907
  {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
908
  {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
909
  {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
910
  {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
911
  {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
912
  {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
913
  {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
914
  {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
915
  {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
916
  {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
917
  {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
918
  {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
919
  {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
920
  {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
921
  {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
922
  {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
923
  {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
924
  {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
925
  {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
926
  {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
927
  {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
928
  {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
929
  {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
930
  {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
931
  {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
932
  {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
933
  {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
934
  {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
935
  {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
936
  {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
937
  {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
938
  {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
939
  {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
940
  {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
941
  {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
942
  {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
943
  {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
944
  {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
945
  {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
946
  {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
947
  {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
948
  {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
949
  {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
950
  {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
951
  {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
952
  {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
953
  {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
954
  {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
955
  {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
956
  {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
957
  {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
958
  {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
959
  {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
960
  {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
961
  {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
962
  {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
963
  {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
964
  {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
965
  {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
966
};
967
968
static MY_UNICASE_INFO plane1F[]={
969
  {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
970
  {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
971
  {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
972
  {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
973
  {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
974
  {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
975
  {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
976
  {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
977
  {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
978
  {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
979
  {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
980
  {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
981
  {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
982
  {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
983
  {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
984
  {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
985
  {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
986
  {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
987
  {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
988
  {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
989
  {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
990
  {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
991
  {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
992
  {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
993
  {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
994
  {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
995
  {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
996
  {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
997
  {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
998
  {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
999
  {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1000
  {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1001
  {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1002
  {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1003
  {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1004
  {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
1005
  {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1006
  {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1007
  {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1008
  {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
1009
  {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
1010
  {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
1011
  {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
1012
  {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
1013
  {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
1014
  {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
1015
  {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
1016
  {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
1017
  {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1018
  {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1019
  {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1020
  {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1021
  {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1022
  {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1023
  {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1024
  {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1025
  {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1026
  {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1027
  {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1028
  {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1029
  {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1030
  {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1031
  {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1032
  {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
1033
  {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1034
  {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1035
  {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1036
  {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1037
  {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1038
  {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1039
  {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1040
  {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1041
  {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1042
  {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1043
  {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1044
  {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1045
  {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1046
  {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1047
  {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1048
  {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1049
  {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1050
  {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1051
  {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1052
  {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1053
  {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1054
  {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1055
  {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1056
  {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1057
  {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1058
  {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
1059
  {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
1060
  {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
1061
  {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1062
  {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1063
  {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
1064
  {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
1065
  {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
1066
  {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
1067
  {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
1068
  {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
1069
  {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1070
  {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1071
  {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
1072
  {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
1073
  {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1074
  {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
1075
  {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
1076
  {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
1077
  {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1078
  {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1079
  {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
1080
  {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
1081
  {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1082
  {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
1083
  {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
1084
  {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
1085
  {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1086
  {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1087
  {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
1088
  {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
1089
  {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
1090
  {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
1091
  {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
1092
  {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
1093
  {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1094
  {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1095
  {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
1096
  {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
1097
};
1098
1099
static MY_UNICASE_INFO plane21[]={
1100
  {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
1101
  {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
1102
  {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
1103
  {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
1104
  {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
1105
  {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
1106
  {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
1107
  {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
1108
  {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
1109
  {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
1110
  {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
1111
  {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
1112
  {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
1113
  {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
1114
  {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
1115
  {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
1116
  {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
1117
  {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
1118
  {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
1119
  {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
1120
  {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
1121
  {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
1122
  {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
1123
  {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
1124
  {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
1125
  {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
1126
  {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
1127
  {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
1128
  {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
1129
  {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
1130
  {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
1131
  {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
1132
  {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
1133
  {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
1134
  {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
1135
  {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
1136
  {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
1137
  {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
1138
  {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
1139
  {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
1140
  {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
1141
  {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
1142
  {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
1143
  {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
1144
  {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
1145
  {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
1146
  {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
1147
  {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
1148
  {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1149
  {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1150
  {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1151
  {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1152
  {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1153
  {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1154
  {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1155
  {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1156
  {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1157
  {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1158
  {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1159
  {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1160
  {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1161
  {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1162
  {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1163
  {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1164
  {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
1165
  {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
1166
  {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
1167
  {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
1168
  {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
1169
  {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
1170
  {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
1171
  {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
1172
  {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
1173
  {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
1174
  {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
1175
  {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
1176
  {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
1177
  {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
1178
  {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
1179
  {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
1180
  {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
1181
  {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
1182
  {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
1183
  {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
1184
  {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
1185
  {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
1186
  {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
1187
  {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
1188
  {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
1189
  {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
1190
  {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
1191
  {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
1192
  {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
1193
  {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
1194
  {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
1195
  {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
1196
  {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
1197
  {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
1198
  {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
1199
  {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
1200
  {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
1201
  {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
1202
  {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
1203
  {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
1204
  {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
1205
  {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
1206
  {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
1207
  {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
1208
  {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
1209
  {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
1210
  {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
1211
  {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
1212
  {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
1213
  {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
1214
  {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
1215
  {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
1216
  {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
1217
  {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
1218
  {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
1219
  {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
1220
  {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
1221
  {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
1222
  {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
1223
  {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
1224
  {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
1225
  {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
1226
  {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
1227
  {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
1228
};
1229
1230
static MY_UNICASE_INFO plane24[]={
1231
  {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
1232
  {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
1233
  {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
1234
  {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
1235
  {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
1236
  {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
1237
  {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
1238
  {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
1239
  {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
1240
  {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
1241
  {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
1242
  {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
1243
  {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
1244
  {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
1245
  {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
1246
  {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
1247
  {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
1248
  {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
1249
  {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
1250
  {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
1251
  {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
1252
  {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
1253
  {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
1254
  {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
1255
  {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
1256
  {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
1257
  {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
1258
  {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
1259
  {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
1260
  {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
1261
  {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
1262
  {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
1263
  {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
1264
  {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
1265
  {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
1266
  {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
1267
  {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
1268
  {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
1269
  {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
1270
  {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
1271
  {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
1272
  {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
1273
  {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
1274
  {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
1275
  {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
1276
  {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
1277
  {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
1278
  {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
1279
  {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
1280
  {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
1281
  {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
1282
  {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
1283
  {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
1284
  {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
1285
  {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
1286
  {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
1287
  {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
1288
  {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
1289
  {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
1290
  {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
1291
  {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
1292
  {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
1293
  {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
1294
  {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
1295
  {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
1296
  {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
1297
  {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
1298
  {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
1299
  {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
1300
  {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
1301
  {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
1302
  {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
1303
  {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
1304
  {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
1305
  {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
1306
  {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
1307
  {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
1308
  {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
1309
  {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
1310
  {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
1311
  {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
1312
  {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
1313
  {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
1314
  {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
1315
  {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
1316
  {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
1317
  {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
1318
  {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
1319
  {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
1320
  {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
1321
  {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
1322
  {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1323
  {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1324
  {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1325
  {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1326
  {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1327
  {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1328
  {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1329
  {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1330
  {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1331
  {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1332
  {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1333
  {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1334
  {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1335
  {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1336
  {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1337
  {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1338
  {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1339
  {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1340
  {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1341
  {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1342
  {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1343
  {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1344
  {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1345
  {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1346
  {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1347
  {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1348
  {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
1349
  {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
1350
  {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
1351
  {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
1352
  {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
1353
  {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
1354
  {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
1355
  {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
1356
  {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
1357
  {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
1358
  {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
1359
};
1360
1361
static MY_UNICASE_INFO planeFF[]={
1362
  {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
1363
  {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
1364
  {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
1365
  {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
1366
  {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
1367
  {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
1368
  {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
1369
  {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
1370
  {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
1371
  {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
1372
  {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
1373
  {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
1374
  {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
1375
  {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
1376
  {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
1377
  {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
1378
  {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
1379
  {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1380
  {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1381
  {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1382
  {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1383
  {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1384
  {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1385
  {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1386
  {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1387
  {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1388
  {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1389
  {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1390
  {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1391
  {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
1392
  {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
1393
  {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
1394
  {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
1395
  {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1396
  {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1397
  {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1398
  {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1399
  {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1400
  {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1401
  {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1402
  {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1403
  {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1404
  {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1405
  {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1406
  {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1407
  {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
1408
  {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
1409
  {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
1410
  {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
1411
  {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
1412
  {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
1413
  {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
1414
  {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
1415
  {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
1416
  {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
1417
  {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
1418
  {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
1419
  {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
1420
  {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
1421
  {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
1422
  {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
1423
  {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
1424
  {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
1425
  {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
1426
  {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
1427
  {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
1428
  {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
1429
  {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
1430
  {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
1431
  {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
1432
  {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
1433
  {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
1434
  {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
1435
  {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
1436
  {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
1437
  {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
1438
  {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
1439
  {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
1440
  {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
1441
  {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
1442
  {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
1443
  {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
1444
  {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
1445
  {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
1446
  {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
1447
  {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
1448
  {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
1449
  {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
1450
  {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
1451
  {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
1452
  {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
1453
  {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
1454
  {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
1455
  {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
1456
  {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
1457
  {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
1458
  {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
1459
  {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
1460
  {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
1461
  {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
1462
  {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
1463
  {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
1464
  {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
1465
  {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
1466
  {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
1467
  {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
1468
  {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
1469
  {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
1470
  {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
1471
  {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
1472
  {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
1473
  {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
1474
  {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
1475
  {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
1476
  {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
1477
  {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
1478
  {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
1479
  {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
1480
  {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
1481
  {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
1482
  {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
1483
  {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
1484
  {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
1485
  {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
1486
  {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
1487
  {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
1488
  {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
1489
  {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
1490
};
1491
1492
MY_UNICASE_INFO *my_unicase_default[256]={
1493
 plane00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1494
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1495
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1496
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1497
    NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1498
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1499
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1500
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1501
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1502
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1503
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1504
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1505
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1506
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1507
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1508
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1509
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1510
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1511
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1512
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1513
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1514
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1515
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1516
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1517
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1518
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1519
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1520
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1521
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1522
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1523
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1524
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1525
1526
};
1527
1528
1529
/*
1530
  Turkish lower/upper mapping:
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1531
  1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
1 by brian
clean slate
1532
           0x0131 LATIN SMALL   LETTER DOTLESS I
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1533
  2. UPPER(0x0069 LATIN SMALL   LETTER I) ->
1 by brian
clean slate
1534
           0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1535
*/
1536
1537
static MY_UNICASE_INFO turk00[]=
1538
{
1539
  {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
1540
  {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
1541
  {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
1542
  {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
1543
  {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
1544
  {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
1545
  {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
1546
  {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
1547
  {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
1548
  {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
1549
  {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
1550
  {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
1551
  {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
1552
  {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
1553
  {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
1554
  {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
1555
  {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
1556
  {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
1557
  {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
1558
  {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
1559
  {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
1560
  {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
1561
  {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
1562
  {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
1563
  {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
1564
  {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
1565
  {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
1566
  {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
1567
  {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
1568
  {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
1569
  {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
1570
  {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
1571
  {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
1572
  {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1573
  {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1574
  {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1575
  {0x0048,0x0068,0x0048},  {0x0049,0x0131,0x0049},
1576
  {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1577
  {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1578
  {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1579
  {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1580
  {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1581
  {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1582
  {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1583
  {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1584
  {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
1585
  {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
1586
  {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
1587
  {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
1588
  {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1589
  {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1590
  {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1591
  {0x0048,0x0068,0x0048},  {0x0130,0x0069,0x0049},
1592
  {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1593
  {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1594
  {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1595
  {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1596
  {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1597
  {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1598
  {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1599
  {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1600
  {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
1601
  {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
1602
  {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
1603
  {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
1604
  {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
1605
  {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
1606
  {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
1607
  {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
1608
  {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
1609
  {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
1610
  {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
1611
  {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
1612
  {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
1613
  {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
1614
  {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
1615
  {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
1616
  {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
1617
  {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
1618
  {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
1619
  {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
1620
  {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
1621
  {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
1622
  {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
1623
  {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
1624
  {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
1625
  {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
1626
  {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
1627
  {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
1628
  {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
1629
  {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
1630
  {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
1631
  {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
1632
  {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
1633
  {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
1634
  {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
1635
  {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1636
  {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1637
  {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1638
  {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1639
  {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1640
  {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1641
  {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1642
  {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1643
  {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1644
  {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1645
  {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1646
  {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
1647
  {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1648
  {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1649
  {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1650
  {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
1651
  {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1652
  {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1653
  {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1654
  {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1655
  {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1656
  {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1657
  {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1658
  {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1659
  {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1660
  {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1661
  {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1662
  {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
1663
  {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1664
  {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1665
  {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1666
  {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
1667
};
1668
1669
1670
1671
MY_UNICASE_INFO *my_unicase_turkish[256]=
1672
{
1673
  turk00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1674
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1675
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1676
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1677
    NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1678
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1679
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1680
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1681
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1682
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1683
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1684
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1685
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1686
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1687
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1688
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1689
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1690
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1691
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1692
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1693
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1694
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1695
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1696
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1697
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1698
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1699
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1700
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1701
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1702
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1703
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1704
    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1705
};
1706
1707
1708
1709
/**
1710
  Compare string against string with wildcard
1711
  This function is used for utf8mb3, utf8mb4, ucs2, utf16, utf32
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1712
1 by brian
clean slate
1713
  @param cs Character set.
1714
  @str      String.
1715
  @str_end  End of string.
1716
  @wildstr  Wildcard pattern.
1717
  @wildend  End of wildcard pattern.
1718
  @escape   Escape characters, typically \\.
1719
  @w_one    "One character", typically _.
1720
  @w_many   "Many characters", typically %.
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1721
1 by brian
clean slate
1722
  @return Comparison result.
1723
    @retval  0 if matched.
1724
    @retval -1 if not matched with wildcard.
1725
    @retval  1 if matched with wildcard.
1726
*/
1727
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
1728
int my_wildcmp_unicode(const CHARSET_INFO * const cs,
1 by brian
clean slate
1729
		       const char *str,const char *str_end,
1730
		       const char *wildstr,const char *wildend,
1731
		       int escape, int w_one, int w_many,
1732
		       MY_UNICASE_INFO **weights)
1733
{
1734
  int result= -1;			/* Not found, using wildcards */
77.1.71 by Monty Taylor
Uninitialized use.
1735
  my_wc_t s_wc=0, w_wc=0;
1 by brian
clean slate
1736
  int scan, plane;
236.3.9 by Andrey Hristov
- Fix build of exotic, mostly non-western, charsets (--with-extra-charsets)
1737
  my_charset_conv_mb_wc mb_wc;
1 by brian
clean slate
1738
  mb_wc= cs->cset->mb_wc;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1739
1 by brian
clean slate
1740
  while (wildstr != wildend)
1741
  {
1742
    while (1)
1743
    {
276 by Brian Aker
Cleaned out my_bool from strings.
1744
      bool escaped= 0;
481 by Brian Aker
Remove all of uchar.
1745
      if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
1746
                       (const unsigned char*)wildend)) <= 0)
1 by brian
clean slate
1747
        return 1;
1748
1749
      if (w_wc == (my_wc_t)w_many)
1750
      {
1751
        result= 1;				/* Found an anchor char */
1752
        break;
1753
      }
1754
1755
      wildstr+= scan;
1756
      if (w_wc ==  (my_wc_t)escape && wildstr < wildend)
1757
      {
481 by Brian Aker
Remove all of uchar.
1758
        if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
1759
                         (const unsigned char*)wildend)) <= 0)
1 by brian
clean slate
1760
          return 1;
1761
        wildstr+= scan;
1762
        escaped= 1;
1763
      }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1764
481 by Brian Aker
Remove all of uchar.
1765
      if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
1766
                       (const unsigned char*)str_end)) <= 0)
1 by brian
clean slate
1767
        return 1;
1768
      str+= scan;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1769
1 by brian
clean slate
1770
      if (!escaped && w_wc == (my_wc_t)w_one)
1771
      {
1772
        result= 1;				/* Found an anchor char */
1773
      }
1774
      else
1775
      {
1776
        if (weights)
1777
        {
1778
          if (s_wc < 0x10000)
1779
          {
1780
            plane=(s_wc>>8) & 0xFF;
1781
            s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
1782
          }
1783
          if (w_wc < 0x10000)
1784
          {
1785
            plane=(w_wc>>8) & 0xFF;
1786
            w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
1787
          }
1788
        }
1789
        if (s_wc != w_wc)
1790
          return 1;				/* No match */
1791
      }
1792
      if (wildstr == wildend)
1793
	return (str != str_end);		/* Match if both are at end */
1794
    }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1795
1796
1 by brian
clean slate
1797
    if (w_wc == (my_wc_t)w_many)
1798
    {						/* Found w_many */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1799
1 by brian
clean slate
1800
      /* Remove any '%' and '_' from the wild search string */
1801
      for (; wildstr != wildend ;)
1802
      {
481 by Brian Aker
Remove all of uchar.
1803
        if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
1804
                         (const unsigned char*)wildend)) <= 0)
1 by brian
clean slate
1805
          return 1;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1806
1 by brian
clean slate
1807
	if (w_wc == (my_wc_t)w_many)
1808
	{
1809
	  wildstr+= scan;
1810
	  continue;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1811
	}
1812
1 by brian
clean slate
1813
	if (w_wc == (my_wc_t)w_one)
1814
	{
1815
	  wildstr+= scan;
481 by Brian Aker
Remove all of uchar.
1816
          if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
1817
                           (const unsigned char*)str_end)) <=0)
1 by brian
clean slate
1818
            return 1;
1819
          str+= scan;
1820
	  continue;
1821
	}
1822
	break;					/* Not a wild character */
1823
      }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1824
1 by brian
clean slate
1825
      if (wildstr == wildend)
1826
	return 0;				/* Ok if w_many is last */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1827
1 by brian
clean slate
1828
      if (str == str_end)
1829
	return -1;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1830
481 by Brian Aker
Remove all of uchar.
1831
      if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
1832
                       (const unsigned char*)wildend)) <=0)
1 by brian
clean slate
1833
        return 1;
1834
      wildstr+= scan;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1835
1 by brian
clean slate
1836
      if (w_wc ==  (my_wc_t)escape)
1837
      {
1838
        if (wildstr < wildend)
1839
        {
481 by Brian Aker
Remove all of uchar.
1840
          if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
1841
                           (const unsigned char*)wildend)) <=0)
1 by brian
clean slate
1842
            return 1;
1843
          wildstr+= scan;
1844
        }
1845
      }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1846
1 by brian
clean slate
1847
      while (1)
1848
      {
1849
        /* Skip until the first character from wildstr is found */
1850
        while (str != str_end)
1851
        {
481 by Brian Aker
Remove all of uchar.
1852
          if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
1853
                           (const unsigned char*)str_end)) <=0)
1 by brian
clean slate
1854
            return 1;
1855
          if (weights)
1856
          {
1857
            plane=(s_wc>>8) & 0xFF;
1858
            s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
1859
            plane=(w_wc>>8) & 0xFF;
1860
            w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
1861
          }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1862
1 by brian
clean slate
1863
          if (s_wc == w_wc)
1864
            break;
1865
          str+= scan;
1866
        }
1867
        if (str == str_end)
1868
          return -1;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1869
1 by brian
clean slate
1870
        str+= scan;
1871
        result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
1872
                                   escape, w_one, w_many,
1873
                                   weights);
1874
        if (result <= 0)
1875
          return result;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
1876
      }
1 by brian
clean slate
1877
    }
1878
  }
1879
  return (str != str_end ? 1 : 0);
1880
}
1881
1054.2.11 by Monty Taylor
Removed copy_and_convert.
1882
1883
int make_escape_code(const CHARSET_INFO * const cs, const char *escape)
1884
{
1885
  my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc;
1886
  my_wc_t escape_wc;
1887
  int rc= mb_wc(cs, &escape_wc,
1888
                (const unsigned char*) escape,
1889
                (const unsigned char*) escape + strlen(escape));
1890
  return (int)(rc > 0 ? escape_wc : '\\');
1891
}
1892
1 by brian
clean slate
1893
/*
1894
  We consider bytes with code more than 127 as a letter.
1895
  This garantees that word boundaries work fine with regular
1896
  expressions. Note, there is no need to mark byte 255  as a
1897
  letter, it is illegal byte in UTF8.
1898
*/
481 by Brian Aker
Remove all of uchar.
1899
static unsigned char ctype_utf8mb4[]=
1 by brian
clean slate
1900
{
1901
    0,
1902
   32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
1903
   32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
1904
   72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1905
  132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
1906
   16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
1907
    1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
1908
   16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
1909
    2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
1910
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1911
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1912
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1913
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1914
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1915
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1916
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
1917
    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
1918
};
1919
1920
481 by Brian Aker
Remove all of uchar.
1921
static unsigned char to_lower_utf8mb4[]=
1 by brian
clean slate
1922
{
1923
    0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1924
   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1925
   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1926
   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1927
   64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
1928
  112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
1929
   96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
1930
  112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
1931
  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
1932
  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
1933
  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
1934
  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
1935
  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
1936
  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
1937
  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
1938
  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
1939
};
1940
1941
481 by Brian Aker
Remove all of uchar.
1942
static unsigned char to_upper_utf8mb4[]=
1 by brian
clean slate
1943
{
1944
    0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1945
   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1946
   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1947
   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1948
   64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1949
   80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1950
   96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1951
   80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
1952
  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
1953
  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
1954
  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
1955
  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
1956
  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
1957
  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
1958
  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
1959
  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
1960
};
1961
1962
1963
static inline int
481 by Brian Aker
Remove all of uchar.
1964
bincmp_utf8mb4(const unsigned char *s, const unsigned char *se,
1965
               const unsigned char *t, const unsigned char *te)
1 by brian
clean slate
1966
{
1967
  int slen= (int) (se - s), tlen= (int) (te - t);
1067.4.9 by Nathan Williams
Converted all usages of cmin/cmax in mystrings directory to use std::min/max
1968
  int len= min(slen, tlen);
1 by brian
clean slate
1969
  int cmp= memcmp(s, t, len);
1970
  return cmp ? cmp : slen - tlen;
1971
}
1972
1973
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
1974
int
1975
my_mb_wc_utf8mb4(const CHARSET_INFO * const,
481 by Brian Aker
Remove all of uchar.
1976
                 my_wc_t * pwc, const unsigned char *s, const unsigned char *e)
1 by brian
clean slate
1977
{
481 by Brian Aker
Remove all of uchar.
1978
  unsigned char c;
1 by brian
clean slate
1979
1980
  if (s >= e)
1981
    return MY_CS_TOOSMALL;
1982
1983
  c= s[0];
1984
  if (c < 0x80)
1985
  {
1986
    *pwc= c;
1987
    return 1;
1988
  }
1989
  else if (c < 0xc2)
1990
    return MY_CS_ILSEQ;
1991
  else if (c < 0xe0)
1992
  {
1993
    if (s + 2 > e) /* We need 2 characters */
1994
      return MY_CS_TOOSMALL2;
1995
1996
    if (!((s[1] ^ 0x80) < 0x40))
1997
      return MY_CS_ILSEQ;
1998
1999
    *pwc= ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
2000
    return 2;
2001
  }
2002
  else if (c < 0xf0)
2003
  {
2004
    if (s + 3 > e) /* We need 3 characters */
2005
      return MY_CS_TOOSMALL3;
2006
2007
    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 &&
2008
          (c >= 0xe1 || s[1] >= 0xa0)))
2009
      return MY_CS_ILSEQ;
2010
2011
    *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
2012
          ((my_wc_t) (s[1] ^ 0x80) << 6) |
2013
           (my_wc_t) (s[2] ^ 0x80);
2014
    return 3;
2015
  }
2016
  else if (c < 0xf8)
2017
  {
2018
    if (s + 4 > e) /* We need 4 characters */
2019
      return MY_CS_TOOSMALL4;
2020
2021
    if (!((s[1] ^ 0x80) < 0x40 &&
2022
          (s[2] ^ 0x80) < 0x40 &&
2023
          (s[3] ^ 0x80) < 0x40 &&
2024
          (c >= 0xf1 || s[1] >= 0x90)))
2025
      return MY_CS_ILSEQ;
2026
    *pwc = ((my_wc_t) (c & 0x07) << 18)    |
2027
           ((my_wc_t) (s[1] ^ 0x80) << 12) |
2028
           ((my_wc_t) (s[2] ^ 0x80) << 6)  |
2029
            (my_wc_t) (s[3] ^ 0x80);
2030
    return 4;
2031
  }
2032
  return MY_CS_ILSEQ;
2033
}
2034
2035
2036
/*
2037
  The same as above, but without range check
2038
  for example, for a null-terminated string
2039
*/
2040
static int
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2041
my_mb_wc_utf8mb4_no_range(const CHARSET_INFO * const,
481 by Brian Aker
Remove all of uchar.
2042
                          my_wc_t *pwc, const unsigned char *s)
1 by brian
clean slate
2043
{
481 by Brian Aker
Remove all of uchar.
2044
  unsigned char c;
1 by brian
clean slate
2045
2046
  c= s[0];
2047
  if (c < 0x80)
2048
  {
2049
    *pwc = c;
2050
    return 1;
2051
  }
2052
2053
  if (c < 0xc2)
2054
    return MY_CS_ILSEQ;
2055
2056
  if (c < 0xe0)
2057
  {
2058
    if (!((s[1] ^ 0x80) < 0x40))
2059
      return MY_CS_ILSEQ;
2060
2061
    *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
2062
    return 2;
2063
  }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2064
1 by brian
clean slate
2065
  if (c < 0xf0)
2066
  {
2067
    if (!((s[1] ^ 0x80) < 0x40 &&
2068
          (s[2] ^ 0x80) < 0x40 &&
2069
          (c >= 0xe1 || s[1] >= 0xa0)))
2070
      return MY_CS_ILSEQ;
2071
    *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
2072
          ((my_wc_t) (s[1] ^ 0x80) << 6) |
2073
           (my_wc_t) (s[2] ^ 0x80);
2074
2075
    return 3;
2076
  }
2077
  else if (c < 0xf8)
2078
  {
2079
    if (!((s[1] ^ 0x80) < 0x40 &&
2080
          (s[2] ^ 0x80) < 0x40 &&
2081
          (s[3] ^ 0x80) < 0x40 &&
2082
          (c >= 0xf1 || s[1] >= 0x90)))
2083
      return MY_CS_ILSEQ;
2084
    *pwc = ((my_wc_t) (c & 0x07) << 18)    |
2085
           ((my_wc_t) (s[1] ^ 0x80) << 12) |
2086
           ((my_wc_t) (s[2] ^ 0x80) << 6)  |
2087
            (my_wc_t) (s[3] ^ 0x80);
2088
    return 4;
2089
  }
2090
  return MY_CS_ILSEQ;
2091
}
2092
2093
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2094
int
2095
my_wc_mb_utf8mb4(const CHARSET_INFO * const,
481 by Brian Aker
Remove all of uchar.
2096
                 my_wc_t wc, unsigned char *r, unsigned char *e)
1 by brian
clean slate
2097
{
2098
  int count;
2099
2100
  if (r >= e)
2101
    return MY_CS_TOOSMALL;
2102
2103
  if (wc < 0x80)
2104
    count= 1;
2105
  else if (wc < 0x800)
2106
    count= 2;
2107
  else if (wc < 0x10000)
2108
    count= 3;
2109
  else if (wc < 0x200000)
2110
    count= 4;
2111
  else return MY_CS_ILUNI;
2112
2113
  if (r + count > e)
1892.5.2 by Gustaf Thorslund
Replaced macros with functions/templates. Part of blueprint:
2114
    return my_cs_toosmalln(count);
1 by brian
clean slate
2115
2116
  switch (count) {
2117
    /* Fall through all cases!!! */
481 by Brian Aker
Remove all of uchar.
2118
    case 4: r[3] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
2119
    case 3: r[2] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
2120
    case 2: r[1] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;
2121
    case 1: r[0] = (unsigned char) wc;
1 by brian
clean slate
2122
  }
2123
  return count;
2124
}
2125
2126
2127
/*
2128
  The same as above, but without range check.
2129
*/
2130
static int
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2131
my_wc_mb_utf8mb4_no_range(const CHARSET_INFO * const,
481 by Brian Aker
Remove all of uchar.
2132
                          my_wc_t wc, unsigned char *r)
1 by brian
clean slate
2133
{
2134
  int count;
2135
2136
  if (wc < 0x80)
2137
    count= 1;
2138
  else if (wc < 0x800)
2139
    count= 2;
2140
  else if (wc < 0x10000)
2141
    count= 3;
2142
  else if (wc < 0x200000)
2143
    count= 4;
2144
  else
2145
    return MY_CS_ILUNI;
2146
2147
  switch (count)
2148
  {
2149
    /* Fall through all cases!!! */
481 by Brian Aker
Remove all of uchar.
2150
    case 4: r[3]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000;
2151
    case 3: r[2]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;
2152
    case 2: r[1]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;
2153
    case 1: r[0]= (unsigned char) wc;
1 by brian
clean slate
2154
  }
2155
  return count;
2156
}
2157
2158
2159
#define REPLACEMENT_CHAR 0xFFFD;
2160
2161
2162
static inline void
2163
my_tolower_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
2164
{
2165
  int page= *wc >> 8;
2166
  if (page < 256 && uni_plane[page])
2167
    *wc= uni_plane[page][*wc & 0xFF].tolower;
2168
}
2169
2170
2171
static inline void
2172
my_toupper_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].toupper;
2177
}
2178
2179
2180
static inline void
2181
my_tosort_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
2182
{
2183
  int page= *wc >> 8;
2184
  if (page < 256)
2185
  {
2186
    if (uni_plane[page])
2187
      *wc= uni_plane[page][*wc & 0xFF].sort;
2188
  }
2189
  else
2190
  {
2191
    *wc= REPLACEMENT_CHAR;
2192
  }
2193
}
2194
2195
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2196
size_t
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2197
my_caseup_utf8mb4(const CHARSET_INFO * const cs, char *src, size_t srclen,
1 by brian
clean slate
2198
                  char *dst, size_t dstlen)
2199
{
2200
  my_wc_t wc;
2201
  int srcres, dstres;
2202
  char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
2203
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
51.3.9 by Jay Pipes
Removal of DBUG from strings/ library
2204
  assert(src != dst || cs->caseup_multiply == 1);
1 by brian
clean slate
2205
2206
  while ((src < srcend) &&
2207
         (srcres= my_mb_wc_utf8mb4(cs, &wc,
481 by Brian Aker
Remove all of uchar.
2208
                                   (unsigned char *) src, (unsigned char*) srcend)) > 0)
1 by brian
clean slate
2209
  {
2210
    my_toupper_utf8mb4(uni_plane, &wc);
481 by Brian Aker
Remove all of uchar.
2211
    if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
1 by brian
clean slate
2212
      break;
2213
    src+= srcres;
2214
    dst+= dstres;
2215
  }
2216
  return (size_t) (dst - dst0);
2217
}
2218
2219
2220
static inline void
482 by Brian Aker
Remove uint.
2221
my_hash_add(uint32_t *n1, uint32_t *n2, uint32_t ch)
1 by brian
clean slate
2222
{
2223
  n1[0]^= (((n1[0] & 63) + n2[0]) * (ch)) + (n1[0] << 8);
2224
  n2[0]+= 3;
2225
}
2226
2227
612.2.11 by Monty Taylor
Cleanup up the extern+static combo (plus some attributes because I got bored.)
2228
void my_hash_sort_utf8mb4(const CHARSET_INFO * const cs,
2229
                          const unsigned char *s, size_t slen,
2230
                          uint32_t *n1, uint32_t *n2)
1 by brian
clean slate
2231
{
2232
  my_wc_t wc;
2233
  int res;
481 by Brian Aker
Remove all of uchar.
2234
  const unsigned char *e= s + slen;
1 by brian
clean slate
2235
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2236
2237
  /*
2238
    Remove end space. We do this to be able to compare
2239
    'A ' and 'A' as identical
2240
  */
2241
  while (e > s && e[-1] == ' ')
2242
    e--;
2243
481 by Brian Aker
Remove all of uchar.
2244
  while ((res= my_mb_wc_utf8mb4(cs, &wc, (const unsigned char*) s, (const unsigned char*) e)) > 0)
1 by brian
clean slate
2245
  {
2246
    my_tosort_utf8mb4(uni_plane, &wc);
895 by Brian Aker
Completion (?) of uint conversion.
2247
    my_hash_add(n1, n2, (uint32_t) (wc & 0xFF));
2248
    my_hash_add(n1, n2, (uint32_t) (wc >> 8)  & 0xFF);
1 by brian
clean slate
2249
    if (wc > 0xFFFF)
2250
    {
2251
       /*
2252
        Put the highest byte only if it is non-zero,
2253
        to make hash functions for utf8mb3 and utf8mb4
2254
        compatible for BMP characters.
2255
        This is useful to keep order of records in
2256
        test results, e.g. for "SHOW GRANTS".
2257
      */
895 by Brian Aker
Completion (?) of uint conversion.
2258
      my_hash_add(n1, n2, (uint32_t) (wc >> 16) & 0xFF);
1 by brian
clean slate
2259
    }
2260
    s+= res;
2261
  }
2262
}
2263
2264
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2265
size_t
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2266
my_caseup_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
1 by brian
clean slate
2267
{
2268
  my_wc_t wc;
2269
  int srcres, dstres;
2270
  char *dst= src, *dst0= src;
2271
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
51.3.9 by Jay Pipes
Removal of DBUG from strings/ library
2272
  assert(cs->caseup_multiply == 1);
1 by brian
clean slate
2273
2274
  while (*src &&
481 by Brian Aker
Remove all of uchar.
2275
         (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
1 by brian
clean slate
2276
  {
2277
    my_toupper_utf8mb4(uni_plane, &wc);
481 by Brian Aker
Remove all of uchar.
2278
    if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
1 by brian
clean slate
2279
      break;
2280
    src+= srcres;
2281
    dst+= dstres;
2282
  }
2283
  *dst= '\0';
2284
  return (size_t) (dst - dst0);
2285
}
2286
2287
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2288
size_t
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2289
my_casedn_utf8mb4(const CHARSET_INFO * const cs,
1 by brian
clean slate
2290
                  char *src, size_t srclen,
2291
                  char *dst, size_t dstlen)
2292
{
2293
  my_wc_t wc;
2294
  int srcres, dstres;
2295
  char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
2296
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
51.3.9 by Jay Pipes
Removal of DBUG from strings/ library
2297
  assert(src != dst || cs->casedn_multiply == 1);
1 by brian
clean slate
2298
2299
  while ((src < srcend) &&
2300
         (srcres= my_mb_wc_utf8mb4(cs, &wc,
481 by Brian Aker
Remove all of uchar.
2301
                                   (unsigned char*) src, (unsigned char*) srcend)) > 0)
1 by brian
clean slate
2302
  {
2303
    my_tolower_utf8mb4(uni_plane, &wc);
481 by Brian Aker
Remove all of uchar.
2304
    if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
1 by brian
clean slate
2305
      break;
2306
    src+= srcres;
2307
    dst+= dstres;
2308
  }
2309
  return (size_t) (dst - dst0);
2310
}
2311
2312
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2313
size_t
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2314
my_casedn_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
1 by brian
clean slate
2315
{
2316
  my_wc_t wc;
2317
  int srcres, dstres;
2318
  char *dst= src, *dst0= src;
2319
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
51.3.9 by Jay Pipes
Removal of DBUG from strings/ library
2320
  assert(cs->casedn_multiply == 1);
1 by brian
clean slate
2321
2322
  while (*src &&
481 by Brian Aker
Remove all of uchar.
2323
         (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
1 by brian
clean slate
2324
  {
2325
    my_tolower_utf8mb4(uni_plane, &wc);
481 by Brian Aker
Remove all of uchar.
2326
    if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
1 by brian
clean slate
2327
      break;
2328
    src+= srcres;
2329
    dst+= dstres;
2330
  }
2331
2332
  /*
2333
   In rare cases lower string can be shorter than
2334
   the original string, for example:
2335
2336
   "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
2337
   (which is 0xC4B0 in utf8, i.e. two bytes)
2338
2339
   is converted into
2340
2341
   "U+0069 LATIN SMALL LETTER I"
2342
   (which is 0x69 in utf8, i.e. one byte)
2343
2344
   So, we need to put '\0' terminator after converting.
2345
  */
2346
2347
  *dst= '\0';
2348
  return (size_t) (dst - dst0);
2349
}
2350
2351
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2352
int
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2353
my_strnncoll_utf8mb4(const CHARSET_INFO * const cs,
481 by Brian Aker
Remove all of uchar.
2354
                     const unsigned char *s, size_t slen,
2355
                     const unsigned char *t, size_t tlen,
276 by Brian Aker
Cleaned out my_bool from strings.
2356
                     bool t_is_prefix)
1 by brian
clean slate
2357
{
435.1.2 by Monty
Fixed older compiler warning.
2358
  my_wc_t s_wc=0;
2359
  my_wc_t t_wc=0;
481 by Brian Aker
Remove all of uchar.
2360
  const unsigned char *se= s + slen;
2361
  const unsigned char *te= t + tlen;
1 by brian
clean slate
2362
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2363
2364
  while ( s < se && t < te )
2365
  {
2366
    int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
2367
    int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
2368
2369
    if ( s_res <= 0 || t_res <= 0 )
2370
    {
2371
      /* Incorrect string, compare bytewise */
2372
      return bincmp_utf8mb4(s, se, t, te);
2373
    }
2374
2375
    my_tosort_utf8mb4(uni_plane, &s_wc);
2376
    my_tosort_utf8mb4(uni_plane, &t_wc);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2377
1 by brian
clean slate
2378
    if ( s_wc != t_wc )
2379
    {
2380
      return s_wc > t_wc ? 1 : -1;
2381
    }
2382
2383
    s+= s_res;
2384
    t+= t_res;
2385
  }
2386
  return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t)));
2387
}
2388
2389
2390
/**
2391
  Compare strings, discarding end space
2392
2393
  If one string is shorter as the other, then we space extend the other
2394
  so that the strings have equal length.
2395
2396
  This will ensure that the following things hold:
2397
2398
    "a"  == "a "
2399
    "a\0" < "a"
2400
    "a\0" < "a "
2401
2402
  @param  cs        Character set pinter.
2403
  @param  a         First string to compare.
2404
  @param  a_length  Length of 'a'.
2405
  @param  b         Second string to compare.
2406
  @param  b_length  Length of 'b'.
2407
  @param  diff_if_only_endspace_difference
2408
                    Set to 1 if the strings should be regarded as different
2409
                    if they only difference in end space
2410
2411
  @return Comparison result.
2412
    @retval Negative number, if a less than b.
2413
    @retval 0, if a is equal to b
2414
    @retval Positive number, if a > b
2415
*/
2416
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2417
int
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2418
my_strnncollsp_utf8mb4(const CHARSET_INFO * const cs,
481 by Brian Aker
Remove all of uchar.
2419
                       const unsigned char *s, size_t slen,
2420
                       const unsigned char *t, size_t tlen,
276 by Brian Aker
Cleaned out my_bool from strings.
2421
                       bool diff_if_only_endspace_difference)
1 by brian
clean slate
2422
{
2423
  int res;
435.1.2 by Monty
Fixed older compiler warning.
2424
  my_wc_t s_wc=0;
2425
  my_wc_t t_wc=0;
481 by Brian Aker
Remove all of uchar.
2426
  const unsigned char *se= s + slen, *te= t + tlen;
1 by brian
clean slate
2427
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2428
2429
#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
163 by Brian Aker
Merge Monty's code.
2430
  diff_if_only_endspace_difference= false;
1 by brian
clean slate
2431
#endif
2432
2433
  while ( s < se && t < te )
2434
  {
2435
    int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
2436
    int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
2437
2438
    if ( s_res <= 0 || t_res <= 0 )
2439
    {
2440
      /* Incorrect string, compare bytewise */
2441
      return bincmp_utf8mb4(s, se, t, te);
2442
    }
2443
2444
    my_tosort_utf8mb4(uni_plane, &s_wc);
2445
    my_tosort_utf8mb4(uni_plane, &t_wc);
2446
2447
    if ( s_wc != t_wc )
2448
    {
2449
      return s_wc > t_wc ? 1 : -1;
2450
    }
2451
2452
    s+=s_res;
2453
    t+=t_res;
2454
  }
2455
2456
  slen= (size_t) (se-s);
2457
  tlen= (size_t) (te-t);
2458
  res= 0;
2459
2460
  if (slen != tlen)
2461
  {
2462
    int swap= 1;
2463
    if (diff_if_only_endspace_difference)
2464
      res= 1;                                   /* Assume 'a' is bigger */
2465
    if (slen < tlen)
2466
    {
2467
      slen= tlen;
2468
      s= t;
2469
      se= te;
2470
      swap= -1;
2471
      res= -res;
2472
    }
2473
    /*
2474
      This following loop uses the fact that in UTF-8
2475
      all multibyte characters are greater than space,
2476
      and all multibyte head characters are greater than
2477
      space. It means if we meet a character greater
2478
      than space, it always means that the longer string
2479
      is greater. So we can reuse the same loop from the
2480
      8bit version, without having to process full multibute
2481
      sequences.
2482
    */
2483
    for ( ; s < se; s++)
2484
    {
2485
      if (*s != ' ')
2486
	return (*s < ' ') ? -swap : swap;
2487
    }
2488
  }
2489
  return res;
2490
}
2491
2492
2493
/**
2494
  Compare 0-terminated UTF8 strings.
2495
2496
  @param  cs                  character set handler
2497
  @param  s                   First 0-terminated string to compare
2498
  @param  t                   Second 0-terminated string to compare
2499
2500
  @return Comparison result.
2501
    @retval negative number if s < t
2502
    @retval positive number if s > t
2503
    @retval 0 is the strings are equal
2504
*/
2505
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2506
int my_strcasecmp_utf8mb4(const CHARSET_INFO * const cs,
2507
                          const char *s, const char *t)
1 by brian
clean slate
2508
{
2509
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
2510
  while (s[0] && t[0])
2511
  {
2512
    my_wc_t s_wc,t_wc;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2513
481 by Brian Aker
Remove all of uchar.
2514
    if ((unsigned char) s[0] < 128)
1 by brian
clean slate
2515
    {
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2516
      /*
1 by brian
clean slate
2517
        s[0] is between 0 and 127.
2518
        It represents a single byte character.
2519
        Convert it into weight according to collation.
2520
      */
481 by Brian Aker
Remove all of uchar.
2521
      s_wc= plane00[(unsigned char) s[0]].tolower;
1 by brian
clean slate
2522
      s++;
2523
    }
2524
    else
2525
    {
481 by Brian Aker
Remove all of uchar.
2526
      int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const unsigned char*) s);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2527
2528
      /*
1 by brian
clean slate
2529
         In the case of wrong multibyte sequence we will
2530
         call strcmp() for byte-to-byte comparison.
2531
      */
2532
      if (res <= 0)
2533
        return strcmp(s, t);
2534
      s+= res;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2535
1 by brian
clean slate
2536
      my_tolower_utf8mb4(uni_plane, &s_wc);
2537
    }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2538
2539
1 by brian
clean slate
2540
    /* Do the same for the second string */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2541
481 by Brian Aker
Remove all of uchar.
2542
    if ((unsigned char) t[0] < 128)
1 by brian
clean slate
2543
    {
2544
      /* Convert single byte character into weight */
481 by Brian Aker
Remove all of uchar.
2545
      t_wc= plane00[(unsigned char) t[0]].tolower;
1 by brian
clean slate
2546
      t++;
2547
    }
2548
    else
2549
    {
481 by Brian Aker
Remove all of uchar.
2550
      int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const unsigned char*) t);
1 by brian
clean slate
2551
      if (res <= 0)
2552
        return strcmp(s, t);
2553
      t+= res;
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2554
1 by brian
clean slate
2555
      my_tolower_utf8mb4(uni_plane, &t_wc);
2556
    }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2557
1 by brian
clean slate
2558
    /* Now we have two weights, let's compare them */
2559
    if ( s_wc != t_wc )
2560
      return  ((int) s_wc) - ((int) t_wc);
2561
  }
481 by Brian Aker
Remove all of uchar.
2562
  return ((int) (unsigned char) s[0]) - ((int) (unsigned char) t[0]);
1 by brian
clean slate
2563
}
2564
2565
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2566
int
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2567
my_wildcmp_utf8mb4(const CHARSET_INFO * const cs,
1 by brian
clean slate
2568
                   const char *str, const char *strend,
2569
                   const char *wildstr, const char *wildend,
2570
                   int escape, int w_one, int w_many)
2571
{
2572
  return my_wildcmp_unicode(cs, str, strend, wildstr, wildend,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2573
                            escape, w_one, w_many, cs->caseinfo);
1 by brian
clean slate
2574
}
2575
2576
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2577
size_t
2578
my_strnxfrmlen_utf8mb4(const CHARSET_INFO * const, size_t len)
1 by brian
clean slate
2579
{
2580
  /* TODO: fix when working on WL "Unicode new version" */
2581
  return (len * 2 + 2) / 4;
2582
}
2583
2584
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2585
size_t
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
2586
my_strnxfrm_utf8mb4(const CHARSET_INFO * const cs,
482 by Brian Aker
Remove uint.
2587
                    unsigned char *dst, size_t dstlen, uint32_t nweights,
2588
                    const unsigned char *src, size_t srclen, uint32_t flags)
1 by brian
clean slate
2589
{
2590
  my_wc_t wc;
2591
  int res;
481 by Brian Aker
Remove all of uchar.
2592
  unsigned char *dst0= dst;
2593
  unsigned char *de= dst + dstlen;
2594
  unsigned char *de_beg= de - 1;
2595
  const unsigned char *se = src + srclen;
1 by brian
clean slate
2596
  MY_UNICASE_INFO **uni_plane= (cs->state & MY_CS_BINSORT) ?
2597
                                NULL : cs->caseinfo;
2598
2599
  for (; dst < de_beg && nweights; nweights--)
2600
  {
2601
    if ((res= my_mb_wc_utf8mb4(cs,&wc, src, se)) <= 0)
2602
      break;
2603
    src+=res;
2604
2605
    if (uni_plane)
2606
      my_tosort_utf8mb4(uni_plane, &wc);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2607
481 by Brian Aker
Remove all of uchar.
2608
    *dst++= (unsigned char)(wc >> 8);
2609
    *dst++= (unsigned char)(wc & 0xFF);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2610
1 by brian
clean slate
2611
  }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2612
1 by brian
clean slate
2613
  if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
2614
  {
2615
    /* Fill the tail with keys for space character */
2616
    for (; dst < de_beg && nweights; nweights--)
2617
    {
2618
      *dst++= 0x00;
2619
      *dst++= 0x20;
2620
    }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
2621
1 by brian
clean slate
2622
    if (dst < de)  /* Clear the last byte, if "dstlen" was an odd number */
2623
      *dst++= 0x00;
2624
  }
2625
  my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
2626
  return dst - dst0;
2627
}
2628
2629
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2630
unsigned int my_ismbchar_utf8mb4(const CHARSET_INFO * const cs,
2631
                                 const char *b, const char *e)
1 by brian
clean slate
2632
{
2633
  my_wc_t wc;
481 by Brian Aker
Remove all of uchar.
2634
  int res= my_mb_wc_utf8mb4(cs,&wc, (const unsigned char*)b, (const unsigned char*)e);
1 by brian
clean slate
2635
  return (res > 1) ? res : 0;
2636
}
2637
2638
632.1.10 by Monty Taylor
Got rid of Sun Studio warnings.
2639
unsigned int my_mbcharlen_utf8mb4(const CHARSET_INFO * const, uint32_t c)
1 by brian
clean slate
2640
{
2641
  if (c < 0x80)
2642
    return 1;
2643
  if (c < 0xc2)
2644
    return 0; /* Illegal mb head */
2645
  if (c < 0xe0)
2646
    return 2;
2647
  if (c < 0xf0)
2648
    return 3;
2649
  if (c < 0xf8)
2650
    return 4;
2651
  return 0; /* Illegal mb head */;
2652
}
2653
2654
2655
static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler=
2656
{
2657
  NULL,               /* init */
2658
  my_strnncoll_utf8mb4,
2659
  my_strnncollsp_utf8mb4,
2660
  my_strnxfrm_utf8mb4,
2661
  my_strnxfrmlen_utf8mb4,
2662
  my_like_range_mb,
2663
  my_wildcmp_utf8mb4,
2664
  my_strcasecmp_utf8mb4,
2665
  my_instr_mb,
2666
  my_hash_sort_utf8mb4,
2667
  my_propagate_complex
2668
};
2669
2670
2671
static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler =
2672
{
2673
    NULL,		/* init */
2674
    my_strnncoll_mb_bin,
2675
    my_strnncollsp_mb_bin,
2676
    my_strnxfrm_utf8mb4,
2677
    my_strnxfrmlen_utf8mb4,
2678
    my_like_range_mb,
2679
    my_wildcmp_mb_bin,
2680
    my_strcasecmp_mb_bin,
2681
    my_instr_mb,
2682
    my_hash_sort_mb_bin,
2683
    my_propagate_simple
2684
};
2685
2686
2687
MY_CHARSET_HANDLER my_charset_utf8mb4_handler=
2688
{
2689
  NULL,               /* init */
2690
  my_ismbchar_utf8mb4,
2691
  my_mbcharlen_utf8mb4,
2692
  my_numchars_mb,
2693
  my_charpos_mb,
2694
  my_well_formed_len_mb,
2695
  my_lengthsp_8bit,
2696
  my_numcells_mb,
2697
  my_mb_wc_utf8mb4,
2698
  my_wc_mb_utf8mb4,
2699
  my_mb_ctype_mb,
2700
  my_caseup_str_utf8mb4,
2701
  my_casedn_str_utf8mb4,
2702
  my_caseup_utf8mb4,
2703
  my_casedn_utf8mb4,
2704
  my_snprintf_8bit,
2705
  my_long10_to_str_8bit,
152 by Brian Aker
longlong replacement
2706
  my_int64_t10_to_str_8bit,
1 by brian
clean slate
2707
  my_fill_8bit,
2708
  my_strntol_8bit,
2709
  my_strntoul_8bit,
2710
  my_strntoll_8bit,
2711
  my_strntoull_8bit,
2712
  my_strntod_8bit,
2713
  my_strtoll10_8bit,
2714
  my_strntoull10rnd_8bit,
2715
  my_scan_8bit
2716
};
2717
2718
2719
2720
CHARSET_INFO my_charset_utf8mb4_general_ci=
2721
{
2722
  45,0,0,              /* number       */
2723
  MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
2724
  MY_UTF8MB4,         /* cs name      */
2725
  MY_UTF8MB4_GENERAL_CI,/* name       */
2726
  "UTF-8 Unicode",    /* comment      */
2727
  NULL,               /* tailoring    */
2728
  ctype_utf8mb4,      /* ctype        */
2729
  to_lower_utf8mb4,   /* to_lower     */
2730
  to_upper_utf8mb4,   /* to_upper     */
2731
  to_upper_utf8mb4,   /* sort_order   */
2732
  NULL,               /* contractions */
2733
  NULL,               /* sort_order_big*/
2734
  NULL,               /* tab_to_uni   */
2735
  NULL,               /* tab_from_uni */
2736
  my_unicase_default, /* caseinfo     */
2737
  NULL,               /* state_map    */
2738
  NULL,               /* ident_map    */
2739
  1,                  /* strxfrm_multiply */
2740
  1,                  /* caseup_multiply  */
2741
  1,                  /* casedn_multiply  */
2742
  1,                  /* mbminlen     */
2743
  4,                  /* mbmaxlen     */
2744
  0,                  /* min_sort_char */
2745
  0xFFFF,             /* max_sort_char */
2746
  ' ',                /* pad char      */
2747
  0,                  /* escape_with_backslash_is_dangerous */
2748
  1,                  /* levels_for_compare */
2749
  1,                  /* levels_for_order   */
2750
  &my_charset_utf8mb4_handler,
2751
  &my_collation_utf8mb4_general_ci_handler
2752
};
2753
2754
2755
CHARSET_INFO my_charset_utf8mb4_bin=
2756
{
2757
  46,0,0,             /* number       */
2758
  MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE, /* state  */
2759
  MY_UTF8MB4,         /* cs name      */
2760
  MY_UTF8MB4_BIN,     /* name         */
2761
  "UTF-8 Unicode",    /* comment      */
2762
  NULL,               /* tailoring    */
2763
  ctype_utf8mb4,      /* ctype        */
2764
  to_lower_utf8mb4,   /* to_lower     */
2765
  to_upper_utf8mb4,   /* to_upper     */
2766
  NULL,               /* sort_order   */
2767
  NULL,               /* contractions */
2768
  NULL,               /* sort_order_big*/
2769
  NULL,               /* tab_to_uni   */
2770
  NULL,               /* tab_from_uni */
2771
  my_unicase_default, /* caseinfo     */
2772
  NULL,               /* state_map    */
2773
  NULL,               /* ident_map    */
2774
  1,                  /* strxfrm_multiply */
2775
  1,                  /* caseup_multiply  */
2776
  1,                  /* casedn_multiply  */
2777
  1,                  /* mbminlen     */
2778
  4,                  /* mbmaxlen     */
2779
  0,                  /* min_sort_char */
2780
  0xFFFF,             /* max_sort_char */
2781
  ' ',                /* pad char      */
2782
  0,                  /* escape_with_backslash_is_dangerous */
2783
  1,                  /* levels_for_compare */
2784
  1,                  /* levels_for_order   */
2785
  &my_charset_utf8mb4_handler,
2786
  &my_collation_utf8mb4_bin_handler
2787
};
2788
1054.2.18 by Monty Taylor
Removed my_charset_filename... since we no longer use it. (hip hip, hoorah!)
2789
1 by brian
clean slate
2790
481 by Brian Aker
Remove all of uchar.
2791
static inline int bincmp(const unsigned char *s, const unsigned char *se,
2792
                         const unsigned char *t, const unsigned char *te)
1 by brian
clean slate
2793
{
2794
  int slen= (int) (se-s), tlen= (int) (te-t);
1067.4.9 by Nathan Williams
Converted all usages of cmin/cmax in mystrings directory to use std::min/max
2795
  int len= min(slen,tlen);
1 by brian
clean slate
2796
  int cmp= memcmp(s,t,len);
2797
  return cmp ? cmp : slen-tlen;
2798
}
2799
2800
2801
/*
2802
  File system encoding components:
2803
2804
Code range Pattern            Number   Used Unused  Blocks
2805
-----------------------------------------------------------------------------
2806
00C0..017F [.][0..4][g..z] 5*20= 100   97     3  Latin1 Supplement + Ext A
2807
0370..03FF [.][5..9][g..z] 5*20= 100   88    12  Greek + Coptic
2808
0400..052F [.][g..z][0..6] 20*7= 140  140   137  Cyrillic
2809
0530..058F [.][g..z][7..8] 20*2=  40   38     2  Armenian
2810
2160..217F [.][g..z][9]    20*1=  20   16     4  Number Forms
2811
0180..02AF [.][g..z][a..k] 28*11=220  203    17  Latin Ext B + IPA
2812
1E00..0EFF [.][g..z][l..r] 20*7= 140  136     4  Latin Additional Extended
2813
1F00..1FFF [.][g..z][s..z] 20*8= 160  144    16  Greek Extended
2814
....  .... [.][a..f][g..z] 6*20= 120    0   120  RESERVED
2815
24B6..24E9 [.][@][a..z]           26   26     0  Enclosed Alphanumerics
2816
FF21..FF5A [.][a..z][@]           26   26     0  Full Width forms
2817
2818
All other characters are encoded using five bytes:
2819
2820
[.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
2821
2822
*/
2823
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
2824
} /* namespace drizzled */
1 by brian
clean slate
2825
2826
#ifdef MY_TEST_UTF8
2827
#include <stdio.h>
2828
481 by Brian Aker
Remove all of uchar.
2829
static void test_mb(CHARSET_INFO *cs, unsigned char *s)
1 by brian
clean slate
2830
{
2831
  while(*s)
2832
  {
2833
    if (my_ismbhead_utf8(cs,*s))
2834
    {
482 by Brian Aker
Remove uint.
2835
      uint32_t len=my_mbcharlen_utf8(cs,*s);
1 by brian
clean slate
2836
      while(len--)
2837
      {
2838
        printf("%c",*s);
2839
        s++;
2840
      }
2841
      printf("\n");
2842
    }
2843
    else
2844
    {
2845
      printf("%c\n",*s);
2846
      s++;
2847
    }
2848
  }
2849
}
2850
2851
int main()
2852
{
2853
  char str[1024]=" utf8 test проба ПЕРА по-РУССКИ";
2854
  CHARSET_INFO *cs;
2855
481 by Brian Aker
Remove all of uchar.
2856
  test_mb(cs,(unsigned char*)str);
1 by brian
clean slate
2857
2858
  printf("orig      :'%s'\n",str);
2859
2860
  my_caseup_utf8(cs,str,15);
2861
  printf("caseup    :'%s'\n",str);
2862
2863
  my_caseup_str_utf8(cs,str);
2864
  printf("caseup_str:'%s'\n",str);
2865
2866
  my_casedn_utf8(cs,str,15);
2867
  printf("casedn    :'%s'\n",str);
2868
2869
  my_casedn_str_utf8(cs,str);
2870
  printf("casedn_str:'%s'\n",str);
2871
2872
  return 0;
2873
}
2874
2875
#endif