mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Merged from REXML main repository:
Fixes ticket:68. NOTE that this involves an API change! Entity declarations in the doctype now generate events that carry two, not one, arguments. Implements ticket:15, using gwrite's suggestion. This allows Element to be subclassed. Two unrelated changes, because subversion is retarded and doesn't do block-level commits: 1) Fixed a typo bug in previous change for ticket:15 2) Fixed namespaces handling in XPath and element. ***** Note that this is an API change!!! ***** Element.namespaces() now returns a hash of namespace mappings which are relevant for that node. Fixes a bug in multiple decodings The changeset 1230:1231 was bad. The default behavior is *not* to use the native REXML encodings by default, but rather to use ICONV by default. I know that this will piss some people off, but defaulting to the pure Ruby version isn't the correct solution, and it breaks other encodings, so I've reverted it. * Fixes ticket:61 (xpath_parser) * Fixes ticket:63 (UTF-16; UNILE decoding was bad) * Cleans up some tests, removing opportunities for test corruption * Improves parsing error messages a little * Adds the ability to override the encoding detection in Source construction * Fixes an edge case in Functions::string, where document nodes weren't correctly converted * Fixes Functions::string() for Element and Document nodes * Fixes some problems in entity handling Addresses ticket:66 Fixes ticket:71 Addresses ticket:78 NOTE: that this also fixes what is technically another bug in REXML. REXML's XPath parser used to allow exponential notation in numbers. The XPath spec is specific about what a number is, and scientific notation is not included. Therefore, this has been fixed. Cross-ported a fix for ticket:88 from CVS. Fixes ticket:80 Documentation cleanup. Ticket:84 Applied Kou's fix for an un-trac'ed bug. ------------------------------------------------------------------------ git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f700c1354f
commit
fa4bfa6af5
13 changed files with 142 additions and 83 deletions
|
@ -94,7 +94,7 @@ module REXML
|
|||
# new_a = d.root.clone
|
||||
# puts new_a # => "<a/>"
|
||||
def clone
|
||||
Element.new self
|
||||
self.class.new self
|
||||
end
|
||||
|
||||
# Evaluates to the root node of the document that this element
|
||||
|
@ -200,9 +200,9 @@ module REXML
|
|||
end
|
||||
|
||||
def namespaces
|
||||
namespaces = []
|
||||
namespaces = {}
|
||||
namespaces = parent.namespaces if parent
|
||||
namespaces |= attributes.namespaces
|
||||
namespaces = namespaces.merge( attributes.namespaces )
|
||||
return namespaces
|
||||
end
|
||||
|
||||
|
@ -494,13 +494,12 @@ module REXML
|
|||
# doc.root.add_element 'c' #-> '<a><b/>Elliott<c/></a>'
|
||||
# doc.root.text = 'Russell' #-> '<a><b/>Russell<c/></a>'
|
||||
# doc.root.text = nil #-> '<a><b/><c/></a>'
|
||||
def text=( text )
|
||||
def text=( text )
|
||||
if text.kind_of? String
|
||||
text = Text.new( text, whitespace(), nil, raw() )
|
||||
elsif text and !text.kind_of? Text
|
||||
text = Text.new( text.to_s, whitespace(), nil, raw() )
|
||||
end
|
||||
|
||||
old_text = get_text
|
||||
if text.nil?
|
||||
old_text.remove unless old_text.nil?
|
||||
|
@ -557,13 +556,9 @@ module REXML
|
|||
#################################################
|
||||
|
||||
def attribute( name, namespace=nil )
|
||||
prefix = ''
|
||||
if namespace
|
||||
prefix = attributes.prefixes.each { |prefix|
|
||||
return "#{prefix}:" if namespace( prefix ) == namespace
|
||||
} || ''
|
||||
end
|
||||
attributes.get_attribute( "#{prefix}#{name}" )
|
||||
prefix = nil
|
||||
prefix = namespaces.index(namespace) if namespace
|
||||
attributes.get_attribute( "#{prefix ? prefix + ':' : ''}#{name}" )
|
||||
end
|
||||
|
||||
# Evaluates to +true+ if this element has any attributes set, false
|
||||
|
@ -1172,16 +1167,16 @@ module REXML
|
|||
end
|
||||
|
||||
def namespaces
|
||||
namespaces = []
|
||||
namespaces = {}
|
||||
each_attribute do |attribute|
|
||||
namespaces << attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'
|
||||
namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'
|
||||
end
|
||||
if @element.document and @element.document.doctype
|
||||
expn = @element.expanded_name
|
||||
expn = @element.document.doctype.name if expn.size == 0
|
||||
@element.document.doctype.attributes_of(expn).each {
|
||||
|attribute|
|
||||
namespaces << attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'
|
||||
namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'
|
||||
}
|
||||
end
|
||||
namespaces
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue