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