Packages
earmark
1.4.46
1.5.0-pre1
retired
1.5.0-pre
retired
1.4.49
retired
1.4.48
retired
1.4.47
retired
1.4.46
retired
1.4.45
retired
1.4.44
retired
1.4.43
retired
1.4.42
retired
1.4.41
retired
1.4.40
retired
1.4.39
retired
1.4.38
retired
1.4.37
retired
1.4.36
retired
1.4.35
retired
1.4.34
retired
1.4.33
retired
1.4.32
retired
1.4.31
retired
1.4.30
retired
1.4.29
retired
1.4.28
retired
1.4.27
retired
1.4.26
retired
1.4.25
retired
1.4.24
retired
1.4.23
retired
1.4.22
retired
1.4.21
retired
1.4.20
retired
1.4.19
retired
1.4.18
retired
1.4.17
retired
1.4.16
retired
1.4.16-pre2
retired
1.4.16-pre1
retired
1.4.16-pre
retired
1.4.15
retired
1.4.14
retired
1.4.13
retired
1.4.12
retired
1.4.10
retired
1.4.9
retired
1.4.8
retired
1.4.7
retired
1.4.6
retired
1.4.5
retired
1.4.4
retired
1.4.3
retired
1.4.2
retired
1.4.1
retired
1.4.0
retired
1.3.6
retired
1.3.5
retired
1.3.4
retired
1.3.3
retired
1.3.2
retired
1.3.1
retired
1.3.0
retired
1.2.6
retired
1.2.5
retired
1.2.4
retired
1.2.3
retired
1.2.2
retired
1.2.1
retired
1.2.0
retired
1.1.1
retired
1.1.0
retired
1.0.3
retired
1.0.2
retired
1.0.1
retired
1.0.0
retired
0.2.1
retired
0.2.0
retired
0.1.19
retired
0.1.18
retired
0.1.17
retired
0.1.16
retired
0.1.15
retired
0.1.14
retired
0.1.13
retired
0.1.12
retired
0.1.10
retired
0.1.9
retired
0.1.8
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
Earmark is a pure-Elixir Markdown converter. It is intended to be used as a library (just call Earmark.as_html), but can also be used as a command-line tool (run mix escript.build first). Output generation is pluggable.
Retired package: Deprecated - Earmark is no longer maintained. Migrate to a replacement, for example MDEx (https://hex.pm/packages/mdex).
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/earmark_parser/ast/renderer/ast_walker.ex
defmodule Earmark.Parser.Ast.Renderer.AstWalker do
@moduledoc false
def walk(anything, fun, ignore_map_keys \\ false), do: _walk(anything, fun, ignore_map_keys, false)
def walk_ast(ast, fun), do: _walk_ast(ast, fun, [])
defp _walk(ast, fun, ignore_map_keys, child_of_map)
defp _walk([], _fun, _ignore_map_keys, _child_of_map), do: []
defp _walk(list, fun, ignore_map_keys, _child_of_map) when is_list(list) do
Enum.map(list, &(_walk(&1, fun, ignore_map_keys, false)))
end
defp _walk(map, fun, ignore_map_keys, _child_of_map) when is_map(map) do
map
|> Enum.into(%{}, &(_walk(&1, fun, ignore_map_keys, true)))
end
defp _walk(tuple, fun, ignore_map_keys, child_of_map) when is_tuple(tuple) do
if child_of_map && ignore_map_keys do
_walk_map_element(tuple, fun, ignore_map_keys)
else
tuple
|> Tuple.to_list
|> Enum.map(&(_walk(&1, fun, ignore_map_keys, false)))
|> List.to_tuple
end
end
defp _walk(ele, fun, _ignore_map_keys, _child_of_map), do: fun.(ele)
defp _walk_map_element({key, value}, fun, ignore_map_keys) do
{key, _walk(value, fun, ignore_map_keys, false)}
end
defp _walk_ast(ast, fun, res)
defp _walk_ast([], _fun, res), do: Enum.reverse(res)
defp _walk_ast(stringy, fun, res) when is_binary(stringy), do: _walk_ast([stringy], fun, res)
defp _walk_ast([stringy|rest], fun, res) when is_binary(stringy) do
res1 =
case fun.(stringy) do
[] -> res
[_|_]=trans -> List.flatten([Enum.reverse(trans)|res])
stringy1 -> [stringy1|res]
end
_walk_ast(rest, fun, res1)
end
defp _walk_ast([{tag, atts, content, meta}|rest], fun, res) do
_walk_ast(rest, fun, [{tag, atts, _walk_ast(content, fun, []), meta}|res])
end
defp _walk_ast([list|rest], fun, res) when is_list(list) do
_walk_ast(rest, fun, [_walk_ast(list, fun, [])|res])
end
end