~ubuntu-branches/ubuntu/trusty/mariadb-5.5/trusty-proposed

« back to all changes in this revision

Viewing changes to strings/ctype-tis620.c

  • Committer: Package Import Robot
  • Author(s): Otto Kekäläinen
  • Date: 2013-12-22 10:27:05 UTC
  • Revision ID: package-import@ubuntu.com-20131222102705-mndw7s12mz0szrcn
Tags: upstream-5.5.32
Import upstream version 5.5.32

Show diffs side-by-side

added added

removed removed

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