defmodule Mix.Tasks.Mdex.GenerateSamples do use Mix.Task @shortdoc "Generate samples." @layout ~S""" MDEx Sample - <%= @filename %> <%= @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 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) end defp download_source(url) do {:ok, {_, _, body}} = :httpc.request(url) to_string(body) end end