1- defmodule ExDoc.Formatter.Markdown do
1+ defmodule ExDoc.Formatter.MARKDOWN do
22 @moduledoc false
33
4- @mimetype "text/markdown"
54 @assets_dir "MD/assets"
65 alias __MODULE__.{Assets, Templates}
76 alias ExDoc.Formatter.HTML
@@ -28,24 +27,24 @@ defmodule ExDoc.Formatter.Markdown do
2827
2928 extras =
3029 config
31- |> HTML.build_extras(".xhtml ")
30+ |> HTML.build_extras(".md ")
3231 |> Enum.chunk_by(& &1.group)
3332 |> Enum.map(&{hd(&1).group, &1})
3433
3534 config = %{config | extras: extras}
3635
37- static_files = HTML.generate_assets("MD", default_assets(config), config)
38- HTML.generate_logo(@assets_dir, config)
39- HTML.generate_cover(@assets_dir, config)
40-
41- # generate_nav(config, nodes_map)
36+ generate_nav(config, nodes_map)
4237 generate_extras(config)
4338 generate_list(config, nodes_map.modules)
4439 generate_list(config, nodes_map.tasks)
4540
46- {:ok, epub} = generate_zip(config.output)
47- File.rm_rf!(config.output)
48- Path.relative_to_cwd(epub)
41+ # if config[:generate_zip] do # TODO: add a command line flag?
42+ # {:ok, zip} = generate_zip(config.output)
43+ # File.rm_rf!(config.output)
44+ # Path.relative_to_cwd(zip)
45+ # else
46+ config.output |> Path.join("index.md") |> Path.relative_to_cwd()
47+ # end
4948 end
5049
5150 defp normalize_config(config) do
@@ -57,6 +56,23 @@ defmodule ExDoc.Formatter.Markdown do
5756 %{config | output: output}
5857 end
5958
59+ defp normalize_output(output) do
60+ output
61+ |> String.replace(~r/\r\n|\r|\n/, "\n")
62+ |> String.replace(~r/\n{2,}/, "\n")
63+ end
64+
65+ defp generate_nav(config, nodes) do
66+ nodes =
67+ Map.update!(nodes, :modules, fn modules ->
68+ modules |> Enum.chunk_by(& &1.group) |> Enum.map(&{hd(&1).group, &1})
69+ end)
70+
71+ content = Templates.nav_template(config, nodes)
72+ |> normalize_output()
73+ File.write("#{config.output}/MD/index.md", content)
74+ end
75+
6076 defp generate_extras(config) do
6177 for {_title, extras} <- config.extras do
6278 Enum.each(extras, fn %{id: id, title: title, title_content: _title_content, source: content} ->
@@ -66,6 +82,7 @@ defmodule ExDoc.Formatter.Markdown do
6682
6783 #{content}
6884 """
85+ |> normalize_output()
6986
7087 if File.regular?(output) do
7188 Utils.warn("file #{Path.relative_to_cwd(output)} already exists", [])
@@ -77,8 +94,6 @@ defmodule ExDoc.Formatter.Markdown do
7794 end
7895
7996
80-
81-
8297 defp generate_list(config, nodes) do
8398 nodes
8499 |> Task.async_stream(&generate_module_page(&1, config), timeout: :infinity)
@@ -99,13 +114,6 @@ defmodule ExDoc.Formatter.Markdown do
99114
100115 ## Helpers
101116
102- defp default_assets(config) do
103- [
104- {Assets.dist(config.proglang), "MD/dist"},
105- {Assets.metainfo(), "META-INF"}
106- ]
107- end
108-
109117 defp files_to_add(path) do
110118 Enum.reduce(Path.wildcard(Path.join(path, "**/*")), [], fn file, acc ->
111119 case File.read(file) do
@@ -120,6 +128,7 @@ defmodule ExDoc.Formatter.Markdown do
120128
121129 defp generate_module_page(module_node, config) do
122130 content = Templates.module_page(config, module_node)
131+ |> normalize_output()
123132 File.write("#{config.output}/MD/#{module_node.id}.md", content)
124133 end
125134
0 commit comments