class Nokogiri::VersionInfo

:nodoc:

def self.instance; @@instance; end

def self.instance; @@instance; end

def compiled_parser_version

def compiled_parser_version
  LIBXML_VERSION
end

def engine

def engine
  defined?(RUBY_ENGINE) ? RUBY_ENGINE : "mri"
end

def jruby?

:nodoc:
def jruby?
  ::JRUBY_VERSION if RUBY_PLATFORM == "java"
end

def libxml2?

def libxml2?
  defined?(LIBXML_VERSION)
end

def libxml2_using_packaged?

def libxml2_using_packaged?
  NOKOGIRI_USE_PACKAGED_LIBRARIES
end

def libxml2_using_system?

def libxml2_using_system?
  !libxml2_using_packaged?
end

def loaded_parser_version

def loaded_parser_version
  LIBXML_PARSER_VERSION.
    scan(/^(\d+)(\d\d)(\d\d)(?!\d)/).first.
    collect(&:to_i).
    join(".")
end

def to_hash

def to_hash
  hash_info = {}
  hash_info["warnings"] = []
  hash_info["nokogiri"] = Nokogiri::VERSION
  hash_info["ruby"] = {}
  hash_info["ruby"]["version"] = ::RUBY_VERSION
  hash_info["ruby"]["platform"] = ::RUBY_PLATFORM
  hash_info["ruby"]["description"] = ::RUBY_DESCRIPTION
  hash_info["ruby"]["engine"] = engine
  hash_info["ruby"]["jruby"] = jruby? if jruby?
  if libxml2?
    hash_info["libxml"] = {}
    hash_info["libxml"]["binding"] = "extension"
    if libxml2_using_packaged?
      hash_info["libxml"]["source"] = "packaged"
      hash_info["libxml"]["libxml2_path"] = NOKOGIRI_LIBXML2_PATH
      hash_info["libxml"]["libxslt_path"] = NOKOGIRI_LIBXSLT_PATH
      hash_info["libxml"]["libxml2_patches"] = NOKOGIRI_LIBXML2_PATCHES
      hash_info["libxml"]["libxslt_patches"] = NOKOGIRI_LIBXSLT_PATCHES
    else
      hash_info["libxml"]["source"] = "system"
    end
    hash_info["libxml"]["compiled"] = compiled_parser_version
    hash_info["libxml"]["loaded"] = loaded_parser_version
    hash_info["warnings"] = warnings
  elsif jruby?
    hash_info["xerces"] = Nokogiri::XERCES_VERSION
    hash_info["nekohtml"] = Nokogiri::NEKO_VERSION
  end
  hash_info
end

def to_markdown

def to_markdown
  begin
    require "psych"
  rescue LoadError
  end
  require "yaml"
  "# Nokogiri (#{Nokogiri::VERSION})\n" +
  YAML.dump(to_hash).each_line.map { |line| "    #{line}" }.join
end

def warnings

def warnings
  return [] unless libxml2?
  if compiled_parser_version != loaded_parser_version
    ["Nokogiri was built against LibXML version #{compiled_parser_version}, but has dynamically loaded #{loaded_parser_version}"]
  else
    []
  end
end