Cmark
Elixir NIF for cmark (C), a parser library following the CommonMark spec.
CommonMark
A strongly specified, highly compatible implementation of Markdown
For more information visit http://commonmark.org/.
Install
Prerequisites
You need a C compiler like gcc
or clang
.
mix.exs
Add this to your dependencies:
{:cmark, "~> 0.6"}
Usage
Quick example
Cmark.to_html "a markdown string"
#=> "<p>a markdown string</p>\n"
Cmark.to_html/1
"test" |> Cmark.to_html
#=> "<p>test</p>\n"
["# also works", "* with list", "`of documents`"] |> Cmark.to_html
#=> ["<h1>also works</h1>\n",
# "<ul>\n<li>with list</li>\n</ul>\n",
# "<p><code>of documents</code></p>\n"]
Cmark.to_html/2
callback = fn (html) -> "HTML is #{html}" |> String.strip end
"test" |> Cmark.to_html(callback)
#=> "HTML is <p>test</p>"
callback = fn (htmls) ->
Enum.map(htmls, &String.strip/1) |> Enum.join("<hr>")
end
["list", "test"] |> Cmark.to_html(callback)
#=> "<p>list</p><hr><p>test</p>"
Cmark.to_html_each/2
callback = fn (html) -> "HTML is #{html |> String.strip}" end
["list", "test"] |> Cmark.to_html_each(callback)
#=> ["HTML is <p>list</p>", "HTML is <p>test</p>"]
Other output formats
Thanks to the cmark project this library also supports further output formats:
- XML:
Cmark.to_xml/1,2,3
,Cmark.to_xml_each/2
- Manpage:
Cmark.to_man/1,2,3
,Cmark.to_man_each/2
- CommonMark:
Cmark.to_commonmark/1,2,3
,Cmark.to_commonmark_each/2
- LaTeX:
Cmark.to_latex/1,2,3
,Cmark.to_latex_each/2
Documentation
Latest API docs can be found at: http://hexdocs.pm/cmark/0.6.2/Cmark.htmlLicenses
- Cmark.ex: LICENSE (MIT)
- cmark (C): c_src/COPYING (multiple)