aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rexml/text.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rexml/text.rb')
-rw-r--r--lib/rexml/text.rb14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb
index 9a83121af8..55bc9f50f8 100644
--- a/lib/rexml/text.rb
+++ b/lib/rexml/text.rb
@@ -39,8 +39,10 @@ module REXML
# text. If this value is nil (the default), then the raw value of the
# parent will be used as the raw value for this node. If there is no raw
# value for the parent, and no value is supplied, the default is false.
+ # Use this field if you have entities defined for some text, and you don't
+ # want REXML to escape that text in output.
# Text.new( "<&", false, nil, false ) #-> "&lt;&amp;"
- # Text.new( "<&", false, nil, true ) #-> IllegalArgumentException
+ # Text.new( "<&", false, nil, true ) #-> Parse exception
# Text.new( "&lt;&amp;", false, nil, true ) #-> "&lt;&amp;"
# # Assume that the entity "s" is defined to be "sean"
# # and that the entity "r" is defined to be "russell"
@@ -156,11 +158,11 @@ module REXML
# # Assume that the entity "s" is defined to be "sean", and that the
# # entity "r" is defined to be "russell"
# t = Text.new( "< & sean russell", false, nil, false, ['s'] )
- # t.string #-> "< & sean russell"
+ # t.value #-> "< & sean russell"
# t = Text.new( "< & &s; russell", false, nil, false )
- # t.string #-> "< & sean russell"
+ # t.value #-> "< & sean russell"
# u = Text.new( "sean russell", false, nil, true )
- # u.string #-> "sean russell"
+ # u.value #-> "sean russell"
def value
@unnormalized if @unnormalized
doctype = nil
@@ -282,9 +284,10 @@ module REXML
EREFERENCE = /&(?!#{Entity::NAME};)/
# Escapes all possible entities
def Text::normalize( input, doctype=nil, entity_filter=nil )
- copy = input.clone
+ copy = input
# Doing it like this rather than in a loop improves the speed
if doctype
+ # Replace all ampersands that aren't part of an entity
copy = copy.gsub( EREFERENCE, '&amp;' )
doctype.entities.each_value do |entity|
copy = copy.gsub( entity.value,
@@ -292,6 +295,7 @@ module REXML
not( entity_filter and entity_filter.include?(entity) )
end
else
+ # Replace all ampersands that aren't part of an entity
copy = copy.gsub( EREFERENCE, '&amp;' )
DocType::DEFAULT_ENTITIES.each_value do |entity|
copy = copy.gsub(entity.value, "&#{entity.name};" )