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)
114 for (; u7len; u7++, u7len--)
121 if (u7len && (*u7 ==
'-'))
129 for (; u7len; u7++, u7len--)
131 if ((*u7 & 0x80) || ((b =
Index64u[(
int) *u7]) == -1))
143 if ((0x20 <= ch) && (ch < 0x7f))
152 *p++ = 0xc0 | (ch >> 6);
153 *p++ = 0x80 | (ch & 0x3f);
158 if ((ch & ~0x3ff) == 0xd800)
167 if ((ch & ~0x3ff) == 0xdc00)
172 ch = ((pair1 - 0xd800) << 10) + (ch - 0xdc00) + 0x10000;
180 *p++ = 0xe0 | (ch >> 12);
181 *p++ = 0x80 | ((ch >> 6) & 0x3f);
182 *p++ = 0x80 | (ch & 0x3f);
186 *p++ = 0xf0 | (ch >> 18);
187 *p++ = 0x80 | ((ch >> 12) & 0x3f);
188 *p++ = 0x80 | ((ch >> 6) & 0x3f);
189 *p++ = 0x80 | (ch & 0x3f);
194 ch = (b << (16 + k)) & 0xffff;
203 if (!u7len || (*u7 !=
'-'))
208 if ((u7len > 2) && (u7[1] ==
'&') && (u7[2] !=
'-'))
214 else if ((*u7 < 0x20) || (*u7 >= 0x7f))