mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
r1025 | ser | 2004-07-18 08:18:36 -0400 (Sun, 18 Jul 2004) | 2 lines
@@ Fixed a CDATA pretty-printing bug. (#39) @@ r1026 | ser | 2004-07-18 09:03:02 -0400 (Sun, 18 Jul 2004) | 4 lines @@ Fixed a buffering bug in Source.rb that affected the SAX parser @@ This bug was related to how REXML determines the encoding of a file, and evinced itself by hanging on input when using the SAX parser. r1028 | ser | 2004-07-18 09:06:18 -0400 (Sun, 18 Jul 2004) | 3 lines * Minor pretty printing fix WRT CDATA segments. @@ Applied Curt Sampson's optimization improvements @@ git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b841a6fce5
commit
94e117da62
5 changed files with 28 additions and 15 deletions
|
@ -59,7 +59,7 @@ module REXML
|
|||
# c = CData.new( " Some text " )
|
||||
# c.write( $stdout ) #-> <![CDATA[ Some text ]]>
|
||||
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
||||
indent( output, indent ) unless transitive
|
||||
#indent( output, indent ) unless transitive
|
||||
output << START
|
||||
output << @string
|
||||
output << STOP
|
||||
|
|
|
@ -159,9 +159,10 @@ module REXML
|
|||
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
||||
output = Output.new( output, xml_decl.encoding ) if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output)
|
||||
@children.each { |node|
|
||||
indent( output, indent) if node.node_type == :element
|
||||
node.write( output, indent, transitive, ie_hack )
|
||||
output << "\n" unless indent<0 or node == @children[-1]
|
||||
indent( output, indent ) if node.node_type == :element
|
||||
if node.write( output, indent, transitive, ie_hack )
|
||||
output << "\n" unless indent<0 or node == @children[-1]
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -107,7 +107,8 @@ module REXML
|
|||
# Evaluates to the document to which this element belongs, or nil if this
|
||||
# element doesn't belong to a document.
|
||||
def document
|
||||
root.parent if root
|
||||
rt = root
|
||||
rt.parent if rt
|
||||
end
|
||||
|
||||
# Evaluates to +true+ if whitespace is respected for this element. This
|
||||
|
@ -670,7 +671,7 @@ module REXML
|
|||
end
|
||||
writer << "/"
|
||||
else
|
||||
if transitive and indent>-1 and !@children[0].instance_of? Text
|
||||
if transitive and indent>-1 and !@children[0].kind_of? Text
|
||||
writer << "\n"
|
||||
indent writer, indent+1
|
||||
end
|
||||
|
@ -1044,10 +1045,11 @@ module REXML
|
|||
return attr
|
||||
end
|
||||
end
|
||||
if @element.document and @element.document.doctype
|
||||
element_document = @element.document
|
||||
if element_document and element_document.doctype
|
||||
expn = @element.expanded_name
|
||||
expn = @element.document.doctype.name if expn.size == 0
|
||||
attr_val = @element.document.doctype.attribute_of(expn, name)
|
||||
expn = element_document.doctype.name if expn.size == 0
|
||||
attr_val = element_document.doctype.attribute_of(expn, name)
|
||||
return Attribute.new( name, attr_val ) if attr_val
|
||||
end
|
||||
return nil
|
||||
|
|
|
@ -116,11 +116,21 @@ module REXML
|
|||
def initialize(arg, block_size=500)
|
||||
@er_source = @source = arg
|
||||
@to_utf = false
|
||||
# FIXME
|
||||
# This is broken. If the user puts in enough carriage returns, this can fail
|
||||
# to calculate the correct encoding.
|
||||
super @source.read( 100 )
|
||||
@line_break = encode( '>' )
|
||||
# Determining the encoding is a deceptively difficult issue to resolve.
|
||||
# First, we check the first two bytes for UTF-16. Then we
|
||||
# assume that the encoding is at least ASCII enough for the '>', and
|
||||
# we read until we get one of those. This gives us the XML declaration,
|
||||
# if there is one. If there isn't one, the file MUST be UTF-8, as per
|
||||
# the XML spec. If there is one, we can determine the encoding from
|
||||
# it.
|
||||
str = @source.read( 2 )
|
||||
if (str[0] == 254 && str[1] == 255) || (str[0] == 255 && str[1] == 254)
|
||||
@encoding = check_encoding( str )
|
||||
@line_break = encode( '>' )
|
||||
else
|
||||
@line_break = '>'
|
||||
end
|
||||
super str+@source.readline( @line_break )
|
||||
end
|
||||
|
||||
def scan(pattern, cons=false)
|
||||
|
|
|
@ -38,7 +38,7 @@ module REXML
|
|||
end
|
||||
|
||||
def write writer, indent=-1, transitive=false, ie_hack=false
|
||||
return "" unless @writethis or writer.kind_of? Output
|
||||
return nil unless @writethis or writer.kind_of? Output
|
||||
indent( writer, indent )
|
||||
writer << START.sub(/\\/u, '')
|
||||
if writer.kind_of? Output
|
||||
|
|
Loading…
Reference in a new issue