summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-09 02:52:39 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-09 02:52:39 +0000
commit517a1c340631ecfcb7c2d5558e864a4fe60e315f (patch)
tree73d65a74e30d5cb7820f504a5c90b91b0c284ac2 /encoding.c
parentf59b1dfbfb1f1ef39e2b4d684bb1009262fcb65d (diff)
* encoding.c (Init_Encoding): new instance method Encoding#names,
returns its name and alias names. * encoding.c (enc_names): defined for Encoding#names. * encoding.c (enc_names_i): defined for enc_names. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r--encoding.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/encoding.c b/encoding.c
index f17ed1882c..22c362b381 100644
--- a/encoding.c
+++ b/encoding.c
@@ -823,6 +823,35 @@ enc_name(VALUE self)
return rb_usascii_str_new2(rb_enc_name((rb_encoding*)DATA_PTR(self)));
}
+static int
+enc_names_i(st_data_t name, st_data_t idx, st_data_t ary)
+{
+ if ((int)idx == FIX2INT(rb_ary_entry(ary, 0))) {
+ VALUE str = rb_usascii_str_new2((char *)name);
+ OBJ_FREEZE(str);
+ rb_ary_push(ary, str);
+ }
+ return ST_CONTINUE;
+}
+
+/*
+ * call-seq:
+ * enc.names => array
+ *
+ * Returns the list of name and aliases of the encoding.
+ *
+ * Encoding::WINDOWS_31J.names => ["Windows-31J", "CP932", "csWindows31J"]
+ */
+static VALUE
+enc_names(VALUE self)
+{
+ VALUE ary = rb_ary_new2(0);
+ rb_ary_push(ary, INT2FIX(rb_to_encoding_index(self)));
+ st_foreach(enc_table.names, enc_names_i, (st_data_t)ary);
+ rb_ary_shift(ary);
+ return ary;
+}
+
/*
* call-seq:
* Encoding.list => [enc1, enc2, ...]
@@ -1250,6 +1279,7 @@ Init_Encoding(void)
rb_define_method(rb_cEncoding, "to_s", enc_name, 0);
rb_define_method(rb_cEncoding, "inspect", enc_inspect, 0);
rb_define_method(rb_cEncoding, "name", enc_name, 0);
+ rb_define_method(rb_cEncoding, "names", enc_names, 0);
rb_define_method(rb_cEncoding, "dummy?", enc_dummy_p, 0);
rb_define_singleton_method(rb_cEncoding, "list", enc_list, 0);
rb_define_singleton_method(rb_cEncoding, "name_list", rb_enc_name_list, 0);