Packages
floki
0.12.1
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/flat_text.ex
defmodule Floki.FlatText do
@moduledoc false
# FlatText is a strategy to get text nodes from a HTML tree without search deep
# in the tree. It only gets the text nodes from the first level of nodes.
# Example
# iex> Floki.FlatText.get([{"a", [], ["The meaning of life is...", {"strong", [], ["something else"]}] }])
# "The meaning of life is..."
@type html_tree :: tuple | list
@spec get(html_tree, binary) :: binary
def get(html_nodes, sep \\ "")
def get(html_nodes, sep) when is_list(html_nodes) do
Enum.reduce(html_nodes, "", fn(html_node, acc) ->
text_from_node(html_node, acc, sep)
end)
end
def get(html_node, sep) do
text_from_node(html_node, "", sep)
end
defp text_from_node({_tag, _attrs, html_nodes}, acc, sep) do
Enum.reduce(html_nodes, acc, fn(html_node, acc) ->
capture_text(html_node, acc, sep)
end)
end
defp text_from_node(text, "", _sep) when is_binary(text), do: text
defp text_from_node(text, acc, sep) when is_binary(text), do: Enum.join([acc, text], sep)
defp text_from_node(_, acc, _), do: acc
defp capture_text(text, "", _sep) when is_binary(text), do: text
defp capture_text(text, acc, sep) when is_binary(text), do: Enum.join([acc, text], sep)
defp capture_text(_html_node, acc, _), do: acc
end