1 #include "dictP.h"
2
3 static const wint_t start [] = {
4 0,
5 48, 65, 97, 170, 181, 186, 192, 216,
6 248, 546, 592, 688, 699, 720, 736, 750,
7 837, 890, 902, 904, 908, 910, 931, 976,
8 986, 1024, 1164, 1223, 1227, 1232, 1272, 1329,
9 1369, 1377, 1488, 1520, 1569, 1600, 1632, 1649,
10 1749, 1765, 1776, 1808, 1810, 1920, 2309, 2365,
11 2384, 2392, 2406, 2437, 2447, 2451, 2474, 2482,
12 2486, 2524, 2527, 2534, 2565, 2575, 2579, 2602,
13 2610, 2613, 2616, 2649, 2654, 2662, 2674, 2693,
14 2701, 2703, 2707, 2730, 2738, 2741, 2749, 2768,
15 2784, 2790, 2821, 2831, 2835, 2858, 2866, 2870,
16 2877, 2908, 2911, 2918, 2949, 2958, 2962, 2969,
17 2972, 2974, 2979, 2984, 2990, 2999, 3047, 3077,
18 3086, 3090, 3114, 3125, 3168, 3174, 3205, 3214,
19 3218, 3242, 3253, 3294, 3296, 3302, 3333, 3342,
20 3346, 3370, 3424, 3430, 3461, 3482, 3507, 3517,
21 3520, 3585, 3632, 3648, 3655, 3664, 3713, 3716,
22 3719, 3722, 3725, 3732, 3737, 3745, 3749, 3751,
23 3754, 3757, 3762, 3773, 3776, 3782, 3792, 3804,
24 3840, 3872, 3904, 3913, 3976, 4096, 4131, 4137,
25 4160, 4176, 4256, 4304, 4352, 4447, 4520, 4608,
26 4616, 4680, 4682, 4688, 4696, 4698, 4704, 4744,
27 4746, 4752, 4784, 4786, 4792, 4800, 4802, 4808,
28 4816, 4824, 4848, 4880, 4882, 4888, 4896, 4936,
29 4969, 5024, 5121, 5743, 5761, 5792, 5870, 6016,
30 6112, 6160, 6176, 6272, 7680, 7840, 7936, 7960,
31 7968, 8008, 8016, 8025, 8027, 8029, 8031, 8064,
32 8118, 8126, 8130, 8134, 8144, 8150, 8160, 8178,
33 8182, 8319, 8450, 8455, 8458, 8469, 8473, 8484,
34 8486, 8488, 8495, 8499, 8544, 9372, 12293, 12321,
35 12337, 12344, 12353, 12445, 12449, 12540, 12549, 12593,
36 12704, 13312, 19968, 40960, 44032, 63744, 64256, 64275,
37 64285, 64287, 64298, 64312, 64318, 64320, 64323, 64326,
38 64467, 64848, 64914, 65008, 65136, 65140, 65142, 65296,
39 65313, 65345, 65382, 65474, 65482, 65490, 65498,
40
41 /* over BMP */
42 66304, 66352, 66560, 66600, 119808,119894,119966,119970,
43 119973,119977,119982,119995,119997,120002,120005,120071,
44 120077,120086,120094,120123,120128,120134,120138,120146,
45 120488,120514,120540,120572,120598,120630,120656,120688,
46 120714,120746,120772,120782,131072,194560,
47 };
48
49 static int count [] = {
50 0,
51 10, 26, 26, 1, 1, 1, 23, 31,
52 296, 18, 94, 9, 7, 2, 5, 1,
53 1, 1, 1, 3, 1, 20, 44, 8,
54 28, 130, 57, 2, 2, 38, 2, 38,
55 1, 39, 27, 3, 26, 11, 10, 99,
56 1, 2, 13, 1, 27, 38, 53, 1,
57 1, 10, 10, 8, 2, 22, 7, 1,
58 4, 2, 3, 12, 6, 2, 22, 7,
59 2, 2, 2, 4, 1, 10, 3, 7,
60 1, 3, 22, 7, 2, 5, 1, 1,
61 1, 10, 8, 2, 22, 7, 2, 4,
62 1, 2, 3, 10, 6, 3, 4, 2,
63 1, 2, 2, 3, 8, 3, 9, 8,
64 3, 23, 10, 5, 2, 10, 8, 3,
65 23, 10, 5, 1, 2, 10, 8, 3,
66 23, 16, 2, 10, 18, 24, 9, 1,
67 7, 46, 11, 6, 8, 10, 2, 1,
68 2, 1, 1, 4, 7, 3, 1, 1,
69 2, 4, 2, 1, 5, 1, 10, 2,
70 1, 10, 8, 34, 4, 34, 5, 2,
71 10, 6, 38, 39, 90, 68, 82, 7,
72 63, 1, 4, 7, 1, 4, 39, 1,
73 4, 31, 1, 4, 7, 1, 4, 7,
74 7, 23, 31, 1, 4, 7, 39, 19,
75 9, 85, 620, 8, 26, 75, 3, 52,
76 10, 10, 88, 41, 156, 90, 22, 6,
77 38, 6, 8, 1, 1, 1, 31, 53,
78 7, 1, 3, 7, 4, 6, 13, 3,
79 7, 1, 1, 1, 10, 1, 5, 1,
80 1, 6, 3, 7, 36, 78, 3, 9,
81 5, 3, 84, 2, 90, 3, 40, 94,
82 24, 6582, 20902, 1165, 11172, 302, 7, 5,
83 1, 10, 13, 5, 1, 2, 2, 108,
84 363, 64, 54, 12, 3, 1, 135, 10,
85 26, 26, 89, 6, 6, 6, 3,
86
87 /* over BMP */
88 31, 27, 38, 38, 85, 71, 2, 1,
89 2, 4, 12, 1, 4, 2, 65, 4,
90 8, 7, 28, 4, 5, 1, 7, 338,
91 25, 25, 31, 25, 31, 25, 31, 25,
92 31, 25, 6, 50, 42711, 542,
93 };
94
95 #define ARRAY_SIZE (sizeof (start) / sizeof (start [0]))
96
97 int iswalnum__ (wint_t wc);
98
iswalnum__(wint_t wc)99 int iswalnum__ (wint_t wc)
100 {
101 const wint_t *l = start;
102 const wint_t *r = start + ARRAY_SIZE;
103 const wint_t *s = NULL;
104
105 if (wc == WEOF)
106 return 0;
107
108 while (l < r) {
109 s = l + ((r - l) >> 1);
110
111 if (*s <= wc){
112 l = s + 1;
113 }else{
114 r = s;
115 }
116 }
117
118 --l;
119
120 if (wc < l [0] + count [l - start])
121 return 1;
122 else
123 return 0;
124 }
125