Packages
ex_doc
0.30.3
0.40.3
0.40.2
0.40.1
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.3
0.37.2
0.37.1
0.37.0
0.37.0-rc.2
0.37.0-rc.1
0.37.0-rc.0
0.36.1
0.36.0
0.35.1
0.35.0
0.34.2
0.34.1
0.34.0
0.33.0
0.32.2
0.32.1
0.32.0
0.31.2
0.31.1
0.31.0
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.6
0.28.5
0.28.4
0.28.3
0.28.2
0.28.1
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.0
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.2
0.24.1
0.24.0
0.23.0
0.22.6
0.22.5
0.22.4
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.19.0-rc
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
retired
0.17.1
0.17.0
retired
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
ExDoc is a documentation generation tool for Elixir
Current section
Files
Jump to
Current section
Files
lib/ex_doc/formatter/epub/templates.ex
defmodule ExDoc.Formatter.EPUB.Templates do
@moduledoc false
require EEx
import ExDoc.Utils, only: [before_closing_body_tag: 2, before_closing_head_tag: 2]
alias ExDoc.Formatter.HTML
alias ExDoc.Formatter.HTML.Templates, as: H
@doc """
Generate content from the module template for a given `node`
"""
def module_page(config, module_node) do
summary = H.module_summary(module_node)
module_template(config, module_node, summary)
end
@doc """
Generated ID for static file
"""
def static_file_to_id(static_file) do
prefix = static_file |> HTML.filename_to_title() |> HTML.text_to_id()
extension = static_file |> Path.extname() |> String.replace_prefix(".", "-")
"#{prefix}#{extension}"
end
@doc """
Creates the Package Document Definition.
this definition encapsulates the publication metadata and the resource
information that constitute the EPUB publication. This definition also
includes the default reading order.
See http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-def.
"""
EEx.function_from_file(
:def,
:content_template,
Path.expand("templates/content_template.eex", __DIR__),
[:config, :nodes, :uuid, :datetime, :static_files],
trim: true
)
@doc """
Creates a chapter which contains all the details about an individual module.
This chapter can include the following sections: *functions*, *types*, *callbacks*.
"""
EEx.function_from_file(
:def,
:module_template,
Path.expand("templates/module_template.eex", __DIR__),
[:config, :module, :summary],
trim: true
)
@doc """
Creates the table of contents.
This template follows the EPUB Navigation Document Definition.
See http://www.idpf.org/epub/30/spec/epub30-contentdocs.html#sec-xhtml-nav.
"""
EEx.function_from_file(
:def,
:nav_template,
Path.expand("templates/nav_template.eex", __DIR__),
[:config, :nodes],
trim: true
)
@doc """
Creates a new chapter when the user provides additional files.
"""
EEx.function_from_file(
:def,
:extra_template,
Path.expand("templates/extra_template.eex", __DIR__),
[:config, :title, :title_content, :content],
trim: true
)
@doc """
Creates the cover page for the EPUB document.
"""
EEx.function_from_file(
:def,
:title_template,
Path.expand("templates/title_template.eex", __DIR__),
[:config],
trim: true
)
EEx.function_from_file(
:defp,
:head_template,
Path.expand("templates/head_template.eex", __DIR__),
[:config, :page],
trim: true
)
EEx.function_from_file(
:defp,
:nav_item_template,
Path.expand("templates/nav_item_template.eex", __DIR__),
[:name, :nodes],
trim: true
)
EEx.function_from_file(
:defp,
:toc_item_template,
Path.expand("templates/toc_item_template.eex", __DIR__),
[:nodes],
trim: true
)
"templates/media-types.txt"
|> Path.expand(__DIR__)
|> File.read!()
|> String.split("\n", trim: true)
|> Enum.each(fn line ->
[extension, media] = String.split(line, ",")
defp media_type("." <> unquote(extension)) do
unquote(media)
end
end)
defp media_type(arg),
do: raise("asset with extension #{inspect(arg)} is not supported by EPUB format")
end