4 #define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
11 wc_option WcOption = {
12 WC_OPT_DETECT_ON, /* auto_detect */
13 WC_TRUE, /* use_combining */
14 WC_TRUE, /* use_language_tag */
15 WC_TRUE, /* ucs_conv */
16 WC_FALSE, /* pre_conv */
17 WC_TRUE, /* fix_width_conv */
18 WC_FALSE, /* use_gb12345_map */
19 WC_FALSE, /* use_jisx0201 */
20 WC_FALSE, /* use_jisc6226 */
21 WC_FALSE, /* use_jisx0201k */
22 WC_FALSE, /* use_jisx0212 */
23 WC_FALSE, /* use_jisx0213 */
24 WC_TRUE, /* strict_iso2022 */
25 WC_FALSE, /* gb18030_as_ucs */
26 WC_FALSE, /* no_replace */
27 WC_TRUE, /* use_wide */
30 static wc_status output_st;
31 static wc_option output_option;
32 static wc_bool output_set = WC_FALSE;
34 #define wc_option_cmp(opt1, opt2) \
35 memcmp((void *)(opt1), (void *)(opt2), sizeof(wc_option))
38 wc_input_init(wc_ces ces, wc_status *st)
43 st->ces_info = &WcCesInfo[WC_CES_INDEX(ces)];
44 gset = st->ces_info->gset;
49 st->design[0] = gset[0].ccs;
50 st->design[1] = gset[1].ccs; /* for ISO-2022-JP/EUC-JP */
57 for (i = 0; gset[i].ccs; i++) {
61 st->design[g] = gset[i].ccs;
72 wc_output_init(wc_ces ces, wc_status *st)
79 if (output_set && ces == output_st.ces_info->id &&
80 ! wc_option_cmp(&WcOption, &output_option)) {
86 st->ces_info = &WcCesInfo[WC_CES_INDEX(ces)];
87 gset = st->ces_info->gset;
89 st->g0_ccs = ((ces == WC_CES_ISO_2022_JP || ces == WC_CES_ISO_2022_JP_2 ||
90 ces == WC_CES_ISO_2022_JP_3) && WcOption.use_jisx0201)
91 ? WC_CCS_JIS_X_0201 : gset[0].ccs;
92 st->g1_ccs = ((ces == WC_CES_ISO_2022_JP || ces == WC_CES_ISO_2022_JP_2 ||
93 ces == WC_CES_ISO_2022_JP_3) && WcOption.use_jisc6226)
94 ? WC_CCS_JIS_C_6226 : gset[1].ccs;
95 st->design[0] = st->g0_ccs;
103 if (ces & WC_CES_T_ISO_2022)
110 if (! WcOption.ucs_conv) {
115 for (i = n = nw = 0; gset[i].ccs; i++) {
116 if (WC_CCS_IS_WIDE(gset[i].ccs))
121 st->tlist = New_N(wc_table *, n + 1);
122 st->tlistw = New_N(wc_table *, nw + 1);
123 for (i = n = nw = 0; gset[i].ccs; i++) {
124 if (WC_CCS_IS_WIDE(gset[i].ccs)) {
125 switch (gset[i].ccs) {
126 case WC_CCS_JIS_X_0212:
127 if (! WcOption.use_jisx0212)
130 case WC_CCS_JIS_X_0213_1:
131 case WC_CCS_JIS_X_0213_2:
132 if (! WcOption.use_jisx0213)
136 if (WcOption.use_gb12345_map &&
137 ces != WC_CES_GBK && ces != WC_CES_GB18030) {
138 st->tlistw[nw++] = wc_get_ucs_table(WC_CCS_GB_12345);
143 st->tlistw[nw++] = wc_get_ucs_table(gset[i].ccs);
145 switch (gset[i].ccs) {
146 case WC_CCS_JIS_X_0201K:
147 if (! WcOption.use_jisx0201k)
151 st->tlist[n++] = wc_get_ucs_table(gset[i].ccs);
155 st->tlistw[nw] = NULL;
160 output_set = WC_TRUE;
161 output_option = WcOption;
165 wc_ces_has_ccs(wc_ccs ccs, wc_status *st)
167 wc_gset *gset = st->ces_info->gset;
170 for (i = 0; gset[i].ccs; i++) {
171 if (ccs == gset[i].ccs)