37
37
38
38
extern const unsigned char mblen_table_sjis [];
39
39
40
- static int mbfl_filt_conv_sjis_mac_flush (mbfl_convert_filter * filter );
40
+ static int mbfl_filt_conv_wchar_sjis_mac_flush (mbfl_convert_filter * filter );
41
+ static int mbfl_filt_conv_sjis_mac_wchar_flush (mbfl_convert_filter * filter );
41
42
42
43
static const char * mbfl_encoding_sjis_mac_aliases [] = {"MacJapanese" , "x-Mac-Japanese" , NULL };
43
44
@@ -58,7 +59,7 @@ const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar = {
58
59
mbfl_filt_conv_common_ctor ,
59
60
NULL ,
60
61
mbfl_filt_conv_sjis_mac_wchar ,
61
- mbfl_filt_conv_common_flush ,
62
+ mbfl_filt_conv_sjis_mac_wchar_flush ,
62
63
NULL ,
63
64
};
64
65
@@ -68,7 +69,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac = {
68
69
mbfl_filt_conv_common_ctor ,
69
70
NULL ,
70
71
mbfl_filt_conv_wchar_sjis_mac ,
71
- mbfl_filt_conv_sjis_mac_flush ,
72
+ mbfl_filt_conv_wchar_sjis_mac_flush ,
72
73
NULL ,
73
74
};
74
75
@@ -132,7 +133,7 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter)
132
133
CK ((* filter -> output_function )(c , filter -> data ));
133
134
} else if (c > 0xa0 && c < 0xe0 ) { /* kana */
134
135
CK ((* filter -> output_function )(0xfec0 + c , filter -> data ));
135
- } else if (c > 0x80 && c < 0xfd && c != 0xa0 ) { /* kanji first char */
136
+ } else if (c > 0x80 && c <= 0xed && c != 0xa0 ) { /* kanji first char */
136
137
filter -> status = 1 ;
137
138
filter -> cache = c ;
138
139
} else if (c == 0x5c ) {
@@ -216,6 +217,10 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter)
216
217
for (i = 0 ; i < 8 ; i ++ ) {
217
218
if (s >= code_ofst_tbl [i ][0 ] && s <= code_ofst_tbl [i ][1 ]) {
218
219
w = code_map [i ][s - code_ofst_tbl [i ][0 ]];
220
+ if (w == 0 ) {
221
+ CK ((* filter -> output_function )((c1 << 8 ) | c | MBFL_WCSGROUP_THROUGH , filter -> data ));
222
+ return c ;
223
+ }
219
224
s2 = 0 ;
220
225
if (s >= 0x043e && s <= 0x0441 ) {
221
226
s2 = 0xf87a ;
@@ -247,8 +252,6 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter)
247
252
w |= MBFL_WCSPLANE_WINCP932 ;
248
253
}
249
254
CK ((* filter -> output_function )(w , filter -> data ));
250
- } else if ((c >= 0 && c < 0x21 ) || c == 0x7f ) { /* CTLs */
251
- CK ((* filter -> output_function )(c , filter -> data ));
252
255
} else {
253
256
w = (c1 << 8 ) | c ;
254
257
w &= MBFL_WCSGROUP_MASK ;
@@ -265,6 +268,15 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter)
265
268
return c ;
266
269
}
267
270
271
+ static int mbfl_filt_conv_sjis_mac_wchar_flush (mbfl_convert_filter * filter )
272
+ {
273
+ if (filter -> status == 1 ) {
274
+ int w = (filter -> cache & MBFL_WCSGROUP_MASK ) | MBFL_WCSGROUP_THROUGH ;
275
+ CK ((* filter -> output_function )(w , filter -> data ));
276
+ }
277
+ return 0 ;
278
+ }
279
+
268
280
/*
269
281
* wchar => SJIS-mac
270
282
*/
@@ -660,7 +672,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter)
660
672
}
661
673
662
674
static int
663
- mbfl_filt_conv_sjis_mac_flush (mbfl_convert_filter * filter )
675
+ mbfl_filt_conv_wchar_sjis_mac_flush (mbfl_convert_filter * filter )
664
676
{
665
677
int i , c1 , s1 = 0 ;
666
678
if (filter -> status == 1 && filter -> cache > 0 ) {
0 commit comments