1 | /* Copyright (c) 2000, 2001, 2003 MySQL AB |
2 | Use is subject to license terms |
3 | |
4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by |
6 | the Free Software Foundation; version 2 of the License. |
7 | |
8 | This program is distributed in the hope that it will be useful, |
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | GNU General Public License for more details. |
12 | |
13 | You should have received a copy of the GNU General Public License |
14 | along with this program; if not, write to the Free Software |
15 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ |
16 | |
17 | /* |
18 | Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. |
19 | Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. |
20 | Permission to use, copy, modify, distribute and sell this software |
21 | and its documentation for any purpose is hereby granted without fee, |
22 | provided that the above copyright notice appear in all copies. |
23 | Smaphan Raruenrom and Pruet Boonma makes no representations about |
24 | the suitability of this software for any purpose. It is provided |
25 | "as is" without express or implied warranty. |
26 | */ |
27 | |
28 | /* |
29 | LC_COLLATE category + Level information |
30 | */ |
31 | |
32 | #ifndef _t_ctype_h |
33 | #define _t_ctype_h |
34 | |
35 | typedef unsigned char tchar; |
36 | |
37 | #define TOT_LEVELS 5 |
38 | #define LAST_LEVEL 4 /* TOT_LEVELS - 1 */ |
39 | |
40 | #define IGNORE 0 |
41 | |
42 | |
43 | /* level 1 symbols & order */ |
44 | enum l1_symbols { |
45 | L1_08 = TOT_LEVELS, |
46 | L1_18, |
47 | L1_28, |
48 | L1_38, |
49 | L1_48, |
50 | L1_58, |
51 | L1_68, |
52 | L1_78, |
53 | L1_88, |
54 | L1_98, |
55 | L1_A8, |
56 | L1_B8, |
57 | L1_C8, |
58 | L1_D8, |
59 | L1_E8, |
60 | L1_F8, |
61 | L1_G8, |
62 | L1_H8, |
63 | L1_I8, |
64 | L1_J8, |
65 | L1_K8, |
66 | L1_L8, |
67 | L1_M8, |
68 | L1_N8, |
69 | L1_O8, |
70 | L1_P8, |
71 | L1_Q8, |
72 | L1_R8, |
73 | L1_S8, |
74 | L1_T8, |
75 | L1_U8, |
76 | L1_V8, |
77 | L1_W8, |
78 | L1_X8, |
79 | L1_Y8, |
80 | L1_Z8, |
81 | L1_KO_KAI, |
82 | L1_KHO_KHAI, |
83 | L1_KHO_KHUAT, |
84 | L1_KHO_KHWAI, |
85 | L1_KHO_KHON, |
86 | L1_KHO_RAKHANG, |
87 | L1_NGO_NGU, |
88 | L1_CHO_CHAN, |
89 | L1_CHO_CHING, |
90 | L1_CHO_CHANG, |
91 | L1_SO_SO, |
92 | L1_CHO_CHOE, |
93 | L1_YO_YING, |
94 | L1_DO_CHADA, |
95 | L1_TO_PATAK, |
96 | L1_THO_THAN, |
97 | L1_THO_NANGMONTHO, |
98 | L1_THO_PHUTHAO, |
99 | L1_NO_NEN, |
100 | L1_DO_DEK, |
101 | L1_TO_TAO, |
102 | L1_THO_THUNG, |
103 | L1_THO_THAHAN, |
104 | L1_THO_THONG, |
105 | L1_NO_NU, |
106 | L1_BO_BAIMAI, |
107 | L1_PO_PLA, |
108 | L1_PHO_PHUNG, |
109 | L1_FO_FA, |
110 | L1_PHO_PHAN, |
111 | L1_FO_FAN, |
112 | L1_PHO_SAMPHAO, |
113 | L1_MO_MA, |
114 | L1_YO_YAK, |
115 | L1_RO_RUA, |
116 | L1_RU, |
117 | L1_LO_LING, |
118 | L1_LU, |
119 | L1_WO_WAEN, |
120 | L1_SO_SALA, |
121 | L1_SO_RUSI, |
122 | L1_SO_SUA, |
123 | L1_HO_HIP, |
124 | L1_LO_CHULA, |
125 | L1_O_ANG, |
126 | L1_HO_NOKHUK, |
127 | L1_NKHIT, |
128 | L1_SARA_A, |
129 | L1_MAI_HAN_AKAT, |
130 | L1_SARA_AA, |
131 | L1_SARA_AM, |
132 | L1_SARA_I, |
133 | L1_SARA_II, |
134 | L1_SARA_UE, |
135 | L1_SARA_UEE, |
136 | L1_SARA_U, |
137 | L1_SARA_UU, |
138 | L1_SARA_E, |
139 | L1_SARA_AE, |
140 | L1_SARA_O, |
141 | L1_SARA_AI_MAIMUAN, |
142 | L1_SARA_AI_MAIMALAI |
143 | }; |
144 | |
145 | /* level 2 symbols & order */ |
146 | enum l2_symbols { |
147 | L2_BLANK = TOT_LEVELS, |
148 | L2_THAII, |
149 | L2_YAMAK, |
150 | L2_PINTHU, |
151 | L2_GARAN, |
152 | L2_TYKHU, |
153 | L2_TONE1, |
154 | L2_TONE2, |
155 | L2_TONE3, |
156 | L2_TONE4 |
157 | }; |
158 | |
159 | /* level 3 symbols & order */ |
160 | enum l3_symbols { |
161 | L3_BLANK = TOT_LEVELS, |
162 | L3_SPACE, |
163 | L3_NB_SACE, |
164 | L3_LOW_LINE, |
165 | L3_HYPHEN, |
166 | L3_COMMA, |
167 | L3_SEMICOLON, |
168 | L3_COLON, |
169 | L3_EXCLAMATION, |
170 | L3_QUESTION, |
171 | L3_SOLIDUS, |
172 | L3_FULL_STOP, |
173 | L3_PAIYAN_NOI, |
174 | L3_MAI_YAMOK, |
175 | L3_GRAVE, |
176 | L3_CIRCUMFLEX, |
177 | L3_TILDE, |
178 | L3_APOSTROPHE, |
179 | L3_QUOTATION, |
180 | L3_L_PARANTHESIS, |
181 | L3_L_BRACKET, |
182 | L3_L_BRACE, |
183 | L3_R_BRACE, |
184 | L3_R_BRACKET, |
185 | L3_R_PARENTHESIS, |
186 | L3_AT, |
187 | L3_BAHT, |
188 | L3_DOLLAR, |
189 | L3_FONGMAN, |
190 | L3_ANGKHANKHU, |
191 | L3_KHOMUT, |
192 | L3_ASTERISK, |
193 | L3_BK_SOLIDUS, |
194 | L3_AMPERSAND, |
195 | L3_NUMBER, |
196 | L3_PERCENT, |
197 | L3_PLUS, |
198 | L3_LESS_THAN, |
199 | L3_EQUAL, |
200 | L3_GREATER_THAN, |
201 | L3_V_LINE |
202 | }; |
203 | |
204 | /* level 4 symbols & order */ |
205 | enum l4_symbols { |
206 | L4_BLANK = TOT_LEVELS, |
207 | L4_MIN, |
208 | L4_CAP, |
209 | L4_EXT |
210 | }; |
211 | |
212 | enum level_symbols { |
213 | L_UPRUPR = TOT_LEVELS, |
214 | L_UPPER, |
215 | L_MIDDLE, |
216 | L_LOWER |
217 | }; |
218 | |
219 | #define _is(c) (t_ctype[(c)][LAST_LEVEL]) |
220 | #define _level 8 |
221 | #define _consnt 16 |
222 | #define _ldvowel 32 |
223 | #define _fllwvowel 64 |
224 | #define _uprvowel 128 |
225 | #define _lwrvowel 256 |
226 | #define _tone 512 |
227 | #define _diacrt1 1024 |
228 | #define _diacrt2 2048 |
229 | #define _combine 4096 |
230 | #define _stone 8192 |
231 | #define _tdig 16384 |
232 | #define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel) |
233 | #define _diacrt (_diacrt1 | _diacrt2) |
234 | #define levelof(c) ( _is(c) & _level ) |
235 | #define isthai(c) ( (c) >= 128 ) |
236 | #define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|\ |
237 | _tone|_diacrt1|_diacrt2) ) |
238 | #define isconsnt(c) ( _is(c) & _consnt ) |
239 | #define isldvowel(c) ( _is(c) & _ldvowel ) |
240 | #define isfllwvowel(c) ( _is(c) & _fllwvowel ) |
241 | #define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) ) |
242 | #define isuprvowel(c) ( _is(c) & _uprvowel ) |
243 | #define islwrvowel(c) ( _is(c) & _lwrvowel ) |
244 | #define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel)) |
245 | #define isrearvowel(c) ( _is(c) & _rearvowel ) |
246 | #define isvowel(c) ( _is(c) & (_ldvowel|_rearvowel) ) |
247 | #define istone(c) ( _is(c) & _tone ) |
248 | #define isunldable(c) ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) ) |
249 | #define iscombinable(c) ( _is(c) & _combine ) |
250 | #define istdigit(c) ( _is(c) & _tdig ) |
251 | #define isstone(c) ( _is(c) & _stone ) |
252 | #define isdiacrt1(c) ( _is(c) & _diacrt1) |
253 | #define isdiacrt2(c) ( _is(c) & _diacrt2) |
254 | #define isdiacrt(c) ( _is(c) & _diacrt) |
255 | |
256 | /* Function prototype called by sql/field.cc */ |
257 | void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length); |
258 | |
259 | #endif |
260 | |