From: Nobuyoshi Nakada Date: 2007-09-06T14:08:26+09:00 Subject: [ruby-dev:31744] [m17n] String#encode なかだです。 String#encodeをためしに実装してみました。 なぜか"sjis"で登録されているのに"Shift_JIS"と出てきたりするので、 別名を付けられるようにしてrb_enc_name()にあわせてみました。 Index: encoding.c =================================================================== --- encoding.c (revision 13347) +++ encoding.c (working copy) @@ -24,4 +24,5 @@ struct rb_encoding_entry { static struct rb_encoding_entry *enc_table; static int enc_table_size; +static st_table *enc_table_alias; void @@ -44,10 +45,21 @@ rb_enc_register(const char *name, rb_enc void +rb_enc_alias(const char *alias, const char *orig) +{ + if (!enc_table_alias) { + enc_table_alias = st_init_strtable(); + } + st_insert(enc_table_alias, (st_data_t)alias, (st_data_t)orig); +} + +void rb_enc_init(void) { rb_enc_register("ascii", ONIG_ENCODING_ASCII); - rb_enc_register("sjis", ONIG_ENCODING_SJIS); + rb_enc_register("shift_jis", ONIG_ENCODING_SJIS); rb_enc_register("euc-jp", ONIG_ENCODING_EUC_JP); rb_enc_register("utf-8", ONIG_ENCODING_UTF8); + rb_enc_alias("binary", "ascii"); + rb_enc_alias("sjis", "shift_jis"); } @@ -68,8 +80,10 @@ rb_enc_find(const char *name) { int i; + st_data_t alias = 0; if (!enc_table) { rb_enc_init(); } + find: for (i=0; i