~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to drizzled/ctype-utf8.cc

  • Committer: Bazaar Package Importer
  • Author(s): Monty Taylor
  • Date: 2010-03-18 12:12:31 UTC
  • Revision ID: james.westby@ubuntu.com-20100318121231-k6g1xe6cshbwa0f8
Tags: upstream-2010.03.1347
Import upstream version 2010.03.1347

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2000 MySQL AB
 
2
 
 
3
   This library is free software; you can redistribute it and/or
 
4
   modify it under the terms of the GNU Library General Public
 
5
   License as published by the Free Software Foundation; version 2
 
6
   of the License.
 
7
 
 
8
   This library is distributed in the hope that it will be useful,
 
9
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
11
   Library General Public License for more details.
 
12
 
 
13
   You should have received a copy of the GNU Library General Public
 
14
   License along with this library; if not, write to the Free
 
15
   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
16
   MA 02111-1307, USA */
 
17
 
 
18
/* UTF8 according RFC 2279 */
 
19
/* Written by Alexander Barkov <bar@udm.net> */
 
20
 
 
21
#include "config.h"
 
22
 
 
23
#include "drizzled/internal/m_string.h"
 
24
#include "drizzled/charset_info.h"
 
25
#include <errno.h>
 
26
 
 
27
#include <algorithm>
 
28
 
 
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
 
 
40
using namespace std;
 
41
 
 
42
namespace drizzled
 
43
{
 
44
 
 
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
 
 
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:
 
1531
  1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
 
1532
           0x0131 LATIN SMALL   LETTER DOTLESS I
 
1533
  2. UPPER(0x0069 LATIN SMALL   LETTER I) ->
 
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
 
1712
 
 
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 %.
 
1721
 
 
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
 
 
1728
int my_wildcmp_unicode(const CHARSET_INFO * const cs,
 
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 */
 
1735
  my_wc_t s_wc=0, w_wc=0;
 
1736
  int scan, plane;
 
1737
  my_charset_conv_mb_wc mb_wc;
 
1738
  mb_wc= cs->cset->mb_wc;
 
1739
 
 
1740
  while (wildstr != wildend)
 
1741
  {
 
1742
    while (1)
 
1743
    {
 
1744
      bool escaped= 0;
 
1745
      if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
 
1746
                       (const unsigned char*)wildend)) <= 0)
 
1747
        return 1;
 
1748
 
 
1749
      if (w_wc == (my_wc_t)w_many)
 
1750
      {
 
1751
        result= 1;                              /* Found an anchor char */
 
1752
        break;
 
1753
      }
 
1754
 
 
1755
      wildstr+= scan;
 
1756
      if (w_wc ==  (my_wc_t)escape && wildstr < wildend)
 
1757
      {
 
1758
        if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
 
1759
                         (const unsigned char*)wildend)) <= 0)
 
1760
          return 1;
 
1761
        wildstr+= scan;
 
1762
        escaped= 1;
 
1763
      }
 
1764
 
 
1765
      if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
 
1766
                       (const unsigned char*)str_end)) <= 0)
 
1767
        return 1;
 
1768
      str+= scan;
 
1769
 
 
1770
      if (!escaped && w_wc == (my_wc_t)w_one)
 
1771
      {
 
1772
        result= 1;                              /* Found an anchor char */
 
1773
      }
 
1774
      else
 
1775
      {
 
1776
        if (weights)
 
1777
        {
 
1778
          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
    }
 
1795
 
 
1796
 
 
1797
    if (w_wc == (my_wc_t)w_many)
 
1798
    {                                           /* Found w_many */
 
1799
 
 
1800
      /* Remove any '%' and '_' from the wild search string */
 
1801
      for (; wildstr != wildend ;)
 
1802
      {
 
1803
        if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
 
1804
                         (const unsigned char*)wildend)) <= 0)
 
1805
          return 1;
 
1806
 
 
1807
        if (w_wc == (my_wc_t)w_many)
 
1808
        {
 
1809
          wildstr+= scan;
 
1810
          continue;
 
1811
        }
 
1812
 
 
1813
        if (w_wc == (my_wc_t)w_one)
 
1814
        {
 
1815
          wildstr+= scan;
 
1816
          if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
 
1817
                           (const unsigned char*)str_end)) <=0)
 
1818
            return 1;
 
1819
          str+= scan;
 
1820
          continue;
 
1821
        }
 
1822
        break;                                  /* Not a wild character */
 
1823
      }
 
