1
0
Fork 0
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:
ser 2004-07-18 14:04:03 +00:00
parent b841a6fce5
commit 94e117da62
5 changed files with 28 additions and 15 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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