4 #include "Symbols/alt.sym"
5 #include "Symbols/graph.sym"
7 #include "Symbols/eucjp.sym"
8 #include "Symbols/euckr.sym"
9 #include "Symbols/euccn.sym"
10 #include "Symbols/euctw.sym"
11 #include "Symbols/big5.sym"
13 #include "Symbols/utf8.sym"
15 #include "Symbols/cp850.sym"
30 static symbol_set alt_symbol_set = { WC_CES_US_ASCII, 1, alt_symbol, 1 };
31 static symbol_set alt2_symbol_set = { WC_CES_US_ASCII, 2, alt2_symbol, 1 };
32 static symbol_set eucjp_symbol_set = { WC_CES_EUC_JP, 2, eucjp_symbol, 0 };
33 static symbol_set euckr_symbol_set = { WC_CES_EUC_KR, 2, euckr_symbol, 0 };
34 static symbol_set euccn_symbol_set = { WC_CES_EUC_CN, 2, euccn_symbol, 0 };
35 static symbol_set euctw_symbol_set = { WC_CES_EUC_TW, 2, euctw_symbol, 0 };
36 static symbol_set big5_symbol_set = { WC_CES_BIG5, 2, big5_symbol, 0 };
38 static symbol_set utf8_symbol_set = { WC_CES_UTF_8, 1, utf8_symbol, 0 };
40 static symbol_set cp850_symbol_set = { WC_CES_CP850, 1, cp850_symbol, 0 };
42 static charset_symbol_set charset_symbol_list[] = {
43 { WC_CES_EUC_JP, &eucjp_symbol_set },
44 { WC_CES_SHIFT_JIS, &eucjp_symbol_set },
45 { WC_CES_ISO_2022_JP, &eucjp_symbol_set },
46 { WC_CES_ISO_2022_JP_2, &eucjp_symbol_set },
47 { WC_CES_ISO_2022_JP_3, &eucjp_symbol_set },
48 { WC_CES_EUC_KR, &euckr_symbol_set },
49 { WC_CES_ISO_2022_KR, &euckr_symbol_set },
50 { WC_CES_JOHAB, &euckr_symbol_set },
51 { WC_CES_UHC, &euckr_symbol_set },
52 { WC_CES_EUC_CN, &euccn_symbol_set },
53 { WC_CES_GBK, &euccn_symbol_set },
54 { WC_CES_GB18030, &euccn_symbol_set },
55 { WC_CES_HZ_GB_2312, &euccn_symbol_set },
56 { WC_CES_ISO_2022_CN, &euccn_symbol_set },
57 { WC_CES_EUC_TW, &euctw_symbol_set },
58 { WC_CES_BIG5, &big5_symbol_set },
59 { WC_CES_HKSCS, &big5_symbol_set },
61 { WC_CES_UTF_8, &utf8_symbol_set },
63 { WC_CES_CP850, &cp850_symbol_set },
68 static wc_ces save_charset = 0;
69 static symbol_set *save_symbol = NULL;
72 encode_symbol(symbol_set * s)
76 for (i = 0; s->item[i]; i++) {
78 s->item[i] = wc_conv(s->item[i], s->ces, InnerCharset)->ptr;
84 get_symbol(wc_ces charset, int *width)
86 charset_symbol_set *p;
89 if (charset == save_charset && save_symbol != NULL &&
90 *width == save_symbol->width) {
91 *width = save_symbol->width;
92 return save_symbol->item;
94 save_charset = charset;
95 for (p = charset_symbol_list; p->charset; p++) {
96 if (charset == p->charset &&
97 (*width == 0 || *width == p->symbol->width)) {
103 s = (*width == 2) ? &alt2_symbol_set : &alt_symbol_set;
104 if (s != save_symbol) {
114 set_symbol(int width)
116 static char **symbol_buf = NULL;
117 static int save_width = -1;
118 symbol_set *s = &alt_symbol_set;
122 if (width == save_width)
124 if (symbol_buf == NULL) {
125 for (i = 0; s->item[i]; i++) ;
126 symbol_buf = New_N(char *, i);
128 for (i = 0; s->item[i]; i++) {
129 tmp = Strnew_size(4);
131 wtf_push(tmp, WC_CCS_SPECIAL_W, (wc_uint32) (SYMBOL_BASE + i));
133 wtf_push(tmp, WC_CCS_SPECIAL, (wc_uint32) (SYMBOL_BASE + i));
134 symbol_buf[i] = tmp->ptr;
150 push_symbol(Str str, char symbol, int width, int n)
157 p = alt2_symbol[(int)symbol];
160 p = alt_symbol[(int)symbol];
161 for (i = 0; i < 2 && *p; i++, p++)
162 buf[i] = (*p == ' ') ? NBSP_CODE : *p;
164 Strcat(str, Sprintf("<_SYMBOL TYPE=%d>", symbol));
166 Strcat_charp_n(str, buf, i);
167 Strcat_charp(str, "</_SYMBOL>");