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 = Kramdown::Utils::StringScanner.new(raw)
  result = []
  until 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]&.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