Lines Matching +full:cs +full:- +full:2
3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
14 * 2. Redistributions in binary form must reproduce the above copyright
52 /* ----------------------------------------------------------------------
60 * iso-8859-1 (ESC , A) 00000000 00000000 00000000 1xxxxxxx
71 * reserved for UCS4 co-existence (UCS4 is 31bit encoding thanks to mohta bit)
77 #define CS94MULTI (2U)
92 /* need 3 bits to hold -1, 0, ..., 3 */
126 #define _CEI_TO_EI(_cei_) (&(_cei_)->ei)
127 #define _CEI_TO_STATE(_cei_, _func_) (_cei_)->states.s_##_func_
135 (!((_ps_)->flags & _ISO2022STATE_FLAG_INITIALIZED))
138 #define _ISO2022INVALID (wchar_t)-1
189 getcs(const char * __restrict p, _ISO2022Charset * __restrict cs) in getcs() argument
193 cs->final = (unsigned char)(p[3] & 0xff); in getcs()
194 cs->interm = '\0'; in getcs()
195 cs->vers = '\0'; in getcs()
196 cs->type = CS94MULTI; in getcs()
198 cs->final = (unsigned char)(p[3] & 0xff); in getcs()
199 cs->interm = '\0'; in getcs()
200 cs->vers = '\0'; in getcs()
201 cs->type = CS96MULTI; in getcs()
202 } else if (!strncmp(p, "94", 2) && p[2] && !p[3]) { in getcs()
203 cs->final = (unsigned char)(p[2] & 0xff); in getcs()
204 cs->interm = '\0'; in getcs()
205 cs->vers = '\0'; in getcs()
206 cs->type = CS94; in getcs()
207 } else if (!strncmp(p, "96", 2) && p[2] && !p[3]) { in getcs()
208 cs->final = (unsigned char )(p[2] & 0xff); in getcs()
209 cs->interm = '\0'; in getcs()
210 cs->vers = '\0'; in getcs()
211 cs->type = CS96; in getcs()
221 #define _PARSEFAIL 2
227 _ISO2022Charset cs, *p; in get_recommend() local
233 if (getcs(&token[2], &cs) == 0) in get_recommend()
235 else if (!strcmp(&token[2], "94")) { in get_recommend()
236 cs.final = (unsigned char)(token[4]); in get_recommend()
237 cs.interm = '\0'; in get_recommend()
238 cs.vers = '\0'; in get_recommend()
239 cs.type = CS94; in get_recommend()
240 } else if (!strcmp(&token[2], "96")) { in get_recommend()
241 cs.final = (unsigned char)(token[4]); in get_recommend()
242 cs.interm = '\0'; in get_recommend()
243 cs.vers = '\0'; in get_recommend()
244 cs.type = CS96; in get_recommend()
245 } else if (!strcmp(&token[2], "94$")) { in get_recommend()
246 cs.final = (unsigned char)(token[5]); in get_recommend()
247 cs.interm = '\0'; in get_recommend()
248 cs.vers = '\0'; in get_recommend()
249 cs.type = CS94MULTI; in get_recommend()
250 } else if (!strcmp(&token[2], "96$")) { in get_recommend()
251 cs.final = (unsigned char)(token[5]); in get_recommend()
252 cs.interm = '\0'; in get_recommend()
253 cs.vers = '\0'; in get_recommend()
254 cs.type = CS96MULTI; in get_recommend()
258 i = token[0] - '0'; in get_recommend()
259 if (!ei->recommend[i]) in get_recommend()
260 ei->recommend[i] = malloc(sizeof(_ISO2022Charset)); in get_recommend()
262 p = reallocarray(ei->recommend[i], ei->recommendsize[i] + 1, in get_recommend()
266 ei->recommend[i] = p; in get_recommend()
268 if (!ei->recommend[i]) in get_recommend()
270 ei->recommendsize[i]++; in get_recommend()
272 (ei->recommend[i] + (ei->recommendsize[i] - 1))->final = cs.final; in get_recommend()
273 (ei->recommend[i] + (ei->recommendsize[i] - 1))->interm = cs.interm; in get_recommend()
274 (ei->recommend[i] + (ei->recommendsize[i] - 1))->vers = cs.vers; in get_recommend()
275 (ei->recommend[i] + (ei->recommendsize[i] - 1))->type = cs.type; in get_recommend()
284 _ISO2022Charset cs; in get_initg() local
291 if (getcs(&token[6], &cs) != 0) in get_initg()
294 ei->initg[token[4] - '0'].type = cs.type; in get_initg()
295 ei->initg[token[4] - '0'].final = cs.final; in get_initg()
296 ei->initg[token[4] - '0'].interm = cs.interm; in get_initg()
297 ei->initg[token[4] - '0'].vers = cs.vers; in get_initg()
307 ei->maxcharset = 1; in get_max()
309 ei->maxcharset = 2; in get_max()
311 ei->maxcharset = 3; in get_max()
349 ei->flags |= tags[i].flag; in get_flags()
376 ei->maxcharset = 0; in _citrus_ISO2022_parse_variable()
378 ei->recommend[i] = NULL; in _citrus_ISO2022_parse_variable()
379 ei->recommendsize[i] = 0; in _citrus_ISO2022_parse_variable()
381 ei->flags = 0; in _citrus_ISO2022_parse_variable()
392 len = e - v; in _citrus_ISO2022_parse_variable()
418 free(ei->recommend[0]); in _citrus_ISO2022_parse_variable()
419 free(ei->recommend[1]); in _citrus_ISO2022_parse_variable()
420 free(ei->recommend[2]); in _citrus_ISO2022_parse_variable()
421 free(ei->recommend[3]); in _citrus_ISO2022_parse_variable()
434 s->gl = 0; in _citrus_ISO2022_init_state()
435 s->gr = (ei->flags & F_8BIT) ? 1 : -1; in _citrus_ISO2022_init_state()
438 if (ei->initg[i].final) { in _citrus_ISO2022_init_state()
439 s->g[i].type = ei->initg[i].type; in _citrus_ISO2022_init_state()
440 s->g[i].final = ei->initg[i].final; in _citrus_ISO2022_init_state()
441 s->g[i].interm = ei->initg[i].interm; in _citrus_ISO2022_init_state()
443 s->singlegl = s->singlegr = -1; in _citrus_ISO2022_init_state()
444 s->flags |= _ISO2022STATE_FLAG_INITIALIZED; in _citrus_ISO2022_init_state()
484 #define ECMA -1
485 #define INTERM -2
486 #define OECMA -3
497 { CS94MULTI, -1, 2, -1, -1, 3, { ESC, '$', OECMA }, },
499 { CS94MULTI, -1, 5, -1, 2, 6, { ESC, '&', ECMA, ESC, '$', OECMA }, },
501 { CS94, 1, 2, -1, -1, 3, { ESC, CS94, ECMA, }, },
502 /* G? 94 with 2nd intermediate char */
503 { CS94, 1, 3, 2, -1, 4, { ESC, CS94, INTERM, ECMA, }, },
505 { CS96, 1, 2, -1, -1, 3, { ESC, CS96, ECMA, }, },
506 /* G? 96 with 2nd intermediate char */
507 { CS96, 1, 3, 2, -1, 4, { ESC, CS96, INTERM, ECMA, }, },
509 { CS94MULTI, 2, 3, -1, -1, 4, { ESC, '$', CS94, ECMA, }, },
511 { CS96MULTI, 2, 3, -1, -1, 4, { ESC, '$', CS96, ECMA, }, },
513 { CS94MULTI, 5, 6, -1, 2, 7, { ESC, '&', ECMA, ESC, '$', CS94, ECMA, }, },
515 { -1, -1, -1, -1, -1, 2, { ESC, 'n', }, },
516 { -1, -1, -1, -1, -1, 2, { ESC, 'o', }, },
517 /* LS1/2/3R */
518 { -1, -1, -1, -1, -1, 2, { ESC, '~', }, },
519 { -1, -1, -1, -1, -1, 2, { ESC, /*{*/ '}', }, },
520 { -1, -1, -1, -1, -1, 2, { ESC, '|', }, },
522 { -1, -1, -1, -1, -1, 2, { ESC, 'N', }, },
523 { -1, -1, -1, -1, -1, 2, { ESC, 'O', }, },
535 p = sp->chars; in seqmatch()
536 while ((size_t)(p - sp->chars) < n && p - sp->chars < sp->len) { in seqmatch()
557 if (*s && strchr(",-./", *s)) in seqmatch()
572 return (p - sp->chars); in seqmatch()
587 psenc->gl = 0; in _ISO2022_sgetwchar()
589 n--; in _ISO2022_sgetwchar()
593 psenc->gl = 1; in _ISO2022_sgetwchar()
595 n--; in _ISO2022_sgetwchar()
601 psenc->singlegl = psenc->singlegr = in _ISO2022_sgetwchar()
602 (string[0] - '\216') + 2; in _ISO2022_sgetwchar()
604 n--; in _ISO2022_sgetwchar()
613 for (sp = &seqtable[0]; sp->len; sp++) { in _ISO2022_sgetwchar()
615 if (sp->len == nmatch && n >= (size_t)(sp->len)) in _ISO2022_sgetwchar()
619 if (!sp->len) in _ISO2022_sgetwchar()
622 if (sp->type != -1) { in _ISO2022_sgetwchar()
623 if (sp->csoff == -1) in _ISO2022_sgetwchar()
626 switch (sp->type) { in _ISO2022_sgetwchar()
629 i = string[sp->csoff] - '('; in _ISO2022_sgetwchar()
633 i = string[sp->csoff] - ','; in _ISO2022_sgetwchar()
639 psenc->g[i].type = sp->type; in _ISO2022_sgetwchar()
640 psenc->g[i].final = '\0'; in _ISO2022_sgetwchar()
641 psenc->g[i].interm = '\0'; in _ISO2022_sgetwchar()
642 psenc->g[i].vers = '\0'; in _ISO2022_sgetwchar()
643 /* sp->finaloff must not be -1 */ in _ISO2022_sgetwchar()
644 if (sp->finaloff != -1) in _ISO2022_sgetwchar()
645 psenc->g[i].final = string[sp->finaloff]; in _ISO2022_sgetwchar()
646 if (sp->intermoff != -1) in _ISO2022_sgetwchar()
647 psenc->g[i].interm = string[sp->intermoff]; in _ISO2022_sgetwchar()
648 if (sp->versoff != -1) in _ISO2022_sgetwchar()
649 psenc->g[i].vers = string[sp->versoff]; in _ISO2022_sgetwchar()
651 string += sp->len; in _ISO2022_sgetwchar()
652 n -= sp->len; in _ISO2022_sgetwchar()
657 if (2 <= n && string[0] == '\033' && in _ISO2022_sgetwchar()
659 psenc->gl = string[1] - 'n' + 2; in _ISO2022_sgetwchar()
660 string += 2; in _ISO2022_sgetwchar()
661 n -= 2; in _ISO2022_sgetwchar()
665 /* LS1/2/3R */ in _ISO2022_sgetwchar()
667 if (2 <= n && string[0] == '\033' && in _ISO2022_sgetwchar()
669 psenc->gr = 3 - (string[1] - '|'); in _ISO2022_sgetwchar()
670 string += 2; in _ISO2022_sgetwchar()
671 n -= 2; in _ISO2022_sgetwchar()
676 if (2 <= n && string[0] == '\033' && string[1] && in _ISO2022_sgetwchar()
678 psenc->singlegl = (string[1] - 'N') + 2; in _ISO2022_sgetwchar()
679 string += 2; in _ISO2022_sgetwchar()
680 n -= 2; in _ISO2022_sgetwchar()
689 for (sp = &seqtable[0]; sp->len; sp++) { in _ISO2022_sgetwchar()
698 if (n < (size_t)(sp->len)) { in _ISO2022_sgetwchar()
705 if (nmatch == sp->len) { in _ISO2022_sgetwchar()
725 cur = -1; in _ISO2022_sgetwchar()
727 cur = (psenc->singlegr == -1) ? psenc->gr : psenc->singlegr; in _ISO2022_sgetwchar()
729 cur = (psenc->singlegl == -1) ? psenc->gl : psenc->singlegl; in _ISO2022_sgetwchar()
731 if (cur == -1) { in _ISO2022_sgetwchar()
737 psenc->singlegr = psenc->singlegl = -1; in _ISO2022_sgetwchar()
742 switch (psenc->g[cur].type) { in _ISO2022_sgetwchar()
745 if (!isthree(psenc->g[cur].final)) { in _ISO2022_sgetwchar()
746 if (2 <= n && in _ISO2022_sgetwchar()
752 (string[0] & 0x80) == (string[2] & 0x80)) in _ISO2022_sgetwchar()
773 switch (psenc->g[cur].type) { in _ISO2022_sgetwchar()
793 switch (psenc->g[cur].type) { in _ISO2022_sgetwchar()
796 if (psenc->g[cur].final == 'B' && !psenc->g[cur].interm) { in _ISO2022_sgetwchar()
801 wchar = psenc->g[cur].final; in _ISO2022_sgetwchar()
803 wchar |= (psenc->g[cur].interm ? (0x80 | psenc->g[cur].interm) : 0); in _ISO2022_sgetwchar()
808 /* special case for ISO-8859-1. */ in _ISO2022_sgetwchar()
809 if (psenc->g[cur].final == 'A' && !psenc->g[cur].interm) { in _ISO2022_sgetwchar()
815 wchar = psenc->g[cur].final; in _ISO2022_sgetwchar()
817 wchar |= (psenc->g[cur].interm ? (0x80 | psenc->g[cur].interm) : 0); in _ISO2022_sgetwchar()
824 wchar = psenc->g[cur].final; in _ISO2022_sgetwchar()
826 if (isthree(psenc->g[cur].final)) in _ISO2022_sgetwchar()
830 if (psenc->g[cur].type == CS96MULTI) in _ISO2022_sgetwchar()
838 psenc->singlegr = psenc->singlegl = -1; in _ISO2022_sgetwchar()
860 chlenbak = psenc->chlen; in _citrus_ISO2022_mbrtowc_priv()
866 if (psenc->chlen > sizeof(psenc->ch)) { in _citrus_ISO2022_mbrtowc_priv()
871 if (psenc->chlen == 0) in _citrus_ISO2022_mbrtowc_priv()
875 p = psenc->ch; in _citrus_ISO2022_mbrtowc_priv()
876 while (psenc->chlen < sizeof(psenc->ch)) { in _citrus_ISO2022_mbrtowc_priv()
878 psenc->ch[psenc->chlen++] = *s0++; in _citrus_ISO2022_mbrtowc_priv()
879 n--; in _citrus_ISO2022_mbrtowc_priv()
882 wchar = _ISO2022_sgetwchar(ei, p, psenc->chlen - (p-psenc->ch), in _citrus_ISO2022_mbrtowc_priv()
884 c += result - p; in _citrus_ISO2022_mbrtowc_priv()
886 if (psenc->chlen > (size_t)c) in _citrus_ISO2022_mbrtowc_priv()
887 memmove(psenc->ch, result, psenc->chlen - c); in _citrus_ISO2022_mbrtowc_priv()
888 if (psenc->chlen < (size_t)c) in _citrus_ISO2022_mbrtowc_priv()
889 psenc->chlen = 0; in _citrus_ISO2022_mbrtowc_priv()
891 psenc->chlen -= c; in _citrus_ISO2022_mbrtowc_priv()
896 if ((size_t)(result - p) == psenc->chlen) in _citrus_ISO2022_mbrtowc_priv()
898 psenc->chlen = 0; in _citrus_ISO2022_mbrtowc_priv()
911 c += result - s0; in _citrus_ISO2022_mbrtowc_priv()
912 psenc->chlen = 0; in _citrus_ISO2022_mbrtowc_priv()
917 c += (result - s0); in _citrus_ISO2022_mbrtowc_priv()
918 n -= (result - s0); in _citrus_ISO2022_mbrtowc_priv()
926 if (n < sizeof(psenc->ch)) { in _citrus_ISO2022_mbrtowc_priv()
927 memcpy(psenc->ch, s0 - c, n); in _citrus_ISO2022_mbrtowc_priv()
928 psenc->chlen = n; in _citrus_ISO2022_mbrtowc_priv()
936 psenc->chlen = 0; in _citrus_ISO2022_mbrtowc_priv()
937 *nresult = (size_t)-1; in _citrus_ISO2022_mbrtowc_priv()
944 *nresult = wchar ? c - chlenbak : 0; in _citrus_ISO2022_mbrtowc_priv()
949 *nresult = (size_t)-2; in _citrus_ISO2022_mbrtowc_priv()
956 _ISO2022Charset * __restrict cs) in recommendation() argument
964 recommend = ei->recommend[i]; in recommendation()
965 for (j = 0; j < ei->recommendsize[i]; j++) { in recommendation()
966 if (cs->type != recommend[j].type) in recommendation()
968 if (cs->final != recommend[j].final) in recommendation()
970 if (cs->interm != recommend[j].interm) in recommendation()
979 recommend = ei->recommend[i]; in recommendation()
980 for (j = 0; j < ei->recommendsize[i]; j++) { in recommendation()
981 if (cs->type != recommend[j].type) in recommendation()
983 if (cs->final && (cs->final != recommend[j].final)) in recommendation()
985 if (cs->interm && (cs->interm != recommend[j].interm)) in recommendation()
993 if (ei->maxcharset == 0) { in recommendation()
996 switch (cs->type) { in recommendation()
1013 _ISO2022Charset cs; in _ISO2022_sputwchar() local
1022 cs = ei->initg[0].final ? ei->initg[0] : ascii; in _ISO2022_sputwchar()
1024 /* go back to INIT1 or ISO-8859-1 on control chars */ in _ISO2022_sputwchar()
1025 cs = ei->initg[1].final ? ei->initg[1] : iso88591; in _ISO2022_sputwchar()
1028 /* special treatment for ISO-8859-1 */ in _ISO2022_sputwchar()
1029 cs = iso88591; in _ISO2022_sputwchar()
1032 cs = ascii; in _ISO2022_sputwchar()
1035 cs.final = (wc >> 24) & 0x7f; in _ISO2022_sputwchar()
1037 cs.interm = (wc >> 16) & 0x7f; in _ISO2022_sputwchar()
1039 cs.interm = '\0'; in _ISO2022_sputwchar()
1041 cs.type = (wc & 0x00007f00) ? CS96MULTI : CS96; in _ISO2022_sputwchar()
1043 cs.type = (wc & 0x00007f00) ? CS94MULTI : CS94; in _ISO2022_sputwchar()
1045 target = recommendation(ei, &cs); in _ISO2022_sputwchar()
1047 bit8 = ei->flags & F_8BIT; in _ISO2022_sputwchar()
1049 /* designate the charset onto the target plane(G0/1/2/3). */ in _ISO2022_sputwchar()
1050 if (psenc->g[target].type == cs.type && in _ISO2022_sputwchar()
1051 psenc->g[target].final == cs.final && in _ISO2022_sputwchar()
1052 psenc->g[target].interm == cs.interm) in _ISO2022_sputwchar()
1056 if (cs.type == CS94MULTI || cs.type == CS96MULTI) in _ISO2022_sputwchar()
1058 if (target == 0 && cs.type == CS94MULTI && strchr("@AB", cs.final) && in _ISO2022_sputwchar()
1059 !cs.interm && !(ei->flags & F_NOOLD)) in _ISO2022_sputwchar()
1061 else if (cs.type == CS94 || cs.type == CS94MULTI) in _ISO2022_sputwchar()
1064 *p++ = ",-./"[target]; in _ISO2022_sputwchar()
1065 if (cs.interm) in _ISO2022_sputwchar()
1066 *p++ = cs.interm; in _ISO2022_sputwchar()
1067 *p++ = cs.final; in _ISO2022_sputwchar()
1069 psenc->g[target].type = cs.type; in _ISO2022_sputwchar()
1070 psenc->g[target].final = cs.final; in _ISO2022_sputwchar()
1071 psenc->g[target].interm = cs.interm; in _ISO2022_sputwchar()
1075 if (psenc->gl == target) in _ISO2022_sputwchar()
1077 if (bit8 && psenc->gr == target) in _ISO2022_sputwchar()
1080 if (target == 0 && (ei->flags & F_LS0)) { in _ISO2022_sputwchar()
1082 psenc->gl = 0; in _ISO2022_sputwchar()
1083 } else if (target == 1 && (ei->flags & F_LS1)) { in _ISO2022_sputwchar()
1085 psenc->gl = 1; in _ISO2022_sputwchar()
1086 } else if (target == 2 && (ei->flags & F_LS2)) { in _ISO2022_sputwchar()
1089 psenc->gl = 2; in _ISO2022_sputwchar()
1090 } else if (target == 3 && (ei->flags & F_LS3)) { in _ISO2022_sputwchar()
1093 psenc->gl = 3; in _ISO2022_sputwchar()
1094 } else if (bit8 && target == 1 && (ei->flags & F_LS1R)) { in _ISO2022_sputwchar()
1097 psenc->gr = 1; in _ISO2022_sputwchar()
1098 } else if (bit8 && target == 2 && (ei->flags & F_LS2R)) { in _ISO2022_sputwchar()
1102 psenc->gr = 2; in _ISO2022_sputwchar()
1103 } else if (bit8 && target == 3 && (ei->flags & F_LS3R)) { in _ISO2022_sputwchar()
1106 psenc->gr = 3; in _ISO2022_sputwchar()
1107 } else if (target == 2 && (ei->flags & F_SS2)) { in _ISO2022_sputwchar()
1110 psenc->singlegl = 2; in _ISO2022_sputwchar()
1111 } else if (target == 3 && (ei->flags & F_SS3)) { in _ISO2022_sputwchar()
1114 psenc->singlegl = 3; in _ISO2022_sputwchar()
1115 } else if (bit8 && target == 2 && (ei->flags & F_SS2R)) { in _ISO2022_sputwchar()
1118 psenc->singlegl = psenc->singlegr = 2; in _ISO2022_sputwchar()
1119 } else if (bit8 && target == 3 && (ei->flags & F_SS3R)) { in _ISO2022_sputwchar()
1122 psenc->singlegl = psenc->singlegr = 3; in _ISO2022_sputwchar()
1127 if (psenc->singlegl == target) in _ISO2022_sputwchar()
1129 else if (psenc->singlegr == target) in _ISO2022_sputwchar()
1131 else if (psenc->gl == target) in _ISO2022_sputwchar()
1133 else if ((ei->flags & F_8BIT) && psenc->gr == target) in _ISO2022_sputwchar()
1138 switch (cs.type) { in _ISO2022_sputwchar()
1146 (isthree(cs.final) ? 3 : 2) : 1; in _ISO2022_sputwchar()
1149 while (i-- > 0) in _ISO2022_sputwchar()
1153 psenc->singlegl = psenc->singlegr = -1; in _ISO2022_sputwchar()
1155 len = (size_t)(p - tmp); in _ISO2022_sputwchar()
1159 *nresult = (size_t)-1; in _ISO2022_sputwchar()
1170 *nresult = (size_t)-1; in _ISO2022_sputwchar()
1192 if (sizeof(buf) < len || n < len-1) { in _citrus_ISO2022_put_state_reset()
1194 *nresult = (size_t)-1; in _citrus_ISO2022_put_state_reset()
1198 memcpy(s, buf, len - 1); in _citrus_ISO2022_put_state_reset()
1199 *nresult = len - 1; in _citrus_ISO2022_put_state_reset()
1223 *nresult = (size_t)-1; in _citrus_ISO2022_wcrtomb_priv()
1249 /* ^2 mark */ in _citrus_ISO2022_stdenc_wctocs()
1275 if (psenc->chlen == 0) { in _citrus_ISO2022_stdenc_get_state_desc_generic()
1279 *rstate = (psenc->ch[0] == '\033') ? in _citrus_ISO2022_stdenc_get_state_desc_generic()
1285 /* ----------------------------------------------------------------------