class Kramdown::Parser::Html::ElementConverter

def process_text(raw, preserve = false)

entities in entity elements.
Process the HTML text +raw+: compress whitespace (if +preserve+ is +false+) and convert
def process_text(raw, preserve = false)
  raw.gsub!(/\s+/, ' ') unless preserve
  src = StringScanner.new(raw)
  result = []
  while !src.eos?
    if tmp = src.scan_until(/(?=#{HTML_ENTITY_RE})/)
      result << Element.new(:text, tmp)
      src.scan(HTML_ENTITY_RE)
      val = src[1] || (src[2] && src[2].to_i) || src[3].hex
      result << if %w{lsquo rsquo ldquo rdquo}.include?(val)
                  Element.new(:smart_quote, val.intern)
                elsif %w{mdash ndash hellip laquo raquo}.include?(val)
                  Element.new(:typographic_sym, val.intern)
                else
                  begin
                    Element.new(:entity, entity(val), nil, :original => src.matched)
                  rescue ::Kramdown::Error
                    src.pos -= src.matched_size - 1
                    Element.new(:entity, ::Kramdown::Utils::Entities.entity('amp'))
                  end
                end
    else
      result << Element.new(:text, src.rest)
      src.terminate
    end
  end
  result
end