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

ruby-changes:14180

From: yugui <ko1@a...>
Date: Sat, 5 Dec 2009 11:36:26 +0900 (JST)
Subject: [ruby-changes:14180] Ruby:r25999 (ruby_1_9_1): merges r25353 and r25362 from trunk into ruby_1_9_1.

yugui	2009-12-05 11:36:11 +0900 (Sat, 05 Dec 2009)

  New Revision: 25999

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

  Log:
    merges r25353 and r25362 from trunk into ruby_1_9_1.
    --
    * lib/csv.rb (CSV#read_to_char): set encoding and verify data
      which read from io before encode it to @encoding.
    
    * lib/csv.rb (CSV#raw_encoding): add to get @io's encoding.
    
    * lib/csv.rb (CSV#read_io): add to read string and set @io's
      encoding.
    --
    * lib/csv.rb (CSV#raw_encoding): returns ASCII-8BIT when the io
      doesn't have encoding.

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/lib/csv.rb
    branches/ruby_1_9_1/version.h

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 25998)
+++ ruby_1_9_1/ChangeLog	(revision 25999)
@@ -1,3 +1,18 @@
+Fri Oct 16 12:03:31 2009  NARUSE, Yui  <naruse@r...>
+
+	* lib/csv.rb (CSV#raw_encoding): returns ASCII-8BIT when the io
+	  doesn't have encoding.
+
+Fri Oct 16 03:15:52 2009  NARUSE, Yui  <naruse@r...>
+
+	* lib/csv.rb (CSV#read_to_char): set encoding and verify data
+	  which read from io before encode it to @encoding.
+
+	* lib/csv.rb (CSV#raw_encoding): add to get @io's encoding.
+
+	* lib/csv.rb (CSV#read_io): add to read string and set @io's
+	  encoding.
+
 Mon Sep 28 22:33:11 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* dln.c (aix_loaderror): needs format string.
Index: ruby_1_9_1/lib/csv.rb
===================================================================
--- ruby_1_9_1/lib/csv.rb	(revision 25998)
+++ ruby_1_9_1/lib/csv.rb	(revision 25999)
@@ -1550,13 +1550,8 @@
     # create the IO object we will read from
     @io       =   if data.is_a? String then StringIO.new(data) else data end
     # honor the IO encoding if we can, otherwise default to ASCII-8BIT
-    @encoding =   if @io.respond_to? :internal_encoding
-                    @io.internal_encoding || @io.external_encoding
-                  elsif @io.is_a? StringIO
-                    @io.string.encoding
-                  end
-    @encoding ||= Encoding.default_internal || Encoding.default_external
-    # 
+    @encoding = raw_encoding || Encoding.default_internal || Encoding.default_external
+    #
     # prepare for building safe regular expressions in the target encoding,
     # if we can transcode the needed characters
     # 
@@ -1989,7 +1984,6 @@
             sample =  read_to_char(1024)
             sample += read_to_char(1) if sample[-1..-1] == encode_str("\r") and
                                          not @io.eof?
-      
             # try to find a standard separator
             if sample =~ encode_re("\r\n?|\n")
               @row_sep = $&
@@ -2272,8 +2266,9 @@
   # 
   def read_to_char(bytes)
     return "" if @io.eof?
-    data = @io.read(bytes)
+    data = read_io(bytes)
     begin
+      raise unless data.valid_encoding?
       encoded = encode_str(data)
       raise unless encoded.valid_encoding?
       return encoded
@@ -2281,11 +2276,28 @@
       if @io.eof? or data.size >= bytes + 10
         return data
       else
-        data += @io.read(1)
+        data += read_io(1)
         retry
       end
     end
   end
+
+  private
+  def raw_encoding
+    if @io.respond_to? :internal_encoding
+      @io.internal_encoding || @io.external_encoding
+    elsif @io.is_a? StringIO
+      @io.string.encoding
+    elsif @io.respond_to? :encoding
+      @io.encoding
+    else
+      Encoding::ASCII_8BIT
+    end
+  end
+
+  def read_io(bytes)
+    @io.read(bytes).force_encoding(raw_encoding)
+  end
 end
 
 # Another name for CSV::instance().
Index: ruby_1_9_1/version.h
===================================================================
--- ruby_1_9_1/version.h	(revision 25998)
+++ ruby_1_9_1/version.h	(revision 25999)
@@ -1,13 +1,13 @@
 #define RUBY_VERSION "1.9.1"
-#define RUBY_PATCHLEVEL 355
+#define RUBY_PATCHLEVEL 356
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1
 
 #define RUBY_RELEASE_YEAR 2009
-#define RUBY_RELEASE_MONTH 11
-#define RUBY_RELEASE_DAY 27
-#define RUBY_RELEASE_DATE "2009-11-27"
+#define RUBY_RELEASE_MONTH 12
+#define RUBY_RELEASE_DAY 5
+#define RUBY_RELEASE_DATE "2009-12-05"
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];

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

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