Packages
floki
0.35.2
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.1
0.37.0
0.36.3
0.36.2
0.36.1
0.36.0
0.35.4
0.35.3
0.35.2
0.35.1
0.35.0
0.34.3
0.34.2
0.34.1
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.1
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Floki is a simple HTML parser that enables search for nodes using CSS selectors.
Current section
Files
Jump to
Current section
Files
lib/floki/html_parser.ex
defmodule Floki.HTMLParser do
@moduledoc """
A entry point to dynamic dispatch functions to
the configured HTML parser.
The configuration can be done with the `:html_parser`
option when calling the functions, or for the `:floki` application:
Floki.parse_document(document, html_parser: Floki.HTMLParser.FastHtml)
Or:
use Mix.Config
config :floki, :html_parser, Floki.HTMLParser.Mochiweb
The default parser is Mochiweb, which comes with Floki.
You can also choose between Html5ever or FastHtml.
And it's possible to pass down options to the parsers using
the `parser_args` option.
This module is also a behaviour that those parsers must implement.
"""
@default_parser Floki.HTMLParser.Mochiweb
@typep result(success) :: {:ok, success} | {:error, String.t()}
@typep html :: binary() | iodata()
@callback parse_document(html(), Keyword.t()) :: result(Floki.html_tree())
@callback parse_fragment(html(), Keyword.t()) :: result(Floki.html_tree())
@callback parse_document_with_attributes_as_maps(html(), Keyword.t()) ::
result(Floki.html_tree())
@callback parse_fragment_with_attributes_as_maps(html(), Keyword.t()) ::
result(Floki.html_tree())
def parse_document(html, opts \\ []) do
{parser_args, opts} = Keyword.pop(opts, :parser_args, [])
parser = parser(opts)
if opts[:attributes_as_maps] do
parser.parse_document_with_attributes_as_maps(html, parser_args)
else
parser.parse_document(html, parser_args)
end
end
def parse_fragment(html, opts \\ []) do
{parser_args, opts} = Keyword.pop(opts, :parser_args, [])
parser = parser(opts)
if opts[:attributes_as_maps] do
parser.parse_fragment_with_attributes_as_maps(html, parser_args)
else
parser.parse_fragment(html, parser_args)
end
end
defp parser(opts) do
opts[:html_parser] || Application.get_env(:floki, :html_parser, @default_parser)
end
end