    # File temp/text.rb, line 310
        def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil )
          rv = string.clone
          rv.gsub!( /\r\n?/, "\n" )
          matches = rv.scan( REFERENCE )
          return rv if matches.size == 0
          rv.gsub!( NUMERICENTITY ) {|m|
            m=$1
            m = "0#{m}" if m[0] == ?x
            [Integer(m)].pack('U*')
          }
          matches.collect!{|x|x[0]}.compact!
          if matches.size > 0
            if doctype
              matches.each do |entity_reference|
                unless filter and filter.include?(entity_reference)
                  entity_value = doctype.entity( entity_reference )
                  re = /&#{entity_reference};/
                  rv.gsub!( re, entity_value ) if entity_value
                end
              end
            else
              matches.each do |entity_reference|
                unless filter and filter.include?(entity_reference)
                  entity_value = DocType::DEFAULT_ENTITIES[ entity_reference ]
                  re = /&#{entity_reference};/
                  rv.gsub!( re, entity_value.value ) if entity_value
                end
              end
            end
            rv.gsub!( /&amp;/, '&' )
          end
          rv
        end