diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-29 03:05:55 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-29 03:05:55 +0000 |
commit | 5668c8ac5e70f9d7894558a77bb41b65f52173c5 (patch) | |
tree | 082d659285e2ad6351f3187fa26551c1d65eeb70 | |
parent | 10e347864d950fa40dd0134e832811c88a5c50d4 (diff) |
* lib/rdoc/rdoc.rb (RDoc#read_file_contents): take care of BOM.
[ruby-dev:41452]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/rdoc/rdoc.rb | 8 | ||||
-rw-r--r-- | test/rdoc/test_rdoc_rdoc.rb | 12 |
3 files changed, 22 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Sat May 29 12:05:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * lib/rdoc/rdoc.rb (RDoc#read_file_contents): take care of BOM. + [ruby-dev:41452] + Sat May 29 09:34:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> * test/ruby/envutil.rb: fix for --disable-gems. diff --git a/lib/rdoc/rdoc.rb b/lib/rdoc/rdoc.rb index 9c39354c6c..3c08b5e4c1 100644 --- a/lib/rdoc/rdoc.rb +++ b/lib/rdoc/rdoc.rb @@ -406,11 +406,13 @@ The internal error was: def read_file_contents(filename) content = open filename, "rb" do |f| f.read end + utf8 = content.sub!(/\A\xef\xbb\xbf/, '') if defined? Encoding then if /coding[=:]\s*([^\s;]+)/i =~ content[%r"\A(?:#!.*\n)?.*\n"] - if enc = ::Encoding.find($1) - content.force_encoding(enc) - end + enc = ::Encoding.find($1) + end + if enc ||= (Encoding::UTF_8 if utf8) + content.force_encoding(enc) end end diff --git a/test/rdoc/test_rdoc_rdoc.rb b/test/rdoc/test_rdoc_rdoc.rb index 866667c494..f126bfbdb2 100644 --- a/test/rdoc/test_rdoc_rdoc.rb +++ b/test/rdoc/test_rdoc_rdoc.rb @@ -68,6 +68,18 @@ class TestRDocRDoc < MiniTest::Unit::TestCase assert_equal Encoding::UTF_8, contents.encoding end + def test_read_file_contents_encoding_with_signature + skip "Encoding not implemented" unless defined? ::Encoding + + @tempfile.write "\xEF\xBB\xBF""hi everybody" + @tempfile.flush + + bug3360 = '[ruby-dev:41452]' + contents = @rdoc.read_file_contents @tempfile.path + assert_equal "hi everybody", contents, bug3360 + assert_equal Encoding::UTF_8, contents.encoding, bug3360 + end + def test_remove_unparsable file_list = %w[ blah.class |