README.MD

# Pandex

Pandex is a lightweight Elixir wrapper for [Pandoc](http://pandoc.org). It has no dependencies other than Pandoc itself. Pandex unit tests are currently run again Pandoc version 2.5.

Pandex enables you to perform any combination of the conversions below:

| Convert From (any) | Convert To (any)   |
|:-------------------|:-------------------|
| commonmark         | asciidoc           |
| gfm                | beamer             |
| html               | commonmark         |
| json               | context            |
| latex              | docbook            |
| markdown           | dzslides           |
| markdown_github *  | gfm                |
| markdown_mmd       | html               |
| markdown_phpextra  | html5              |
| markdown_strict    | json               |
| rst                | latex              |
| textile            | man                |
|                    | markdown           |
|                    | markdown_github *  |
|                    | markdown_mmd       |
|                    | markdown_phpextra  |
|                    | markdown_strict    |
|                    | mediawiki          |
|                    | opendocument       |
|                    | org                |
|                    | plain              |
|                    | rst                |
|                    | rtf                |
|                    | s5                 |
|                    | slidy              |
|                    | texinfo            |
|                    | textile            |

`*` Deprecated: `markdown_github`. Use `gfm` instead.

# Installation

1. Pandex requires Pandoc to work. [Install Pandoc](http://pandoc.org/installing.html) for your operating system.

2. Add Pandex to `mix.exs` as follows:

```elixir
defmodule YourApp.Mixfile do
  defp deps do
    [
      {:pandex, "~> 0.2.0"}
    ]
  end
end
```

3. Run `mix deps.get` to install `Pandex`.

# Usage

Pandex follows the syntax of `<format-from>_to_<format-to>(<string>)`.

## Examples

```elixir
iex> Pandex.gfm_to_html("# Title \n\n## List\n\n- one\n- two\n- three\n")
{:ok, "<h1 id=\"title\">Title</h1>\n<h2 id=\"list\">List</h2>\n<ul>\n<li>one</li>\n<li>two</li>\n<li>three</li>\n</ul>\n"}

iex> Pandex.latex_to_html5("\\section{Title}\n\n\\subsection{List}\n\n\\begin{itemize}\n\\tightlist\n\\item\n  one\n\\item\n  two\n\\item\n  three\n\\end{itemize}\n")
{:ok, "<h1 id=\"title\">Title</h1>\n<h2 id=\"list\">List</h2>\n<ul>\n<li><p>one</p></li>\n<li><p>two</p></li>\n<li><p>three</p></li>\n</ul>\n"}

iex> Pandex.latex_to_json("\\section{Title}\\label{title}\n\n\\subsection{List}\\label{list}\n\n\\begin{itemize}\n\\item\n  one\n\\item\n  two\n\\item\n  three\n\\end{itemize}\n")
{:ok, "{\"blocks\":[{\"t\":\"Header\",\"c\":[1,[\"title\",[],[]],[{\"t\":\"Str\",\"c\":\"Title\"}]]},{\"t\":\"Header\",\"c\":[2,[\"list\",[],[]],[{\"t\":\"Str\",\"c\":\"List\"}]]},{\"t\":\"BulletList\",\"c\":[[{\"t\":\"Para\",\"c\":[{\"t\":\"Str\",\"c\":\"one\"}]}],[{\"t\":\"Para\",\"c\":[{\"t\":\"Str\",\"c\":\"two\"}]}],[{\"t\":\"Para\",\"c\":[{\"t\":\"Str\",\"c\":\"three\"}]}]]}],\"pandoc-api-version\":[1,17,5,4],\"meta\":{}}\n"}
```

## Using with your app

```elixir
defmodule YourApp do
  import Pandex

  def convert(string)  do
    {:ok, output} = markdown_to_html(string)
    IO.puts(output)
  end
end
```

You can also give a file as an input. The output will however be a string.

```elixir
defmodule YourApp do
  import Pandex

  def convert(file)  do
    {:ok, output} = markdown_file_to_html(file)
    IO.puts(output)
  end
end
```

# License

[MIT License](LICENSE)