class Nokogiri::HTML4::DocumentFragment

Public Class Methods

new(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) { |options| ... } click to toggle source
# File lib/nokogiri/html4/document_fragment.rb, line 27
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
parse(tags, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block) click to toggle source

Create a Nokogiri::XML::DocumentFragment from tags, using encoding

# File lib/nokogiri/html4/document_fragment.rb, line 8
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