* lib/rexml/document.rb (REXML::Document#add): fix duplicate XMLDecls
and bad DocTypes in REXML::Document. (Bug #19058) [ruby-core:27979] based on the patch by Federico Builes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1b1b5c2bc3
commit
6425b4ba56
@ -1,3 +1,9 @@
|
|||||||
|
Sun Jan 31 13:00:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
|
* lib/rexml/document.rb (REXML::Document#add): fix duplicate XMLDecls
|
||||||
|
and bad DocTypes in REXML::Document. (Bug #19058) [ruby-core:27979]
|
||||||
|
based on the patch by Federico Builes.
|
||||||
|
|
||||||
Fri Jan 29 22:49:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
Fri Jan 29 22:49:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
* lib/getoptlong.rb (set_options): ensure that the type of argument is
|
* lib/getoptlong.rb (set_options): ensure that the type of argument is
|
||||||
|
@ -66,25 +66,27 @@ module REXML
|
|||||||
# of the document
|
# of the document
|
||||||
def add( child )
|
def add( child )
|
||||||
if child.kind_of? XMLDecl
|
if child.kind_of? XMLDecl
|
||||||
@children.unshift child
|
if @children[0].kind_of? XMLDecl
|
||||||
|
@children[0] = child
|
||||||
|
else
|
||||||
|
@children.unshift child
|
||||||
|
end
|
||||||
child.parent = self
|
child.parent = self
|
||||||
elsif child.kind_of? DocType
|
elsif child.kind_of? DocType
|
||||||
# Find first Element or DocType node and insert the decl right
|
# Find first Element or DocType node and insert the decl right
|
||||||
# before it. If there is no such node, just insert the child at the
|
# before it. If there is no such node, just insert the child at the
|
||||||
# end. If there is a child and it is an DocType, then replace it.
|
# end. If there is a child and it is an DocType, then replace it.
|
||||||
insert_before_index = 0
|
insert_before_index = @children.find_index { |x|
|
||||||
@children.find { |x|
|
|
||||||
insert_before_index += 1
|
|
||||||
x.kind_of?(Element) || x.kind_of?(DocType)
|
x.kind_of?(Element) || x.kind_of?(DocType)
|
||||||
}
|
}
|
||||||
if @children[ insert_before_index ] # Not null = not end of list
|
if insert_before_index # Not null = not end of list
|
||||||
if @children[ insert_before_index ].kind_of DocType
|
if @children[ insert_before_index ].kind_of? DocType
|
||||||
@children[ insert_before_index ] = child
|
@children[ insert_before_index ] = child
|
||||||
else
|
else
|
||||||
@children[ index_before_index-1, 0 ] = child
|
@children[ insert_before_index-1, 0 ] = child
|
||||||
end
|
end
|
||||||
else # Insert at end of list
|
else # Insert at end of list
|
||||||
@children[insert_before_index] = child
|
@children << child
|
||||||
end
|
end
|
||||||
child.parent = self
|
child.parent = self
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user