defmodule Mix.Tasks.Mdex.GenerateSamples do use Mix.Task @shortdoc "Generate samples." @layout ~S"""
<% 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 = [
"