diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-03 03:53:09 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-03 03:53:09 +0000 |
commit | 3f817764e24eb05aceef884e213d4a7043c292fa (patch) | |
tree | 165579f07248ac404674563c5fc9d1bfec863683 | |
parent | 69eedf6a18d0c21b06d30ec4bc4a550d4ac125dd (diff) | |
download | ruby-3f817764e24eb05aceef884e213d4a7043c292fa.tar.gz |
* lib/rexml/document.rb (REXML::Document#write): Document encoding
option. Now different encoding between XML file's encoding and
XML declaration's encodiong is support.
[Feature #4872] (work in progress)
* lib/rexml/xmldecl.rb (REXML::XMLDecl#write): Always use XMLDecl's
encoding.
* test/rexml/test_document.rb: Update tests for the above change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37440 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | lib/rexml/document.rb | 8 | ||||
-rw-r--r-- | lib/rexml/xmldecl.rb | 6 | ||||
-rw-r--r-- | test/rexml/test_document.rb | 26 |
4 files changed, 35 insertions, 15 deletions
@@ -1,3 +1,13 @@ +Sat Nov 3 12:49:45 2012 Kouhei Sutou <kou@cozmixng.org> + + * lib/rexml/document.rb (REXML::Document#write): Document encoding + option. Now different encoding between XML file's encoding and + XML declaration's encodiong is support. + [Feature #4872] (work in progress) + * lib/rexml/xmldecl.rb (REXML::XMLDecl#write): Always use XMLDecl's + encoding. + * test/rexml/test_document.rb: Update tests for the above change. + Sat Nov 3 12:36:35 2012 Kouhei Sutou <kou@cozmixng.org> * lib/rexml/xmldecl.rb (REXML::XMLDecl): Stop using REXML::Encoding diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb index 5508a60be4..f9fdbdaab3 100644 --- a/lib/rexml/document.rb +++ b/lib/rexml/document.rb @@ -145,8 +145,8 @@ module REXML end # :call-seq: - # doc.write(output=$stdout, indent=-1, transtive=false, ie_hack=false) - # doc.write(options={:output => $stdout, :indent => -1, :transtive => false, :ie_hack => false}) + # doc.write(output=$stdout, indent=-1, transtive=false, ie_hack=false, encoding=nil) + # doc.write(options={:output => $stdout, :indent => -1, :transtive => false, :ie_hack => false, :encoding => nil}) # # Write the XML tree out, optionally with indent. This writes out the # entire XML document, including XML declarations, doctype declarations, @@ -199,6 +199,10 @@ module REXML # unable to parse proper XML, we have to provide a hack to generate XML # that IE's limited abilities can handle. This hack inserts a space # before the /> on empty tags. Defaults to false + # encoding:: + # Encoding name as String. Change output encoding to specified encoding + # instead of encoding in XML declaration. + # Defaults to nil. It means encoding in XML declaration is used. def write(*arguments) if arguments.size == 1 and arguments[0].class == Hash options = arguments[0] diff --git a/lib/rexml/xmldecl.rb b/lib/rexml/xmldecl.rb index 6b48a6f8ea..783c9233dc 100644 --- a/lib/rexml/xmldecl.rb +++ b/lib/rexml/xmldecl.rb @@ -44,11 +44,7 @@ module REXML def write(writer, indent=-1, transitive=false, ie_hack=false) return nil unless @writethis or writer.kind_of? Output writer << START.sub(/\\/u, '') - if writer.kind_of? Output - writer << " #{content writer.encoding}" - else - writer << " #{content encoding}" - end + writer << " #{content encoding}" writer << STOP.sub(/\\/u, '') end diff --git a/test/rexml/test_document.rb b/test/rexml/test_document.rb index 2725235907..b78b310f00 100644 --- a/test/rexml/test_document.rb +++ b/test/rexml/test_document.rb @@ -165,11 +165,16 @@ EOX indent = -1 transitive = false ie_hack = false - encoding = "Shift_JIS" + encoding = "Windows-31J" + + xml_declaration_encoding = "Shift_JIS" + @document.xml_decl.encoding = xml_declaration_encoding + japanese_text = "こんにちは" + @document.root.text = japanese_text @document.write(output, indent, transitive, ie_hack, encoding) - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='SHIFT_JIS'?> -<message>Hello world!</message> + assert_equal(<<-EOX.encode(encoding), output) +<?xml version='1.0' encoding='#{xml_declaration_encoding}'?> +<message>#{japanese_text}</message> EOX end end @@ -215,10 +220,15 @@ EOX def test_encoding output = "" - @document.write(:output => output, :encoding => "Shift_JIS") - assert_equal(<<-EOX, output) -<?xml version='1.0' encoding='SHIFT_JIS'?> -<message>Hello world!</message> + encoding = "Windows-31J" + xml_declaration_encoding = "Shift_JIS" + @document.xml_decl.encoding = xml_declaration_encoding + japanese_text = "こんにちは" + @document.root.text = japanese_text + @document.write(:output => output, :encoding => encoding) + assert_equal(<<-EOX.encode(encoding), output) +<?xml version='1.0' encoding='#{xml_declaration_encoding}'?> +<message>#{japanese_text}</message> EOX end end |