1824
 
 
1825
      if (wildstr == wildend)
 
1826
        return 0;                               /* Ok if w_many is last */
 
1827
 
 
1828
      if (str == str_end)
 
1829
        return -1;
 
1830
 
 
1831
      if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
 
1832
                       (const unsigned char*)wildend)) <=0)
 
1833
        return 1;
 
1834
      wildstr+= scan;
 
1835
 
 
1836
      if (w_wc ==  (my_wc_t)escape)
 
1837
      {
 
1838
        if (wildstr < wildend)
 
1839
        {
 
1840
          if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
 
1841
                           (const unsigned char*)wildend)) <=0)
 
1842
            return 1;
 
1843
          wildstr+= scan;
 
1844
        }
 
1845
      }
 
1846
 
 
1847
      while (1)
 
1848
      {
 
1849
        /* Skip until the first character from wildstr is found */
 
1850
        while (str != str_end)
 
1851
        {
 
1852
          if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
 
1853
                           (const unsigned char*)str_end)) <=0)
 
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
          }
 
1862
 
 
1863
          if (s_wc == w_wc)
 
1864
            break;
 
1865
          str+= scan;
 
1866
        }
 
1867
        if (str == str_end)
 
1868
          return -1;
 
1869
 
 
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;
 
1876
      }
 
1877
    }
 
1878
  }
 
1879
  return (str != str_end ? 1 : 0);
 
1880
}
 
1881
 
 
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
 
 
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
*/
 
1899
static unsigned char ctype_utf8mb4[]=
 
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
 
 
1921
static unsigned char to_lower_utf8mb4[]=
 
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
 
 
1942
static unsigned char to_upper_utf8mb4[]=
 
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
 
1964
bincmp_utf8mb4(const unsigned char *s, const unsigned char *se,
 
1965
               const unsigned char *t, const unsigned char *te)
 
1966
{
 
1967
  int slen= (int) (se - s), tlen= (int) (te - t);
 
1968
  int len= min(slen, tlen);
 
1969
  int cmp= memcmp(s, t, len);
 
1970
  return cmp ? cmp : slen - tlen;
 
1971
}
 
1972
 
 
1973
 
 
1974
int
 
1975
my_mb_wc_utf8mb4(const CHARSET_INFO * const,
 
1976
                 my_wc_t * pwc, const unsigned char *s, const unsigned char *e)
 
1977
{
 
1978
  unsigned char c;
 
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
 
2041
my_mb_wc_utf8mb4_no_range(const CHARSET_INFO * const,
 
2042
                          my_wc_t *pwc, const unsigned char *s)
 
2043
{
 
2044
  unsigned char c;
 
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
  }
 
2064
 
 
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
 
 
2094
int
 
2095
my_wc_mb_utf8mb4(const CHARSET_INFO * const,
 
2096
                 my_wc_t wc, unsigned char *r, unsigned char *e)
 
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)
 
2114
    return MY_CS_TOOSMALLN(count);
 
2115
 
 
2116
  switch (count) {
 
2117
    /* Fall through all cases!!! */
 
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;
 
2122
  }
 
2123
  return count;
 
2124
}
 
2125
 
 
2126
 
 
2127
/*
 
2128
  The same as above, but without range check.
 
2129
*/
 
2130
static int
 
2131
my_wc_mb_utf8mb4_no_range(const CHARSET_INFO * const,
 
2132
                          my_wc_t wc, unsigned char *r)
 
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!!! */
 
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;
 
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
 
 
2196
size_t
 
2197
my_caseup_utf8mb4(const CHARSET_INFO * const cs, char *src, size_t srclen,
 
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;
 
2204
  assert(src != dst || cs->caseup_multiply == 1);
 
2205
 
 
2206
  while ((src < srcend) &&
 
2207
         (srcres= my_mb_wc_utf8mb4(cs, &wc,
 
2208
                                   (unsigned char *) src, (unsigned char*) srcend)) > 0)
 
2209
  {
 
2210
    my_toupper_utf8mb4(uni_plane, &wc);
 
2211
    if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
 
2212
      break;
 
2213
    src+= srcres;
 
2214
    dst+= dstres;
 
2215
  }
 
2216
  return (size_t) (dst - dst0);
 
2217
}
 
2218
 
 
2219
 
 
2220
static inline void
 
2221
my_hash_add(uint32_t *n1, uint32_t *n2, uint32_t ch)
 
