2024-05-21 16:52:37 +00:00
|
|
|
defmodule JOL.Blog.Parser do
|
2024-05-23 20:47:48 +00:00
|
|
|
@zola_post_regex ~r/\+\+\+\n(?<attrs>.*)\n\+\+\+\n\n(?<body>.*)/s
|
|
|
|
|
2024-05-23 20:46:43 +00:00
|
|
|
@doc """
|
|
|
|
Psrses a Zola-style blogpost.
|
|
|
|
"""
|
|
|
|
@spec parse(String.t(), String.t()) ::
|
|
|
|
{%{
|
|
|
|
date: DateTime.t(),
|
|
|
|
draft: boolean(),
|
|
|
|
tags: [String.t()],
|
|
|
|
title: String.t()
|
|
|
|
}, String.t()}
|
2024-05-21 16:43:36 +00:00
|
|
|
def parse(_path, content) do
|
|
|
|
%{"attrs" => attrs, "body" => body} =
|
2024-05-23 20:47:48 +00:00
|
|
|
Regex.named_captures(@zola_post_regex, content)
|
2024-05-21 16:43:36 +00:00
|
|
|
|
2024-05-23 20:01:11 +00:00
|
|
|
{:ok, toml_attrs} = Toml.decode(attrs)
|
|
|
|
|
|
|
|
parsed_attrs = %{
|
|
|
|
title: toml_attrs["title"],
|
|
|
|
draft: toml_attrs["draft"],
|
2024-05-23 20:48:53 +00:00
|
|
|
tags: toml_attrs["taxonomies"]["tags"],
|
|
|
|
date: toml_attrs["date"]
|
2024-05-23 20:01:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
parsed_body = String.trim(body)
|
|
|
|
|
|
|
|
{parsed_attrs, parsed_body}
|
2024-05-21 16:43:36 +00:00
|
|
|
end
|
|
|
|
end
|