defmodule Mix.Tasks.Mdex.GenerateSamples do use Mix.Task @shortdoc "Generate samples." @layout ~S"""
https://github.com/leandrocp/mdex
<% end %> <%= @inner_content %> """ @files [ {"req_readme.md", ~c"https://raw.githubusercontent.com/wojtekmach/req/main/README.md"} ] @impl true def run(_args) do :inets.start() :ssl.start() for {filename, url} <- @files do generate(filename, url) end langs() end defp generate(filename, url) do Mix.shell().info("#{filename} - #{url}") md = MDEx.to_html(download_source(url), features: [syntax_highlight_theme: "github_light"]) html = EEx.eval_string(@layout, assigns: %{filename: filename, inner_content: md} ) dest_path = Path.join([:code.priv_dir(:mdex), "generated", "samples", "#{filename}.html"]) File.write!(dest_path, html) generate_index() end defp generate_index do Mix.shell().info("index.html") src_path = Path.join([:code.priv_dir(:mdex), "generated", "samples"]) links = (src_path <> "/*.html") |> Path.wildcard() |> Enum.map(&Path.basename/1) |> Enum.reject(&(&1 == "index.html")) |> Enum.map(fn sample -> ["", "\n"] end) inner_content = [ "