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/