2222
{
 
2223
  n1[0]^= (((n1[0] & 63) + n2[0]) * (ch)) + (n1[0] << 8);
 
2224
  n2[0]+= 3;
 
2225
}
 
2226
 
 
2227
 
 
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)
 
2231
{
 
2232
  my_wc_t wc;
 
2233
  int res;
 
2234
  const unsigned char *e= s + slen;
 
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
 
 
2244
  while ((res= my_mb_wc_utf8mb4(cs, &wc, (const unsigned char*) s, (const unsigned char*) e)) > 0)
 
2245
  {
 
2246
    my_tosort_utf8mb4(uni_plane, &wc);
 
2247
    my_hash_add(n1, n2, (uint32_t) (wc & 0xFF));
 
2248
    my_hash_add(n1, n2, (uint32_t) (wc >> 8)  & 0xFF);
 
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
      */
 
2258
      my_hash_add(n1, n2, (uint32_t) (wc >> 16) & 0xFF);
 
2259
    }
 
2260
    s+= res;
 
2261
  }
 
2262
}
 
2263
 
 
2264
 
 
2265
size_t
 
2266
my_caseup_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
 
2267
{
 
2268
  my_wc_t wc;
 
2269
  int srcres, dstres;
 
2270
  char *dst= src, *dst0= src;
 
2271
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
 
2272
  assert(cs->caseup_multiply == 1);
 
2273
 
 
2274
  while (*src &&
 
2275
         (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
 
2276
  {
 
2277
    my_toupper_utf8mb4(uni_plane, &wc);
 
2278
    if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
 
2279
      break;
 
2280
    src+= srcres;
 
2281
    dst+= dstres;
 
2282
  }
 
2283
  *dst= '\0';
 
2284
  return (size_t) (dst - dst0);
 
2285
}
 
2286
 
 
2287
 
 
2288
size_t
 
2289
my_casedn_utf8mb4(const CHARSET_INFO * const cs,
 
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;
 
2297
  assert(src != dst || cs->casedn_multiply == 1);
 
2298
 
 
2299
  while ((src < srcend) &&
 
2300
         (srcres= my_mb_wc_utf8mb4(cs, &wc,
 
2301
                                   (unsigned char*) src, (unsigned char*) srcend)) > 0)
 
2302
  {
 
2303
    my_tolower_utf8mb4(uni_plane, &wc);
 
2304
    if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
 
2305
      break;
 
2306
    src+= srcres;
 
2307
    dst+= dstres;
 
2308
  }
 
2309
  return (size_t) (dst - dst0);
 
2310
}
 
2311
 
 
2312
 
 
2313
size_t
 
2314
my_casedn_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
 
2315
{
 
2316
  my_wc_t wc;
 
2317
  int srcres, dstres;
 
2318
  char *dst= src, *dst0= src;
 
2319
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
 
2320
  assert(cs->casedn_multiply == 1);
 
2321
 
 
2322
  while (*src &&
 
2323
         (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
 
2324
  {
 
2325
    my_tolower_utf8mb4(uni_plane, &wc);
 
2326
    if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
 
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
 
 
2352
int
 
2353
my_strnncoll_utf8mb4(const CHARSET_INFO * const cs,
 
2354
                     const unsigned char *s, size_t slen,
 
2355
                     const unsigned char *t, size_t tlen,
 
2356
                     bool t_is_prefix)
 
2357
{
 
2358
  my_wc_t s_wc=0;
 
2359
  my_wc_t t_wc=0;
 
2360
  const unsigned char *se= s + slen;
 
2361
  const unsigned char *te= t + tlen;
 
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);
 
2377
 
 
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
 
 
2417
int
 
2418
my_strnncollsp_utf8mb4(const CHARSET_INFO * const cs,
 
2419
                       const unsigned char *s, size_t slen,
 
2420
                       const unsigned char *t, size_t tlen,
 
2421
                       bool diff_if_only_endspace_difference)
 
2422
{
 
2423
  int res;
 
2424
  my_wc_t s_wc=0;
 
2425
  my_wc_t t_wc=0;
 
2426
  const unsigned char *se= s + slen, *te= t + tlen;
 
2427
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
 
2428
 
 
2429
#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
 
2430
  diff_if_only_endspace_difference= false;
 
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
 
 
2506
int my_strcasecmp_utf8mb4(const CHARSET_INFO * const cs,
 
2507
                          const char *s, const char *t)
 
2508
{
 
2509
  MY_UNICASE_INFO **uni_plane= cs->caseinfo;
 
2510
  while (s[0] && t[0])
 
2511
  {
 
2512
    my_wc_t s_wc,t_wc;
 
2513
 
 
2514
    if ((unsigned char) s[0] < 128)
 
2515
    {
 
2516
      /*
 
2517
        s[0] is between 0 and 127.
 
2518
        It represents a single byte character.
 
2519
        Convert it into weight according to collation.
 
2520
      */
 
2521
      s_wc= plane00[(unsigned char) s[0]].tolower;
 
2522
      s++;
 
2523
    }
 
2524
    else
 
2525
    {
 
2526
      int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const unsigned char*) s);
 
2527
 
 
2528
      /*
 
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;
 
2535
 
 
2536
      my_tolower_utf8mb4(uni_plane, &s_wc);
 
2537
    }
 
2538
 
 
2539
 
 
2540
    /* Do the same for the second string */
 
2541
 
 
2542
    if ((unsigned char) t[0] < 128)
 
2543
    {
 
2544
      /* Convert single byte character into weight */
 
2545
      t_wc= plane00[(unsigned char) t[0]].tolower;
 
2546
      t++;
 
2547
    }
 
2548
    else
 
2549
    {
 
2550
      int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const unsigned char*) t);
 
2551
      if (res <= 0)
 
2552
        return strcmp(s, t);
 
2553
      t+= res;
 
2554
 
 
2555
      my_tolower_utf8mb4(uni_plane, &t_wc);
 
2556
    }
 
2557
 
 
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
  }
 
2562
  return ((int) (unsigned char) s[0]) - ((int) (unsigned char) t[0]);
 
2563
}
 
2564
 
 
2565
 
 
2566
int
 
2567
my_wildcmp_utf8mb4(const CHARSET_INFO * const cs,
 
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,
 
2573
                            escape, w_one, w_many, cs->caseinfo);
 
2574
}
 
2575
 
 
2576
 
 
2577
size_t
 
2578
my_strnxfrmlen_utf8mb4(const CHARSET_INFO * const, size_t len)
 
2579
{
 
2580
  /* TODO: fix when working on WL "Unicode new version" */
 
2581
  return (len * 2 + 2) / 4;
 
2582
}
 
2583
 
 
2584
 
 
2585
size_t
 
2586
my_strnxfrm_utf8mb4(const CHARSET_INFO * const cs,
 
2587
                    unsigned char *dst, size_t dstlen, uint32_t nweights,
 
2588
                    const unsigned char *src, size_t srclen, uint32_t flags)
 
2589
{
 
2590
  my_wc_t wc;
 
2591
  int res;
 
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;
 
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);
 
2607
 
 
2608
    *dst++= (unsigned char)(wc >> 8);
 
2609
    *dst++= (unsigned char)(wc & 0xFF);
 
2610
 
 
2611
  }
 
2612
 
 
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
    }
 
2621
 
 
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
 
 
2630
unsigned int my_ismbchar_utf8mb4(const CHARSET_INFO * const cs,
 
2631
                                 const char *b, const char *e)
 
2632
{
 
2633
  my_wc_t wc;
 
2634
  int res= my_mb_wc_utf8mb4(cs,&wc, (const unsigned char*)b, (const unsigned char*)e);
 
2635
  return (res > 1) ? res : 0;
 
2636
}
 
2637
 
 
2638
 
 
2639
unsigned int my_mbcharlen_utf8mb4(const CHARSET_INFO * const, uint32_t c)
 
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,
 
2706
  my_int64_t10_to_str_8bit,
 
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
 
 
2789
 
 
2790
 
 
2791
static inline int bincmp(const unsigned char *s, const unsigned char *se,
 
2792
                         const unsigned char *t, const unsigned char *te)
 
2793
{
 
2794
  int slen= (int) (se-s), tlen= (int) (te-t);
 
2795
  int len= min(slen,tlen);
 
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
 
 
2824
} /* namespace drizzled */
 
2825
 
 
2826
#ifdef MY_TEST_UTF8
 
2827
#include <stdio.h>
 
2828
 
 
2829
static void test_mb(CHARSET_INFO *cs, unsigned char *s)
 
2830
{
 
2831
  while(*s)
 
2832
  {
 
2833
    if (my_ismbhead_utf8(cs,*s))
 
2834
    {
 
2835
      uint32_t len=my_mbcharlen_utf8(cs,*s);
 
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
 
 
2856
  test_mb(cs,(unsigned char*)str);
 
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