Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/filterkaapi/pandex

Lightweight Elixir wrapper for Pandoc. Convert Markdown, CommonMark, HTML, Latex... to HTML, HTML5, opendocument, rtf, texttile, asciidoc, markdown, json and others
https://github.com/filterkaapi/pandex

Last synced: 2 months ago
JSON representation

Lightweight Elixir wrapper for Pandoc. Convert Markdown, CommonMark, HTML, Latex... to HTML, HTML5, opendocument, rtf, texttile, asciidoc, markdown, json and others

Awesome Lists containing this project

README

        

# 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 `_to_()`.

## Examples

```elixir
iex> Pandex.gfm_to_html("# Title \n\n## List\n\n- one\n- two\n- three\n")
{:ok, "

Title

\n

List

\n
    \n
  • one
  • \n
  • two
  • \n
  • three
  • \n
\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, "

Title

\n

List

\n
    \n
  • one

  • \n
  • two

  • \n
  • three

  • \n
\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)