forked from cheusov/dictd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtowlower.c
212 lines (203 loc) · 10.3 KB
/
towlower.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include "dictP.h"
static const wint_t char_from [] = {
65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 192, 193, 194, 195, 196,
197, 198, 199, 200, 201, 202, 203, 204,
205, 206, 207, 208, 209, 210, 211, 212,
213, 214, 216, 217, 218, 219, 220, 221,
222, 256, 258, 260, 262, 264, 266, 268,
270, 272, 274, 276, 278, 280, 282, 284,
286, 288, 290, 292, 294, 296, 298, 300,
302, 304, 306, 308, 310, 313, 315, 317,
319, 321, 323, 325, 327, 330, 332, 334,
336, 338, 340, 342, 344, 346, 348, 350,
352, 354, 356, 358, 360, 362, 364, 366,
368, 370, 372, 374, 376, 377, 379, 381,
385, 386, 388, 390, 391, 393, 394, 395,
398, 399, 400, 401, 403, 404, 406, 407,
408, 412, 413, 415, 416, 418, 420, 422,
423, 425, 428, 430, 431, 433, 434, 435,
437, 439, 440, 444, 452, 453, 455, 456,
458, 459, 461, 463, 465, 467, 469, 471,
473, 475, 478, 480, 482, 484, 486, 488,
490, 492, 494, 497, 498, 500, 502, 503,
504, 506, 508, 510, 512, 514, 516, 518,
520, 522, 524, 526, 528, 530, 532, 534,
536, 538, 540, 542, 546, 548, 550, 552,
554, 556, 558, 560, 562, 902, 904, 905,
906, 908, 910, 911, 913, 914, 915, 916,
917, 918, 919, 920, 921, 922, 923, 924,
925, 926, 927, 928, 929, 931, 932, 933,
934, 935, 936, 937, 938, 939, 986, 988,
990, 992, 994, 996, 998, 1000, 1002, 1004,
1006, 1012, 1024, 1025, 1026, 1027, 1028, 1029,
1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061,
1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
1070, 1071, 1120, 1122, 1124, 1126, 1128, 1130,
1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146,
1148, 1150, 1152, 1164, 1166, 1168, 1170, 1172,
1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188,
1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204,
1206, 1208, 1210, 1212, 1214, 1217, 1219, 1223,
1227, 1232, 1234, 1236, 1238, 1240, 1242, 1244,
1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260,
1262, 1264, 1266, 1268, 1272, 1329, 1330, 1331,
1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339,
1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347,
1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
1364, 1365, 1366, 7680, 7682, 7684, 7686, 7688,
7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704,
7706, 7708, 7710, 7712, 7714, 7716, 7718, 7720,
7722, 7724, 7726, 7728, 7730, 7732, 7734, 7736,
7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752,
7754, 7756, 7758, 7760, 7762, 7764, 7766, 7768,
7770, 7772, 7774, 7776, 7778, 7780, 7782, 7784,
7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800,
7802, 7804, 7806, 7808, 7810, 7812, 7814, 7816,
7818, 7820, 7822, 7824, 7826, 7828, 7840, 7842,
7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858,
7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874,
7876, 7878, 7880, 7882, 7884, 7886, 7888, 7890,
7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906,
7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922,
7924, 7926, 7928, 7944, 7945, 7946, 7947, 7948,
7949, 7950, 7951, 7960, 7961, 7962, 7963, 7964,
7965, 7976, 7977, 7978, 7979, 7980, 7981, 7982,
7983, 7992, 7993, 7994, 7995, 7996, 7997, 7998,
7999, 8008, 8009, 8010, 8011, 8012, 8013, 8025,
8027, 8029, 8031, 8040, 8041, 8042, 8043, 8044,
8045, 8046, 8047, 8072, 8073, 8074, 8075, 8076,
8077, 8078, 8079, 8088, 8089, 8090, 8091, 8092,
8093, 8094, 8095, 8104, 8105, 8106, 8107, 8108,
8109, 8110, 8111, 8120, 8121, 8122, 8123, 8124,
8136, 8137, 8138, 8139, 8140, 8152, 8153, 8154,
8155, 8168, 8169, 8170, 8171, 8172, 8184, 8185,
8186, 8187, 8188, 8486, 8490, 8491, 8544, 8545,
8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553,
8554, 8555, 8556, 8557, 8558, 8559, 9398, 9399,
9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407,
9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415,
9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423,
65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320,
65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328,
65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336,
65337, 65338,
};
static wint_t char_to [] = {
97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 224, 225, 226, 227, 228,
229, 230, 231, 232, 233, 234, 235, 236,
237, 238, 239, 240, 241, 242, 243, 244,
245, 246, 248, 249, 250, 251, 252, 253,
254, 257, 259, 261, 263, 265, 267, 269,
271, 273, 275, 277, 279, 281, 283, 285,
287, 289, 291, 293, 295, 297, 299, 301,
303, 105, 307, 309, 311, 314, 316, 318,
320, 322, 324, 326, 328, 331, 333, 335,
337, 339, 341, 343, 345, 347, 349, 351,
353, 355, 357, 359, 361, 363, 365, 367,
369, 371, 373, 375, 255, 378, 380, 382,
595, 387, 389, 596, 392, 598, 599, 396,
477, 601, 603, 402, 608, 611, 617, 616,
409, 623, 626, 629, 417, 419, 421, 640,
424, 643, 429, 648, 432, 650, 651, 436,
438, 658, 441, 445, 454, 454, 457, 457,
460, 460, 462, 464, 466, 468, 470, 472,
474, 476, 479, 481, 483, 485, 487, 489,
491, 493, 495, 499, 499, 501, 405, 447,
505, 507, 509, 511, 513, 515, 517, 519,
521, 523, 525, 527, 529, 531, 533, 535,
537, 539, 541, 543, 547, 549, 551, 553,
555, 557, 559, 561, 563, 940, 941, 942,
943, 972, 973, 974, 945, 946, 947, 948,
949, 950, 951, 952, 953, 954, 955, 956,
957, 958, 959, 960, 961, 963, 964, 965,
966, 967, 968, 969, 970, 971, 987, 989,
991, 993, 995, 997, 999, 1001, 1003, 1005,
1007, 952, 1104, 1105, 1106, 1107, 1108, 1109,
1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
1118, 1119, 1072, 1073, 1074, 1075, 1076, 1077,
1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093,
1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
1102, 1103, 1121, 1123, 1125, 1127, 1129, 1131,
1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147,
1149, 1151, 1153, 1165, 1167, 1169, 1171, 1173,
1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189,
1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205,
1207, 1209, 1211, 1213, 1215, 1218, 1220, 1224,
1228, 1233, 1235, 1237, 1239, 1241, 1243, 1245,
1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261,
1263, 1265, 1267, 1269, 1273, 1377, 1378, 1379,
1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387,
1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395,
1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
1412, 1413, 1414, 7681, 7683, 7685, 7687, 7689,
7691, 7693, 7695, 7697, 7699, 7701, 7703, 7705,
7707, 7709, 7711, 7713, 7715, 7717, 7719, 7721,
7723, 7725, 7727, 7729, 7731, 7733, 7735, 7737,
7739, 7741, 7743, 7745, 7747, 7749, 7751, 7753,
7755, 7757, 7759, 7761, 7763, 7765, 7767, 7769,
7771, 7773, 7775, 7777, 7779, 7781, 7783, 7785,
7787, 7789, 7791, 7793, 7795, 7797, 7799, 7801,
7803, 7805, 7807, 7809, 7811, 7813, 7815, 7817,
7819, 7821, 7823, 7825, 7827, 7829, 7841, 7843,
7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859,
7861, 7863, 7865, 7867, 7869, 7871, 7873, 7875,
7877, 7879, 7881, 7883, 7885, 7887, 7889, 7891,
7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907,
7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923,
7925, 7927, 7929, 7936, 7937, 7938, 7939, 7940,
7941, 7942, 7943, 7952, 7953, 7954, 7955, 7956,
7957, 7968, 7969, 7970, 7971, 7972, 7973, 7974,
7975, 7984, 7985, 7986, 7987, 7988, 7989, 7990,
7991, 8000, 8001, 8002, 8003, 8004, 8005, 8017,
8019, 8021, 8023, 8032, 8033, 8034, 8035, 8036,
8037, 8038, 8039, 8064, 8065, 8066, 8067, 8068,
8069, 8070, 8071, 8080, 8081, 8082, 8083, 8084,
8085, 8086, 8087, 8096, 8097, 8098, 8099, 8100,
8101, 8102, 8103, 8112, 8113, 8048, 8049, 8115,
8050, 8051, 8052, 8053, 8131, 8144, 8145, 8054,
8055, 8160, 8161, 8058, 8059, 8165, 8056, 8057,
8060, 8061, 8179, 969, 107, 229, 8560, 8561,
8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569,
8570, 8571, 8572, 8573, 8574, 8575, 9424, 9425,
9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433,
9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441,
9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449,
65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352,
65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360,
65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368,
65369, 65370,
};
#define ARRAY_SIZE (sizeof (char_from) / sizeof (char_from [0]))
extern wint_t towlower__ (wint_t wc);
wint_t towlower__ (wint_t wc)
{
const wint_t *l = char_from;
const wint_t *r = char_from + ARRAY_SIZE;
const wint_t *s = NULL;
while (l < r) {
s = l + ((r - l) >> 1);
if (*s < wc){
l = s + 1;
}else{
r = s;
}
}
if (l == char_from + ARRAY_SIZE)
return wc;
if (wc == *l)
return char_to [l - char_from];
else
return wc;
}