1
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
2
Copyright (c) 2009-2011, Monty Program Ab
3
Copyright (C) 2003 by Sathit Jittanupat
4
<jsat66@hotmail.com,jsat66@yahoo.com>
5
* solving bug crash with long text field string
6
* sorting with different number of space or sign char. within string
8
Copyright (C) 2001 by Korakot Chaovavanich <korakot@iname.com> and
9
Apisilp Trunganont <apisilp@pantip.inet.co.th>
10
Copyright (C) 1998, 1999 by Pruet Boonma <pruet@eng.cmu.ac.th>
11
Copyright (C) 1998 by Theppitak Karoonboonyanan <thep@links.nectec.or.th>
12
Copyright (C) 1989, 1991 by Samphan Raruenrom <samphan@thai.com>
14
Permission to use, copy, modify, distribute and sell this software
15
and its documentation for any purpose is hereby granted without fee,
16
provided that the above copyright notice appear in all copies.
17
Samphan Raruenrom , Theppitak Karoonboonyanan , Pruet Boonma ,
18
Korakot Chaovavanich and Apisilp Trunganont makes no representations
19
about the suitability of this software for any purpose. It is provided
20
"as is" without express or implied warranty.
25
This file is basicly tis620 character sets with some extra functions
30
* This comment is parsed by configure to create ctype.c,
31
* so don't change it unless you know what you are doing.
33
* .configure. strxfrm_multiply_tis620=4
36
#include "strings_def.h"
41
#ifdef HAVE_CHARSET_tis620
43
#define BUFFER_MULTIPLY 4
51
static const int t_ctype[][TOT_LEVELS] = {
52
/*0x00*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
53
/*0x01*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
54
/*0x02*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
55
/*0x03*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
56
/*0x04*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
57
/*0x05*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
58
/*0x06*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
59
/*0x07*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
60
/*0x08*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
61
/*0x09*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
62
/*0x0A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
63
/*0x0B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
64
/*0x0C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
65
/*0x0D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
66
/*0x0E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
67
/*0x0F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
68
/*0x10*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
69
/*0x11*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
70
/*0x12*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
71
/*0x13*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
72
/*0x14*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
73
/*0x15*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
74
/*0x16*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
75
/*0x17*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
76
/*0x18*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
77
/*0x19*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
78
/*0x1A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
79
/*0x1B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
80
/*0x1C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
81
/*0x1D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
82
/*0x1E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
83
/*0x1F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
84
/*0x20*/ { IGNORE, IGNORE, L3_SPACE, IGNORE, M},
85
/*0x21*/ { IGNORE, IGNORE, L3_EXCLAMATION, IGNORE, M },
86
/*0x22*/ { IGNORE, IGNORE, L3_QUOTATION, IGNORE, M },
87
/*0x23*/ { IGNORE, IGNORE, L3_NUMBER, IGNORE, M },
88
/*0x24*/ { IGNORE, IGNORE, L3_DOLLAR, IGNORE, M },
89
/*0x25*/ { IGNORE, IGNORE, L3_PERCENT, IGNORE, M },
90
/*0x26*/ { IGNORE, IGNORE, L3_AMPERSAND, IGNORE, M },
91
/*0x27*/ { IGNORE, IGNORE, L3_APOSTROPHE, IGNORE, M },
92
/*0x28*/ { IGNORE, IGNORE, L3_L_PARANTHESIS, IGNORE, M },
93
/*0x29*/ { IGNORE, IGNORE, L3_R_PARENTHESIS, IGNORE, M },
94
/*0x2A*/ { IGNORE, IGNORE, L3_ASTERISK, IGNORE, M },
95
/*0x2B*/ { IGNORE, IGNORE, L3_PLUS, IGNORE, M },
96
/*0x2C*/ { IGNORE, IGNORE, L3_COMMA, IGNORE, M },
97
/*0x2D*/ { IGNORE, IGNORE, L3_HYPHEN, IGNORE, M },
98
/*0x2E*/ { IGNORE, IGNORE, L3_FULL_STOP, IGNORE, M },
99
/*0x2F*/ { IGNORE, IGNORE, L3_SOLIDUS, IGNORE, M },
100
/*0x30*/ { L1_08, L2_BLANK, L3_BLANK, L4_BLANK, M },
101
/*0x31*/ { L1_18, L2_BLANK, L3_BLANK, L4_BLANK, M },
102
/*0x32*/ { L1_28, L2_BLANK, L3_BLANK, L4_BLANK, M },
103
/*0x33*/ { L1_38, L2_BLANK, L3_BLANK, L4_BLANK, M },
104
/*0x34*/ { L1_48, L2_BLANK, L3_BLANK, L4_BLANK, M },
105
/*0x35*/ { L1_58, L2_BLANK, L3_BLANK, L4_BLANK, M },
106
/*0x36*/ { L1_68, L2_BLANK, L3_BLANK, L4_BLANK, M },
107
/*0x37*/ { L1_78, L2_BLANK, L3_BLANK, L4_BLANK, M },
108
/*0x38*/ { L1_88, L2_BLANK, L3_BLANK, L4_BLANK, M },
109
/*0x39*/ { L1_98, L2_BLANK, L3_BLANK, L4_BLANK, M },
110
/*0x3A*/ { IGNORE, IGNORE, L3_COLON, IGNORE, M },
111
/*0x3B*/ { IGNORE, IGNORE, L3_SEMICOLON, IGNORE, M },
112
/*0x3C*/ { IGNORE, IGNORE, L3_LESS_THAN, IGNORE, M },
113
/*0x3D*/ { IGNORE, IGNORE, L3_EQUAL, IGNORE, M },
114
/*0x3E*/ { IGNORE, IGNORE, L3_GREATER_THAN, IGNORE, M },
115
/*0x3F*/ { IGNORE, IGNORE, L3_QUESTION, IGNORE, M },
116
/*0x40*/ { IGNORE, IGNORE, L3_AT, IGNORE, M },
117
/*0x41*/ { L1_A8, L2_BLANK, L3_BLANK, L4_CAP, M },
118
/*0x42*/ { L1_B8, L2_BLANK, L3_BLANK, L4_CAP, M },
119
/*0x43*/ { L1_C8, L2_BLANK, L3_BLANK, L4_CAP, M },
120
/*0x44*/ { L1_D8, L2_BLANK, L3_BLANK, L4_CAP, M },
121
/*0x45*/ { L1_E8, L2_BLANK, L3_BLANK, L4_CAP, M },
122
/*0x46*/ { L1_F8, L2_BLANK, L3_BLANK, L4_CAP, M },
123
/*0x47*/ { L1_G8, L2_BLANK, L3_BLANK, L4_CAP, M },
124
/*0x48*/ { L1_H8, L2_BLANK, L3_BLANK, L4_CAP, M },
125
/*0x49*/ { L1_I8, L2_BLANK, L3_BLANK, L4_CAP, M },
126
/*0x4A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_CAP, M },
127
/*0x4B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_CAP, M },
128
/*0x4C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_CAP, M },
129
/*0x4D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_CAP, M },
130
/*0x4E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_CAP, M },
131
/*0x4F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_CAP, M },
132
/*0x50*/ { L1_P8, L2_BLANK, L3_BLANK, L4_CAP, M },
133
/*0x51*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_CAP, M },
134
/*0x52*/ { L1_R8, L2_BLANK, L3_BLANK, L4_CAP, M },
135
/*0x53*/ { L1_S8, L2_BLANK, L3_BLANK, L4_CAP, M },
136
/*0x54*/ { L1_T8, L2_BLANK, L3_BLANK, L4_CAP, M },
137
/*0x55*/ { L1_U8, L2_BLANK, L3_BLANK, L4_CAP, M },
138
/*0x56*/ { L1_V8, L2_BLANK, L3_BLANK, L4_CAP, M },
139
/*0x57*/ { L1_W8, L2_BLANK, L3_BLANK, L4_CAP, M },
140
/*0x58*/ { L1_X8, L2_BLANK, L3_BLANK, L4_CAP, M },
141
/*0x59*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_CAP, M },
142
/*0x5A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_CAP, M },
143
/*0x5B*/ { IGNORE, IGNORE, L3_L_BRACKET, IGNORE, M },
144
/*0x5C*/ { IGNORE, IGNORE, L3_BK_SOLIDUS, IGNORE, M },
145
/*0x5D*/ { IGNORE, IGNORE, L3_R_BRACKET, IGNORE, M },
146
/*0x5E*/ { IGNORE, IGNORE, L3_CIRCUMFLEX, IGNORE, M },
147
/*0x5F*/ { IGNORE, IGNORE, L3_LOW_LINE, IGNORE, M },
148
/*0x60*/ { IGNORE, IGNORE, L3_GRAVE, IGNORE, M },
149
/*0x61*/ { L1_A8, L2_BLANK, L3_BLANK, L4_MIN, M },
150
/*0x62*/ { L1_B8, L2_BLANK, L3_BLANK, L4_MIN, M },
151
/*0x63*/ { L1_C8, L2_BLANK, L3_BLANK, L4_MIN, M },
152
/*0x64*/ { L1_D8, L2_BLANK, L3_BLANK, L4_MIN, M },
153
/*0x65*/ { L1_E8, L2_BLANK, L3_BLANK, L4_MIN, M },
154
/*0x66*/ { L1_F8, L2_BLANK, L3_BLANK, L4_MIN, M },
155
/*0x67*/ { L1_G8, L2_BLANK, L3_BLANK, L4_MIN, M },
156
/*0x68*/ { L1_H8, L2_BLANK, L3_BLANK, L4_MIN, M },
157
/*0x69*/ { L1_I8, L2_BLANK, L3_BLANK, L4_MIN, M },
158
/*0x6A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_MIN, M },
159
/*0x6B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_MIN, M },
160
/*0x6C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_MIN, M },
161
/*0x6D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_MIN, M },
162
/*0x6E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_MIN, M },
163
/*0x6F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_MIN, M },
164
/*0x70*/ { L1_P8, L2_BLANK, L3_BLANK, L4_MIN, M },
165
/*0x71*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_MIN, M },
166
/*0x72*/ { L1_R8, L2_BLANK, L3_BLANK, L4_MIN, M },
167
/*0x73*/ { L1_S8, L2_BLANK, L3_BLANK, L4_MIN, M },
168
/*0x74*/ { L1_T8, L2_BLANK, L3_BLANK, L4_MIN, M },
169
/*0x75*/ { L1_U8, L2_BLANK, L3_BLANK, L4_MIN, M },
170
/*0x76*/ { L1_V8, L2_BLANK, L3_BLANK, L4_MIN, M },
171
/*0x77*/ { L1_W8, L2_BLANK, L3_BLANK, L4_MIN, M },
172
/*0x78*/ { L1_X8, L2_BLANK, L3_BLANK, L4_MIN, M },
173
/*0x79*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_MIN, M },
174
/*0x7A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_MIN, M },
175
/*0x7B*/ { IGNORE, IGNORE, L3_L_BRACE, IGNORE, M },
176
/*0x7C*/ { IGNORE, IGNORE, L3_V_LINE, IGNORE, M },
177
/*0x7D*/ { IGNORE, IGNORE, L3_R_BRACE, IGNORE, M },
178
/*0x7E*/ { IGNORE, IGNORE, L3_TILDE, IGNORE, M },
179
/*0x7F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
180
/*0x80*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
181
/*0x81*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
182
/*0x82*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
183
/*0x83*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
184
/*0x84*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
185
/*0x85*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
186
/*0x86*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
187
/*0x87*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
188
/*0x88*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
189
/*0x89*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
190
/*0x8A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
191
/*0x8B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
192
/*0x8C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
193
/*0x8D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
194
/*0x8E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
195
/*0x8F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
196
/*0x90*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
197
/*0x91*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
198
/*0x92*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
199
/*0x93*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
200
/*0x94*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
201
/*0x95*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
202
/*0x96*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
203
/*0x97*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
204
/*0x98*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
205
/*0x99*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
206
/*0x9A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
207
/*0x9B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
208
/*0x9C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
209
/*0x9D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
210
/*0x9E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
211
/*0x9F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
212
/*0xA0*/ { IGNORE, IGNORE, L3_NB_SACE, IGNORE, X },
213
/*0xA1*/ { L1_KO_KAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
214
/*0xA2*/ { L1_KHO_KHAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
215
/*0xA3*/ { L1_KHO_KHUAT, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
216
/*0xA4*/ { L1_KHO_KHWAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
217
/*0xA5*/ { L1_KHO_KHON, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
218
/*0xA6*/ { L1_KHO_RAKHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
219
/*0xA7*/ { L1_NGO_NGU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
220
/*0xA8*/ { L1_CHO_CHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
221
/*0xA9*/ { L1_CHO_CHING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
222
/*0xAA*/ { L1_CHO_CHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
223
/*0xAB*/ { L1_SO_SO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
224
/*0xAC*/ { L1_CHO_CHOE, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
225
/*0xAD*/ { L1_YO_YING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
226
/*0xAE*/ { L1_DO_CHADA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
227
/*0xAF*/ { L1_TO_PATAK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
228
/*0xB0*/ { L1_THO_THAN, L2_BLANK,L3_BLANK, L4_BLANK, M | _consnt},
229
/*0xB1*/ { L1_THO_NANGMONTHO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
230
/*0xB2*/ { L1_THO_PHUTHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
231
/*0xB3*/ { L1_NO_NEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
232
/*0xB4*/ { L1_DO_DEK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
233
/*0xB5*/ { L1_TO_TAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
234
/*0xB6*/ { L1_THO_THUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
235
/*0xB7*/ { L1_THO_THAHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
236
/*0xB8*/ { L1_THO_THONG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
237
/*0xB9*/ { L1_NO_NU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
238
/*0xBA*/ { L1_BO_BAIMAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
239
/*0xBB*/ { L1_PO_PLA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
240
/*0xBC*/ { L1_PHO_PHUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
241
/*0xBD*/ { L1_FO_FA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
242
/*0xBE*/ { L1_PHO_PHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
243
/*0xBF*/ { L1_FO_FAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
244
/*0xC0*/ { L1_PHO_SAMPHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
245
/*0xC1*/ { L1_MO_MA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
246
/*0xC2*/ { L1_YO_YAK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
247
/*0xC3*/ { L1_RO_RUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
248
/*0xC4*/ { L1_RU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
249
/*0xC5*/ { L1_LO_LING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
250
/*0xC6*/ { L1_LU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
251
/*0xC7*/ { L1_WO_WAEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
252
/*0xC8*/ { L1_SO_SALA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
253
/*0xC9*/ { L1_SO_RUSI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
254
/*0xCA*/ { L1_SO_SUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
255
/*0xCB*/ { L1_HO_HIP, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
256
/*0xCC*/ { L1_LO_CHULA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
257
/*0xCD*/ { L1_O_ANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
258
/*0xCE*/ { L1_HO_NOKHUK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
259
/*0xCF*/ { IGNORE, IGNORE, L3_PAIYAN_NOI, IGNORE, M},
260
/*0xD0*/ { L1_SARA_A, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
261
/*0xD1*/ { L1_MAI_HAN_AKAT, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
262
/*0xD2*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
263
/*0xD3*/ { L1_SARA_AM, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
264
/*0xD4*/ { L1_SARA_I, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
265
/*0xD5*/ { L1_SARA_II, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
266
/*0xD6*/ { L1_SARA_UE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
267
/*0xD7*/ { L1_SARA_UEE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
268
/*0xD8*/ { L1_SARA_U, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel},
269
/*0xD9*/ { L1_SARA_UU, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel},
270
/*0xDA*/ { IGNORE, L2_PINTHU, L3_BLANK, L4_BLANK, L },
271
/*0xDB*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
272
/*0xDC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
273
/*0xDD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
274
/*0xDE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
275
/*0xDF*/ { IGNORE, IGNORE, L3_BAHT, IGNORE, M},
276
/*0xE0*/ { L1_SARA_E, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
277
/*0xE1*/ { L1_SARA_AE, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
278
/*0xE2*/ { L1_SARA_O, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
279
/*0xE3*/ { L1_SARA_AI_MAIMUAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
280
/*0xE4*/ { L1_SARA_AI_MAIMALAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
281
/*0xE5*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_EXT, M | _fllwvowel },
282
/*0xE6*/ { IGNORE, IGNORE, L3_MAI_YAMOK, IGNORE, M | _stone },
283
/*0xE7*/ { IGNORE, L2_TYKHU, L3_BLANK, L4_BLANK, U | _diacrt1 | _stone },
284
/*0xE8*/ { IGNORE, L2_TONE1, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone },
285
/*0xE9*/ { IGNORE, L2_TONE2, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone },
286
/*0xEA*/ { IGNORE, L2_TONE3, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone },
287
/*0xEB*/ { IGNORE, L2_TONE4, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone },
288
/*0xEC*/ { IGNORE, L2_GARAN, L3_BLANK, L4_BLANK, UU | _diacrt2 | _combine | _stone },
289
/*0xED*/ { L1_NKHIT, L2_BLANK, L3_BLANK, L4_BLANK, U | _diacrt1 },
290
/*0xEE*/ { IGNORE, L2_YAMAK, L3_BLANK, L4_BLANK, U | _diacrt1 },
291
/*0xEF*/ { IGNORE, IGNORE, L3_FONGMAN, IGNORE, M },
292
/*0xF0*/ { L1_08, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
293
/*0xF1*/ { L1_18, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
294
/*0xF2*/ { L1_28, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
295
/*0xF3*/ { L1_38, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
296
/*0xF4*/ { L1_48, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
297
/*0xF5*/ { L1_58, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
298
/*0xF6*/ { L1_68, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
299
/*0xF7*/ { L1_78, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
300
/*0xF8*/ { L1_88, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
301
/*0xF9*/ { L1_98, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
302
/*0xFA*/ { IGNORE, IGNORE, L3_ANGKHANKHU, IGNORE, X },
303
/*0xFB*/ { IGNORE, IGNORE, L3_KHOMUT, IGNORE, X },
304
/*0xFC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
305
/*0xFD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
306
/*0xFE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
307
/* Utilize 0xFF for max_sort_chr in my_like_range_tis620 */
308
/*0xFF*/ { 255 /*IGNORE*/, IGNORE, IGNORE, IGNORE, X },
311
static uchar ctype_tis620[257] =
313
0, /* For standard library */
314
32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32,
315
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
316
72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
317
132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16,
318
16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1,
319
1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16,
320
16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2,
321
2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32,
322
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
323
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
324
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
325
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
326
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
327
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
328
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
329
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
332
static uchar to_lower_tis620[]=
334
'\000','\001','\002','\003','\004','\005','\006','\007',
335
'\010','\011','\012','\013','\014','\015','\016','\017',
336
'\020','\021','\022','\023','\024','\025','\026','\027',
337
'\030','\031','\032','\033','\034','\035','\036','\037',
338
' ', '!', '"', '#', '$', '%', '&', '\'',
339
'(', ')', '*', '+', ',', '-', '.', '/',
340
'0', '1', '2', '3', '4', '5', '6', '7',
341
'8', '9', ':', ';', '<', '=', '>', '?',
342
'@', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
343
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
344
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
345
'x', 'y', 'z', '[', '\\', ']', '^', '_',
346
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
347
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
348
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
349
'x', 'y', 'z', '{', '|', '}', '~', '\177',
350
(uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
351
(uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
352
(uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
353
(uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
354
(uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
355
(uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
356
(uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
357
(uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
358
(uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
359
(uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
360
(uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
361
(uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
362
(uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
363
(uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
364
(uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
365
(uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
368
static uchar to_upper_tis620[]=
370
'\000','\001','\002','\003','\004','\005','\006','\007',
371
'\010','\011','\012','\013','\014','\015','\016','\017',
372
'\020','\021','\022','\023','\024','\025','\026','\027',
373
'\030','\031','\032','\033','\034','\035','\036','\037',
374
' ', '!', '"', '#', '$', '%', '&', '\'',
375
'(', ')', '*', '+', ',', '-', '.', '/',
376
'0', '1', '2', '3', '4', '5', '6', '7',
377
'8', '9', ':', ';', '<', '=', '>', '?',
378
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
379
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
380
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
381
'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
382
'`', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
383
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
384
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
385
'X', 'Y', 'Z', '{', '|', '}', '~', '\177',
386
(uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
387
(uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
388
(uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
389
(uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
390
(uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
391
(uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
392
(uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
393
(uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
394
(uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
395
(uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
396
(uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
397
(uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
398
(uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
399
(uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
400
(uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
401
(uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
404
static const uchar sort_order_tis620[]=
406
'\000','\001','\002','\003','\004','\005','\006','\007',
407
'\010','\011','\012','\013','\014','\015','\016','\017',
408
'\020','\021','\022','\023','\024','\025','\026','\027',
409
'\030','\031','\032','\033','\034','\035','\036','\037',
410
' ', '!', '"', '#', '$', '%', '&', '\'',
411
'(', ')', '*', '+', ',', '-', '.', '/',
412
'0', '1', '2', '3', '4', '5', '6', '7',
413
'8', '9', ':', ';', '<', '=', '>', '?',
414
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
415
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
416
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
417
'X', 'Y', 'Z', '\\', ']', '[', '^', '_',
418
'E', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
419
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
420
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
421
'X', 'Y', 'Z', '{', '|', '}', 'Y', '\177',
422
(uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
423
(uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
424
(uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
425
(uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
426
(uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
427
(uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
428
(uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
429
(uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
430
(uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
431
(uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
432
(uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
433
(uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
434
(uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
435
(uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
436
(uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
437
(uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
442
Convert thai string to "Standard C String Function" sortable string
446
tstr String to convert. Does not have to end with \0
450
static size_t thai2sortable(uchar *tstr, size_t len)
458
for (p= tstr; tlen > 0; p++, tlen--)
464
const int *t_ctype0= t_ctype[c];
468
if (isldvowel(c) && tlen != 1 && isconsnt(p[1]))
470
/* simply swap between leading-vowel and consonant */
478
/* if found level 2 char (L2_GARAN,L2_TONE*,L2_TYKHU) move to last */
479
if (t_ctype0[1] >= L2_GARAN)
482
l2bias use to control position weight of l2char
483
example (*=l2char) XX*X must come before X*XX
485
memmove((char*) p, (char*) (p+1), tlen-1);
486
tstr[len-1]= l2bias + t_ctype0[1]- L2_GARAN +1;
494
*p= to_lower_tis620[c];
502
strncoll() replacement, compare 2 string, both are converted to sortable
506
We can't cut strings at end \0 as this would break comparision with
507
LIKE characters, where the min range is stored as end \0
509
Arg: 2 Strings and it compare length
514
int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
515
const uchar *s1, size_t len1,
516
const uchar *s2, size_t len2,
517
my_bool s2_is_prefix)
523
if (s2_is_prefix && len1 > len2)
527
if ((len1 + len2 +2) > (int) sizeof(buf))
528
tc1= (uchar*) my_str_malloc(len1+len2+2);
530
memcpy((char*) tc1, (char*) s1, len1);
531
tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */
532
memcpy((char *)tc2, (char *)s2, len2);
533
tc2[len2]= 0; /* put end of string */
534
thai2sortable(tc1, len1);
535
thai2sortable(tc2, len2);
536
i= strcmp((char*)tc1, (char*)tc2);
544
int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
545
const uchar *a0, size_t a_length,
546
const uchar *b0, size_t b_length,
547
my_bool diff_if_only_endspace_difference)
549
uchar buf[80], *end, *a, *b, *alloced= NULL;
553
#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
554
diff_if_only_endspace_difference= 0;
558
if ((a_length + b_length +2) > (int) sizeof(buf))
559
alloced= a= (uchar*) my_str_malloc(a_length+b_length+2);
562
memcpy((char*) a, (char*) a0, a_length);
563
a[a_length]= 0; /* if length(a0)> len1, need to put 'end of string' */
564
memcpy((char *)b, (char *)b0, b_length);
565
b[b_length]= 0; /* put end of string */
566
a_length= thai2sortable(a, a_length);
567
b_length= thai2sortable(b, b_length);
569
end= a + (length= min(a_length, b_length));
574
res= ((int) a[-1] - (int) b[-1]);
578
if (a_length != b_length)
581
if (diff_if_only_endspace_difference)
582
res= 1; /* Assume 'a' is bigger */
584
Check the next not space character of the longer key. If it's < ' ',
585
then it's smaller than the other key.
587
if (a_length < b_length)
589
/* put shorter key in s */
592
swap= -1; /* swap sign of result */
595
for (end= a + a_length-length; a < end ; a++)
599
res= (*a < ' ') ? -swap : swap;
608
my_str_free(alloced);
614
strnxfrm replacment, convert Thai string to sortable string
616
Arg: Destination buffer, source string, dest length and source length
617
Ret: Conveted string size
621
size_t my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)),
622
uchar *dest, size_t len,
623
const uchar *src, size_t srclen)
626
len= (size_t) (strmake((char*) dest, (char*) src, min(len, srclen)) -
628
len= thai2sortable(dest, len);
630
bfill(dest + len, dstlen - len, ' ');
635
static const unsigned short cs_to_uni[256]={
636
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
637
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
638
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
639
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
640
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
641
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
642
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
643
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
644
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
645
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
646
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
647
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
648
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
649
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
650
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
651
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
652
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
653
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
654
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
655
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
656
0xFFFD,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
657
0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
658
0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
659
0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
660
0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
661
0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
662
0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
663
0x0E38,0x0E39,0x0E3A,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0x0E3F,
664
0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
665
0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
666
0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
667
0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFD,0xFFFD,0xFFFD,0xFFFD
669
static const uchar pl00[256]={
670
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
671
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
672
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
673
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
674
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
675
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
676
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
677
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
678
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
679
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
680
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
681
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
682
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
683
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
684
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
685
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
686
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
687
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
688
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
689
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
690
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
691
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
692
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
693
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
694
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
695
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
696
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
697
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
698
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
699
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
700
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
701
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
703
static const uchar pl0E[256]={
704
0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
705
0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
706
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
707
0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
708
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
709
0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
710
0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
711
0x00D8,0x00D9,0x00DA,0x0000,0x0000,0x0000,0x0000,0x00DF,
712
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
713
0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
714
0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
715
0x00F8,0x00F9,0x00FA,0x00FB,0x0000,0x0000,0x0000,0x0000,
716
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
717
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
718
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
719
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
720
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
721
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
722
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
723
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
724
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
725
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
726
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
727
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
728
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
729
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
730
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
731
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
732
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
733
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
734
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
735
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
737
static const uchar plFF[256]={
738
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
739
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
740
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
741
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
742
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
743
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
744
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
745
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
746
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
747
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
748
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
749
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
750
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
751
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
752
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
753
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
754
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
755
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
756
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
757
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
758
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
759
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
760
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
761
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
762
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
763
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
764
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
765
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
766
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
767
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
768
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
769
0x0000,0x0000,0x0000,0x0000,0x0000,0x00FF,0x0000,0x0000
771
static const uchar *const uni_to_cs[256]={
772
pl00,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
773
NULL,NULL,NULL,NULL,NULL,NULL,pl0E,NULL,
774
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
775
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
776
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
777
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
778
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
779
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
780
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
781
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
782
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
783
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
784
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
785
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
786
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
787
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
788
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
789
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
790
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
791
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
792
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
793
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
794
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
795
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
796
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
797
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
798
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
799
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
800
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
801
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
802
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
803
NULL,NULL,NULL,NULL,NULL,NULL,NULL,plFF
808
int my_mb_wc_tis620(CHARSET_INFO *cs __attribute__((unused)),
811
const uchar *end __attribute__((unused)))
814
return MY_CS_TOOSMALL;
817
return (!wc[0] && str[0]) ? -1 : 1;
821
int my_wc_mb_tis620(CHARSET_INFO *cs __attribute__((unused)),
824
uchar *end __attribute__((unused)))
829
return MY_CS_TOOSMALL;
831
pl= uni_to_cs[(wc>>8) & 0xFF];
832
str[0]= pl ? pl[wc & 0xFF] : '\0';
833
return (!str[0] && wc) ? MY_CS_ILUNI : 1;
837
static MY_COLLATION_HANDLER my_collation_ci_handler =
841
my_strnncollsp_tis620,
843
my_strnxfrmlen_simple,
844
my_like_range_simple,
845
my_wildcmp_8bit, /* wildcmp */
847
my_instr_simple, /* QQ: To be fixed */
852
static MY_CHARSET_HANDLER my_charset_handler=
856
my_mbcharlen_8bit, /* mbcharlen */
859
my_well_formed_len_8bit,
862
my_mb_wc_tis620, /* mb_wc */
863
my_wc_mb_tis620, /* wc_mb */
870
my_long10_to_str_8bit,
871
my_longlong10_to_str_8bit,
879
my_strntoull10rnd_8bit,
885
struct charset_info_st my_charset_tis620_thai_ci=
888
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
889
"tis620", /* cs name */
890
"tis620_thai_ci", /* name */
892
NULL, /* tailoring */
897
NULL, /* contractions */
898
NULL, /* sort_order_big*/
899
NULL, /* tab_to_uni */
900
NULL, /* tab_from_uni */
901
my_unicase_default, /* caseinfo */
902
NULL, /* state_map */
903
NULL, /* ident_map */
904
4, /* strxfrm_multiply */
905
1, /* caseup_multiply */
906
1, /* casedn_multiply */
909
0, /* min_sort_char */
910
255, /* max_sort_char */
912
0, /* escape_with_backslash_is_dangerous */
914
&my_collation_ci_handler
917
struct charset_info_st my_charset_tis620_bin=
920
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
921
"tis620", /* cs name */
922
"tis620_bin", /* name */
924
NULL, /* tailoring */
928
NULL, /* sort_order */
929
NULL, /* contractions */
930
NULL, /* sort_order_big*/
931
NULL, /* tab_to_uni */
932
NULL, /* tab_from_uni */
933
my_unicase_default, /* caseinfo */
934
NULL, /* state_map */
935
NULL, /* ident_map */
936
1, /* strxfrm_multiply */
937
1, /* caseup_multiply */
938
1, /* casedn_multiply */
941
0, /* min_sort_char */
942
255, /* max_sort_char */
944
0, /* escape_with_backslash_is_dangerous */
946
&my_collation_8bit_bin_handler