add logcat option to PRAGMA cipher_profile
[sqlcipher.git] / ext / fts5 / fts5_unicode2.c
blob3e97264fa804cc84308bade25011d07d7c3352ce
1 /*
2 ** 2012-05-25
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 ******************************************************************************
15 ** DO NOT EDIT THIS MACHINE GENERATED FILE.
19 #include <assert.h>
24 ** If the argument is a codepoint corresponding to a lowercase letter
25 ** in the ASCII range with a diacritic added, return the codepoint
26 ** of the ASCII letter only. For example, if passed 235 - "LATIN
27 ** SMALL LETTER E WITH DIAERESIS" - return 65 ("LATIN SMALL LETTER
28 ** E"). The resuls of passing a codepoint that corresponds to an
29 ** uppercase letter are undefined.
31 static int fts5_remove_diacritic(int c, int bComplex){
32 unsigned short aDia[] = {
33 0, 1797, 1848, 1859, 1891, 1928, 1940, 1995,
34 2024, 2040, 2060, 2110, 2168, 2206, 2264, 2286,
35 2344, 2383, 2472, 2488, 2516, 2596, 2668, 2732,
36 2782, 2842, 2894, 2954, 2984, 3000, 3028, 3336,
37 3456, 3696, 3712, 3728, 3744, 3766, 3832, 3896,
38 3912, 3928, 3944, 3968, 4008, 4040, 4056, 4106,
39 4138, 4170, 4202, 4234, 4266, 4296, 4312, 4344,
40 4408, 4424, 4442, 4472, 4488, 4504, 6148, 6198,
41 6264, 6280, 6360, 6429, 6505, 6529, 61448, 61468,
42 61512, 61534, 61592, 61610, 61642, 61672, 61688, 61704,
43 61726, 61784, 61800, 61816, 61836, 61880, 61896, 61914,
44 61948, 61998, 62062, 62122, 62154, 62184, 62200, 62218,
45 62252, 62302, 62364, 62410, 62442, 62478, 62536, 62554,
46 62584, 62604, 62640, 62648, 62656, 62664, 62730, 62766,
47 62830, 62890, 62924, 62974, 63032, 63050, 63082, 63118,
48 63182, 63242, 63274, 63310, 63368, 63390,
50 #define HIBIT ((unsigned char)0x80)
51 unsigned char aChar[] = {
52 '\0', 'a', 'c', 'e', 'i', 'n',
53 'o', 'u', 'y', 'y', 'a', 'c',
54 'd', 'e', 'e', 'g', 'h', 'i',
55 'j', 'k', 'l', 'n', 'o', 'r',
56 's', 't', 'u', 'u', 'w', 'y',
57 'z', 'o', 'u', 'a', 'i', 'o',
58 'u', 'u'|HIBIT, 'a'|HIBIT, 'g', 'k', 'o',
59 'o'|HIBIT, 'j', 'g', 'n', 'a'|HIBIT, 'a',
60 'e', 'i', 'o', 'r', 'u', 's',
61 't', 'h', 'a', 'e', 'o'|HIBIT, 'o',
62 'o'|HIBIT, 'y', '\0', '\0', '\0', '\0',
63 '\0', '\0', '\0', '\0', 'a', 'b',
64 'c'|HIBIT, 'd', 'd', 'e'|HIBIT, 'e', 'e'|HIBIT,
65 'f', 'g', 'h', 'h', 'i', 'i'|HIBIT,
66 'k', 'l', 'l'|HIBIT, 'l', 'm', 'n',
67 'o'|HIBIT, 'p', 'r', 'r'|HIBIT, 'r', 's',
68 's'|HIBIT, 't', 'u', 'u'|HIBIT, 'v', 'w',
69 'w', 'x', 'y', 'z', 'h', 't',
70 'w', 'y', 'a', 'a'|HIBIT, 'a'|HIBIT, 'a'|HIBIT,
71 'e', 'e'|HIBIT, 'e'|HIBIT, 'i', 'o', 'o'|HIBIT,
72 'o'|HIBIT, 'o'|HIBIT, 'u', 'u'|HIBIT, 'u'|HIBIT, 'y',
75 unsigned int key = (((unsigned int)c)<<3) | 0x00000007;
76 int iRes = 0;
77 int iHi = sizeof(aDia)/sizeof(aDia[0]) - 1;
78 int iLo = 0;
79 while( iHi>=iLo ){
80 int iTest = (iHi + iLo) / 2;
81 if( key >= aDia[iTest] ){
82 iRes = iTest;
83 iLo = iTest+1;
84 }else{
85 iHi = iTest-1;
88 assert( key>=aDia[iRes] );
89 if( bComplex==0 && (aChar[iRes] & 0x80) ) return c;
90 return (c > (aDia[iRes]>>3) + (aDia[iRes]&0x07)) ? c : ((int)aChar[iRes] & 0x7F);
95 ** Return true if the argument interpreted as a unicode codepoint
96 ** is a diacritical modifier character.
98 int sqlite3Fts5UnicodeIsdiacritic(int c){
99 unsigned int mask0 = 0x08029FDF;
100 unsigned int mask1 = 0x000361F8;
101 if( c<768 || c>817 ) return 0;
102 return (c < 768+32) ?
103 (mask0 & ((unsigned int)1 << (c-768))) :
104 (mask1 & ((unsigned int)1 << (c-768-32)));
109 ** Interpret the argument as a unicode codepoint. If the codepoint
110 ** is an upper case character that has a lower case equivalent,
111 ** return the codepoint corresponding to the lower case version.
112 ** Otherwise, return a copy of the argument.
114 ** The results are undefined if the value passed to this function
115 ** is less than zero.
117 int sqlite3Fts5UnicodeFold(int c, int eRemoveDiacritic){
118 /* Each entry in the following array defines a rule for folding a range
119 ** of codepoints to lower case. The rule applies to a range of nRange
120 ** codepoints starting at codepoint iCode.
122 ** If the least significant bit in flags is clear, then the rule applies
123 ** to all nRange codepoints (i.e. all nRange codepoints are upper case and
124 ** need to be folded). Or, if it is set, then the rule only applies to
125 ** every second codepoint in the range, starting with codepoint C.
127 ** The 7 most significant bits in flags are an index into the aiOff[]
128 ** array. If a specific codepoint C does require folding, then its lower
129 ** case equivalent is ((C + aiOff[flags>>1]) & 0xFFFF).
131 ** The contents of this array are generated by parsing the CaseFolding.txt
132 ** file distributed as part of the "Unicode Character Database". See
133 ** http://www.unicode.org for details.
135 static const struct TableEntry {
136 unsigned short iCode;
137 unsigned char flags;
138 unsigned char nRange;
139 } aEntry[] = {
140 {65, 14, 26}, {181, 64, 1}, {192, 14, 23},
141 {216, 14, 7}, {256, 1, 48}, {306, 1, 6},
142 {313, 1, 16}, {330, 1, 46}, {376, 116, 1},
143 {377, 1, 6}, {383, 104, 1}, {385, 50, 1},
144 {386, 1, 4}, {390, 44, 1}, {391, 0, 1},
145 {393, 42, 2}, {395, 0, 1}, {398, 32, 1},
146 {399, 38, 1}, {400, 40, 1}, {401, 0, 1},
147 {403, 42, 1}, {404, 46, 1}, {406, 52, 1},
148 {407, 48, 1}, {408, 0, 1}, {412, 52, 1},
149 {413, 54, 1}, {415, 56, 1}, {416, 1, 6},
150 {422, 60, 1}, {423, 0, 1}, {425, 60, 1},
151 {428, 0, 1}, {430, 60, 1}, {431, 0, 1},
152 {433, 58, 2}, {435, 1, 4}, {439, 62, 1},
153 {440, 0, 1}, {444, 0, 1}, {452, 2, 1},
154 {453, 0, 1}, {455, 2, 1}, {456, 0, 1},
155 {458, 2, 1}, {459, 1, 18}, {478, 1, 18},
156 {497, 2, 1}, {498, 1, 4}, {502, 122, 1},
157 {503, 134, 1}, {504, 1, 40}, {544, 110, 1},
158 {546, 1, 18}, {570, 70, 1}, {571, 0, 1},
159 {573, 108, 1}, {574, 68, 1}, {577, 0, 1},
160 {579, 106, 1}, {580, 28, 1}, {581, 30, 1},
161 {582, 1, 10}, {837, 36, 1}, {880, 1, 4},
162 {886, 0, 1}, {902, 18, 1}, {904, 16, 3},
163 {908, 26, 1}, {910, 24, 2}, {913, 14, 17},
164 {931, 14, 9}, {962, 0, 1}, {975, 4, 1},
165 {976, 140, 1}, {977, 142, 1}, {981, 146, 1},
166 {982, 144, 1}, {984, 1, 24}, {1008, 136, 1},
167 {1009, 138, 1}, {1012, 130, 1}, {1013, 128, 1},
168 {1015, 0, 1}, {1017, 152, 1}, {1018, 0, 1},
169 {1021, 110, 3}, {1024, 34, 16}, {1040, 14, 32},
170 {1120, 1, 34}, {1162, 1, 54}, {1216, 6, 1},
171 {1217, 1, 14}, {1232, 1, 88}, {1329, 22, 38},
172 {4256, 66, 38}, {4295, 66, 1}, {4301, 66, 1},
173 {7680, 1, 150}, {7835, 132, 1}, {7838, 96, 1},
174 {7840, 1, 96}, {7944, 150, 8}, {7960, 150, 6},
175 {7976, 150, 8}, {7992, 150, 8}, {8008, 150, 6},
176 {8025, 151, 8}, {8040, 150, 8}, {8072, 150, 8},
177 {8088, 150, 8}, {8104, 150, 8}, {8120, 150, 2},
178 {8122, 126, 2}, {8124, 148, 1}, {8126, 100, 1},
179 {8136, 124, 4}, {8140, 148, 1}, {8152, 150, 2},
180 {8154, 120, 2}, {8168, 150, 2}, {8170, 118, 2},
181 {8172, 152, 1}, {8184, 112, 2}, {8186, 114, 2},
182 {8188, 148, 1}, {8486, 98, 1}, {8490, 92, 1},
183 {8491, 94, 1}, {8498, 12, 1}, {8544, 8, 16},
184 {8579, 0, 1}, {9398, 10, 26}, {11264, 22, 47},
185 {11360, 0, 1}, {11362, 88, 1}, {11363, 102, 1},
186 {11364, 90, 1}, {11367, 1, 6}, {11373, 84, 1},
187 {11374, 86, 1}, {11375, 80, 1}, {11376, 82, 1},
188 {11378, 0, 1}, {11381, 0, 1}, {11390, 78, 2},
189 {11392, 1, 100}, {11499, 1, 4}, {11506, 0, 1},
190 {42560, 1, 46}, {42624, 1, 24}, {42786, 1, 14},
191 {42802, 1, 62}, {42873, 1, 4}, {42877, 76, 1},
192 {42878, 1, 10}, {42891, 0, 1}, {42893, 74, 1},
193 {42896, 1, 4}, {42912, 1, 10}, {42922, 72, 1},
194 {65313, 14, 26},
196 static const unsigned short aiOff[] = {
197 1, 2, 8, 15, 16, 26, 28, 32,
198 37, 38, 40, 48, 63, 64, 69, 71,
199 79, 80, 116, 202, 203, 205, 206, 207,
200 209, 210, 211, 213, 214, 217, 218, 219,
201 775, 7264, 10792, 10795, 23228, 23256, 30204, 54721,
202 54753, 54754, 54756, 54787, 54793, 54809, 57153, 57274,
203 57921, 58019, 58363, 61722, 65268, 65341, 65373, 65406,
204 65408, 65410, 65415, 65424, 65436, 65439, 65450, 65462,
205 65472, 65476, 65478, 65480, 65482, 65488, 65506, 65511,
206 65514, 65521, 65527, 65528, 65529,
209 int ret = c;
211 assert( sizeof(unsigned short)==2 && sizeof(unsigned char)==1 );
213 if( c<128 ){
214 if( c>='A' && c<='Z' ) ret = c + ('a' - 'A');
215 }else if( c<65536 ){
216 const struct TableEntry *p;
217 int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
218 int iLo = 0;
219 int iRes = -1;
221 assert( c>aEntry[0].iCode );
222 while( iHi>=iLo ){
223 int iTest = (iHi + iLo) / 2;
224 int cmp = (c - aEntry[iTest].iCode);
225 if( cmp>=0 ){
226 iRes = iTest;
227 iLo = iTest+1;
228 }else{
229 iHi = iTest-1;
233 assert( iRes>=0 && c>=aEntry[iRes].iCode );
234 p = &aEntry[iRes];
235 if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){
236 ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF;
237 assert( ret>0 );
240 if( eRemoveDiacritic ){
241 ret = fts5_remove_diacritic(ret, eRemoveDiacritic==2);
245 else if( c>=66560 && c<66600 ){
246 ret = c + 40;
249 return ret;
253 int sqlite3Fts5UnicodeCatParse(const char *zCat, u8 *aArray){
254 aArray[0] = 1;
255 switch( zCat[0] ){
256 case 'C':
257 switch( zCat[1] ){
258 case 'c': aArray[1] = 1; break;
259 case 'f': aArray[2] = 1; break;
260 case 'n': aArray[3] = 1; break;
261 case 's': aArray[4] = 1; break;
262 case 'o': aArray[31] = 1; break;
263 case '*':
264 aArray[1] = 1;
265 aArray[2] = 1;
266 aArray[3] = 1;
267 aArray[4] = 1;
268 aArray[31] = 1;
269 break;
270 default: return 1; }
271 break;
273 case 'L':
274 switch( zCat[1] ){
275 case 'l': aArray[5] = 1; break;
276 case 'm': aArray[6] = 1; break;
277 case 'o': aArray[7] = 1; break;
278 case 't': aArray[8] = 1; break;
279 case 'u': aArray[9] = 1; break;
280 case 'C': aArray[30] = 1; break;
281 case '*':
282 aArray[5] = 1;
283 aArray[6] = 1;
284 aArray[7] = 1;
285 aArray[8] = 1;
286 aArray[9] = 1;
287 aArray[30] = 1;
288 break;
289 default: return 1; }
290 break;
292 case 'M':
293 switch( zCat[1] ){
294 case 'c': aArray[10] = 1; break;
295 case 'e': aArray[11] = 1; break;
296 case 'n': aArray[12] = 1; break;
297 case '*':
298 aArray[10] = 1;
299 aArray[11] = 1;
300 aArray[12] = 1;
301 break;
302 default: return 1; }
303 break;
305 case 'N':
306 switch( zCat[1] ){
307 case 'd': aArray[13] = 1; break;
308 case 'l': aArray[14] = 1; break;
309 case 'o': aArray[15] = 1; break;
310 case '*':
311 aArray[13] = 1;
312 aArray[14] = 1;
313 aArray[15] = 1;
314 break;
315 default: return 1; }
316 break;
318 case 'P':
319 switch( zCat[1] ){
320 case 'c': aArray[16] = 1; break;
321 case 'd': aArray[17] = 1; break;
322 case 'e': aArray[18] = 1; break;
323 case 'f': aArray[19] = 1; break;
324 case 'i': aArray[20] = 1; break;
325 case 'o': aArray[21] = 1; break;
326 case 's': aArray[22] = 1; break;
327 case '*':
328 aArray[16] = 1;
329 aArray[17] = 1;
330 aArray[18] = 1;
331 aArray[19] = 1;
332 aArray[20] = 1;
333 aArray[21] = 1;
334 aArray[22] = 1;
335 break;
336 default: return 1; }
337 break;
339 case 'S':
340 switch( zCat[1] ){
341 case 'c': aArray[23] = 1; break;
342 case 'k': aArray[24] = 1; break;
343 case 'm': aArray[25] = 1; break;
344 case 'o': aArray[26] = 1; break;
345 case '*':
346 aArray[23] = 1;
347 aArray[24] = 1;
348 aArray[25] = 1;
349 aArray[26] = 1;
350 break;
351 default: return 1; }
352 break;
354 case 'Z':
355 switch( zCat[1] ){
356 case 'l': aArray[27] = 1; break;
357 case 'p': aArray[28] = 1; break;
358 case 's': aArray[29] = 1; break;
359 case '*':
360 aArray[27] = 1;
361 aArray[28] = 1;
362 aArray[29] = 1;
363 break;
364 default: return 1; }
365 break;
368 return 0;
371 static u16 aFts5UnicodeBlock[] = {
372 0, 1471, 1753, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
373 1760, 1760, 1760, 1760, 1760, 1763, 1765,
375 static u16 aFts5UnicodeMap[] = {
376 0, 32, 33, 36, 37, 40, 41, 42, 43, 44,
377 45, 46, 48, 58, 60, 63, 65, 91, 92, 93,
378 94, 95, 96, 97, 123, 124, 125, 126, 127, 160,
379 161, 162, 166, 167, 168, 169, 170, 171, 172, 173,
380 174, 175, 176, 177, 178, 180, 181, 182, 184, 185,
381 186, 187, 188, 191, 192, 215, 216, 223, 247, 248,
382 256, 312, 313, 329, 330, 377, 383, 385, 387, 388,
383 391, 394, 396, 398, 402, 403, 405, 406, 409, 412,
384 414, 415, 417, 418, 423, 427, 428, 431, 434, 436,
385 437, 440, 442, 443, 444, 446, 448, 452, 453, 454,
386 455, 456, 457, 458, 459, 460, 461, 477, 478, 496,
387 497, 498, 499, 500, 503, 505, 506, 564, 570, 572,
388 573, 575, 577, 580, 583, 584, 592, 660, 661, 688,
389 706, 710, 722, 736, 741, 748, 749, 750, 751, 768,
390 880, 884, 885, 886, 890, 891, 894, 900, 902, 903,
391 904, 908, 910, 912, 913, 931, 940, 975, 977, 978,
392 981, 984, 1008, 1012, 1014, 1015, 1018, 1020, 1021, 1072,
393 1120, 1154, 1155, 1160, 1162, 1217, 1231, 1232, 1329, 1369,
394 1370, 1377, 1417, 1418, 1423, 1425, 1470, 1471, 1472, 1473,
395 1475, 1476, 1478, 1479, 1488, 1520, 1523, 1536, 1542, 1545,
396 1547, 1548, 1550, 1552, 1563, 1566, 1568, 1600, 1601, 1611,
397 1632, 1642, 1646, 1648, 1649, 1748, 1749, 1750, 1757, 1758,
398 1759, 1765, 1767, 1769, 1770, 1774, 1776, 1786, 1789, 1791,
399 1792, 1807, 1808, 1809, 1810, 1840, 1869, 1958, 1969, 1984,
400 1994, 2027, 2036, 2038, 2039, 2042, 2048, 2070, 2074, 2075,
401 2084, 2085, 2088, 2089, 2096, 2112, 2137, 2142, 2208, 2210,
402 2276, 2304, 2307, 2308, 2362, 2363, 2364, 2365, 2366, 2369,
403 2377, 2381, 2382, 2384, 2385, 2392, 2402, 2404, 2406, 2416,
404 2417, 2418, 2425, 2433, 2434, 2437, 2447, 2451, 2474, 2482,
405 2486, 2492, 2493, 2494, 2497, 2503, 2507, 2509, 2510, 2519,
406 2524, 2527, 2530, 2534, 2544, 2546, 2548, 2554, 2555, 2561,
407 2563, 2565, 2575, 2579, 2602, 2610, 2613, 2616, 2620, 2622,
408 2625, 2631, 2635, 2641, 2649, 2654, 2662, 2672, 2674, 2677,
409 2689, 2691, 2693, 2703, 2707, 2730, 2738, 2741, 2748, 2749,
410 2750, 2753, 2759, 2761, 2763, 2765, 2768, 2784, 2786, 2790,
411 2800, 2801, 2817, 2818, 2821, 2831, 2835, 2858, 2866, 2869,
412 2876, 2877, 2878, 2879, 2880, 2881, 2887, 2891, 2893, 2902,
413 2903, 2908, 2911, 2914, 2918, 2928, 2929, 2930, 2946, 2947,
414 2949, 2958, 2962, 2969, 2972, 2974, 2979, 2984, 2990, 3006,
415 3008, 3009, 3014, 3018, 3021, 3024, 3031, 3046, 3056, 3059,
416 3065, 3066, 3073, 3077, 3086, 3090, 3114, 3125, 3133, 3134,
417 3137, 3142, 3146, 3157, 3160, 3168, 3170, 3174, 3192, 3199,
418 3202, 3205, 3214, 3218, 3242, 3253, 3260, 3261, 3262, 3263,
419 3264, 3270, 3271, 3274, 3276, 3285, 3294, 3296, 3298, 3302,
420 3313, 3330, 3333, 3342, 3346, 3389, 3390, 3393, 3398, 3402,
421 3405, 3406, 3415, 3424, 3426, 3430, 3440, 3449, 3450, 3458,
422 3461, 3482, 3507, 3517, 3520, 3530, 3535, 3538, 3542, 3544,
423 3570, 3572, 3585, 3633, 3634, 3636, 3647, 3648, 3654, 3655,
424 3663, 3664, 3674, 3713, 3716, 3719, 3722, 3725, 3732, 3737,
425 3745, 3749, 3751, 3754, 3757, 3761, 3762, 3764, 3771, 3773,
426 3776, 3782, 3784, 3792, 3804, 3840, 3841, 3844, 3859, 3860,
427 3861, 3864, 3866, 3872, 3882, 3892, 3893, 3894, 3895, 3896,
428 3897, 3898, 3899, 3900, 3901, 3902, 3904, 3913, 3953, 3967,
429 3968, 3973, 3974, 3976, 3981, 3993, 4030, 4038, 4039, 4046,
430 4048, 4053, 4057, 4096, 4139, 4141, 4145, 4146, 4152, 4153,
431 4155, 4157, 4159, 4160, 4170, 4176, 4182, 4184, 4186, 4190,
432 4193, 4194, 4197, 4199, 4206, 4209, 4213, 4226, 4227, 4229,
433 4231, 4237, 4238, 4239, 4240, 4250, 4253, 4254, 4256, 4295,
434 4301, 4304, 4347, 4348, 4349, 4682, 4688, 4696, 4698, 4704,
435 4746, 4752, 4786, 4792, 4800, 4802, 4808, 4824, 4882, 4888,
436 4957, 4960, 4969, 4992, 5008, 5024, 5120, 5121, 5741, 5743,
437 5760, 5761, 5787, 5788, 5792, 5867, 5870, 5888, 5902, 5906,
438 5920, 5938, 5941, 5952, 5970, 5984, 5998, 6002, 6016, 6068,
439 6070, 6071, 6078, 6086, 6087, 6089, 6100, 6103, 6104, 6107,
440 6108, 6109, 6112, 6128, 6144, 6150, 6151, 6155, 6158, 6160,
441 6176, 6211, 6212, 6272, 6313, 6314, 6320, 6400, 6432, 6435,
442 6439, 6441, 6448, 6450, 6451, 6457, 6464, 6468, 6470, 6480,
443 6512, 6528, 6576, 6593, 6600, 6608, 6618, 6622, 6656, 6679,
444 6681, 6686, 6688, 6741, 6742, 6743, 6744, 6752, 6753, 6754,
445 6755, 6757, 6765, 6771, 6783, 6784, 6800, 6816, 6823, 6824,
446 6912, 6916, 6917, 6964, 6965, 6966, 6971, 6972, 6973, 6978,
447 6979, 6981, 6992, 7002, 7009, 7019, 7028, 7040, 7042, 7043,
448 7073, 7074, 7078, 7080, 7082, 7083, 7084, 7086, 7088, 7098,
449 7142, 7143, 7144, 7146, 7149, 7150, 7151, 7154, 7164, 7168,
450 7204, 7212, 7220, 7222, 7227, 7232, 7245, 7248, 7258, 7288,
451 7294, 7360, 7376, 7379, 7380, 7393, 7394, 7401, 7405, 7406,
452 7410, 7412, 7413, 7424, 7468, 7531, 7544, 7545, 7579, 7616,
453 7676, 7680, 7830, 7838, 7936, 7944, 7952, 7960, 7968, 7976,
454 7984, 7992, 8000, 8008, 8016, 8025, 8027, 8029, 8031, 8033,
455 8040, 8048, 8064, 8072, 8080, 8088, 8096, 8104, 8112, 8118,
456 8120, 8124, 8125, 8126, 8127, 8130, 8134, 8136, 8140, 8141,
457 8144, 8150, 8152, 8157, 8160, 8168, 8173, 8178, 8182, 8184,
458 8188, 8189, 8192, 8203, 8208, 8214, 8216, 8217, 8218, 8219,
459 8221, 8222, 8223, 8224, 8232, 8233, 8234, 8239, 8240, 8249,
460 8250, 8251, 8255, 8257, 8260, 8261, 8262, 8263, 8274, 8275,
461 8276, 8277, 8287, 8288, 8298, 8304, 8305, 8308, 8314, 8317,
462 8318, 8319, 8320, 8330, 8333, 8334, 8336, 8352, 8400, 8413,
463 8417, 8418, 8421, 8448, 8450, 8451, 8455, 8456, 8458, 8459,
464 8462, 8464, 8467, 8468, 8469, 8470, 8472, 8473, 8478, 8484,
465 8485, 8486, 8487, 8488, 8489, 8490, 8494, 8495, 8496, 8500,
466 8501, 8505, 8506, 8508, 8510, 8512, 8517, 8519, 8522, 8523,
467 8524, 8526, 8527, 8528, 8544, 8579, 8581, 8585, 8592, 8597,
468 8602, 8604, 8608, 8609, 8611, 8612, 8614, 8615, 8622, 8623,
469 8654, 8656, 8658, 8659, 8660, 8661, 8692, 8960, 8968, 8972,
470 8992, 8994, 9001, 9002, 9003, 9084, 9085, 9115, 9140, 9180,
471 9186, 9216, 9280, 9312, 9372, 9450, 9472, 9655, 9656, 9665,
472 9666, 9720, 9728, 9839, 9840, 9985, 10088, 10089, 10090, 10091,
473 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10099, 10100, 10101,
474 10102, 10132, 10176, 10181, 10182, 10183, 10214, 10215, 10216, 10217,
475 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10240, 10496, 10627,
476 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637,
477 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647,
478 10648, 10649, 10712, 10713, 10714, 10715, 10716, 10748, 10749, 10750,
479 11008, 11056, 11077, 11079, 11088, 11264, 11312, 11360, 11363, 11365,
480 11367, 11374, 11377, 11378, 11380, 11381, 11383, 11388, 11390, 11393,
481 11394, 11492, 11493, 11499, 11503, 11506, 11513, 11517, 11518, 11520,
482 11559, 11565, 11568, 11631, 11632, 11647, 11648, 11680, 11688, 11696,
483 11704, 11712, 11720, 11728, 11736, 11744, 11776, 11778, 11779, 11780,
484 11781, 11782, 11785, 11786, 11787, 11788, 11789, 11790, 11799, 11800,
485 11802, 11803, 11804, 11805, 11806, 11808, 11809, 11810, 11811, 11812,
486 11813, 11814, 11815, 11816, 11817, 11818, 11823, 11824, 11834, 11904,
487 11931, 12032, 12272, 12288, 12289, 12292, 12293, 12294, 12295, 12296,
488 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12306,
489 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317,
490 12318, 12320, 12321, 12330, 12334, 12336, 12337, 12342, 12344, 12347,
491 12348, 12349, 12350, 12353, 12441, 12443, 12445, 12447, 12448, 12449,
492 12539, 12540, 12543, 12549, 12593, 12688, 12690, 12694, 12704, 12736,
493 12784, 12800, 12832, 12842, 12872, 12880, 12881, 12896, 12928, 12938,
494 12977, 12992, 13056, 13312, 19893, 19904, 19968, 40908, 40960, 40981,
495 40982, 42128, 42192, 42232, 42238, 42240, 42508, 42509, 42512, 42528,
496 42538, 42560, 42606, 42607, 42608, 42611, 42612, 42622, 42623, 42624,
497 42655, 42656, 42726, 42736, 42738, 42752, 42775, 42784, 42786, 42800,
498 42802, 42864, 42865, 42873, 42878, 42888, 42889, 42891, 42896, 42912,
499 43000, 43002, 43003, 43010, 43011, 43014, 43015, 43019, 43020, 43043,
500 43045, 43047, 43048, 43056, 43062, 43064, 43065, 43072, 43124, 43136,
501 43138, 43188, 43204, 43214, 43216, 43232, 43250, 43256, 43259, 43264,
502 43274, 43302, 43310, 43312, 43335, 43346, 43359, 43360, 43392, 43395,
503 43396, 43443, 43444, 43446, 43450, 43452, 43453, 43457, 43471, 43472,
504 43486, 43520, 43561, 43567, 43569, 43571, 43573, 43584, 43587, 43588,
505 43596, 43597, 43600, 43612, 43616, 43632, 43633, 43639, 43642, 43643,
506 43648, 43696, 43697, 43698, 43701, 43703, 43705, 43710, 43712, 43713,
507 43714, 43739, 43741, 43742, 43744, 43755, 43756, 43758, 43760, 43762,
508 43763, 43765, 43766, 43777, 43785, 43793, 43808, 43816, 43968, 44003,
509 44005, 44006, 44008, 44009, 44011, 44012, 44013, 44016, 44032, 55203,
510 55216, 55243, 55296, 56191, 56319, 57343, 57344, 63743, 63744, 64112,
511 64256, 64275, 64285, 64286, 64287, 64297, 64298, 64312, 64318, 64320,
512 64323, 64326, 64434, 64467, 64830, 64831, 64848, 64914, 65008, 65020,
513 65021, 65024, 65040, 65047, 65048, 65049, 65056, 65072, 65073, 65075,
514 65077, 65078, 65079, 65080, 65081, 65082, 65083, 65084, 65085, 65086,
515 65087, 65088, 65089, 65090, 65091, 65092, 65093, 65095, 65096, 65097,
516 65101, 65104, 65108, 65112, 65113, 65114, 65115, 65116, 65117, 65118,
517 65119, 65122, 65123, 65124, 65128, 65129, 65130, 65136, 65142, 65279,
518 65281, 65284, 65285, 65288, 65289, 65290, 65291, 65292, 65293, 65294,
519 65296, 65306, 65308, 65311, 65313, 65339, 65340, 65341, 65342, 65343,
520 65344, 65345, 65371, 65372, 65373, 65374, 65375, 65376, 65377, 65378,
521 65379, 65380, 65382, 65392, 65393, 65438, 65440, 65474, 65482, 65490,
522 65498, 65504, 65506, 65507, 65508, 65509, 65512, 65513, 65517, 65529,
523 65532, 0, 13, 40, 60, 63, 80, 128, 256, 263,
524 311, 320, 373, 377, 394, 400, 464, 509, 640, 672,
525 768, 800, 816, 833, 834, 842, 896, 927, 928, 968,
526 976, 977, 1024, 1064, 1104, 1184, 2048, 2056, 2058, 2103,
527 2108, 2111, 2135, 2136, 2304, 2326, 2335, 2336, 2367, 2432,
528 2494, 2560, 2561, 2565, 2572, 2576, 2581, 2585, 2616, 2623,
529 2624, 2640, 2656, 2685, 2687, 2816, 2873, 2880, 2904, 2912,
530 2936, 3072, 3680, 4096, 4097, 4098, 4099, 4152, 4167, 4178,
531 4198, 4224, 4226, 4227, 4272, 4275, 4279, 4281, 4283, 4285,
532 4286, 4304, 4336, 4352, 4355, 4391, 4396, 4397, 4406, 4416,
533 4480, 4482, 4483, 4531, 4534, 4543, 4545, 4549, 4560, 5760,
534 5803, 5804, 5805, 5806, 5808, 5814, 5815, 5824, 8192, 9216,
535 9328, 12288, 26624, 28416, 28496, 28497, 28559, 28563, 45056, 53248,
536 53504, 53545, 53605, 53607, 53610, 53613, 53619, 53627, 53635, 53637,
537 53644, 53674, 53678, 53760, 53826, 53829, 54016, 54112, 54272, 54298,
538 54324, 54350, 54358, 54376, 54402, 54428, 54430, 54434, 54437, 54441,
539 54446, 54454, 54459, 54461, 54469, 54480, 54506, 54532, 54535, 54541,
540 54550, 54558, 54584, 54587, 54592, 54598, 54602, 54610, 54636, 54662,
541 54688, 54714, 54740, 54766, 54792, 54818, 54844, 54870, 54896, 54922,
542 54952, 54977, 54978, 55003, 55004, 55010, 55035, 55036, 55061, 55062,
543 55068, 55093, 55094, 55119, 55120, 55126, 55151, 55152, 55177, 55178,
544 55184, 55209, 55210, 55235, 55236, 55242, 55246, 60928, 60933, 60961,
545 60964, 60967, 60969, 60980, 60985, 60987, 60994, 60999, 61001, 61003,
546 61005, 61009, 61012, 61015, 61017, 61019, 61021, 61023, 61025, 61028,
547 61031, 61036, 61044, 61049, 61054, 61056, 61067, 61089, 61093, 61099,
548 61168, 61440, 61488, 61600, 61617, 61633, 61649, 61696, 61712, 61744,
549 61808, 61926, 61968, 62016, 62032, 62208, 62256, 62263, 62336, 62368,
550 62406, 62432, 62464, 62528, 62530, 62713, 62720, 62784, 62800, 62971,
551 63045, 63104, 63232, 0, 42710, 42752, 46900, 46912, 47133, 63488,
552 1, 32, 256, 0, 65533,
554 static u16 aFts5UnicodeData[] = {
555 1025, 61, 117, 55, 117, 54, 50, 53, 57, 53,
556 49, 85, 333, 85, 121, 85, 841, 54, 53, 50,
557 56, 48, 56, 837, 54, 57, 50, 57, 1057, 61,
558 53, 151, 58, 53, 56, 58, 39, 52, 57, 34,
559 58, 56, 58, 57, 79, 56, 37, 85, 56, 47,
560 39, 51, 111, 53, 745, 57, 233, 773, 57, 261,
561 1822, 37, 542, 37, 1534, 222, 69, 73, 37, 126,
562 126, 73, 69, 137, 37, 73, 37, 105, 101, 73,
563 37, 73, 37, 190, 158, 37, 126, 126, 73, 37,
564 126, 94, 37, 39, 94, 69, 135, 41, 40, 37,
565 41, 40, 37, 41, 40, 37, 542, 37, 606, 37,
566 41, 40, 37, 126, 73, 37, 1886, 197, 73, 37,
567 73, 69, 126, 105, 37, 286, 2181, 39, 869, 582,
568 152, 390, 472, 166, 248, 38, 56, 38, 568, 3596,
569 158, 38, 56, 94, 38, 101, 53, 88, 41, 53,
570 105, 41, 73, 37, 553, 297, 1125, 94, 37, 105,
571 101, 798, 133, 94, 57, 126, 94, 37, 1641, 1541,
572 1118, 58, 172, 75, 1790, 478, 37, 2846, 1225, 38,
573 213, 1253, 53, 49, 55, 1452, 49, 44, 53, 76,
574 53, 76, 53, 44, 871, 103, 85, 162, 121, 85,
575 55, 85, 90, 364, 53, 85, 1031, 38, 327, 684,
576 333, 149, 71, 44, 3175, 53, 39, 236, 34, 58,
577 204, 70, 76, 58, 140, 71, 333, 103, 90, 39,
578 469, 34, 39, 44, 967, 876, 2855, 364, 39, 333,
579 1063, 300, 70, 58, 117, 38, 711, 140, 38, 300,
580 38, 108, 38, 172, 501, 807, 108, 53, 39, 359,
581 876, 108, 42, 1735, 44, 42, 44, 39, 106, 268,
582 138, 44, 74, 39, 236, 327, 76, 85, 333, 53,
583 38, 199, 231, 44, 74, 263, 71, 711, 231, 39,
584 135, 44, 39, 106, 140, 74, 74, 44, 39, 42,
585 71, 103, 76, 333, 71, 87, 207, 58, 55, 76,
586 42, 199, 71, 711, 231, 71, 71, 71, 44, 106,
587 76, 76, 108, 44, 135, 39, 333, 76, 103, 44,
588 76, 42, 295, 103, 711, 231, 71, 167, 44, 39,
589 106, 172, 76, 42, 74, 44, 39, 71, 76, 333,
590 53, 55, 44, 74, 263, 71, 711, 231, 71, 167,
591 44, 39, 42, 44, 42, 140, 74, 74, 44, 44,
592 42, 71, 103, 76, 333, 58, 39, 207, 44, 39,
593 199, 103, 135, 71, 39, 71, 71, 103, 391, 74,
594 44, 74, 106, 106, 44, 39, 42, 333, 111, 218,
595 55, 58, 106, 263, 103, 743, 327, 167, 39, 108,
596 138, 108, 140, 76, 71, 71, 76, 333, 239, 58,
597 74, 263, 103, 743, 327, 167, 44, 39, 42, 44,
598 170, 44, 74, 74, 76, 74, 39, 71, 76, 333,
599 71, 74, 263, 103, 1319, 39, 106, 140, 106, 106,
600 44, 39, 42, 71, 76, 333, 207, 58, 199, 74,
601 583, 775, 295, 39, 231, 44, 106, 108, 44, 266,
602 74, 53, 1543, 44, 71, 236, 55, 199, 38, 268,
603 53, 333, 85, 71, 39, 71, 39, 39, 135, 231,
604 103, 39, 39, 71, 135, 44, 71, 204, 76, 39,
605 167, 38, 204, 333, 135, 39, 122, 501, 58, 53,
606 122, 76, 218, 333, 335, 58, 44, 58, 44, 58,
607 44, 54, 50, 54, 50, 74, 263, 1159, 460, 42,
608 172, 53, 76, 167, 364, 1164, 282, 44, 218, 90,
609 181, 154, 85, 1383, 74, 140, 42, 204, 42, 76,
610 74, 76, 39, 333, 213, 199, 74, 76, 135, 108,
611 39, 106, 71, 234, 103, 140, 423, 44, 74, 76,
612 202, 44, 39, 42, 333, 106, 44, 90, 1225, 41,
613 41, 1383, 53, 38, 10631, 135, 231, 39, 135, 1319,
614 135, 1063, 135, 231, 39, 135, 487, 1831, 135, 2151,
615 108, 309, 655, 519, 346, 2727, 49, 19847, 85, 551,
616 61, 839, 54, 50, 2407, 117, 110, 423, 135, 108,
617 583, 108, 85, 583, 76, 423, 103, 76, 1671, 76,
618 42, 236, 266, 44, 74, 364, 117, 38, 117, 55,
619 39, 44, 333, 335, 213, 49, 149, 108, 61, 333,
620 1127, 38, 1671, 1319, 44, 39, 2247, 935, 108, 138,
621 76, 106, 74, 44, 202, 108, 58, 85, 333, 967,
622 167, 1415, 554, 231, 74, 333, 47, 1114, 743, 76,
623 106, 85, 1703, 42, 44, 42, 236, 44, 42, 44,
624 74, 268, 202, 332, 44, 333, 333, 245, 38, 213,
625 140, 42, 1511, 44, 42, 172, 42, 44, 170, 44,
626 74, 231, 333, 245, 346, 300, 314, 76, 42, 967,
627 42, 140, 74, 76, 42, 44, 74, 71, 333, 1415,
628 44, 42, 76, 106, 44, 42, 108, 74, 149, 1159,
629 266, 268, 74, 76, 181, 333, 103, 333, 967, 198,
630 85, 277, 108, 53, 428, 42, 236, 135, 44, 135,
631 74, 44, 71, 1413, 2022, 421, 38, 1093, 1190, 1260,
632 140, 4830, 261, 3166, 261, 265, 197, 201, 261, 265,
633 261, 265, 197, 201, 261, 41, 41, 41, 94, 229,
634 265, 453, 261, 264, 261, 264, 261, 264, 165, 69,
635 137, 40, 56, 37, 120, 101, 69, 137, 40, 120,
636 133, 69, 137, 120, 261, 169, 120, 101, 69, 137,
637 40, 88, 381, 162, 209, 85, 52, 51, 54, 84,
638 51, 54, 52, 277, 59, 60, 162, 61, 309, 52,
639 51, 149, 80, 117, 57, 54, 50, 373, 57, 53,
640 48, 341, 61, 162, 194, 47, 38, 207, 121, 54,
641 50, 38, 335, 121, 54, 50, 422, 855, 428, 139,
642 44, 107, 396, 90, 41, 154, 41, 90, 37, 105,
643 69, 105, 37, 58, 41, 90, 57, 169, 218, 41,
644 58, 41, 58, 41, 58, 137, 58, 37, 137, 37,
645 135, 37, 90, 69, 73, 185, 94, 101, 58, 57,
646 90, 37, 58, 527, 1134, 94, 142, 47, 185, 186,
647 89, 154, 57, 90, 57, 90, 57, 250, 57, 1018,
648 89, 90, 57, 58, 57, 1018, 8601, 282, 153, 666,
649 89, 250, 54, 50, 2618, 57, 986, 825, 1306, 217,
650 602, 1274, 378, 1935, 2522, 719, 5882, 57, 314, 57,
651 1754, 281, 3578, 57, 4634, 3322, 54, 50, 54, 50,
652 54, 50, 54, 50, 54, 50, 54, 50, 54, 50,
653 975, 1434, 185, 54, 50, 1017, 54, 50, 54, 50,
654 54, 50, 54, 50, 54, 50, 537, 8218, 4217, 54,
655 50, 54, 50, 54, 50, 54, 50, 54, 50, 54,
656 50, 54, 50, 54, 50, 54, 50, 54, 50, 54,
657 50, 2041, 54, 50, 54, 50, 1049, 54, 50, 8281,
658 1562, 697, 90, 217, 346, 1513, 1509, 126, 73, 69,
659 254, 105, 37, 94, 37, 94, 165, 70, 105, 37,
660 3166, 37, 218, 158, 108, 94, 149, 47, 85, 1221,
661 37, 37, 1799, 38, 53, 44, 743, 231, 231, 231,
662 231, 231, 231, 231, 231, 1036, 85, 52, 51, 52,
663 51, 117, 52, 51, 53, 52, 51, 309, 49, 85,
664 49, 53, 52, 51, 85, 52, 51, 54, 50, 54,
665 50, 54, 50, 54, 50, 181, 38, 341, 81, 858,
666 2874, 6874, 410, 61, 117, 58, 38, 39, 46, 54,
667 50, 54, 50, 54, 50, 54, 50, 54, 50, 90,
668 54, 50, 54, 50, 54, 50, 54, 50, 49, 54,
669 82, 58, 302, 140, 74, 49, 166, 90, 110, 38,
670 39, 53, 90, 2759, 76, 88, 70, 39, 49, 2887,
671 53, 102, 39, 1319, 3015, 90, 143, 346, 871, 1178,
672 519, 1018, 335, 986, 271, 58, 495, 1050, 335, 1274,
673 495, 2042, 8218, 39, 39, 2074, 39, 39, 679, 38,
674 36583, 1786, 1287, 198, 85, 8583, 38, 117, 519, 333,
675 71, 1502, 39, 44, 107, 53, 332, 53, 38, 798,
676 44, 2247, 334, 76, 213, 760, 294, 88, 478, 69,
677 2014, 38, 261, 190, 350, 38, 88, 158, 158, 382,
678 70, 37, 231, 44, 103, 44, 135, 44, 743, 74,
679 76, 42, 154, 207, 90, 55, 58, 1671, 149, 74,
680 1607, 522, 44, 85, 333, 588, 199, 117, 39, 333,
681 903, 268, 85, 743, 364, 74, 53, 935, 108, 42,
682 1511, 44, 74, 140, 74, 44, 138, 437, 38, 333,
683 85, 1319, 204, 74, 76, 74, 76, 103, 44, 263,
684 44, 42, 333, 149, 519, 38, 199, 122, 39, 42,
685 1543, 44, 39, 108, 71, 76, 167, 76, 39, 44,
686 39, 71, 38, 85, 359, 42, 76, 74, 85, 39,
687 70, 42, 44, 199, 199, 199, 231, 231, 1127, 74,
688 44, 74, 44, 74, 53, 42, 44, 333, 39, 39,
689 743, 1575, 36, 68, 68, 36, 63, 63, 11719, 3399,
690 229, 165, 39, 44, 327, 57, 423, 167, 39, 71,
691 71, 3463, 536, 11623, 54, 50, 2055, 1735, 391, 55,
692 58, 524, 245, 54, 50, 53, 236, 53, 81, 80,
693 54, 50, 54, 50, 54, 50, 54, 50, 54, 50,
694 54, 50, 54, 50, 54, 50, 85, 54, 50, 149,
695 112, 117, 149, 49, 54, 50, 54, 50, 54, 50,
696 117, 57, 49, 121, 53, 55, 85, 167, 4327, 34,
697 117, 55, 117, 54, 50, 53, 57, 53, 49, 85,
698 333, 85, 121, 85, 841, 54, 53, 50, 56, 48,
699 56, 837, 54, 57, 50, 57, 54, 50, 53, 54,
700 50, 85, 327, 38, 1447, 70, 999, 199, 199, 199,
701 103, 87, 57, 56, 58, 87, 58, 153, 90, 98,
702 90, 391, 839, 615, 71, 487, 455, 3943, 117, 1455,
703 314, 1710, 143, 570, 47, 410, 1466, 44, 935, 1575,
704 999, 143, 551, 46, 263, 46, 967, 53, 1159, 263,
705 53, 174, 1289, 1285, 2503, 333, 199, 39, 1415, 71,
706 39, 743, 53, 271, 711, 207, 53, 839, 53, 1799,
707 71, 39, 108, 76, 140, 135, 103, 871, 108, 44,
708 271, 309, 935, 79, 53, 1735, 245, 711, 271, 615,
709 271, 2343, 1007, 42, 44, 42, 1703, 492, 245, 655,
710 333, 76, 42, 1447, 106, 140, 74, 76, 85, 34,
711 149, 807, 333, 108, 1159, 172, 42, 268, 333, 149,
712 76, 42, 1543, 106, 300, 74, 135, 149, 333, 1383,
713 44, 42, 44, 74, 204, 42, 44, 333, 28135, 3182,
714 149, 34279, 18215, 2215, 39, 1482, 140, 422, 71, 7898,
715 1274, 1946, 74, 108, 122, 202, 258, 268, 90, 236,
716 986, 140, 1562, 2138, 108, 58, 2810, 591, 841, 837,
717 841, 229, 581, 841, 837, 41, 73, 41, 73, 137,
718 265, 133, 37, 229, 357, 841, 837, 73, 137, 265,
719 233, 837, 73, 137, 169, 41, 233, 837, 841, 837,
720 841, 837, 841, 837, 841, 837, 841, 837, 841, 901,
721 809, 57, 805, 57, 197, 809, 57, 805, 57, 197,
722 809, 57, 805, 57, 197, 809, 57, 805, 57, 197,
723 809, 57, 805, 57, 197, 94, 1613, 135, 871, 71,
724 39, 39, 327, 135, 39, 39, 39, 39, 39, 39,
725 103, 71, 39, 39, 39, 39, 39, 39, 71, 39,
726 135, 231, 135, 135, 39, 327, 551, 103, 167, 551,
727 89, 1434, 3226, 506, 474, 506, 506, 367, 1018, 1946,
728 1402, 954, 1402, 314, 90, 1082, 218, 2266, 666, 1210,
729 186, 570, 2042, 58, 5850, 154, 2010, 154, 794, 2266,
730 378, 2266, 3738, 39, 39, 39, 39, 39, 39, 17351,
731 34, 3074, 7692, 63, 63,
734 int sqlite3Fts5UnicodeCategory(u32 iCode) {
735 int iRes = -1;
736 int iHi;
737 int iLo;
738 int ret;
739 u16 iKey;
741 if( iCode>=(1<<20) ){
742 return 0;
744 iLo = aFts5UnicodeBlock[(iCode>>16)];
745 iHi = aFts5UnicodeBlock[1+(iCode>>16)];
746 iKey = (iCode & 0xFFFF);
747 while( iHi>iLo ){
748 int iTest = (iHi + iLo) / 2;
749 assert( iTest>=iLo && iTest<iHi );
750 if( iKey>=aFts5UnicodeMap[iTest] ){
751 iRes = iTest;
752 iLo = iTest+1;
753 }else{
754 iHi = iTest;
758 if( iRes<0 ) return 0;
759 if( iKey>=(aFts5UnicodeMap[iRes]+(aFts5UnicodeData[iRes]>>5)) ) return 0;
760 ret = aFts5UnicodeData[iRes] & 0x1F;
761 if( ret!=30 ) return ret;
762 return ((iKey - aFts5UnicodeMap[iRes]) & 0x01) ? 5 : 9;
765 void sqlite3Fts5UnicodeAscii(u8 *aArray, u8 *aAscii){
766 int i = 0;
767 int iTbl = 0;
768 while( i<128 ){
769 int bToken = aArray[ aFts5UnicodeData[iTbl] & 0x1F ];
770 int n = (aFts5UnicodeData[iTbl] >> 5) + i;
771 for(; i<128 && i<n; i++){
772 aAscii[i] = (u8)bToken;
774 iTbl++;
776 aAscii[0] = 0; /* 0x00 is never a token character */