diff options
author | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-02-13 22:40:14 +0000 |
---|---|---|
committer | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-02-13 22:40:14 +0000 |
commit | 95be40a06d1227a0cd0a1cec4424ab33748d1450 (patch) | |
tree | e8e2e4db64964fb5bf1fa9f5cfd882fb20cd20d0 /lib/rexml/parsers/baseparser.rb | |
parent | be3b9b1c5c61b73884bbbf4a22fff16f9b197eb9 (diff) |
@@ Fix for the XPath descendant* result set ordering bug @@
@@ SAX2 listener bug fixes @@
@@ Undid a code change that caused a 10x speed regression @@
@@ Indentation fixes, and a new word wrapping feature for text nodes
was contributed by Devin Bayer (documentation forthcoming; see the
change logs for now) @@
The XPath bug fix is really ugly and inefficient, but I spent two days hacking
at it and this was the best I could come up with.
The SAX2 listener fixes had to do with crashes in certain conditions, like when
there was a carriage return at the end of a document
Several people submitted patches for the speed regression; it is embarrassing
how long it took me to get around to looking at this. To this day, I don't
know where the offending code came from.
Encoding fixes
Added a contributed word wrapping option for text formatting. Devin Bayer
contributed this. Here's his comment:
"Setting :wordwrapping to :all, wordwraps all text nodes longer than 60
characters.
Setting :indentstyle to aString, make aString used as indentation,
instead of the default ' '.
And as long as :respect_whitespace isn't set for the element,
multiline text nodes will be indented."
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/parsers/baseparser.rb')
-rw-r--r-- | lib/rexml/parsers/baseparser.rb | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/rexml/parsers/baseparser.rb b/lib/rexml/parsers/baseparser.rb index 057617d6e8..025d43db54 100644 --- a/lib/rexml/parsers/baseparser.rb +++ b/lib/rexml/parsers/baseparser.rb @@ -122,14 +122,14 @@ module REXML # Returns true if there are no more events def empty? - !has_next? + #puts "@source.empty? = #{@source.empty?}" + #puts "@stack.empty? = #{@stack.empty?}" + return (@source.empty? and @stack.empty?) end # Returns true if there are more events. Synonymous with !empty? def has_next? - return true if @closed - @source.read if @source.buffer.size==0 and !@source.empty? - (!@source.empty? and @source.buffer.strip.size>0) or @stack.size>0 or @closed + return !(@source.empty? and @stack.empty?) end # Push an event back on the head of the stream. This method @@ -329,9 +329,12 @@ module REXML end else md = @source.match( TEXT_PATTERN, true ) - #md = @source.match_to_consume( '<', TEXT_PATTERN ) - #@source.read - raise REXML::ParseException("no text to add") if md[0].length == 0 + if md[0].length == 0 + #puts "EMPTY = #{empty?}" + #puts "BUFFER = \"#{@source.buffer}\"" + @source.match( /(\s+)/, true ) + end + #return [ :text, "" ] if md[0].length == 0 # unnormalized = Text::unnormalize( md[1], self ) # return PullEvent.new( :text, md[1], unnormalized ) return [ :text, md[1] ] |