summaryrefslogtreecommitdiff
path: root/lib/rexml/attribute.rb
diff options
context:
space:
mode:
authorser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-20 04:31:57 +0000
committerser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-20 04:31:57 +0000
commit66aeb2f7080dea92703f10546fb3cbcc946f6fa3 (patch)
tree4dfe958e610386eb752d60ad26a8f1702e1eb650 /lib/rexml/attribute.rb
parent00190701e0b8cc9ce5dbe9c836e9584d1c1caeb8 (diff)
r1479@bean: ser | 2008-01-19 14:26:31 -0500
r1483@bean: ser | 2008-01-19 14:47:23 -0500 Sam's fixes: * Don't blow up on empty documents * Add a test case for sorted attributes * Making the output predictable simplifies unit tests, and doesn't cost much given that most xml element have few attributes * Ruby 1.9 revision 14922 is more strict * Complete Ticket #134 * Fix for ticket #121 * Fix for ticket #124 * Fix for ticket #128 * Fix ticket #133 * Ticket #131 (Support Ruby 1.9) * Fix for ticket #127 * Fix for ticket #123 * Add missing data needed by test case r1481@bean (orig r1303): ser | 2008-01-19 17:22:32 -0500 Tagged for release r1482@bean (orig r1304): ser | 2008-01-19 17:27:10 -0500 Version bump git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/attribute.rb')
-rw-r--r--lib/rexml/attribute.rb23
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/rexml/attribute.rb b/lib/rexml/attribute.rb
index 89c1ada36c..17ced44c45 100644
--- a/lib/rexml/attribute.rb
+++ b/lib/rexml/attribute.rb
@@ -17,6 +17,8 @@ module REXML
attr_writer :normalized
PATTERN = /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um
+ NEEDS_A_SECOND_CHECK = /(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/um
+
# Constructor.
# FIXME: The parser doesn't catch illegal characters in attributes
#
@@ -110,15 +112,16 @@ module REXML
end
end
- # Returns the attribute value, with entities replaced
- def to_s
- return @normalized if @normalized
-
- doctype = nil
+ def doctype
if @element
doc = @element.document
doctype = doc.doctype if doc
end
+ end
+
+ # Returns the attribute value, with entities replaced
+ def to_s
+ return @normalized if @normalized
@normalized = Text::normalize( @unnormalized, doctype )
@unnormalized = nil
@@ -129,11 +132,6 @@ module REXML
# have been expanded to their values
def value
return @unnormalized if @unnormalized
- doctype = nil
- if @element
- doc = @element.document
- doctype = doc.doctype if doc
- end
@unnormalized = Text::unnormalize( @normalized, doctype )
@normalized = nil
@unnormalized
@@ -150,6 +148,11 @@ module REXML
# Returns this attribute
def element=( element )
@element = element
+
+ if @normalized
+ Text.check( @normalized, NEEDS_A_SECOND_CHECK, doctype )
+ end
+
self
end