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 = CData.new( " Some text " )
|
||||||
# c.write( $stdout ) #-> <![CDATA[ Some text ]]>
|
# c.write( $stdout ) #-> <![CDATA[ Some text ]]>
|
||||||
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
||||||
indent( output, indent ) unless transitive
|
#indent( output, indent ) unless transitive
|
||||||
output << START
|
output << START
|
||||||
output << @string
|
output << @string
|
||||||
output << STOP
|
output << STOP
|
||||||
|
|
|
@ -159,9 +159,10 @@ module REXML
|
||||||
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
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)
|
output = Output.new( output, xml_decl.encoding ) if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output)
|
||||||
@children.each { |node|
|
@children.each { |node|
|
||||||
indent( output, indent) if node.node_type == :element
|
indent( output, indent ) if node.node_type == :element
|
||||||
node.write( output, indent, transitive, ie_hack )
|
if node.write( output, indent, transitive, ie_hack )
|
||||||
output << "\n" unless indent<0 or node == @children[-1]
|
output << "\n" unless indent<0 or node == @children[-1]
|
||||||
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,8 @@ module REXML
|
||||||
# Evaluates to the document to which this element belongs, or nil if this
|
# Evaluates to the document to which this element belongs, or nil if this
|
||||||
# element doesn't belong to a document.
|
# element doesn't belong to a document.
|
||||||
def document
|
def document
|
||||||
root.parent if root
|
rt = root
|
||||||
|
rt.parent if rt
|
||||||
end
|
end
|
||||||
|
|
||||||
# Evaluates to +true+ if whitespace is respected for this element. This
|
# Evaluates to +true+ if whitespace is respected for this element. This
|
||||||
|
@ -670,7 +671,7 @@ module REXML
|
||||||
end
|
end
|
||||||
writer << "/"
|
writer << "/"
|
||||||
else
|
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"
|
writer << "\n"
|
||||||
indent writer, indent+1
|
indent writer, indent+1
|
||||||
end
|
end
|
||||||
|
@ -1044,10 +1045,11 @@ module REXML
|
||||||
return attr
|
return attr
|
||||||
end
|
end
|
||||||
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.expanded_name
|
||||||
expn = @element.document.doctype.name if expn.size == 0
|
expn = element_document.doctype.name if expn.size == 0
|
||||||
attr_val = @element.document.doctype.attribute_of(expn, name)
|
attr_val = element_document.doctype.attribute_of(expn, name)
|
||||||
return Attribute.new( name, attr_val ) if attr_val
|
return Attribute.new( name, attr_val ) if attr_val
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -116,11 +116,21 @@ module REXML
|
||||||
def initialize(arg, block_size=500)
|
def initialize(arg, block_size=500)
|
||||||
@er_source = @source = arg
|
@er_source = @source = arg
|
||||||
@to_utf = false
|
@to_utf = false
|
||||||
# FIXME
|
# Determining the encoding is a deceptively difficult issue to resolve.
|
||||||
# This is broken. If the user puts in enough carriage returns, this can fail
|
# First, we check the first two bytes for UTF-16. Then we
|
||||||
# to calculate the correct encoding.
|
# assume that the encoding is at least ASCII enough for the '>', and
|
||||||
super @source.read( 100 )
|
# we read until we get one of those. This gives us the XML declaration,
|
||||||
@line_break = encode( '>' )
|
# 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
|
end
|
||||||
|
|
||||||
def scan(pattern, cons=false)
|
def scan(pattern, cons=false)
|
||||||
|
|
|
@ -38,7 +38,7 @@ module REXML
|
||||||
end
|
end
|
||||||
|
|
||||||
def write writer, indent=-1, transitive=false, ie_hack=false
|
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 )
|
indent( writer, indent )
|
||||||
writer << START.sub(/\\/u, '')
|
writer << START.sub(/\\/u, '')
|
||||||
if writer.kind_of? Output
|
if writer.kind_of? Output
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue