defmodule PhoenixKit.Modules.Pages.SimpleRenderer do @moduledoc """ Simple markdown rendering for Pages module. Converts markdown files to HTML with metadata extraction. """ alias PhoenixKit.Modules.Pages.FileOperations alias PhoenixKit.Modules.Pages.HtmlMetadata @doc """ Renders a markdown file to HTML. ## Examples iex> SimpleRenderer.render_file("/test.md") {:ok, "

Hello World

"} iex> SimpleRenderer.render_file("/missing.md") {:error, :enoent} """ def render_file(relative_path) do case FileOperations.read_file(relative_path) do {:ok, content} -> html = render_markdown(content) {:ok, html} error -> error end end @doc """ Renders a markdown file to HTML with metadata extraction. Returns both the rendered HTML and the parsed metadata. ## Examples iex> SimpleRenderer.render_file_with_metadata("/test.md") {:ok, "

Hello World

", %{status: "published", ...}} iex> SimpleRenderer.render_file_with_metadata("/missing.md") {:error, :enoent} """ def render_file_with_metadata(relative_path) do case FileOperations.read_file(relative_path) do {:ok, content} -> # Extract metadata {metadata, content_without_metadata} = case HtmlMetadata.parse(content) do {:ok, metadata, stripped_content} -> {metadata, stripped_content} {:error, :no_metadata} -> # No metadata found, use defaults {HtmlMetadata.default_metadata(), content} end # Render markdown (without metadata block) html = render_markdown(content_without_metadata) {:ok, html, metadata} error -> error end end @doc """ Converts markdown content to HTML. ## Examples iex> SimpleRenderer.render_markdown("# Hello") "

Hello

" """ def render_markdown(content) do case Earmark.as_html(content) do {:ok, html, _warnings} -> html {:error, _html, errors} -> raise "Markdown parsing failed: #{inspect(errors)}" end end end