PageRenderTime 170ms CodeModel.GetById 163ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/tools/Ruby/lib/ruby/1.8/rexml/node.rb

http://github.com/agross/netopenspace
Ruby | 75 lines | 54 code | 9 blank | 12 comment | 6 complexity | c09080fd2dad04858138d64c67a722f4 MD5 | raw file
 1require "rexml/parseexception"
 2require "rexml/formatters/pretty"
 3require "rexml/formatters/default"
 4
 5module REXML
 6	# Represents a node in the tree.  Nodes are never encountered except as
 7	# superclasses of other objects.  Nodes have siblings.
 8	module Node
 9		# @return the next sibling (nil if unset)
10		def next_sibling_node
11			return nil if @parent.nil?
12			@parent[ @parent.index(self) + 1 ]
13		end
14
15		# @return the previous sibling (nil if unset)
16		def previous_sibling_node
17			return nil if @parent.nil?
18			ind = @parent.index(self)
19			return nil if ind == 0
20			@parent[ ind - 1 ]
21		end
22
23    # indent::
24    #   *DEPRECATED* This parameter is now ignored.  See the formatters in the
25    #   REXML::Formatters package for changing the output style.
26		def to_s indent=nil
27      unless indent.nil?
28        Kernel.warn( "#{self.class.name}.to_s(indent) parameter is deprecated" )
29        f = REXML::Formatters::Pretty.new( indent )
30        f.write( self, rv = "" )
31      else
32        f = REXML::Formatters::Default.new
33        f.write( self, rv = "" )
34      end
35      return rv
36		end
37
38		def indent to, ind
39 			if @parent and @parent.context and not @parent.context[:indentstyle].nil? then
40 				indentstyle = @parent.context[:indentstyle]
41 			else
42 				indentstyle = '  '
43 			end
44 			to << indentstyle*ind unless ind<1
45		end
46
47		def parent?
48			false;
49		end
50
51
52		# Visit all subnodes of +self+ recursively
53		def each_recursive(&block) # :yields: node
54			self.elements.each {|node|
55				block.call(node)
56				node.each_recursive(&block)
57			}
58		end
59
60		# Find (and return) first subnode (recursively) for which the block 
61    # evaluates to true. Returns +nil+ if none was found.
62		def find_first_recursive(&block) # :yields: node
63      each_recursive {|node|
64        return node if block.call(node)
65      }
66      return nil
67    end
68
69    # Returns the position that +self+ holds in its parent's array, indexed
70    # from 1.
71    def index_in_parent
72      parent.index(self)+1
73    end
74	end
75end