~capttofu/drizzle/federated_schema

« back to all changes in this revision

Viewing changes to strings/ctype-tis620.c

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

Show diffs side-by-side

added added

removed removed

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