class REXML::Parsers::XPathParser
def RelativeLocationPath path, parsed
def RelativeLocationPath path, parsed loop do original_path = path path = path.lstrip return original_path if path.empty? # (axis or @ or <child::>) nodetest predicate > # OR > / Step # (. or ..) > if path[0] == ?. if path[1] == ?. parsed << :parent parsed << :node path = path[2..-1] else parsed << :self parsed << :node path = path[1..-1] end else path_before_axis_specifier = path parsed_not_abberviated = [] if path[0] == ?@ parsed_not_abberviated << :attribute path = path[1..-1] # Goto Nodetest elsif path =~ AXIS parsed_not_abberviated << $1.tr('-','_').intern path = $' # Goto Nodetest else parsed_not_abberviated << :child end path_before_node_test = path path = NodeTest(path, parsed_not_abberviated) if path == path_before_node_test return path_before_axis_specifier end path = Predicate(path, parsed_not_abberviated) parsed.concat(parsed_not_abberviated) end original_path = path path = path.lstrip return original_path if path.empty? return original_path if path[0] != ?/ if path[1] == ?/ parsed << :descendant_or_self parsed << :node path = path[2..-1] else path = path[1..-1] end end end