1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rexml/formatters/transitive.rb
matz bc53f80b37 * lib/rexml/document.rb (REXML::Document#write): require
rexml/formatters/transitive if transitive flag is on.  a patch
  from akira yamada in [ruby-dev:36230].  fix #553

* lib/rexml/element.rb (REXML::Element#write): ditto.

* lib/rexml/formatters/transitive.rb (REXML::Formatters::Transitive#write_element): 
  add hack for IE.  [ruby-dev:36230]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-11 01:20:23 +00:00

58 lines
1.8 KiB
Ruby

require 'rexml/formatters/pretty'
module REXML
module Formatters
# The Transitive formatter writes an XML document that parses to an
# identical document as the source document. This means that no extra
# whitespace nodes are inserted, and whitespace within text nodes is
# preserved. Within these constraints, the document is pretty-printed,
# with whitespace inserted into the metadata to introduce formatting.
#
# Note that this is only useful if the original XML is not already
# formatted. Since this formatter does not alter whitespace nodes, the
# results of formatting already formatted XML will be odd.
class Transitive < Default
def initialize( indentation=2, ie_hack=false )
@indentation = indentation
@level = 0
@ie_hack = ie_hack
end
protected
def write_element( node, output )
output << "<#{node.expanded_name}"
node.attributes.each_attribute do |attr|
output << " "
attr.write( output )
end unless node.attributes.empty?
output << "\n"
output << ' '*@level
if node.children.empty?
output << " " if @ie_hack
output << "/"
else
output << ">"
# If compact and all children are text, and if the formatted output
# is less than the specified width, then try to print everything on
# one line
skip = false
@level += @indentation
node.children.each { |child|
write( child, output )
}
@level -= @indentation
output << "</#{node.expanded_name}"
output << "\n"
output << ' '*@level
end
output << ">"
end
def write_text( node, output )
output << node.to_s()
end
end
end
end