1 /*
2 * Do not edit this file!
3 * This file is generated from:
4 * UnicodeData.txt (version 6.3.0)
5 */
6
7 #include <stddef.h>
8 #include <idn/utf32.h>
9 #include <idn/auto/width.h>
10
11 /*
12 * Width conversion tables.
13 */
14 #define WIDTH_BITS_0 9
15 #define WIDTH_BITS_1 7
16 #define WIDTH_BITS_2 5
17
18 static const unsigned short width_imap[] = {
19 272, 272, 272, 400, 272, 272, 272, 272,
20 272, 272, 272, 272, 272, 272, 272, 528,
21 272, 272, 272, 272, 272, 272, 272, 272,
22 272, 272, 272, 272, 272, 272, 272, 272,
23 272, 272, 272, 272, 272, 272, 272, 272,
24 272, 272, 272, 272, 272, 272, 272, 272,
25 272, 272, 272, 272, 272, 272, 272, 272,
26 272, 272, 272, 272, 272, 272, 272, 272,
27 272, 272, 272, 272, 272, 272, 272, 272,
28 272, 272, 272, 272, 272, 272, 272, 272,
29 272, 272, 272, 272, 272, 272, 272, 272,
30 272, 272, 272, 272, 272, 272, 272, 272,
31 272, 272, 272, 272, 272, 272, 272, 272,
32 272, 272, 272, 272, 272, 272, 272, 272,
33 272, 272, 272, 272, 272, 272, 272, 272,
34 272, 272, 272, 272, 272, 272, 272, 272,
35 272, 272, 272, 272, 272, 272, 272, 272,
36 272, 272, 272, 272, 272, 272, 272, 272,
37 272, 272, 272, 272, 272, 272, 272, 272,
38 272, 272, 272, 272, 272, 272, 272, 272,
39 272, 272, 272, 272, 272, 272, 272, 272,
40 272, 272, 272, 272, 272, 272, 272, 272,
41 272, 272, 272, 272, 272, 272, 272, 272,
42 272, 272, 272, 272, 272, 272, 272, 272,
43 272, 272, 272, 272, 272, 272, 272, 272,
44 272, 272, 272, 272, 272, 272, 272, 272,
45 272, 272, 272, 272, 272, 272, 272, 272,
46 272, 272, 272, 272, 272, 272, 272, 272,
47 272, 272, 272, 272, 272, 272, 272, 272,
48 272, 272, 272, 272, 272, 272, 272, 272,
49 272, 272, 272, 272, 272, 272, 272, 272,
50 272, 272, 272, 272, 272, 272, 272, 272,
51 272, 272, 272, 272, 272, 272, 272, 272,
52 272, 272, 272, 272, 272, 272, 272, 272,
53 0, 0, 0, 0, 0, 0, 0, 0,
54 0, 0, 0, 0, 0, 0, 0, 0,
55 0, 0, 0, 0, 0, 0, 0, 0,
56 0, 0, 0, 0, 0, 0, 0, 0,
57 0, 0, 0, 0, 0, 0, 0, 0,
58 0, 0, 0, 0, 0, 0, 0, 0,
59 0, 0, 0, 0, 0, 0, 0, 0,
60 0, 0, 0, 0, 0, 0, 0, 0,
61 0, 0, 0, 0, 0, 0, 0, 0,
62 0, 0, 0, 0, 0, 0, 0, 0,
63 0, 0, 0, 0, 0, 0, 0, 0,
64 0, 0, 0, 0, 0, 0, 0, 0,
65 0, 0, 0, 0, 0, 0, 0, 0,
66 0, 0, 0, 0, 0, 0, 0, 0,
67 0, 0, 0, 0, 0, 0, 0, 0,
68 0, 0, 0, 0, 0, 0, 0, 0,
69 1, 0, 0, 0, 0, 0, 0, 0,
70 0, 0, 0, 0, 0, 0, 0, 0,
71 0, 0, 0, 0, 0, 0, 0, 0,
72 0, 0, 0, 0, 0, 0, 0, 0,
73 0, 0, 0, 0, 0, 0, 0, 0,
74 0, 0, 0, 0, 0, 0, 0, 0,
75 0, 0, 0, 0, 0, 0, 0, 0,
76 0, 0, 0, 0, 0, 0, 0, 0,
77 0, 0, 0, 0, 0, 0, 0, 0,
78 0, 0, 0, 0, 0, 0, 0, 0,
79 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 0, 0, 0, 0, 0, 0,
81 0, 0, 0, 0, 0, 0, 0, 0,
82 0, 0, 0, 0, 0, 0, 0, 0,
83 0, 0, 0, 0, 0, 0, 0, 0,
84 0, 0, 0, 0, 0, 0, 0, 0,
85 0, 0, 0, 0, 0, 0, 0, 0,
86 0, 0, 0, 0, 0, 0, 0, 0,
87 0, 0, 0, 0, 0, 0, 0, 0,
88 0, 0, 0, 0, 0, 0, 0, 0,
89 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 0, 0, 0, 0,
92 0, 0, 0, 0, 0, 0, 0, 0,
93 0, 0, 0, 0, 0, 0, 0, 0,
94 0, 0, 0, 0, 0, 0, 0, 0,
95 0, 0, 0, 0, 0, 0, 0, 0,
96 0, 0, 0, 0, 0, 0, 0, 0,
97 0, 0, 0, 0, 0, 0, 0, 0,
98 0, 0, 0, 0, 0, 0, 0, 0,
99 0, 0, 0, 0, 0, 0, 0, 0,
100 2, 3, 4, 5, 6, 7, 8, 9,
101 };
102
103 static const struct {
104 unsigned short tbl[32];
105 } width_table[] = {
106 {{
107 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0,
111 }},
112 {{
113 32, 0, 0, 0, 0, 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0,
115 0, 0, 0, 0, 0, 0, 0, 0,
116 0, 0, 0, 0, 0, 0, 0, 0,
117 }},
118 {{
119 0, 33, 34, 35, 36, 37, 38, 39,
120 40, 41, 42, 43, 44, 45, 46, 47,
121 48, 49, 50, 51, 52, 53, 54, 55,
122 56, 57, 58, 59, 60, 61, 62, 63,
123 }},
124 {{
125 64, 65, 66, 67, 68, 69, 70, 71,
126 72, 73, 74, 75, 76, 77, 78, 79,
127 80, 81, 82, 83, 84, 85, 86, 87,
128 88, 89, 90, 91, 92, 93, 94, 95,
129 }},
130 {{
131 96, 97, 98, 99, 100, 101, 102, 103,
132 104, 105, 106, 107, 108, 109, 110, 111,
133 112, 113, 114, 115, 116, 117, 118, 119,
134 120, 121, 122, 123, 124, 125, 126, 10629,
135 }},
136 {{
137 10630, 12290, 12300, 12301, 12289, 12539, 12530, 12449,
138 12451, 12453, 12455, 12457, 12515, 12517, 12519, 12483,
139 12540, 12450, 12452, 12454, 12456, 12458, 12459, 12461,
140 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477,
141 }},
142 {{
143 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492,
144 12493, 12494, 12495, 12498, 12501, 12504, 12507, 12510,
145 12511, 12512, 12513, 12514, 12516, 12518, 12520, 12521,
146 12522, 12523, 12524, 12525, 12527, 12531, 12441, 12442,
147 }},
148 {{
149 12644, 12593, 12594, 12595, 12596, 12597, 12598, 12599,
150 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607,
151 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615,
152 12616, 12617, 12618, 12619, 12620, 12621, 12622, 0,
153 }},
154 {{
155 0, 0, 12623, 12624, 12625, 12626, 12627, 12628,
156 0, 0, 12629, 12630, 12631, 12632, 12633, 12634,
157 0, 0, 12635, 12636, 12637, 12638, 12639, 12640,
158 0, 0, 12641, 12642, 12643, 0, 0, 0,
159 }},
160 {{
161 162, 163, 172, 175, 166, 165, 8361, 0,
162 9474, 8592, 8593, 8594, 8595, 9632, 9675, 0,
163 0, 0, 0, 0, 0, 0, 0, 0,
164 0, 0, 0, 0, 0, 0, 0, 0,
165 }},
166 };
167
168 /*
169 * Table accessor.
170 */
171 unsigned long
idn__sparsemap_getwidth(unsigned long v)172 idn__sparsemap_getwidth(unsigned long v) {
173 int idx0, idx1, idx2;
174
175 if (v > UTF32_MAX)
176 return (0);
177 idx0 = v >> (WIDTH_BITS_1 + WIDTH_BITS_2);
178 idx1 = (v >> WIDTH_BITS_2) & ((1 << WIDTH_BITS_1) - 1);
179 idx2 = v & ((1 << WIDTH_BITS_2) - 1);
180 return (unsigned long) width_table[width_imap[width_imap[idx0] + idx1]].tbl[idx2];
181 }
182