1require 'rexml/xmltokens' 2 3module REXML 4 # Adds named attributes to an object. 5 module Namespace 6 # The name of the object, valid if set 7 attr_reader :name, :expanded_name 8 # The expanded name of the object, valid if name is set 9 attr_accessor :prefix 10 include XMLTokens 11 NAMESPLIT = /^(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})/u 12 13 # Sets the name and the expanded name 14 def name=( name ) 15 @expanded_name = name 16 name =~ NAMESPLIT 17 if $1 18 @prefix = $1 19 else 20 @prefix = "" 21 @namespace = "" 22 end 23 @name = $2 24 end 25 26 # Compares names optionally WITH namespaces 27 def has_name?( other, ns=nil ) 28 if ns 29 return (namespace() == ns and name() == other) 30 elsif other.include? ":" 31 return fully_expanded_name == other 32 else 33 return name == other 34 end 35 end 36 37 alias :local_name :name 38 39 # Fully expand the name, even if the prefix wasn't specified in the 40 # source file. 41 def fully_expanded_name 42 ns = prefix 43 return "#{ns}:#@name" if ns.size > 0 44 return @name 45 end 46 end 47end 48