Current section
Files
Jump to
Current section
Files
lib/cmark.ex
defmodule Cmark do
@moduledoc """
Compiles Markdown formatted text into HTML
"""
@doc """
Compiles one or more (list) Markdown documents to HTML and returns result
"""
def to_html(input) when is_list(input) do
parse_doc_list input
end
def to_html(input) when is_bitstring(input) do
parse_doc(input)
end
@doc """
Compiles one or more (list) Markdown documents to HTML and calls function with result
"""
def to_html(input, callback) when is_list(input) do
parse_doc_list input, callback
end
def to_html(input, callback) when is_bitstring(input) do
parse_doc input, callback
end
@doc """
Compiles a list of Markdown documents and calls function for each item
"""
def to_html_each(input, callback) when is_list(input) do
parse_doc_list_each input, callback
end
### PRIVATE
defp parse_doc_list(documents) do
documents
|> Enum.map(&Task.async(fn -> parse_doc(&1) end))
|> Enum.map(&Task.await(&1))
end
defp parse_doc_list(documents, callback) do
callback.(parse_doc_list(documents))
end
defp parse_doc_list_each(documents, callback) do
documents
|> Enum.map(&Task.async(fn -> parse_doc(&1, callback) end))
|> Enum.map(&Task.await(&1))
end
defp parse_doc(document) do
Cmark.Nif.to_html(document)
end
defp parse_doc(document, callback) do
callback.(Cmark.Nif.to_html(document))
end
end