33
33
#include "mbfilter_sjis_mobile.h"
34
34
35
35
extern int mbfl_filt_conv_utf8_wchar_flush (mbfl_convert_filter * filter );
36
+ extern int mbfl_filt_conv_sjis_mobile_flush (mbfl_convert_filter * filter );
36
37
37
38
extern const unsigned char mblen_table_utf8 [];
38
39
@@ -100,7 +101,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo = {
100
101
mbfl_filt_conv_common_ctor ,
101
102
NULL ,
102
103
mbfl_filt_conv_wchar_utf8_mobile ,
103
- mbfl_filt_conv_common_flush ,
104
+ mbfl_filt_conv_sjis_mobile_flush ,
104
105
NULL ,
105
106
};
106
107
@@ -120,7 +121,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_a = {
120
121
mbfl_filt_conv_common_ctor ,
121
122
NULL ,
122
123
mbfl_filt_conv_wchar_utf8_mobile ,
123
- mbfl_filt_conv_common_flush ,
124
+ mbfl_filt_conv_sjis_mobile_flush ,
124
125
NULL ,
125
126
};
126
127
@@ -140,7 +141,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_b = {
140
141
mbfl_filt_conv_common_ctor ,
141
142
NULL ,
142
143
mbfl_filt_conv_wchar_utf8_mobile ,
143
- mbfl_filt_conv_common_flush ,
144
+ mbfl_filt_conv_sjis_mobile_flush ,
144
145
NULL ,
145
146
};
146
147
@@ -160,16 +161,13 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb = {
160
161
mbfl_filt_conv_common_ctor ,
161
162
NULL ,
162
163
mbfl_filt_conv_wchar_utf8_mobile ,
163
- mbfl_filt_conv_common_flush ,
164
+ mbfl_filt_conv_sjis_mobile_flush ,
164
165
NULL ,
165
166
};
166
167
167
168
#define CK (statement ) do { if ((statement) < 0) return (-1); } while (0)
168
169
int mbfl_filt_put_invalid_char (int c , mbfl_convert_filter * filter );
169
170
170
- /*
171
- * UTF-8 => wchar
172
- */
173
171
int mbfl_filt_conv_utf8_mobile_wchar (int c , mbfl_convert_filter * filter )
174
172
{
175
173
int s , s1 = 0 , c1 = 0 , snd = 0 ;
@@ -192,25 +190,22 @@ int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
192
190
CK (mbfl_filt_put_invalid_char (c , filter ));
193
191
}
194
192
break ;
193
+
195
194
case 0x10 : /* 2byte code 2nd char: 0x80-0xbf */
196
195
case 0x21 : /* 3byte code 3rd char: 0x80-0xbf */
197
196
case 0x32 : /* 4byte code 4th char: 0x80-0xbf */
198
197
filter -> status = 0 ;
199
198
if (c >= 0x80 && c <= 0xbf ) {
200
- s = (filter -> cache << 6 ) | (c & 0x3f );
199
+ s = (filter -> cache << 6 ) | (c & 0x3f );
201
200
filter -> cache = 0 ;
202
201
203
- if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_docomo &&
204
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_docomo2uni_pua , 4 ) > 0 ) {
202
+ if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_docomo && mbfilter_conv_r_map_tbl (s , & s1 , mbfl_docomo2uni_pua , 4 ) > 0 ) {
205
203
s = mbfilter_sjis_emoji_docomo2unicode (s1 , & snd );
206
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_a &&
207
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua , 7 ) > 0 ) {
204
+ } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_a && mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua , 7 ) > 0 ) {
208
205
s = mbfilter_sjis_emoji_kddi2unicode (s1 , & snd );
209
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_b &&
210
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) {
206
+ } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_b && mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) {
211
207
s = mbfilter_sjis_emoji_kddi2unicode (s1 , & snd );
212
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_sb &&
213
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_sb2uni_pua , 6 ) > 0 ) {
208
+ } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_sb && mbfilter_conv_r_map_tbl (s , & s1 , mbfl_sb2uni_pua , 6 ) > 0 ) {
214
209
s = mbfilter_sjis_emoji_sb2unicode (s1 , & snd );
215
210
}
216
211
@@ -223,12 +218,13 @@ int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
223
218
goto retry ;
224
219
}
225
220
break ;
221
+
226
222
case 0x20 : /* 3byte code 2nd char: 0:0xa0-0xbf,D:0x80-9F,1-C,E-F:0x80-0x9f */
227
- s = (filter -> cache << 6 ) | (c & 0x3f );
223
+ s = (filter -> cache << 6 ) | (c & 0x3f );
228
224
c1 = filter -> cache & 0xf ;
229
225
230
226
if ((c >= 0x80 && c <= 0xbf ) &&
231
- ((c1 == 0x0 && c >= 0xa0 ) ||
227
+ ((c1 == 0x0 && c >= 0xa0 ) ||
232
228
(c1 == 0xd && c < 0xa0 ) ||
233
229
(c1 > 0x0 && c1 != 0xd ))) {
234
230
filter -> cache = s ;
@@ -238,12 +234,13 @@ int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
238
234
goto retry ;
239
235
}
240
236
break ;
237
+
241
238
case 0x30 : /* 4byte code 2nd char: 0:0x90-0xbf,1-3:0x80-0xbf,4:0x80-0x8f */
242
- s = (filter -> cache << 6 ) | (c & 0x3f );
239
+ s = (filter -> cache << 6 ) | (c & 0x3f );
243
240
c1 = filter -> cache & 0x7 ;
244
241
245
242
if ((c >= 0x80 && c <= 0xbf ) &&
246
- ((c1 == 0x0 && c >= 0x90 ) ||
243
+ ((c1 == 0x0 && c >= 0x90 ) ||
247
244
(c1 == 0x4 && c < 0x90 ) ||
248
245
(c1 > 0x0 && c1 != 0x4 ))) {
249
246
filter -> cache = s ;
@@ -253,9 +250,10 @@ int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
253
250
goto retry ;
254
251
}
255
252
break ;
253
+
256
254
case 0x31 : /* 4byte code 3rd char: 0x80-0xbf */
257
255
if (c >= 0x80 && c <= 0xbf ) {
258
- filter -> cache = (filter -> cache << 6 ) | (c & 0x3f );
256
+ filter -> cache = (filter -> cache << 6 ) | (c & 0x3f );
259
257
filter -> status ++ ;
260
258
} else {
261
259
CK (mbfl_filt_put_invalid_char (filter -> cache , filter ));
@@ -270,26 +268,15 @@ int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
270
268
return c ;
271
269
}
272
270
273
- /*
274
- * wchar => UTF-8
275
- */
276
271
int mbfl_filt_conv_wchar_utf8_mobile (int c , mbfl_convert_filter * filter )
277
272
{
278
273
if (c >= 0 && c < 0x110000 ) {
279
274
int s1 , c1 ;
280
275
281
- if ((filter -> to -> no_encoding == mbfl_no_encoding_utf8_docomo &&
282
- mbfilter_unicode2sjis_emoji_docomo (c , & s1 , filter ) > 0 &&
283
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_docomo2uni_pua , 4 ) > 0 ) ||
284
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_a &&
285
- mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 &&
286
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua , 7 ) > 0 ) ||
287
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_b &&
288
- mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 &&
289
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) ||
290
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_sb &&
291
- mbfilter_unicode2sjis_emoji_sb (c , & s1 , filter ) > 0 &&
292
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_sb2uni_pua , 6 ) > 0 )) {
276
+ if ((filter -> to -> no_encoding == mbfl_no_encoding_utf8_docomo && mbfilter_unicode2sjis_emoji_docomo (c , & s1 , filter ) > 0 && mbfilter_conv_map_tbl (s1 , & c1 , mbfl_docomo2uni_pua , 4 ) > 0 ) ||
277
+ (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_a && mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 && mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua , 7 ) > 0 ) ||
278
+ (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_b && mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 && mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) ||
279
+ (filter -> to -> no_encoding == mbfl_no_encoding_utf8_sb && mbfilter_unicode2sjis_emoji_sb (c , & s1 , filter ) > 0 && mbfilter_conv_map_tbl (s1 , & c1 , mbfl_sb2uni_pua , 6 ) > 0 )) {
293
280
c = c1 ;
294
281
}
295
282
0 commit comments