class Nokogiri::HTML4::DocumentFragment

def self.parse(tags, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block)

Create a Nokogiri::XML::DocumentFragment from +tags+, using +encoding+
###
def self.parse(tags, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block)
  doc = HTML4::Document.new
  encoding ||= if tags.respond_to?(:encoding)
    encoding = tags.encoding
    if encoding == ::Encoding::ASCII_8BIT
      "UTF-8"
    else
      encoding.name
    end
  else
    "UTF-8"
  end
  doc.encoding = encoding
  new(doc, tags, nil, options, &block)
end

def initialize(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) # rubocop:disable Lint/MissingSuper

rubocop:disable Lint/MissingSuper
def initialize(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) # rubocop:disable Lint/MissingSuper
  return self unless tags
  options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
  yield options if block_given?
  if ctx
    preexisting_errors = document.errors.dup
    node_set = ctx.parse("<div>#{tags}</div>", options)
    node_set.first.children.each { |child| child.parent = self } unless node_set.empty?
    self.errors = document.errors - preexisting_errors
  else
    # This is a horrible hack, but I don't care
    path = if /^\s*?<body/i.match?(tags)
      "/html/body"
    else
      "/html/body/node()"
    end
    temp_doc = HTML4::Document.parse("<html><body>#{tags}", nil, document.encoding, options)
    temp_doc.xpath(path).each { |child| child.parent = self }
    self.errors = temp_doc.errors
  end
  children
end