34
34
35
35
extern void mbfl_filt_ident_utf8 (unsigned char c , mbfl_identify_filter * filter );
36
36
extern void mbfl_filt_conv_utf8_wchar_flush (mbfl_convert_filter * filter );
37
+ extern void mbfl_filt_put_invalid_char (int c , mbfl_convert_filter * filter );
37
38
38
39
extern const unsigned char mblen_table_utf8 [];
39
40
40
41
static const char * mbfl_encoding_utf8_docomo_aliases [] = {"UTF-8-DOCOMO" , "UTF8-DOCOMO" , NULL };
41
- static const char * mbfl_encoding_utf8_kddi_a_aliases [] = {NULL };
42
42
static const char * mbfl_encoding_utf8_kddi_b_aliases [] = {"UTF-8-Mobile#KDDI" , "UTF-8-KDDI" , "UTF8-KDDI" , NULL };
43
43
static const char * mbfl_encoding_utf8_sb_aliases [] = {"UTF-8-SOFTBANK" , "UTF8-SOFTBANK" , NULL };
44
44
@@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_a = {
57
57
mbfl_no_encoding_utf8_kddi_a ,
58
58
"UTF-8-Mobile#KDDI-A" ,
59
59
"UTF-8" ,
60
- mbfl_encoding_utf8_kddi_a_aliases ,
60
+ NULL ,
61
61
mblen_table_utf8 ,
62
62
0 ,
63
63
& vtbl_utf8_kddi_a_wchar ,
@@ -182,52 +182,48 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb = {
182
182
mbfl_filt_conv_common_flush
183
183
};
184
184
185
- void mbfl_filt_put_invalid_char (int c , mbfl_convert_filter * filter );
186
-
187
- /*
188
- * UTF-8 => wchar
189
- */
190
185
void mbfl_filt_conv_utf8_mobile_wchar (int c , mbfl_convert_filter * filter )
191
186
{
192
187
int s , s1 = 0 , c1 = 0 , snd = 0 ;
193
188
194
189
retry :
195
- switch (filter -> status & 0xff ) {
190
+ switch (filter -> status & 0xFF ) {
196
191
case 0x00 :
197
192
if (c < 0x80 ) {
198
193
(* filter -> output_function )(c , filter -> data );
199
- } else if (c >= 0xc2 && c <= 0xdf ) { /* 2byte code first char: 0xc2-0xdf */
194
+ } else if (c >= 0xc2 && c <= 0xdf ) { /* 2-byte char, first byte: 0xC2-0xDF */
200
195
filter -> status = 0x10 ;
201
196
filter -> cache = c & 0x1f ;
202
- } else if (c >= 0xe0 && c <= 0xef ) { /* 3byte code first char: 0xe0-0xef */
197
+ } else if (c >= 0xe0 && c <= 0xef ) { /* 3-byte char, first byte: 0xE0-0xEF */
203
198
filter -> status = 0x20 ;
204
199
filter -> cache = c & 0xf ;
205
- } else if (c >= 0xf0 && c <= 0xf4 ) { /* 3byte code first char: 0xf0-0xf4 */
200
+ } else if (c >= 0xf0 && c <= 0xf4 ) { /* 4-byte char, first byte: 0xF0-0xF4 */
206
201
filter -> status = 0x30 ;
207
202
filter -> cache = c & 0x7 ;
208
203
} else {
209
204
mbfl_filt_put_invalid_char (c , filter );
210
205
}
211
206
break ;
212
- case 0x10 : /* 2byte code 2nd char: 0x80-0xbf */
213
- case 0x21 : /* 3byte code 3rd char: 0x80-0xbf */
214
- case 0x32 : /* 4byte code 4th char: 0x80-0xbf */
207
+
208
+ case 0x10 : /* 2-byte char, 2nd byte: 0x80-0xBF */
209
+ case 0x21 : /* 3-byte char, 3rd byte: 0x80-0xBF */
210
+ case 0x32 : /* 4-byte char, 4th byte: 0x80-0xBF */
215
211
filter -> status = 0 ;
216
212
if (c >= 0x80 && c <= 0xbf ) {
217
- s = (filter -> cache << 6 ) | (c & 0x3f );
213
+ s = (filter -> cache << 6 ) | (c & 0x3f );
218
214
filter -> cache = 0 ;
219
215
220
- if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_docomo &&
221
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_docomo2uni_pua , 4 ) > 0 ) {
216
+ if (filter -> from == & mbfl_encoding_utf8_docomo &&
217
+ mbfilter_conv_r_map_tbl (s , & s1 , mbfl_docomo2uni_pua , 4 )) {
222
218
s = mbfilter_sjis_emoji_docomo2unicode (s1 , & snd );
223
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_a &&
224
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua , 7 ) > 0 ) {
219
+ } else if (filter -> from == & mbfl_encoding_utf8_kddi_a &&
220
+ mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua , 7 )) {
225
221
s = mbfilter_sjis_emoji_kddi2unicode (s1 , & snd );
226
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_kddi_b &&
227
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) {
222
+ } else if (filter -> from == & mbfl_encoding_utf8_kddi_b &&
223
+ mbfilter_conv_r_map_tbl (s , & s1 , mbfl_kddi2uni_pua_b , 8 )) {
228
224
s = mbfilter_sjis_emoji_kddi2unicode (s1 , & snd );
229
- } else if (filter -> from -> no_encoding == mbfl_no_encoding_utf8_sb &&
230
- mbfilter_conv_r_map_tbl (s , & s1 , mbfl_sb2uni_pua , 6 ) > 0 ) {
225
+ } else if (filter -> from == & mbfl_encoding_utf8_sb &&
226
+ mbfilter_conv_r_map_tbl (s , & s1 , mbfl_sb2uni_pua , 6 )) {
231
227
s = mbfilter_sjis_emoji_sb2unicode (s1 , & snd );
232
228
}
233
229
@@ -240,75 +236,72 @@ void mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter)
240
236
goto retry ;
241
237
}
242
238
break ;
243
- case 0x20 : /* 3byte code 2nd char: 0:0xa0-0xbf,D:0x80-9F,1-C,E-F:0x80-0x9f */
244
- s = (filter -> cache <<6 ) | (c & 0x3f );
245
- c1 = filter -> cache & 0xf ;
246
-
247
- if ((c >= 0x80 && c <= 0xbf ) &&
248
- ((c1 == 0x0 && c >= 0xa0 ) ||
249
- (c1 == 0xd && c < 0xa0 ) ||
250
- (c1 > 0x0 && c1 != 0xd ))) {
239
+
240
+ case 0x20 : /* 3-byte char, 2nd byte: 0:0xA0-0xBF,D:0x80-9F,1-C,E-F:0x80-0x9F */
241
+ s = (filter -> cache << 6 ) | (c & 0x3f );
242
+ c1 = filter -> cache & 0xF ;
243
+
244
+ if ((c >= 0x80 && c <= 0xBF ) &&
245
+ ((c1 == 0 && c >= 0xA0 ) || (c1 == 0xD && c < 0xA0 ) || (c1 > 0 && c1 != 0xD ))) {
251
246
filter -> cache = s ;
252
247
filter -> status ++ ;
253
248
} else {
254
249
mbfl_filt_put_invalid_char (filter -> cache , filter );
255
250
goto retry ;
256
251
}
257
252
break ;
258
- case 0x30 : /* 4byte code 2nd char: 0:0x90-0xbf,1-3:0x80-0xbf,4:0x80-0x8f */
259
- s = (filter -> cache <<6 ) | (c & 0x3f );
253
+
254
+ case 0x30 : /* 4-byte char, 2nd byte: 0:0x90-0xBF,1-3:0x80-0xBF,4:0x80-0x8F */
255
+ s = (filter -> cache << 6 ) | (c & 0x3f );
260
256
c1 = filter -> cache & 0x7 ;
261
257
262
- if ((c >= 0x80 && c <= 0xbf ) &&
263
- ((c1 == 0x0 && c >= 0x90 ) ||
264
- (c1 == 0x4 && c < 0x90 ) ||
265
- (c1 > 0x0 && c1 != 0x4 ))) {
258
+ if ((c >= 0x80 && c <= 0xBF ) &&
259
+ ((c1 == 0 && c >= 0x90 ) || (c1 == 0x4 && c < 0x90 ) || (c1 > 0 && c1 != 0x4 ))) {
266
260
filter -> cache = s ;
267
261
filter -> status ++ ;
268
262
} else {
269
263
mbfl_filt_put_invalid_char (filter -> cache , filter );
270
264
goto retry ;
271
265
}
272
266
break ;
273
- case 0x31 : /* 4byte code 3rd char: 0x80-0xbf */
274
- if (c >= 0x80 && c <= 0xbf ) {
275
- filter -> cache = (filter -> cache <<6 ) | (c & 0x3f );
267
+
268
+ case 0x31 : /* 4-byte char, 3rd byte: 0x80-0xBF */
269
+ if (c >= 0x80 && c <= 0xBF ) {
270
+ filter -> cache = (filter -> cache << 6 ) | (c & 0x3f );
276
271
filter -> status ++ ;
277
272
} else {
278
273
mbfl_filt_put_invalid_char (filter -> cache , filter );
279
274
goto retry ;
280
275
}
281
276
break ;
277
+
282
278
default :
283
279
filter -> status = 0 ;
284
280
break ;
285
281
}
286
282
}
287
283
288
- /*
289
- * wchar => UTF-8
290
- */
291
284
void mbfl_filt_conv_wchar_utf8_mobile (int c , mbfl_convert_filter * filter )
292
285
{
293
286
if (c >= 0 && c < 0x110000 ) {
294
287
int s1 , c1 ;
295
288
296
- if ((filter -> to -> no_encoding == mbfl_no_encoding_utf8_docomo &&
297
- mbfilter_unicode2sjis_emoji_docomo (c , & s1 , filter ) > 0 &&
298
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_docomo2uni_pua , 4 ) > 0 ) ||
299
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_a &&
300
- mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 &&
301
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua , 7 ) > 0 ) ||
302
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_kddi_b &&
303
- mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) > 0 &&
304
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua_b , 8 ) > 0 ) ||
305
- (filter -> to -> no_encoding == mbfl_no_encoding_utf8_sb &&
306
- mbfilter_unicode2sjis_emoji_sb (c , & s1 , filter ) > 0 &&
307
- mbfilter_conv_map_tbl (s1 , & c1 , mbfl_sb2uni_pua , 6 ) > 0 )) {
289
+ if ((filter -> to == & mbfl_encoding_utf8_docomo &&
290
+ mbfilter_unicode2sjis_emoji_docomo (c , & s1 , filter ) &&
291
+ mbfilter_conv_map_tbl (s1 , & c1 , mbfl_docomo2uni_pua , 4 )) ||
292
+ (filter -> to == & mbfl_encoding_utf8_kddi_a &&
293
+ mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) &&
294
+ mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua , 7 )) ||
295
+ (filter -> to == & mbfl_encoding_utf8_kddi_b &&
296
+ mbfilter_unicode2sjis_emoji_kddi (c , & s1 , filter ) &&
297
+ mbfilter_conv_map_tbl (s1 , & c1 , mbfl_kddi2uni_pua_b , 8 )) ||
298
+ (filter -> to == & mbfl_encoding_utf8_sb &&
299
+ mbfilter_unicode2sjis_emoji_sb (c , & s1 , filter ) &&
300
+ mbfilter_conv_map_tbl (s1 , & c1 , mbfl_sb2uni_pua , 6 ))) {
308
301
c = c1 ;
309
302
}
310
303
311
- if (filter -> status == 1 && filter -> cache > 0 ) {
304
+ if (filter -> status ) {
312
305
return ;
313
306
}
314
307
0 commit comments