Current section
Files
Jump to
Current section
Files
lib/frontmark.ex
defmodule Frontmark do
@moduledoc """
Parses a frontmatter+markdown page
"""
def parse_yaml(string) do
case YamlElixir.read_from_string(string) do
{:ok, yaml} ->
yaml
{:error, _error} ->
nil
end
end
def parse(text) do
text
|> String.split(Application.get_env(:frontmark, :separator), parts: 2)
end
def process([frontmatter, markdown]) do
[Frontmark.parse_yaml(frontmatter), Earmark.as_html!(markdown)]
end
def page([yaml, html]) do
Enum.reduce(yaml, %{"content" => html}, fn {key, value}, acc ->
Map.put(acc, key, value)
end)
end
def filepath(path) do
partial = Application.get_env(:frontmark, :pages_folder) <> path
if String.slice(partial, -3, 3) == ".md" do
partial
else
partial <> ".md"
end
end
def get(path) do
path
|> Frontmark.filepath()
|> File.read!()
|> Frontmark.parse()
|> Frontmark.process()
|> Frontmark.page()
end
end