mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	@@ 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
This commit is contained in:
		
							parent
							
								
									be3b9b1c5c
								
							
						
					
					
						commit
						95be40a06d
					
				
					 13 changed files with 110 additions and 50 deletions
				
			
		| 
						 | 
				
			
			@ -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] ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ module REXML
 | 
			
		|||
					if args.size == 2
 | 
			
		||||
						args[1].each { |match| @procs << [args[0], match, blok] }
 | 
			
		||||
					else
 | 
			
		||||
						add( [args[0], /.*/, blok] )
 | 
			
		||||
						add( [args[0], nil, blok] )
 | 
			
		||||
					end
 | 
			
		||||
				elsif args[0].kind_of? Array
 | 
			
		||||
					if args.size == 2
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ module REXML
 | 
			
		|||
						args[0].each { |match| add( [ :start_element, match, blok ] ) }
 | 
			
		||||
					end
 | 
			
		||||
				else
 | 
			
		||||
					add([nil, /.*/, args[0]])
 | 
			
		||||
					add([nil, nil, args[0]])
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
			
 | 
			
		||||
| 
						 | 
				
			
			@ -164,9 +164,10 @@ module REXML
 | 
			
		|||
			def get_procs( symbol, name )
 | 
			
		||||
				return nil if @procs.size == 0
 | 
			
		||||
				@procs.find_all do |sym, match, block|
 | 
			
		||||
          #puts sym.inspect+"=="+symbol.inspect+ "\t"+match.inspect+"=="+name.inspect+ "\t"+( (sym.nil? or symbol == sym) and ((name.nil? and match.nil?) or match.nil? or ( (name == match) or (match.kind_of? Regexp and name =~ match)))).to_s
 | 
			
		||||
					(
 | 
			
		||||
						(sym.nil? or symbol == sym) and 
 | 
			
		||||
						(name.nil? or (
 | 
			
		||||
						((name.nil? and match.nil?) or match.nil? or (
 | 
			
		||||
							(name == match) or
 | 
			
		||||
							(match.kind_of? Regexp and name =~ match)
 | 
			
		||||
							)
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +180,7 @@ module REXML
 | 
			
		|||
				@listeners.find_all do |sym, match, block|
 | 
			
		||||
					(
 | 
			
		||||
						(sym.nil? or symbol == sym) and 
 | 
			
		||||
						(name.nil? or (
 | 
			
		||||
						((name.nil? and match.nil?) or match.nil? or (
 | 
			
		||||
							(name == match) or
 | 
			
		||||
							(match.kind_of? Regexp and name =~ match)
 | 
			
		||||
							)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue