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