summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rexml/comment.rb5
-rw-r--r--lib/rexml/doctype.rb5
-rw-r--r--lib/rexml/document.rb7
-rw-r--r--lib/rexml/element.rb9
-rw-r--r--lib/rexml/rexml.rb6
-rw-r--r--lib/rexml/text.rb32
6 files changed, 43 insertions, 21 deletions
diff --git a/lib/rexml/comment.rb b/lib/rexml/comment.rb
index e439ddf9d89..7c3e79fe2a8 100644
--- a/lib/rexml/comment.rb
+++ b/lib/rexml/comment.rb
@@ -39,7 +39,10 @@ module REXML
# indentation will be this number of spaces, and children will be
# indented an additional amount.
# transitive::
- # Who knows?
+ # If transitive is true and indent is >= 0, then the output will be
+ # pretty-printed in such a way that the added whitespace does not affect
+ # the absolute *value* of the document -- that is, it leaves the value
+ # and number of Text nodes in the document unchanged.
# ie_hack::
# Internet Explorer is the worst piece of crap to have ever been
# written, with the possible exception of Windows itself. Since IE is
diff --git a/lib/rexml/doctype.rb b/lib/rexml/doctype.rb
index d69de214b14..b523155f8f3 100644
--- a/lib/rexml/doctype.rb
+++ b/lib/rexml/doctype.rb
@@ -92,7 +92,10 @@ module REXML
# indentation will be this number of spaces, and children will be
# indented an additional amount.
# transitive::
- # Who knows?
+ # If transitive is true and indent is >= 0, then the output will be
+ # pretty-printed in such a way that the added whitespace does not affect
+ # the absolute *value* of the document -- that is, it leaves the value
+ # and number of Text nodes in the document unchanged.
# ie_hack::
# Internet Explorer is the worst piece of crap to have ever been
# written, with the possible exception of Windows itself. Since IE is
diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb
index 1eefaea92a9..52500f2afd5 100644
--- a/lib/rexml/document.rb
+++ b/lib/rexml/document.rb
@@ -145,7 +145,10 @@ module REXML
# indentation will be this number of spaces, and children will be
# indented an additional amount. Defaults to -1
# transitive::
- # What the heck does this do? Defaults to false
+ # If transitive is true and indent is >= 0, then the output will be
+ # pretty-printed in such a way that the added whitespace does not affect
+ # the absolute *value* of the document -- that is, it leaves the value
+ # and number of Text nodes in the document unchanged.
# ie_hack::
# Internet Explorer is the worst piece of crap to have ever been
# written, with the possible exception of Windows itself. Since IE is
@@ -191,7 +194,7 @@ module REXML
build_context[-1] << event[1]
else
build_context.add(
- Text.new( event[1], true, nil, true )
+ Text.new( event[1], build_context.whitespace, nil, true )
) unless (
event[1].strip.size==0 and
build_context.ignore_whitespace_nodes
diff --git a/lib/rexml/element.rb b/lib/rexml/element.rb
index 6a2d87f3f51..b61d8111419 100644
--- a/lib/rexml/element.rb
+++ b/lib/rexml/element.rb
@@ -98,8 +98,9 @@ module REXML
# is the case if:
# 1. Neither :+respect_whitespace+ nor :+compress_whitespace+ has any value
# 2. The context has :+respect_whitespace+ set to :+all+ or
- # an array containing the name of this element, and :+compress_whitespace+
- # isn't set to :+all+ or an array containing the name of this element.
+ # an array containing the name of this element, and
+ # :+compress_whitespace+ isn't set to :+all+ or an array containing the
+ # name of this element.
# The evaluation is tested against +expanded_name+, and so is namespace
# sensitive.
def whitespace
@@ -606,7 +607,9 @@ module REXML
# indentation will be this number of spaces, and children will be
# indented an additional amount. Defaults to -1
# transitive::
- # What the heck does this do? Defaults to false
+ # If transitive is true and indent is >= 0, then the output will be
+ # pretty-printed in such a way that the added whitespace does not affect
+ # the parse tree of the document
# ie_hack::
# Internet Explorer is the worst piece of crap to have ever been
# written, with the possible exception of Windows itself. Since IE is
diff --git a/lib/rexml/rexml.rb b/lib/rexml/rexml.rb
index 4d2a95b0222..67b36a87f60 100644
--- a/lib/rexml/rexml.rb
+++ b/lib/rexml/rexml.rb
@@ -20,7 +20,7 @@
# be accessed online at http://www.germane-software.com/software/rexml_doc
# A tutorial is available in docs/tutorial.html
module REXML
- Copyright = "Copyright #{Time.now.year} Sean Russell <ser@germane-software.com>"
- Date = "+2004/047"
- Version = "2.7.4.2"
+ Copyright = "Copyright © 2001, 2002, 2003, 2004 Sean Russell <ser@germane-software.com>"
+ Date = "+2004/088"
+ Version = "3.0.0"
end
diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb
index 6f94ca4ba12..2e54f9fa113 100644
--- a/lib/rexml/text.rb
+++ b/lib/rexml/text.rb
@@ -175,6 +175,20 @@ module REXML
return string[0,place] + "\n" + wrap(string[place+1..-1], width)
end
end
+
+ # Sets the contents of this text node. This expects the text to be
+ # unnormalized. It returns self.
+ #
+ # e = Element.new( "a" )
+ # e.add_text( "foo" ) # <a>foo</a>
+ # e[0].value = "bar" # <a>bar</a>
+ # e[0].value = "<a>" # <a>&lt;a&gt;</a>
+ def value=( val )
+ @string = val.gsub( /\r\n?/, "\n" )
+ @unnormalized = nil
+ @normalized = nil
+ @raw = false
+ end
def indent(string, level=1, style="\t", indentfirstline=true)
return string if level < 0
@@ -190,17 +204,13 @@ module REXML
def write( writer, indent=-1, transitive=false, ie_hack=false )
s = to_s()
- if not (@parent and @parent.whitespace) then
- s = wrap(s, 60, false) if @parent and @parent.context[:wordwrap] == :all
- if @parent and not @parent.context[:indentstyle].nil? then
- indentstyle = @parent.context[:indentstyle]
- else
- indentstyle = ' '
- end
- if s.count("\n") > 0 and indent > 0 then
- s = indent(s, indent, indentstyle, false)
- end
- end
+ if not (@parent and @parent.whitespace) then
+ s = wrap(s, 60, false) if @parent and @parent.context[:wordwrap] == :all
+ if @parent and not @parent.context[:indentstyle].nil? and indent > 0 and s.count("\n") > 0
+ s = indent(s, indent, @parent.context[:indentstyle], false)
+ end
+ s.squeeze!(" \n\t") if @parent and !@parent.whitespace
+ end
writer << s
end