diff options
| author | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-20 04:31:57 +0000 |
|---|---|---|
| committer | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-20 04:31:57 +0000 |
| commit | 0ca9c123aa42b5d7a597bbd2639001c620e3f2bb (patch) | |
| tree | 4dfe958e610386eb752d60ad26a8f1702e1eb650 /lib/rexml/attribute.rb | |
| parent | 3f59d3c92a10cef94fa470522a95f7c8fdd8c0ff (diff) | |
| download | ruby-0ca9c123aa42b5d7a597bbd2639001c620e3f2bb.tar.gz ruby-0ca9c123aa42b5d7a597bbd2639001c620e3f2bb.tar.xz ruby-0ca9c123aa42b5d7a597bbd2639001c620e3f2bb.zip | |
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: http://svn.ruby-lang.org/repos/ruby/trunk@15141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/attribute.rb')
| -rw-r--r-- | lib/rexml/attribute.rb | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/rexml/attribute.rb b/lib/rexml/attribute.rb index 89c1ada36..17ced44c4 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 |
