68 -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
69 -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
70 -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, 63,-1,-1,-1,
71 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
72 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
73 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
74 -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
75 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
106static char *
utf7_to_utf8(
const char *u7,
size_t u7len,
char **u8,
size_t *u8len)
116 for (; u7len; u7++, u7len--)
123 if (u7len && (*u7 ==
'-'))
131 for (; u7len; u7++, u7len--)
133 if ((*u7 & 0x80) || ((b =
Index64u[(
int) *u7]) == -1))
145 if ((0x20 <= ch) && (ch < 0x7f))
154 *p++ = 0xc0 | (ch >> 6);
155 *p++ = 0x80 | (ch & 0x3f);
160 if ((ch & ~0x3ff) == 0xd800)
169 if ((ch & ~0x3ff) == 0xdc00)
174 ch = ((pair1 - 0xd800) << 10) + (ch - 0xdc00) + 0x10000;
182 *p++ = 0xe0 | (ch >> 12);
183 *p++ = 0x80 | ((ch >> 6) & 0x3f);
184 *p++ = 0x80 | (ch & 0x3f);
188 *p++ = 0xf0 | (ch >> 18);
189 *p++ = 0x80 | ((ch >> 12) & 0x3f);
190 *p++ = 0x80 | ((ch >> 6) & 0x3f);
191 *p++ = 0x80 | (ch & 0x3f);
196 ch = (b << (16 + k)) & 0xffff;
205 if (!u7len || (*u7 !=
'-'))
210 if ((u7len > 2) && (u7[1] ==
'&') && (u7[2] !=
'-'))
216 else if ((*u7 < 0x20) || (*u7 >= 0x7f))