39 #include "my_global.h"
43 #ifdef HAVE_CHARSET_cp1250
46 static uint16 tab_cp1250_uni[256]={
47 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
48 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
49 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
50 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
51 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
52 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
53 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
54 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
55 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
56 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
57 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
58 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
59 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
60 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
61 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
62 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
63 0x20AC, 0,0x201A, 0,0x201E,0x2026,0x2020,0x2021,
64 0,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
65 0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
66 0,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
67 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
68 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
69 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
70 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
71 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
72 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
73 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
74 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
75 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
76 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
77 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
78 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
83 static uchar tab_uni_cp1250_plane00[]={
84 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
85 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
86 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
87 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
88 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
89 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
90 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
91 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
92 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
93 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
94 0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0xA8,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00,
95 0xB0,0xB1,0x00,0x00,0xB4,0xB5,0xB6,0xB7,0xB8,0x00,0x00,0xBB,0x00,0x00,0x00,0x00,
96 0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00,
97 0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF,
98 0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00,
99 0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD};
102 static uchar tab_uni_cp1250_plane01[]={
103 0xC3,0xE3,0xA5,0xB9,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0,
104 0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,
105 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
106 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xBC,0xBE,0x00,0x00,0xA3,
107 0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5,
108 0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0x8C,0x9C,0x00,0x00,0xAA,0xBA,0x8A,0x9A,
109 0xDE,0xFE,0x8D,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB,
110 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x9F,0xAF,0xBF,0x8E,0x9E};
113 static uchar tab_uni_cp1250_plane20[]={
114 0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95,
115 0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00,
116 0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
120 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
121 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
122 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
123 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};
126 static uchar tab_uni_cp1250_plane02[]={
127 0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
128 0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD};
131 static uchar tab_uni_cp1250_plane21[]={
136 {0x0000,0x00FD,tab_uni_cp1250_plane00},
137 {0x0102,0x017E,tab_uni_cp1250_plane01},
138 {0x2013,0x20AC,tab_uni_cp1250_plane20},
139 {0x02C7,0x02DD,tab_uni_cp1250_plane02},
140 {0x2122,0x2122,tab_uni_cp1250_plane21},
145 static uchar ctype_win1250ch[] = {
147 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
148 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20,
149 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
150 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
151 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
152 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
153 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
154 0x84, 0x84, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
155 0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01,
156 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
157 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
158 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
159 0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02,
160 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
161 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
162 0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, 0x20,
163 0x20, 0x20, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10,
164 0x20, 0x10, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
165 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
166 0x20, 0x10, 0x02, 0x10, 0x02, 0x02, 0x02, 0x02,
167 0x48, 0x10, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01,
168 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x10, 0x01,
169 0x10, 0x10, 0x10, 0x02, 0x10, 0x10, 0x10, 0x10,
170 0x10, 0x02, 0x02, 0x10, 0x01, 0x10, 0x02, 0x02,
171 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
172 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
173 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
174 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
175 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
176 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
177 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10,
178 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10
181 static uchar to_lower_win1250ch[] = {
182 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
183 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
184 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
185 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
186 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
187 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
188 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
189 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
190 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
191 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
192 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
193 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
194 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
195 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
196 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
197 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
198 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
199 0x88, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f,
200 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
201 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
202 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xb9, 0xa6, 0xdf,
203 0xa8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf,
204 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
205 0xb8, 0xb9, 0xba, 0xbb, 0xbe, 0xbd, 0xbe, 0xbf,
206 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
207 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
208 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
209 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
210 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
211 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
212 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
213 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
216 static uchar to_upper_win1250ch[] = {
217 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
218 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
219 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
220 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
221 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
222 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
223 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
224 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
225 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
226 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
227 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
228 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
229 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
230 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
231 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
232 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
233 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
234 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
235 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
236 0x98, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f,
237 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
238 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
239 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7,
240 0xb8, 0xa5, 0xaa, 0xbb, 0xbc, 0xbd, 0xbc, 0xaf,
241 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
242 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
243 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
244 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xa7,
245 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
246 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
247 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
248 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff
253 static uchar sort_order_win1250ch[] = {
254 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
255 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
256 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
257 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
258 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
259 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
260 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
261 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
262 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
263 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
264 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
265 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
266 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
267 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
268 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
269 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
272 static uchar _sort_order_win1250ch1[] = {
273 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
274 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
275 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
276 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
278 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
279 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91,
281 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
284 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1,
289 0xff, 0xa8, 0xa9, 0xaa, 0xab,
290 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
295 0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
298 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
301 0xa4, 0xa5, 0xff, 0xa8, 0xa9, 0xaa, 0xab,
302 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
303 0xb5, 0xb6, 0xb7, 0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
306 0xca, 0xcb, 0xcc, 0xcd, 0x81,
307 0x81, 0x81, 0xce, 0x81, 0xcf, 0xd0, 0xd1, 0xd2,
310 0xba, 0xd4, 0xb9, 0xbc, 0xc3, 0xc2,
311 0x81, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
312 0x81, 0xdc, 0xba, 0xdd, 0xb9, 0xbc, 0xc3, 0xc2,
314 0x82, 0xde, 0xdf, 0xb1, 0xe0, 0xa4, 0xe1, 0xe2,
315 0xe3, 0xe4, 0xb9, 0xe5, 0xe6, 0xe7, 0xe8, 0xc2,
316 0xe9, 0xea, 0xeb, 0xb1, 0xed, 0xee, 0x81, 0xef,
318 0xf0, 0xa4, 0xb9, 0xf1, 0xb1, 0xf2, 0xb1, 0xc2,
319 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
320 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
322 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf3,
323 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xbb,
325 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
326 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
328 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf4,
329 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xf5
332 static uchar _sort_order_win1250ch2[] = {
333 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
334 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,
335 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
336 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,
338 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
339 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
341 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
344 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
349 0xff, 0x01, 0x01, 0x01, 0x01,
350 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
355 0x01, 0x01, 0x01, 0x01, 0x01,
358 0x01, 0x01, 0x01, 0x01, 0x01,
361 0x02, 0x02, 0xff, 0x02, 0x02, 0x02, 0x02,
362 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
363 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
366 0x01, 0x01, 0x01, 0x01, 0x22,
367 0x23, 0x24, 0x01, 0x25, 0x01, 0x01, 0x01, 0x01,
370 0x01, 0x01, 0x03, 0x03, 0x01, 0x05,
371 0x27, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
372 0x28, 0x01, 0x02, 0x01, 0x04, 0x04, 0x02, 0x06,
374 0x02, 0x01, 0x01, 0x07, 0x01, 0x11, 0x01, 0x01,
375 0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x03,
376 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x29, 0x01,
378 0x01, 0x12, 0x06, 0x01, 0x05, 0x01, 0x06, 0x04,
379 0x03, 0x03, 0x05, 0x07, 0x09, 0x03, 0x03, 0x05,
380 0x01, 0x03, 0x09, 0x07, 0x05, 0x03, 0x05, 0x03,
382 0x05, 0x03, 0x05, 0x03, 0x05, 0x09, 0x07, 0x01,
383 0x01, 0x05, 0x03, 0x09, 0x07, 0x03, 0x05, 0x01,
385 0x04, 0x04, 0x06, 0x08, 0x0a, 0x04, 0x04, 0x06,
386 0x02, 0x04, 0x0a, 0x08, 0x06, 0x04, 0x06, 0x04,
388 0x06, 0x04, 0x06, 0x04, 0x06, 0x0a, 0x08, 0x01,
389 0x02, 0x06, 0x04, 0x0a, 0x08, 0x04, 0x06, 0x01
397 static struct wordvalue doubles[] = {
398 { (uchar*)
"ch", 0xad, 0x03 },
399 { (uchar*)
"c", 0xa6, 0x02 },
400 { (uchar*)
"Ch", 0xad, 0x02 },
401 { (uchar*)
"CH", 0xad, 0x01 },
402 { (uchar*)
"C", 0xa6, 0x01 },
405 #define NEXT_CMP_VALUE(src, p, pass, value, len) \
407 if (IS_END(p, src, len)) { \
408 if (pass == 0 && len > 0) { p= src; pass++; } \
409 else { value = 0; break; } \
411 value = ((pass == 0) ? _sort_order_win1250ch1[*p] \
412 : _sort_order_win1250ch2[*p]); \
413 if (value == 0xff) { \
415 for (i = 0; i < (int) sizeof(doubles); i++) { \
416 const uchar *patt = doubles[i].word; \
417 const uchar *q = (const uchar *) p; \
419 && !(IS_END(q, src, len)) \
420 && (*patt == *q)) { \
424 value = (int)((pass == 0) \
426 : doubles[i].pass2); \
427 p = (const uchar *) q - 1; \
436 #define IS_END(p, src, len) (((char *)p - (char *)src) >= (len))
438 static int my_strnncoll_win1250ch(
const CHARSET_INFO *cs
439 __attribute__((unused)),
440 const uchar *s1,
size_t len1,
441 const uchar *s2,
size_t len2,
442 my_bool s2_is_prefix)
445 const uchar *p1, * p2;
446 int pass1 = 0, pass2 = 0;
449 if (s2_is_prefix && len1 > len2)
456 NEXT_CMP_VALUE(s1, p1, pass1, v1, (
int)len1);
457 NEXT_CMP_VALUE(s2, p2, pass2, v2, (
int)len2);
458 if ((diff = v1 - v2))
471 const uchar *s,
size_t slen,
472 const uchar *t,
size_t tlen,
473 my_bool diff_if_only_endspace_difference
474 __attribute__((unused)))
476 for ( ; slen && s[slen-1] ==
' ' ; slen--);
477 for ( ; tlen && t[tlen-1] ==
' ' ; tlen--);
478 return my_strnncoll_win1250ch(cs,s,slen,t,tlen,0);
483 my_strnxfrm_win1250ch(
const CHARSET_INFO *cs __attribute__((unused)),
484 uchar *dest,
size_t len,
485 uint nweights_arg __attribute__((unused)),
486 const uchar *src,
size_t srclen, uint
flags)
499 NEXT_CMP_VALUE(src, p, pass, value, (
int)srclen);
502 if (totlen <= len && ((1 << pass) & flags))
503 dest[totlen++] = value;
505 if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && len > totlen)
507 memset(dest + totlen, 0x00, len - totlen);
516 static uchar like_range_prefix_min_win1250ch[]=
518 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
519 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
520 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
521 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
522 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
523 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
524 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
525 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
526 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
527 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
528 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
529 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
530 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
531 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
532 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
533 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
534 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
535 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
536 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
537 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
538 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
539 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
540 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
541 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
542 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
543 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
544 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
545 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
546 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
547 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
548 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
549 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
560 static uchar like_range_prefix_max_win1250ch[]=
562 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
563 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
564 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
565 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
566 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
567 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
568 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
569 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
570 0x40, 0x41, 0x42, 0x49, 0x44, 0x45, 0x46, 0x47,
571 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
572 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
573 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
574 0x60, 0x61, 0x62, 0x69, 0x64, 0x65, 0x66, 0x67,
575 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
576 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
577 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
578 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
579 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
580 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
581 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
582 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
583 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
584 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
585 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
586 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
587 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
588 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
589 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
590 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
591 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
592 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
593 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
596 #define min_sort_char '\x20'
597 #define max_sort_char '\xff'
617 my_like_range_win1250ch(
const CHARSET_INFO *cs __attribute__((unused)),
618 const char *ptr,
size_t ptr_length,
619 pbool escape, pbool w_one, pbool w_many,
621 char *min_str,
char *max_str,
622 size_t *min_length,
size_t *max_length)
625 int only_min_found= 1;
626 const char *end = ptr + ptr_length;
627 char *min_org = min_str;
628 char *min_end = min_str + res_length;
632 for (; ptr != end && min_str != min_end ; ptr++)
634 if (*ptr == escape && ptr+1 != end)
636 else if (*ptr == w_one || *ptr == w_many)
638 *min_str= like_range_prefix_min_win1250ch[(uint) (uchar) (*ptr)];
639 if (*min_str != min_sort_char)
642 *max_str++= like_range_prefix_max_win1250ch[(uint) (uchar) (*ptr)];
645 if (cs->state & MY_CS_BINSORT)
646 *min_length= (size_t) (min_str - min_org);
650 *min_length= res_length;
653 *max_length= res_length;
655 while (min_str != min_end)
657 *min_str++ = min_sort_char;
658 *max_str++ = max_sort_char;
660 return (only_min_found);
667 my_strnncoll_win1250ch,
668 my_strnncollsp_win1250ch,
669 my_strnxfrm_win1250ch,
670 my_strnxfrmlen_simple,
671 my_like_range_win1250ch,
683 MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT,
691 sort_order_win1250ch,
709 &my_charset_8bit_handler,
710 &my_collation_czech_ci_handler