From ed512acb2fd71016e320414a16b3262ce2f9c366 Mon Sep 17 00:00:00 2001 From: ser Date: Thu, 19 May 2005 03:51:53 +0000 Subject: Cross-ported the REXML changes from HEAD to the 1.8 branch. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rexml/parsers/sax2parser.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'lib/rexml/parsers/sax2parser.rb') diff --git a/lib/rexml/parsers/sax2parser.rb b/lib/rexml/parsers/sax2parser.rb index 96440d17bf..d5ee1bcfcd 100644 --- a/lib/rexml/parsers/sax2parser.rb +++ b/lib/rexml/parsers/sax2parser.rb @@ -12,6 +12,7 @@ module REXML @namespace_stack = [] @has_listeners = false @tag_stack = [] + @entities = {} end def add_listener( listener ) @@ -143,10 +144,21 @@ module REXML end end when :text - normalized = @parser.normalize( event[1] ) - handle( :characters, normalized ) + #normalized = @parser.normalize( event[1] ) + #handle( :characters, normalized ) + copy = event[1].clone + @entities.each { |key, value| copy = copy.gsub("&#{key};", value) } + copy.gsub!( Text::NUMERICENTITY ) {|m| + m=$1 + m = "0#{m}" if m[0] == ?x + [Integer(m)].pack('U*') + } + handle( :characters, copy ) + when :entitydecl + @entities[ event[1] ] = event[2] if event.size == 3 + handle( *event ) when :processing_instruction, :comment, :doctype, :attlistdecl, - :elementdecl, :entitydecl, :cdata, :notationdecl, :xmldecl + :elementdecl, :cdata, :notationdecl, :xmldecl handle( *event ) end end -- cgit v1.2.3