~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to strings/ctype-tis620.c

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

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 NEAR 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 NEAR 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 NEAR 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 NEAR 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 __attribute__((unused)),
 
637
                          uchar *dest, size_t len,
 
638
                          const uchar *src, size_t srclen)
 
639
{
 
640
  size_t dstlen= len;
 
641
  len= (size_t) (strmake((char*) dest, (char*) src, min(len, srclen)) -
 
642
                 (char*) dest);
 
643
  len= thai2sortable(dest, len);
 
644
  if (dstlen > len)
 
645
    bfill(dest + len, dstlen - len, ' ');
 
646
  return dstlen;
 
647
}
 
648
 
 
649
 
 
650
static unsigned short cs_to_uni[256]={
 
651
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
 
652
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
 
653
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
 
654
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
 
655
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
 
656
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
 
657
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
 
658
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
 
659
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
 
660
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
 
661
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
 
662
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
 
663
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
 
664
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
 
665
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
 
666
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
 
667
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
 
668
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
 
669
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
 
670
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
 
671
0xFFFD,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
 
672
0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
 
673
0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
 
674
0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
 
675
0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
 
676
0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
 
677
0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
 
678
0x0E38,0x0E39,0x0E3A,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0x0E3F,
 
679
0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
 
680
0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
 
681
0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
 
682
0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFD,0xFFFD,0xFFFD,0xFFFD
 
683
};
 
684
static uchar pl00[256]={
 
685
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
 
686
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
 
687
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
 
688
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
 
689
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
 
690
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
 
691
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
 
692
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
 
693
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
 
694
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
 
695
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
 
696
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
 
697
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
 
698
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
 
699
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
 
700
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
 
701
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
 
702
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
 
703
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
 
704
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
 
705
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
 
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
};
 
718
static uchar pl0E[256]={
 
719
0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
 
720
0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
 
721
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
 
722
0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
 
723
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
 
724
0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
 
725
0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
 
726
0x00D8,0x00D9,0x00DA,0x0000,0x0000,0x0000,0x0000,0x00DF,
 
727
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
 
728
0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
 
729
0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
 
730
0x00F8,0x00F9,0x00FA,0x00FB,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,
 
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
};
 
752
static uchar plFF[256]={
 
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,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,0x00FF,0x0000,0x0000
 
785
};
 
786
static uchar *uni_to_cs[256]={
 
787
pl00,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
 
788
NULL,NULL,NULL,NULL,NULL,NULL,pl0E,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,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,plFF
 
819
};
 
820
 
 
821
 
 
822
static
 
823
int my_mb_wc_tis620(CHARSET_INFO *cs  __attribute__((unused)),
 
824
                  my_wc_t *wc,
 
825
                  const uchar *str,
 
826
                  const uchar *end __attribute__((unused)))
 
827
{
 
828
  if (str >= end)
 
829
    return MY_CS_TOOSMALL;
 
830
  
 
831
  *wc=cs_to_uni[*str];
 
832
  return (!wc[0] && str[0]) ? -1 : 1;
 
833
}
 
834
 
 
835
static
 
836
int my_wc_mb_tis620(CHARSET_INFO *cs  __attribute__((unused)),
 
837
                  my_wc_t wc,
 
838
                  uchar *str,
 
839
                  uchar *end __attribute__((unused)))
 
840
{
 
841
  uchar *pl;
 
842
  
 
843
  if (str >= end)
 
844
    return MY_CS_TOOSMALL;
 
845
  
 
846
  pl= uni_to_cs[(wc>>8) & 0xFF];
 
847
  str[0]= pl ? pl[wc & 0xFF] : '\0';
 
848
  return (!str[0] && wc) ? MY_CS_ILUNI : 1;
 
849
}
 
850
 
 
851
 
 
852
static MY_COLLATION_HANDLER my_collation_ci_handler =
 
853
{
 
854
    NULL,               /* init */
 
855
    my_strnncoll_tis620,
 
856
    my_strnncollsp_tis620,
 
857
    my_strnxfrm_tis620,
 
858
    my_strnxfrmlen_simple,
 
859
    my_like_range_simple,
 
860
    my_wildcmp_8bit,    /* wildcmp   */
 
861
    my_strcasecmp_8bit,
 
862
    my_instr_simple,                            /* QQ: To be fixed */
 
863
    my_hash_sort_simple,
 
864
    my_propagate_simple
 
865
};
 
