mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Sun Jan 20 15:08:08 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
* enc/trans/utf_16_32.c: new file, currently implementing UTF-16BE conversions only. * test/ruby/test_transcode.rb: Added tests for UTF-16BE; made check_both_ways() use force_encoding differently. * transcode_data.h, transcode.c: Support for more conversion functions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15142 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
66aeb2f708
commit
3d0c7bea4d
4 changed files with 404 additions and 4 deletions
13
transcode.c
13
transcode.c
|
@ -104,6 +104,7 @@ init_transcoder_table(void)
|
|||
rb_declare_transcoder("SHIFT_JIS", "UTF-8", "japanese");
|
||||
rb_declare_transcoder("EUC-JP", "UTF-8", "japanese");
|
||||
rb_declare_transcoder("ISO-2022-JP", "UTF-8", "japanese");
|
||||
rb_declare_transcoder("UTF-16BE", "UTF-8", "utf_16_32");
|
||||
}
|
||||
|
||||
#define encoding_equal(enc1, enc2) (STRCASECMP(enc1, enc2) == 0)
|
||||
|
@ -153,12 +154,14 @@ transcode_loop(char **in_pos, char **out_pos,
|
|||
char *in_p = *in_pos, *out_p = *out_pos;
|
||||
const BYTE_LOOKUP *conv_tree_start = my_transcoder->conv_tree_start;
|
||||
const BYTE_LOOKUP *next_table;
|
||||
char *char_start;
|
||||
unsigned int next_offset;
|
||||
VALUE next_info;
|
||||
unsigned char next_byte;
|
||||
int from_utf8 = my_transcoder->from_utf8;
|
||||
char *out_s = out_stop - my_transcoder->max_output + 1;
|
||||
while (in_p < in_stop) {
|
||||
char_start = in_p;
|
||||
next_table = conv_tree_start;
|
||||
if (out_p >= out_s) {
|
||||
int len = (out_p - *out_pos);
|
||||
|
@ -212,6 +215,16 @@ transcode_loop(char **in_pos, char **out_pos,
|
|||
case FUNii:
|
||||
next_info = (VALUE)(*my_transcoder->func_ii)(next_info);
|
||||
goto follow_info;
|
||||
case FUNsi:
|
||||
next_info = (VALUE)(*my_transcoder->func_si)(char_start);
|
||||
goto follow_info;
|
||||
break;
|
||||
case FUNio:
|
||||
out_p += (VALUE)(*my_transcoder->func_io)(next_info, out_p);
|
||||
break;
|
||||
case FUNso:
|
||||
out_p += (VALUE)(*my_transcoder->func_so)(char_start, out_p);
|
||||
break;
|
||||
case INVALID:
|
||||
goto invalid;
|
||||
case UNDEF:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue