# AnsiToHTML
Small library to convert ANSI Styling codes to HTML using [phoenix_html](https://github.com/phoenixframework/phoenix_html).
The library is not solely intended for use with `Phoenix` and can be easily used without it.
## Installation
The package can be installed by adding `ansi_to_html` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:ansi_to_html, "~> 0.6.0"}]
end
```
### Why and how should I use this?
I wrote this package so I could have all the nice things that Elixir's `Kernel.inspect/2` does for my productivity, all from the comfort of my `Phoenix.View`.
#### Generating a HTML String:
This is useful if you're not using `Phoenix`:
```elixir
iex> AnsiToHTML.generate_html("\e[34m[\e[0m\e[32m:hello\e[0m\e[34m]\e[0m")
"<pre><span style=\"color: blue;color: green;color: blue;\">[:hello]</span></pre>"
```
#### Generating Phoenix HTML Tags:
This is useful if you actually are using `Phoenix` and want to render in your views:
```elixir
iex> AnsiToHTML.generate_phoenix_html("\e[34m[\e[0m\e[32m:hello\e[0m\e[34m]\e[0m")
{:safe,
[60, "pre", [], 62,
[[60, "span",
[[32, "style", 61, 34, "color: blue;color: green;color: blue;", 34]], 62,
["[", ":hello", "]"], 60, 47, "span", 62]], 60, 47, "pre", 62]}
```
## Custom Themes
You can use the `AnsiToHTML.Theme` struct to map ANSI codes to html.
The struct defaults to a `<pre>` tag containing common tags such as `<strong>`, `<i>`, `<u>`, or otherwise `<span>` tags with inline styles.
## Phoenix View Helper
You can define a helper function in your view which uses `AnsiToHTML` to convert a pretty `Kernel.inspect/2` to html:
```elixir
defmodule MyApp.Web do
# ...
def view do
quote do
# ...
# See the docs on Inspect.Opts for more information
# https://hexdocs.pm/elixir/Inspect.Opts.html
@syntax_colors [string: :green, map: :blue]
def pretty_inspect(variable), do: AnsiToHTML.generate_phoenix_html inspect variable, pretty: true, syntax_colors: @syntax_colors
end
end
# ...
end
```
Now you can use the helper function in your templates:
```elixir
<%= pretty_inspect @conn %>
<%= pretty_inspect @assigns %>
```