[前][次][番号順一覧][スレッド一覧]

ruby-changes:7105

From: akr <ko1@a...>
Date: Thu, 14 Aug 2008 21:36:12 +0900 (JST)
Subject: [ruby-changes:7105] Ruby:r18623 (trunk): * transcode.c (econv_init): accept Encoding object as source_encoding

akr	2008-08-14 21:35:19 +0900 (Thu, 14 Aug 2008)

  New Revision: 18623

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18623

  Log:
    * transcode.c (econv_init): accept Encoding object as source_encoding
      and destination_encoding.

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_econv.rb
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18622)
+++ ChangeLog	(revision 18623)
@@ -1,3 +1,8 @@
+Thu Aug 14 21:34:41 2008  Tanaka Akira  <akr@f...>
+
+	* transcode.c (econv_init): accept Encoding object as source_encoding
+	  and destination_encoding.
+
 Thu Aug 14 21:10:00 2008  Tanaka Akira  <akr@f...>
 
 	* encoding.c (rb_filesystem_encoding): use default external encoding
Index: test/ruby/test_econv.rb
===================================================================
--- test/ruby/test_econv.rb	(revision 18622)
+++ test/ruby/test_econv.rb	(revision 18623)
@@ -20,6 +20,11 @@
                  [o,            ret,           i])
   end
 
+  def test_new
+    assert_kind_of(Encoding::Converter, Encoding::Converter.new("UTF-8", "EUC-JP"))
+    assert_kind_of(Encoding::Converter, Encoding::Converter.new(Encoding::UTF_8, Encoding::EUC_JP))
+  end
+
   def test_output_region
     ec = Encoding::Converter.new("UTF-8", "EUC-JP")
     ec.primitive_convert(src="a", dst="b", nil, 1, Encoding::Converter::PARTIAL_INPUT)
Index: transcode.c
===================================================================
--- transcode.c	(revision 18622)
+++ transcode.c	(revision 18623)
@@ -1412,33 +1412,49 @@
 static VALUE
 econv_init(int argc, VALUE *argv, VALUE self)
 {
-    VALUE from_encoding, to_encoding, flags_v;
-    const char *from_e, *to_e;
-    rb_econv_t *ts;
+    VALUE source_encoding, destination_encoding, flags_v;
+    rb_encoding *senc, *denc;
+    const char *sname, *dname;
+    rb_econv_t *ec;
     int flags;
 
-    rb_scan_args(argc, argv, "21", &from_encoding, &to_encoding, &flags_v);
+    rb_scan_args(argc, argv, "21", &source_encoding, &destination_encoding, &flags_v);
 
-    StringValue(from_encoding);
-    StringValue(to_encoding);
     if (flags_v == Qnil)
         flags = 0;
     else
         flags = NUM2INT(flags_v);
 
-    from_e = RSTRING_PTR(from_encoding);
-    to_e = RSTRING_PTR(to_encoding);
+    senc = NULL;
+    if (TYPE(source_encoding) != T_STRING) {
+        senc = rb_to_encoding(source_encoding);
+    }
 
+    denc = NULL;
+    if (TYPE(destination_encoding) != T_STRING) {
+        denc = rb_to_encoding(destination_encoding);
+    }
+
+    if (senc)
+        sname = senc->name;
+    else
+        sname = RSTRING_PTR(source_encoding);
+
+    if (denc)
+        dname = denc->name;
+    else
+        dname = RSTRING_PTR(destination_encoding);
+
     if (DATA_PTR(self)) {
         rb_raise(rb_eTypeError, "already initialized");
     }
 
-    ts = rb_econv_open(from_e, to_e, flags);
-    if (!ts) {
-        rb_raise(rb_eArgError, "encoding convewrter not supported (from %s to %s)", from_e, to_e);
+    ec = rb_econv_open(sname, dname, flags);
+    if (!ec) {
+        rb_raise(rb_eArgError, "encoding convewrter not supported (from %s to %s)", sname, dname);
     }
 
-    DATA_PTR(self) = ts;
+    DATA_PTR(self) = ec;
 
     return self;
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]