mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / strings / ctype-win1250ch.c
blobebcf42408d87aae3ae91406b14309eb245da2f1b
1 /* Copyright (c) 2002-2007 MySQL AB
2 Use is subject to license terms.
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.
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.
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 St, Fifth Floor, Boston, MA 02110-1301 USA
19 Shared, independent copyright: (C) 2001 Jan Pazdziora.
21 Development of this software was supported by Neocortex, s.r.o.
22 MySQL AB expresses its gratitude to Jan for for giving us this software.
24 Bug reports and suggestions are always welcome.
26 This file implements the collating sequence for Windows-1250
27 character set. It merely extends the binary sorting of US-ASCII
28 by adding characters with diacritical marks into proper places.
29 In addition, it sorts 'ch' between 'h' and 'i', and the sorting
30 is case sensitive, with uppercase being sorted first, in the
31 second pass.
35 * This comment is parsed by configure to create ctype.c,
36 * so don't change it unless you know what you are doing.
38 * .configure. strxfrm_multiply_win1250ch=2
41 #define REAL_MYSQL
42 #ifdef REAL_MYSQL
44 #include "my_global.h"
45 #include "m_string.h"
46 #include "m_ctype.h"
48 #else
50 #include <stdio.h>
51 #define uchar unsigned char
53 #endif
55 #ifdef HAVE_CHARSET_cp1250
58 static uint16 tab_cp1250_uni[256]={
59 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
60 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
61 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
62 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
63 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
64 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
65 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
66 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
67 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
68 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
69 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
70 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
71 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
72 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
73 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
74 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
75 0x20AC, 0,0x201A, 0,0x201E,0x2026,0x2020,0x2021,
76 0,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
77 0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
78 0,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
79 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
80 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
81 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
82 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
83 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
84 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
85 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
86 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
87 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
88 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
89 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
90 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
94 /* 0000-00FD , 254 chars */
95 static uchar tab_uni_cp1250_plane00[]={
96 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
97 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
98 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
99 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
100 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
101 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
102 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
103 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
104 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
105 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
106 0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0xA8,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00,
107 0xB0,0xB1,0x00,0x00,0xB4,0xB5,0xB6,0xB7,0xB8,0x00,0x00,0xBB,0x00,0x00,0x00,0x00,
108 0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00,
109 0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF,
110 0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00,
111 0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD};
113 /* 0102-017E , 125 chars */
114 static uchar tab_uni_cp1250_plane01[]={
115 0xC3,0xE3,0xA5,0xB9,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0,
116 0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,
117 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
118 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xBC,0xBE,0x00,0x00,0xA3,
119 0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5,
120 0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0x8C,0x9C,0x00,0x00,0xAA,0xBA,0x8A,0x9A,
121 0xDE,0xFE,0x8D,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB,
122 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x9F,0xAF,0xBF,0x8E,0x9E};
124 /* 2013-20AC , 154 chars */
125 static uchar tab_uni_cp1250_plane20[]={
126 0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95,
127 0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00,
128 0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
129 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
130 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
131 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
132 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
133 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
134 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
135 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};
137 /* 02C7-02DD , 23 chars */
138 static uchar tab_uni_cp1250_plane02[]={
139 0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
140 0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD};
142 /* 2122-2122 , 1 chars */
143 static uchar tab_uni_cp1250_plane21[]={
144 0x99};
147 static MY_UNI_IDX idx_uni_cp1250[]={
148 {0x0000,0x00FD,tab_uni_cp1250_plane00},
149 {0x0102,0x017E,tab_uni_cp1250_plane01},
150 {0x2013,0x20AC,tab_uni_cp1250_plane20},
151 {0x02C7,0x02DD,tab_uni_cp1250_plane02},
152 {0x2122,0x2122,tab_uni_cp1250_plane21},
153 {0,0,NULL}
157 static uchar NEAR ctype_win1250ch[] = {
158 0x00,
159 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
160 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20,
161 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
162 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
163 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
164 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
165 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
166 0x84, 0x84, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
167 0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01,
168 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
169 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
170 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
171 0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02,
172 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
173 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
174 0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, 0x20,
175 0x20, 0x20, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10,
176 0x20, 0x10, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
177 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
178 0x20, 0x10, 0x02, 0x10, 0x02, 0x02, 0x02, 0x02,
179 0x48, 0x10, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01,
180 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x10, 0x01,
181 0x10, 0x10, 0x10, 0x02, 0x10, 0x10, 0x10, 0x10,
182 0x10, 0x02, 0x02, 0x10, 0x01, 0x10, 0x02, 0x02,
183 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
184 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
185 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
186 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
187 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
188 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
189 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10,
190 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10
193 static uchar NEAR to_lower_win1250ch[] = {
194 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
195 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
196 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
197 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
198 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
199 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
200 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
201 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
202 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
203 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
204 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
205 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
206 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
207 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
208 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
209 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
210 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
211 0x88, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f,
212 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
213 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
214 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xb9, 0xa6, 0xdf,
215 0xa8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf,
216 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
217 0xb8, 0xb9, 0xba, 0xbb, 0xbe, 0xbd, 0xbe, 0xbf,
218 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
219 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
220 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
221 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
222 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
223 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
224 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
225 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
228 static uchar NEAR to_upper_win1250ch[] = {
229 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
230 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
231 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
232 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
233 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
234 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
235 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
236 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
237 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
238 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
239 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
240 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
241 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
242 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
243 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
244 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
245 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
246 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
247 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
248 0x98, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f,
249 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
250 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
251 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7,
252 0xb8, 0xa5, 0xaa, 0xbb, 0xbc, 0xbd, 0xbc, 0xaf,
253 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
254 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
255 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
256 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xa7,
257 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
258 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
259 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
260 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff
265 static uchar NEAR sort_order_win1250ch[] = {
266 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
267 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
268 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
269 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
270 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
271 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
272 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
273 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
274 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
275 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
276 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
277 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
278 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
279 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
280 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
281 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
284 static uchar NEAR _sort_order_win1250ch1[] = {
285 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
286 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
287 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
288 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
289 /* space ord 32 0x20 */
290 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
291 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91,
292 /* 0 ord 48 0x30 */
293 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
294 0x9a, 0x9b,
295 /* colon ord 58 0x3a */
296 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1,
297 0xa2,
298 /* A ord 65 0x41 */
299 0xa4, 0xa5,
300 /* C ord 67 0x43 */
301 0xff, 0xa8, 0xa9, 0xaa, 0xab,
302 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
303 0xb5, 0xb6,
304 /* R ord 82 0x52 */
305 0xb7,
306 /* S ord 83 0x53 */
307 0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
308 0xc0, 0xc1, 0xc2,
309 /* [ ord 91 0x5b */
310 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
311 0xc9,
312 /* a ord 97 0x61 */
313 0xa4, 0xa5, 0xff, 0xa8, 0xa9, 0xaa, 0xab,
314 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
315 0xb5, 0xb6, 0xb7, 0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
316 0xc0, 0xc1, 0xc2,
317 /* { ord 123 0x7b */
318 0xca, 0xcb, 0xcc, 0xcd, 0x81,
319 0x81, 0x81, 0xce, 0x81, 0xcf, 0xd0, 0xd1, 0xd2,
320 0x81, 0xd3,
321 /* Scaron ord 138 0x8a */
322 0xba, 0xd4, 0xb9, 0xbc, 0xc3, 0xc2,
323 0x81, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
324 0x81, 0xdc, 0xba, 0xdd, 0xb9, 0xbc, 0xc3, 0xc2,
325 /* nobreakspace ord 160 0xa0 */
326 0x82, 0xde, 0xdf, 0xb1, 0xe0, 0xa4, 0xe1, 0xe2,
327 0xe3, 0xe4, 0xb9, 0xe5, 0xe6, 0xe7, 0xe8, 0xc2,
328 0xe9, 0xea, 0xeb, 0xb1, 0xed, 0xee, 0x81, 0xef,
329 /* cedilla ord 183 0xb8 */
330 0xf0, 0xa4, 0xb9, 0xf1, 0xb1, 0xf2, 0xb1, 0xc2,
331 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
332 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
333 /* Eth ord 208 0xd0 */
334 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf3,
335 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xbb,
336 /* racute ord 224 0xe0 */
337 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
338 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
339 /* eth ord 240 0xf0 */
340 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf4,
341 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xf5
344 static uchar NEAR _sort_order_win1250ch2[] = {
345 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
346 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,
347 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
348 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,
349 /* space ord 32 0x20 */
350 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
351 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
352 /* 0 ord 48 0x30 */
353 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
354 0x01, 0x01,
355 /* colon ord 58 0x3a */
356 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
357 0x01,
358 /* A ord 65 0x41 */
359 0x01, 0x01,
360 /* C ord 67 0x43 */
361 0xff, 0x01, 0x01, 0x01, 0x01,
362 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
363 0x01, 0x01,
364 /* R ord 82 0x52 */
365 0x01,
366 /* S ord 83 0x53 */
367 0x01, 0x01, 0x01, 0x01, 0x01,
368 0x01, 0x01, 0x01,
369 /* [ ord 91 0x5b */
370 0x01, 0x01, 0x01, 0x01, 0x01,
371 0x01,
372 /* a ord 97 0x61 */
373 0x02, 0x02, 0xff, 0x02, 0x02, 0x02, 0x02,
374 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
375 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
376 0x02, 0x02, 0x02,
377 /* { ord 123 0x7b */
378 0x01, 0x01, 0x01, 0x01, 0x22,
379 0x23, 0x24, 0x01, 0x25, 0x01, 0x01, 0x01, 0x01,
380 0x26, 0x01,
381 /* Scaron ord 138 0x8a */
382 0x01, 0x01, 0x03, 0x03, 0x01, 0x05,
383 0x27, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
384 0x28, 0x01, 0x02, 0x01, 0x04, 0x04, 0x02, 0x06,
385 /* nobreakspace ord 160 0xa0 */
386 0x02, 0x01, 0x01, 0x07, 0x01, 0x11, 0x01, 0x01,
387 0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x03,
388 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x29, 0x01,
389 /* cedilla ord 184 0xb8 */
390 0x01, 0x12, 0x06, 0x01, 0x05, 0x01, 0x06, 0x04,
391 0x03, 0x03, 0x05, 0x07, 0x09, 0x03, 0x03, 0x05,
392 0x01, 0x03, 0x09, 0x07, 0x05, 0x03, 0x05, 0x03,
393 /* Eth ord 208 0xd0 */
394 0x05, 0x03, 0x05, 0x03, 0x05, 0x09, 0x07, 0x01,
395 0x01, 0x05, 0x03, 0x09, 0x07, 0x03, 0x05, 0x01,
396 /* racute ord 224 0xe0 */
397 0x04, 0x04, 0x06, 0x08, 0x0a, 0x04, 0x04, 0x06,
398 0x02, 0x04, 0x0a, 0x08, 0x06, 0x04, 0x06, 0x04,
399 /* eth ord 240 0xf0 */
400 0x06, 0x04, 0x06, 0x04, 0x06, 0x0a, 0x08, 0x01,
401 0x02, 0x06, 0x04, 0x0a, 0x08, 0x04, 0x06, 0x01
404 struct wordvalue {
405 const uchar *word;
406 uchar pass1;
407 uchar pass2;
409 static struct wordvalue doubles[] = {
410 { (uchar*) "ch", 0xad, 0x03 },
411 { (uchar*) "c", 0xa6, 0x02 },
412 { (uchar*) "Ch", 0xad, 0x02 },
413 { (uchar*) "CH", 0xad, 0x01 },
414 { (uchar*) "C", 0xa6, 0x01 },
417 #define NEXT_CMP_VALUE(src, p, pass, value, len) \
418 while (1) { \
419 if (IS_END(p, src, len)) { \
420 if (pass == 0 && len > 0) { p= src; pass++; } \
421 else { value = 0; break; } \
423 value = ((pass == 0) ? _sort_order_win1250ch1[*p] \
424 : _sort_order_win1250ch2[*p]); \
425 if (value == 0xff) { \
426 int i; \
427 for (i = 0; i < (int) sizeof(doubles); i++) { \
428 const uchar *patt = doubles[i].word; \
429 const uchar *q = (const uchar *) p; \
430 while (*patt \
431 && !(IS_END(q, src, len)) \
432 && (*patt == *q)) { \
433 patt++; q++; \
435 if (!(*patt)) { \
436 value = (int)((pass == 0) \
437 ? doubles[i].pass1 \
438 : doubles[i].pass2); \
439 p = (const uchar *) q - 1; \
440 break; \
444 p++; \
445 break; \
448 #define IS_END(p, src, len) (((char *)p - (char *)src) >= (len))
450 static int my_strnncoll_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
451 const uchar *s1, size_t len1,
452 const uchar *s2, size_t len2,
453 my_bool s2_is_prefix)
455 int v1, v2;
456 const uchar *p1, * p2;
457 int pass1 = 0, pass2 = 0;
458 int diff;
460 if (s2_is_prefix && len1 > len2)
461 len1=len2;
463 p1 = s1; p2 = s2;
467 NEXT_CMP_VALUE(s1, p1, pass1, v1, (int)len1);
468 NEXT_CMP_VALUE(s2, p2, pass2, v2, (int)len2);
469 if ((diff = v1 - v2))
470 return diff;
471 } while (v1);
472 return 0;
477 TODO: Has to be fixed as strnncollsp in ctype-simple
480 static
481 int my_strnncollsp_win1250ch(CHARSET_INFO * cs,
482 const uchar *s, size_t slen,
483 const uchar *t, size_t tlen,
484 my_bool diff_if_only_endspace_difference
485 __attribute__((unused)))
487 for ( ; slen && s[slen-1] == ' ' ; slen--);
488 for ( ; tlen && t[tlen-1] == ' ' ; tlen--);
489 return my_strnncoll_win1250ch(cs,s,slen,t,tlen,0);
493 static size_t my_strnxfrm_win1250ch(CHARSET_INFO * cs __attribute__((unused)),
494 uchar *dest, size_t len,
495 const uchar *src, size_t srclen)
497 int value;
498 const uchar *p;
499 int pass = 0;
500 size_t totlen = 0;
501 p = src;
503 do {
504 NEXT_CMP_VALUE(src, p, pass, value, (int)srclen);
505 if (totlen <= len)
506 dest[totlen] = value;
507 totlen++;
508 } while (value) ;
509 if (len > totlen)
510 bfill(dest + totlen, len - totlen, ' ');
511 return len;
514 #undef IS_END
516 #ifdef REAL_MYSQL
518 static uchar NEAR like_range_prefix_min_win1250ch[]=
520 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
521 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
522 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
523 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
524 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
525 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
526 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
527 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
528 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
529 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
530 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
531 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
532 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
533 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
534 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
535 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
536 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
537 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
538 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
539 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
540 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
541 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
542 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
543 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
544 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
545 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
546 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
547 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
548 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
549 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
550 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
551 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
555 The letter "C" is a special case:
556 "CH" is sorted between "H" and "I".
557 prefix_max for "C" is "I": prefix_max[0x43] == 0x49
558 prefix_max for "c" is "i": prefix_max[0x63] == 0x69
559 For all other characters: prefix_max[i] == i
562 static uchar NEAR like_range_prefix_max_win1250ch[]=
564 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
565 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
566 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
567 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
568 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
569 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
570 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
571 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
572 0x40, 0x41, 0x42, 0x49, 0x44, 0x45, 0x46, 0x47,
573 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
574 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
575 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
576 0x60, 0x61, 0x62, 0x69, 0x64, 0x65, 0x66, 0x67,
577 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
578 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
579 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
580 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
581 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
582 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
583 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
584 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
585 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
586 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
587 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
588 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
589 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
590 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
591 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
592 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
593 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
594 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
595 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
598 #define min_sort_char '\x20'
599 #define max_sort_char '\xff'
602 ** Calculate min_str and max_str that ranges a LIKE string.
603 ** Arguments:
604 ** ptr Pointer to LIKE string.
605 ** ptr_length Length of LIKE string.
606 ** escape Escape character in LIKE. (Normally '\').
607 ** All escape characters should be removed from min_str and max_str
608 ** res_length Length of min_str and max_str.
609 ** min_str Smallest case sensitive string that ranges LIKE.
610 ** Should be space padded to res_length.
611 ** max_str Largest case sensitive string that ranges LIKE.
612 ** Normally padded with the biggest character sort value.
614 ** The function should return 0 if ok and 1 if the LIKE string can't be
615 ** optimized !
618 static my_bool
619 my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
620 const char *ptr, size_t ptr_length,
621 pbool escape, pbool w_one, pbool w_many,
622 size_t res_length,
623 char *min_str, char *max_str,
624 size_t *min_length, size_t *max_length)
627 int only_min_found= 1;
628 const char *end = ptr + ptr_length;
629 char *min_org = min_str;
630 char *min_end = min_str + res_length;
632 /* return 1; */
634 for (; ptr != end && min_str != min_end ; ptr++)
636 if (*ptr == escape && ptr+1 != end)
637 ptr++; /* Skip escape */
638 else if (*ptr == w_one || *ptr == w_many) /* '_' or '%' in SQL */
639 break;
640 *min_str= like_range_prefix_min_win1250ch[(uint) (uchar) (*ptr)];
641 if (*min_str != min_sort_char)
642 only_min_found= 0;
643 min_str++;
644 *max_str++= like_range_prefix_max_win1250ch[(uint) (uchar) (*ptr)];
647 if (cs->state & MY_CS_BINSORT)
648 *min_length= (size_t) (min_str - min_org);
649 else
651 /* 'a\0\0... is the smallest possible string */
652 *min_length= res_length;
654 /* a\ff\ff... is the biggest possible string */
655 *max_length= res_length;
657 while (min_str != min_end)
659 *min_str++ = min_sort_char;
660 *max_str++ = max_sort_char;
662 return (only_min_found);
666 static MY_COLLATION_HANDLER my_collation_czech_ci_handler =
668 NULL, /* init */
669 my_strnncoll_win1250ch,
670 my_strnncollsp_win1250ch,
671 my_strnxfrm_win1250ch,
672 my_strnxfrmlen_simple,
673 my_like_range_win1250ch,
674 my_wildcmp_8bit,
675 my_strcasecmp_8bit,
676 my_instr_simple,
677 my_hash_sort_simple,
678 my_propagate_simple
682 CHARSET_INFO my_charset_cp1250_czech_ci =
684 34,0,0, /* number */
685 MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT, /* state */
686 "cp1250", /* cs name */
687 "cp1250_czech_cs", /* name */
688 "", /* comment */
689 NULL, /* tailoring */
690 ctype_win1250ch,
691 to_lower_win1250ch,
692 to_upper_win1250ch,
693 sort_order_win1250ch,
694 NULL, /* contractions */
695 NULL, /* sort_order_big*/
696 tab_cp1250_uni, /* tab_to_uni */
697 idx_uni_cp1250, /* tab_from_uni */
698 my_unicase_default, /* caseinfo */
699 NULL, /* state_map */
700 NULL, /* ident_map */
701 2, /* strxfrm_multiply */
702 1, /* caseup_multiply */
703 1, /* casedn_multiply */
704 1, /* mbminlen */
705 1, /* mbmaxlen */
706 0, /* min_sort_char */
707 0, /* max_sort_char */
708 ' ', /* pad char */
709 0, /* escape_with_backslash_is_dangerous */
710 &my_charset_8bit_handler,
711 &my_collation_czech_ci_handler
715 #endif /* REAL_MYSQL */
717 #endif /* HAVE_CHARSET_cp1250 */