# Makedown
Makedown is a markdown implementation compatible with [ExDoc](https://github.com/elixir-lang/ex_doc)
that uses [Makeup](https://hex.pm/packages/makeup) to highlight code blocks.
It is just `Earmark` with a custom code rendering function.
Besides the main `Markdown` module, the application also contains an `ExDoc`-compatible markdown implementation so you can use it on your project's docs.
## Installation
The package [available in Hex](https://hex.pm/packages/makedown).
It can be installed by adding `makedown` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:makedown, "~> 0.1.0"}
]
end
```
Documentation can be found on [HexDocs](https://hexdocs.pm).
## User Guide
The API is compatible with [Earmark](https://github.com/pragdave/earmark). The user-facing functions are:
```elixir
Makedown.as_html!(text, options \\ %{})
Makedown.as_html(text, options \\ %{})
```
where options can be a dict or a `%Earmark.Options{}` struct.
## Integration with `ExDoc`
`ExDoc` can be configured to use alternative Markdown processors.
Even though `Makedown` itself is *not* compatible with `ExDoc`,
it ships with the `Makedown.ExDoc` module which is compatible.
To use `Makedown` with `ExDocs`, follow these steps
#### 1. Make `ExDoc` use `Makedown` for markdown rendering
For that, add the following line to your app's `config.exs` file:
config :ex_doc, :markdown_processor, Makedown.ExDoc
Note that it must de `Makedown.ExDoc` and not `Makedown`.
`Makedown` itself is not compatible with `ExDoc`.
#### 2. Generate the `Makedown` assets.
`Makedown` needs some special CSS stylesheets to render render the code properly,
and a little Javascript file (optional) for full functionality.
Those files must be generated and included in the `ExDoc` documentation.
To generate the files, run the following mix task:
mix makedown.ex_doc.assets
The assets will be placed at `priv/doc/assets`.
This directory will be created if it doesn't already exist.
You can move those files to an alternative location, as long as you edit the `ExDoc` configuration options accordingly.
#### 3. Configure `ExDoc` to use the assets
After generating the assets, edit your project's `:docs` configuration options
so that it uses the assets we've generated.
Just add the following lines to the `:docs` config option in your MixFile:
```elixir
def project do
[
...
docs: [
# This is the location where the mix task has placed the assets
# You can move them to another location, ad long as you change
# this option accordingly.
assets: "priv/doc/assets",
# Extra CSS
before_closing_head_tag: ~S(<link rel="stylesheet" href="assets/makedown.css"/>),
# Extra Javascript
before_closing_body_tag: ~S(<script src="assets/makedown.js"></script>)
]
]
end
```
### ExDoc themes
`Makedown` includes a CSS theme that plays relatively well with the `ExDocs` theme.
The "day mode" theme is a slightly changed version of Pygments' *Tango* style.
The "night mode" theme is a slightly changed version of Pygments' *ParaisoDark* theme.
I'm not 100% happy with the themes (especially the one for the night mode), and welcome contributions.