diff options
-rw-r--r-- | lib/rexml/doctype.rb | 1 | ||||
-rw-r--r-- | lib/rexml/element.rb | 13 | ||||
-rw-r--r-- | lib/rexml/encoding.rb | 6 | ||||
-rw-r--r-- | lib/rexml/entity.rb | 2 | ||||
-rw-r--r-- | lib/rexml/formatters/pretty.rb | 1 | ||||
-rw-r--r-- | lib/rexml/functions.rb | 12 | ||||
-rw-r--r-- | lib/rexml/parsers/baseparser.rb | 5 | ||||
-rw-r--r-- | lib/rexml/parsers/sax2parser.rb | 17 | ||||
-rw-r--r-- | lib/rexml/parsers/treeparser.rb | 5 | ||||
-rw-r--r-- | lib/rexml/parsers/xpathparser.rb | 6 | ||||
-rw-r--r-- | lib/rexml/source.rb | 14 | ||||
-rw-r--r-- | lib/rexml/syncenumerator.rb | 7 | ||||
-rw-r--r-- | lib/rexml/text.rb | 43 | ||||
-rw-r--r-- | lib/rexml/validation/validation.rb | 6 | ||||
-rw-r--r-- | lib/rexml/xpath_parser.rb | 14 |
15 files changed, 85 insertions, 67 deletions
@@ -117,7 +117,6 @@ module REXML unless @children.empty? next_indent = indent + 1 output << ' [' - child = nil # speed @children.each { |child| output << "\n" f.write( child, output ) @@ -296,7 +296,7 @@ module REXML raise "First argument must be either an element name, or an Element object" if element.nil? el = @elements.add(element) attrs.each do |key, value| - el.attributes[key]=Attribute.new(key,value,self) end if attrs.kind_of? Hash el end @@ -552,7 +552,11 @@ module REXML def attribute( name, namespace=nil ) prefix = nil - prefix = namespaces.index(namespace) if namespace prefix = nil if prefix == 'xmlns' attributes.get_attribute( "#{prefix ? prefix + ':' : ''}#{name}" ) end @@ -704,7 +708,6 @@ module REXML # A private helper method def each_with_something( test, max=0, name=nil ) num = 0 - child=nil @elements.each( name ){ |child| yield child if test.call(child) and num += 1 return if max>0 and num == max @@ -754,7 +757,6 @@ module REXML raise "index (#{index}) must be >= 1" if index < 1 name = literalize(name) if name num = 0 - child = nil @element.find { |child| child.kind_of? Element and (name.nil? ? true : child.has_name?( name )) and @@ -1217,7 +1219,8 @@ module REXML def get_attribute_ns(namespace, name) each_attribute() { |attribute| if name == attribute.name && - namespace == attribute.namespace() return attribute end } @@ -56,14 +56,14 @@ module REXML def check_encoding str # We have to recognize UTF-16, LSB UTF-16, and UTF-8 - if str[0] == 0xfe && str[1] == 0xff str[0,2] = "" return UTF_16 - elsif str[0] == 0xff && str[1] == 0xfe str[0,2] = "" return UNILE end - str =~ /^\s*<\?xml\s+version\s*=\s*(['"]).*?\1\s+encoding\s*=\s*(["'])(.*?)\2/um return $3.upcase if $3 return UTF_8 end @@ -139,7 +139,7 @@ module REXML if @parent matches.each do |entity_reference| entity_value = @parent.entity( entity_reference[0] ) - rv.gsub!( /%#{entity_reference};/um, entity_value ) end end return rv @@ -31,6 +31,7 @@ module REXML @level = 0 @ie_hack = ie_hack @width = 80 end protected @@ -256,9 +256,15 @@ module REXML end } - string(string).unpack('U*').collect { |c| - if map.has_key? c then map[c] else c end - }.compact.pack('U*') end # UNTESTED @@ -242,6 +242,11 @@ module REXML @document_status = :after_doctype @source.read if @source.buffer.size<2 md = @source.match(/\s*/um, true) end end if @document_status == :in_doctype @@ -149,17 +149,26 @@ module REXML procs = get_procs( :end_prefix_mapping, event[1] ) listeners = get_listeners( :end_prefix_mapping, event[1] ) if procs or listeners - namespace_mapping.each do |prefix, uri| # notify observers of namespaces - procs.each { |ob| ob.call( prefix ) } if procs - listeners.each { |ob| ob.end_prefix_mapping(prefix) } if listeners end end when :text #normalized = @parser.normalize( event[1] ) #handle( :characters, normalized ) copy = event[1].clone - @entities.each { |key, value| copy = copy.gsub("&#{key};", value) } copy.gsub!( Text::NUMERICENTITY ) {|m| m=$1 m = "0#{m}" if m[0] == ?x @@ -30,7 +30,10 @@ module REXML return when :start_element tag_stack.push(event[1]) - el = @build_context = @build_context.add_element( event[1], event[2] ) when :end_element tag_stack.pop @build_context = @build_context.parent @@ -332,12 +332,12 @@ module REXML predicates << expr[1..-2] if expr end #puts "PREDICATES = #{predicates.inspect}" - predicates.each{ |expr| - #puts "ORING #{expr}" preds = [] parsed << :predicate parsed << preds - OrExpr(expr, preds) } #puts "PREDICATES = #{predicates.inspect}" path @@ -59,6 +59,9 @@ module REXML @to_utf = true else @to_utf = false end end @@ -147,13 +150,13 @@ module REXML str = @source.read( 2 ) if encoding self.encoding = encoding - elsif 0xfe == str[0] && 0xff == str[1] @line_break = "\000>" - elsif 0xff == str[0] && 0xfe == str[1] @line_break = ">\000" - elsif 0xef == str[0] && 0xbb == str[1] str += @source.read(1) - str = '' if (0xbf == str[2]) @line_break = ">" else @line_break = ">" @@ -193,6 +196,9 @@ module REXML str = @source.readline(@line_break) str = decode(str) if @to_utf and str @buffer << str rescue Exception, NameError @source = nil end @@ -6,8 +6,7 @@ module REXML # Enumerable objects. def initialize(*enums) @gens = enums - @biggest = @gens[0] - @gens.each {|x| @biggest = x if x.size > @biggest.size } end # Returns the number of enumerated Enumerable objects, i.e. the size @@ -24,8 +23,8 @@ module REXML # Enumerates rows of the Enumerable objects. def each - @biggest.zip( *@gens ) {|a| - yield(*a[1..-1]) } self end @@ -308,37 +308,24 @@ module REXML # Unescapes all possible entities def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil ) - rv = string.clone - rv.gsub!( /\r\n?/, "\n" ) - matches = rv.scan( REFERENCE ) - return rv if matches.size == 0 - rv.gsub!( NUMERICENTITY ) {|m| - m=$1 - m = "0#{m}" if m[0] == ?x - [Integer(m)].pack('U*') - } - matches.collect!{|x|x[0]}.compact! - if matches.size > 0 - if doctype - matches.each do |entity_reference| - unless filter and filter.include?(entity_reference) - entity_value = doctype.entity( entity_reference ) - re = /&#{entity_reference};/ - rv.gsub!( re, entity_value ) if entity_value - end end else - matches.each do |entity_reference| - unless filter and filter.include?(entity_reference) - entity_value = DocType::DEFAULT_ENTITIES[ entity_reference ] - re = /&#{entity_reference};/ - rv.gsub!( re, entity_value.value ) if entity_value - end - end end - rv.gsub!( /&/, '&' ) - end - rv end end end @@ -33,8 +33,8 @@ module REXML sattr = [:start_attribute, nil] eattr = [:end_attribute] text = [:text, nil] - k,v = event[2].find { |k,v| - sattr[1] = k #puts "Looking for #{sattr.inspect}" m = @current.next( sattr ) #puts "Got #{m.inspect}" @@ -47,7 +47,7 @@ module REXML @current = m else #puts "Didn't get end" - text[1] = v #puts "Looking for #{text.inspect}" m = m.next( text ) #puts "Got #{m.inspect}" @@ -222,7 +222,7 @@ module REXML when :child new_nodeset = [] nt = nil - for node in nodeset nt = node.node_type new_nodeset += node.children if nt == :element or nt == :document end @@ -266,7 +266,7 @@ module REXML when :ancestor new_nodeset = [] - for node in nodeset while node.parent node = node.parent new_nodeset << node unless new_nodeset.include? node @@ -277,7 +277,7 @@ module REXML when :ancestor_or_self new_nodeset = [] - for node in nodeset if node.node_type == :element new_nodeset << node while ( node.parent ) @@ -341,7 +341,7 @@ module REXML when :descendant results = [] nt = nil - for node in nodeset nt = node.node_type results += expr( path_stack.dclone.unshift( :descendant_or_self ), node.children ) if nt == :element or nt == :document @@ -376,7 +376,7 @@ module REXML when :preceding new_nodeset = [] - for node in nodeset new_nodeset += preceding( node ) end #puts "NEW NODESET => #{new_nodeset.inspect}" @@ -385,7 +385,7 @@ module REXML when :following new_nodeset = [] - for node in nodeset new_nodeset += following( node ) end nodeset = new_nodeset @@ -395,7 +395,7 @@ module REXML #puts "In :namespace" new_nodeset = [] prefix = path_stack.shift - for node in nodeset if (node.node_type == :element or node.node_type == :attribute) if @namespaces namespaces = @namespaces |