Packages
earmark
1.2.2
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).
Current section
Files
Jump to
Current section
Files
lib/earmark/cli.ex
defmodule Earmark.CLI do
def main(argv) do
argv
|> parse_args
|> process
end
@args """
usage:
earmark --help
earmark --version
earmark [ options... <file> ]
convert file from Markdown to HTML.
where options can be any of:
-- code_class_prefix -- gfm -- smartypants -- pedantic -- breaks
"""
@cli_options [:code_class_prefix, :gfm, :smartypants, :pedantic, :breaks]
defp parse_args(argv) do
switches = [
help: :boolean,
version: :boolean
]
aliases = [
h: :help,
v: :version
]
parse = OptionParser.parse(argv, switches: switches, aliases: aliases)
case parse do
{ [ {switch, true } ], _, _ } -> switch
{ options, [ filename ], _ } -> {open_file(filename), options}
{ options, [ ], _ } -> {:stdio, options}
_ -> :help
end
end
defp process(:help) do
IO.puts(:stderr, @args)
IO.puts(:stderr, option_related_help())
end
defp process(:version) do
IO.puts( Earmark.version() )
end
defp process({io_device, options}) do
options = struct(Earmark.Options, booleanify(options))
content = IO.stream(io_device, :line) |> Enum.to_list
Earmark.as_html!(content, options)
|> IO.puts
end
defp booleanify( keywords ), do: Enum.map(keywords, &booleanify_option/1)
defp booleanify_option({k, v}) do
{k,
case Map.get %Earmark.Options{}, k, :does_not_exist do
true -> if v == "false", do: false, else: true
false -> if v == "false", do: false, else: true
:does_not_exist ->
IO.puts( :stderr, "ignoring unsupported option #{inspect k}")
v
_ -> v
end
}
end
defp open_file(filename), do: io_device(File.open(filename, [:utf8]), filename)
defp io_device({:ok, io_device}, _), do: io_device
defp io_device({:error, reason}, filename) do
IO.puts(:stderr, "#{filename}: #{:file.format_error(reason)}")
exit(1)
end
defp option_related_help do
@cli_options
|> Enum.map(&specific_option_help/1)
|> Enum.join("\n")
end
defp specific_option_help( option ) do
" --#{option} defaults to #{inspect(Map.get(%Earmark.Options{}, option))}"
end
end