From 6a738f22656ffe247bcd02cf354c12a5370818ec Mon Sep 17 00:00:00 2001 From: ser Date: Sun, 28 Mar 2004 22:36:15 +0000 Subject: Documentation fixes and a patch to fix whitespace handling. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rexml/comment.rb | 5 ++++- lib/rexml/doctype.rb | 5 ++++- lib/rexml/document.rb | 7 +++++-- lib/rexml/element.rb | 9 ++++++--- lib/rexml/rexml.rb | 6 +++--- lib/rexml/text.rb | 32 +++++++++++++++++++++----------- 6 files changed, 43 insertions(+), 21 deletions(-) diff --git a/lib/rexml/comment.rb b/lib/rexml/comment.rb index e439ddf9d8..7c3e79fe2a 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 d69de214b1..b523155f8f 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 1eefaea92a..52500f2afd 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 6a2d87f3f5..b61d811141 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 4d2a95b022..67b36a87f6 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 " - Date = "+2004/047" - Version = "2.7.4.2" + Copyright = "Copyright © 2001, 2002, 2003, 2004 Sean Russell " + Date = "+2004/088" + Version = "3.0.0" end diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb index 6f94ca4ba1..2e54f9fa11 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" ) # foo + # e[0].value = "bar" # bar + # e[0].value = "" # <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 -- cgit v1.2.3