866
 
 
867
static MY_CHARSET_HANDLER my_charset_handler=
 
868
{
 
869
    NULL,               /* init */
 
870
    NULL,               /* ismbchar  */
 
871
    my_mbcharlen_8bit,  /* mbcharlen */
 
872
    my_numchars_8bit,
 
873
    my_charpos_8bit,
 
874
    my_well_formed_len_8bit,
 
875
    my_lengthsp_8bit,
 
876
    my_numcells_8bit,
 
877
    my_mb_wc_tis620,    /* mb_wc     */
 
878
    my_wc_mb_tis620,    /* wc_mb     */
 
879
    my_mb_ctype_8bit,
 
880
    my_caseup_str_8bit,
 
881
    my_casedn_str_8bit,
 
882
    my_caseup_8bit,
 
883
    my_casedn_8bit,
 
884
    my_snprintf_8bit,
 
885
    my_long10_to_str_8bit,
 
886
    my_longlong10_to_str_8bit,
 
887
    my_fill_8bit,
 
888
    my_strntol_8bit,
 
889
    my_strntoul_8bit,
 
890
    my_strntoll_8bit,
 
891
    my_strntoull_8bit,
 
892
    my_strntod_8bit,
 
893
    my_strtoll10_8bit,
 
894
    my_strntoull10rnd_8bit,
 
895
    my_scan_8bit
 
896
};
 
897
 
 
898
 
 
899
 
 
900
CHARSET_INFO my_charset_tis620_thai_ci=
 
901
{
 
902
    18,0,0,             /* number    */
 
903
    MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM,        /* state     */
 
904
    "tis620",           /* cs name    */
 
905
    "tis620_thai_ci",   /* name      */
 
906
    "",                 /* comment   */
 
907
    NULL,               /* tailoring */
 
908
    ctype_tis620,
 
909
    to_lower_tis620,
 
910
    to_upper_tis620,
 
911
    sort_order_tis620,
 
912
    NULL,               /* contractions */
 
913
    NULL,               /* sort_order_big*/
 
914
    NULL,               /* tab_to_uni   */
 
915
    NULL,               /* tab_from_uni */
 
916
    my_unicase_default, /* caseinfo     */
 
917
    NULL,               /* state_map    */
 
918
    NULL,               /* ident_map    */
 
919
    4,                  /* strxfrm_multiply */
 
920
    1,                  /* caseup_multiply  */
 
921
    1,                  /* casedn_multiply  */
 
922
    1,                  /* mbminlen   */
 
923
    1,                  /* mbmaxlen  */
 
924
    0,                  /* min_sort_char */
 
925
    255,                /* max_sort_char */
 
926
    ' ',                /* pad char      */
 
927
    0,                  /* escape_with_backslash_is_dangerous */
 
928
    &my_charset_handler,
 
929
    &my_collation_ci_handler
 
930
};
 
931
 
 
932
CHARSET_INFO my_charset_tis620_bin=
 
933
{
 
934
    89,0,0,             /* number    */
 
935
    MY_CS_COMPILED|MY_CS_BINSORT,       /* state     */
 
936
    "tis620",           /* cs name    */
 
937
    "tis620_bin",       /* name      */
 
938
    "",                 /* comment   */
 
939
    NULL,               /* tailoring */
 
940
    ctype_tis620,
 
941
    to_lower_tis620,
 
942
    to_upper_tis620,
 
943
    NULL,               /* sort_order   */
 
944
    NULL,               /* contractions */
 
945
    NULL,               /* sort_order_big*/
 
946
    NULL,               /* tab_to_uni   */
 
947
    NULL,               /* tab_from_uni */
 
948
    my_unicase_default, /* caseinfo     */
 
949
    NULL,               /* state_map    */
 
950
    NULL,               /* ident_map    */
 
951
    1,                  /* strxfrm_multiply */
 
952
    1,                  /* caseup_multiply  */
 
953
    1,                  /* casedn_multiply  */
 
954
    1,                  /* mbminlen   */
 
955
    1,                  /* mbmaxlen  */
 
956
    0,                  /* min_sort_char */
 
957
    255,                /* max_sort_char */
 
958
    ' ',                /* pad char      */
 
959
    0,                  /* escape_with_backslash_is_dangerous */
 
960
    &my_charset_handler,
 
961
    &my_collation_8bit_bin_handler
 
962
};
 
963
 
 
964
 
 
965
#endif