summaryrefslogtreecommitdiff
path: root/ruby_1_8_6/lib/rexml/formatters/transitive.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_6/lib/rexml/formatters/transitive.rb')
-rw-r--r--ruby_1_8_6/lib/rexml/formatters/transitive.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/ruby_1_8_6/lib/rexml/formatters/transitive.rb b/ruby_1_8_6/lib/rexml/formatters/transitive.rb
new file mode 100644
index 0000000000..1d80f21fbb
--- /dev/null
+++ b/ruby_1_8_6/lib/rexml/formatters/transitive.rb
@@ -0,0 +1,56 @@
+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 )
+ @indentation = indentation
+ @level = 0
+ 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 << "/"
+ 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