9 static const unsigned char
11 #define from_UTF_16LE_00toFF_D8toDB_00toFF_offsets 0
15 #define from_UTF_16LE_00toFF_D8toDB_offsets 6
17 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
19 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
20 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
26 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
27 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34 #define from_UTF_16LE_00toFF_offsets 264
36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
43 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
50 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53 #define from_UTF_32LE_00toFF_00toD7_00_offsets 522
57 #define from_UTF_32LE_00toFF_00toD7_offsets 525
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62 #define from_UTF_32LE_00toFF_D8toDF_offsets 544
64 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
66 #define from_UTF_32LE_00toFF_offsets 562
68 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
70 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
72 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
73 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
74 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
75 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
76 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
79 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
81 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
82 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85 #define from_UTF_32BE_00_offsets 820
87 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
90 #define from_UTF_8_C2toDF_offsets 839
92 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
93 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
94 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
95 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
97 #define from_UTF_8_E0_offsets 905
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
102 #define from_UTF_8_ED_offsets 939
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
107 #define from_UTF_8_F0_offsets 973
109 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
110 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
111 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
113 #define from_UTF_8_F4_offsets 1023
115 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
117 #define from_UTF_8_offsets 1041
119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
125 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
127 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
128 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
129 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
130 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
131 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
132 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
133 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4,
137 static const unsigned int
139 #define from_UTF_16LE_00toFF_D8toDB_00toFF_infos WORDINDEX2INFO(0)
142 #define from_UTF_16LE_00toFF_D8toDB_00toFF WORDINDEX2INFO(2)
146 #define from_UTF_16LE_00toFF_D8toDB_infos WORDINDEX2INFO(4)
149 #define from_UTF_16LE_00toFF_D8toDB WORDINDEX2INFO(5)
153 #define from_UTF_16LE_00toFF_infos WORDINDEX2INFO(7)
157 #define from_UTF_16LE_00toFF WORDINDEX2INFO(10)
161 #define from_UTF_16LE_infos WORDINDEX2INFO(12)
164 #define from_UTF_16LE WORDINDEX2INFO(13)
165 from_UTF_16LE_00toFF_D8toDB_offsets,
168 #define from_UTF_32LE_00toFF_00toD7_00_infos WORDINDEX2INFO(15)
171 #define from_UTF_32LE_00toFF_00toD7_00 WORDINDEX2INFO(17)
175 #define from_UTF_32LE_00toFF_00toD7_infos WORDINDEX2INFO(19)
178 #define from_UTF_32LE_00toFF_00toD7 WORDINDEX2INFO(21)
182 #define from_UTF_32LE_00toFF_D8toDF_infos WORDINDEX2INFO(23)
183 INVALID, from_UTF_32LE_00toFF_00toD7_00,
185 #define from_UTF_32LE_00toFF_D8toDF WORDINDEX2INFO(25)
189 #define from_UTF_32LE_00toFF_infos WORDINDEX2INFO(27)
192 #define from_UTF_32LE_00toFF WORDINDEX2INFO(29)
196 #define from_UTF_32LE_infos WORDINDEX2INFO(31)
199 #define from_UTF_32LE WORDINDEX2INFO(32)
200 from_UTF_16LE_00toFF_D8toDB_offsets,
203 #define from_UTF_16BE_00toD7_infos WORDINDEX2INFO(34)
206 #define from_UTF_16BE_00toD7 WORDINDEX2INFO(35)
207 from_UTF_16LE_00toFF_D8toDB_offsets,
210 #define from_UTF_16BE_D8toDB_00toFF_infos WORDINDEX2INFO(37)
213 #define from_UTF_16BE_D8toDB_00toFF WORDINDEX2INFO(39)
214 from_UTF_16LE_00toFF_D8toDB_00toFF_offsets,
217 #define from_UTF_16BE_D8toDB_infos WORDINDEX2INFO(41)
220 #define from_UTF_16BE_D8toDB WORDINDEX2INFO(42)
221 from_UTF_16LE_00toFF_D8toDB_offsets,
224 #define from_UTF_16BE_infos WORDINDEX2INFO(44)
228 #define from_UTF_16BE WORDINDEX2INFO(47)
229 from_UTF_16LE_00toFF_offsets,
232 #define from_UTF_32BE_00_00_infos WORDINDEX2INFO(49)
235 #define from_UTF_32BE_00_00 WORDINDEX2INFO(51)
236 from_UTF_32LE_00toFF_offsets,
239 #define from_UTF_32BE_00_01to10_infos WORDINDEX2INFO(53)
240 from_UTF_16BE_00toD7,
242 #define from_UTF_32BE_00_01to10 WORDINDEX2INFO(54)
243 from_UTF_16LE_00toFF_D8toDB_offsets,
246 #define from_UTF_32BE_00_infos WORDINDEX2INFO(56)
250 #define from_UTF_32BE_00 WORDINDEX2INFO(59)
254 #define from_UTF_32BE_infos WORDINDEX2INFO(61)
257 #define from_UTF_32BE WORDINDEX2INFO(63)
258 from_UTF_32LE_00toFF_00toD7_00_offsets,
261 #define from_UTF_16_00toFF_infos WORDINDEX2INFO(65)
264 #define from_UTF_16_00toFF WORDINDEX2INFO(66)
265 from_UTF_16LE_00toFF_D8toDB_offsets,
268 #define from_UTF_16_infos WORDINDEX2INFO(68)
271 #define from_UTF_16 WORDINDEX2INFO(69)
272 from_UTF_16LE_00toFF_D8toDB_offsets,
275 #define from_UTF_32_00toFF_infos WORDINDEX2INFO(71)
278 #define from_UTF_32_00toFF WORDINDEX2INFO(72)
279 from_UTF_16LE_00toFF_D8toDB_offsets,
282 #define from_UTF_32_infos WORDINDEX2INFO(74)
285 #define from_UTF_32 WORDINDEX2INFO(75)
286 from_UTF_16LE_00toFF_D8toDB_offsets,
289 #define from_UTF_8_C2toDF WORDINDEX2INFO(77)
291 from_UTF_16LE_00toFF_D8toDB_00toFF_infos,
293 #define from_UTF_8_E0_infos WORDINDEX2INFO(79)
296 #define from_UTF_8_E0 WORDINDEX2INFO(81)
300 #define from_UTF_8_E1toEC WORDINDEX2INFO(83)
301 from_UTF_8_C2toDF_offsets,
304 #define from_UTF_8_ED WORDINDEX2INFO(85)
308 #define from_UTF_8_F0_infos WORDINDEX2INFO(87)
311 #define from_UTF_8_F0 WORDINDEX2INFO(89)
315 #define from_UTF_8_F1toF3 WORDINDEX2INFO(91)
316 from_UTF_8_C2toDF_offsets,
319 #define from_UTF_8_F4 WORDINDEX2INFO(93)
323 #define from_UTF_8_infos WORDINDEX2INFO(95)
330 #define from_UTF_8 WORDINDEX2INFO(104)
335 #define TRANSCODE_TABLE_INFO utf_16_32_byte_array, 1288, utf_16_32_word_array, 106, ((int)sizeof(unsigned int))
341 if (!s[0] && s[1]<0x80) {
345 else if (s[0]<0x08) {
346 o[0] = 0xC0 | (s[0]<<2) | (s[1]>>6);
347 o[1] = 0x80 | (s[1]&0x3F);
350 else if ((s[0]&0xF8)!=0xD8) {
351 o[0] = 0xE0 | (s[0]>>4);
352 o[1] = 0x80 | ((s[0]&0x0F)<<2) | (s[1]>>6);
353 o[2] = 0x80 | (s[1]&0x3F);
357 unsigned int u = (((s[0]&0x03)<<2)|(s[1]>>6)) + 1;
358 o[0] = 0xF0 | (u>>2);
359 o[1] = 0x80 | ((u&0x03)<<4) | ((s[1]>>2)&0x0F);
360 o[2] = 0x80 | ((s[1]&0x03)<<4) | ((s[2]&0x03)<<2) | (s[3]>>6);
361 o[3] = 0x80 | (s[3]&0x3F);
374 else if ((s[0]&0xE0)==0xC0) {
375 o[0] = (s[0]>>2)&0x07;
376 o[1] = ((s[0]&0x03)<<6) | (s[1]&0x3F);
379 else if ((s[0]&0xF0)==0xE0) {
380 o[0] = (s[0]<<4) | ((s[1]>>2)^0x20);
381 o[1] = (s[1]<<6) | (s[2]^0x80);
385 int w = (((s[0]&0x07)<<2) | ((s[1]>>4)&0x03)) - 1;
386 o[0] = 0xD8 | (w>>2);
387 o[1] = (w<<6) | ((s[1]&0x0F)<<2) | ((s[2]>>4)-8);
388 o[2] = 0xDC | ((s[2]>>2)&0x03);
389 o[3] = (s[2]<<6) | (s[3]&~0x80);
397 if (!s[1] && s[0]<0x80) {
401 else if (s[1]<0x08) {
402 o[0] = 0xC0 | (s[1]<<2) | (s[0]>>6);
403 o[1] = 0x80 | (s[0]&0x3F);
406 else if ((s[1]&0xF8)!=0xD8) {
407 o[0] = 0xE0 | (s[1]>>4);
408 o[1] = 0x80 | ((s[1]&0x0F)<<2) | (s[0]>>6);
409 o[2] = 0x80 | (s[0]&0x3F);
413 unsigned int u = (((s[1]&0x03)<<2)|(s[0]>>6)) + 1;
415 o[1] = 0x80 | ((u&0x03)<<4) | ((s[0]>>2)&0x0F);
416 o[2] = 0x80 | ((s[0]&0x03)<<4) | ((s[3]&0x03)<<2) | (s[2]>>6);
417 o[3] = 0x80 | (s[2]&0x3F);
430 else if ((s[0]&0xE0)==0xC0) {
431 o[1] = (s[0]>>2)&0x07;
432 o[0] = ((s[0]&0x03)<<6) | (s[1]&0x3F);
435 else if ((s[0]&0xF0)==0xE0) {
436 o[1] = (s[0]<<4) | ((s[1]>>2)^0x20);
437 o[0] = (s[1]<<6) | (s[2]^0x80);
441 int w = (((s[0]&0x07)<<2) | ((s[1]>>4)&0x03)) - 1;
442 o[1] = 0xD8 | (w>>2);
443 o[0] = (w<<6) | ((s[1]&0x0F)<<2) | ((s[2]>>4)-8);
444 o[3] = 0xDC | ((s[2]>>2)&0x03);
445 o[2] = (s[2]<<6) | (s[3]&~0x80);
454 if (s[2]==0 && s[3]<0x80) {
458 else if (s[2]<0x08) {
459 o[0] = 0xC0 | (s[2]<<2) | (s[3]>>6);
460 o[1] = 0x80 | (s[3]&0x3F);
464 o[0] = 0xE0 | (s[2]>>4);
465 o[1] = 0x80 | ((s[2]&0x0F)<<2) | (s[3]>>6);
466 o[2] = 0x80 | (s[3]&0x3F);
471 o[0] = 0xF0 | (s[1]>>2);
472 o[1] = 0x80 | ((s[1]&0x03)<<4) | (s[2]>>4);
473 o[2] = 0x80 | ((s[2]&0x0F)<<2) | (s[3]>>6);
474 o[3] = 0x80 | (s[3]&0x3F);
487 else if ((s[0]&0xE0)==0xC0) {
489 o[2] = (s[0]>>2)&0x07;
490 o[3] = ((s[0]&0x03)<<6) | (s[1]&0x3F);
492 else if ((s[0]&0xF0)==0xE0) {
494 o[2] = (s[0]<<4) | ((s[1]>>2)^0x20);
495 o[3] = (s[1]<<6) | (s[2]^0x80);
498 o[1] = ((s[0]&0x07)<<2) | ((s[1]>>4)&0x03);
499 o[2] = ((s[1]&0x0F)<<4) | ((s[2]>>2)&0x0F);
500 o[3] = ((s[2]&0x03)<<6) | (s[3]&0x3F);
509 if (s[1]==0 && s[0]<0x80) {
513 else if (s[1]<0x08) {
514 o[0] = 0xC0 | (s[1]<<2) | (s[0]>>6);
515 o[1] = 0x80 | (s[0]&0x3F);
519 o[0] = 0xE0 | (s[1]>>4);
520 o[1] = 0x80 | ((s[1]&0x0F)<<2) | (s[0]>>6);
521 o[2] = 0x80 | (s[0]&0x3F);
526 o[0] = 0xF0 | (s[2]>>2);
527 o[1] = 0x80 | ((s[2]&0x03)<<4) | (s[1]>>4);
528 o[2] = 0x80 | ((s[1]&0x0F)<<2) | (s[0]>>6);
529 o[3] = 0x80 | (s[0]&0x3F);
542 else if ((s[0]&0xE0)==0xC0) {
544 o[1] = (s[0]>>2)&0x07;
545 o[0] = ((s[0]&0x03)<<6) | (s[1]&0x3F);
547 else if ((s[0]&0xF0)==0xE0) {
549 o[1] = (s[0]<<4) | ((s[1]>>2)^0x20);
550 o[0] = (s[1]<<6) | (s[2]^0x80);
553 o[2] = ((s[0]&0x07)<<2) | ((s[1]>>4)&0x03);
554 o[1] = ((s[1]&0x0F)<<4) | ((s[2]>>2)&0x0F);
555 o[0] = ((s[2]&0x03)<<6) | (s[3]&0x3F);
563 unsigned char *sp = statep;
573 unsigned char *sp = statep;
576 if (s[0] == 0xFE && s[1] == 0xFF) {
580 else if (s[0] == 0xFF && s[1] == 0xFE) {
586 if (s[0] < 0xD8 || 0xDF < s[0]) {
589 else if (s[0] <= 0xDB) {
594 if (s[1] < 0xD8 || 0xDF < s[1]) {
597 else if (s[1] <= 0xDB) {
608 unsigned char *sp = statep;
621 unsigned char *sp = statep;
624 if (s[0] == 0 && s[1] == 0 && s[2] == 0xFE && s[3] == 0xFF) {
628 else if (s[0] == 0xFF && s[1] == 0xFE && s[2] == 0 && s[3] == 0) {
634 if (s[0] == 0 && ((0 < s[1] && s[1] <= 0x10) ||
635 (s[1] == 0 && (s[2] < 0xD8 || 0xDF < s[2]))))
639 if (s[3] == 0 && ((0 < s[2] && s[2] <= 0x10) ||
640 (s[2] == 0 && (s[1] < 0xD8 || 0xDF < s[1]))))
650 unsigned char *sp = statep;
661 fun_so_to_utf_16(
void *statep,
const unsigned char *s,
size_t l,
unsigned char *o,
size_t osize)
663 unsigned char *sp = statep;
674 fun_so_to_utf_32(
void *statep,
const unsigned char *s,
size_t l,
unsigned char *o,
size_t osize)
676 unsigned char *sp = statep;