All doctests in this README have been extracted from the code by Extractly and are therefore tested

TagCloud

CICoverage StatusHex.pmHex.pmHex.pm

iex(1)> TagCloud.Compiler.dsl_to_attributes("12 16 100")
[{"style", "color: #000000; font-size: 16pt; font-weight: 100;"}]
iex(2)> markdown = [
...(2)> "Elixir %tc: 12 20 800", "",
...(2)> "Erlang %tc: 10/red 2em", "",
...(2)> "Phoenix %tc: 8/sandybrown" ]
...(2)> render_html(markdown)
...(2)> markdown
...(2)> |> Earmark.as_ast!(annotations: "%tc:", inner_html: true)
...(2)> |> make_tag_clouds
...(2)> |> Earmark.transform
"<span style=\"color: #000000; font-size: 20pt; font-weight: 800;\">\nElixir </span>\n<span style=\"color: #ff7171; font-size: 2em;\">\nErlang </span>\n<span style=\"color: #ed6d00;\">\nPhoenix </span>\n"

We can render to html directly with render_html, which is a shortcut for the above

iex(3)> markdown = [
...(3)> "Elixir %tc: 12 20 800", "",
...(3)> "Erlang %tc: 10/red 2em", "",
...(3)> "Phoenix %tc: 8/sandybrown" ]
...(3)> render_html(markdown)
"<span style=\"color: #000000; font-size: 20pt; font-weight: 800;\">\nElixir </span>\n<span style=\"color: #ff7171; font-size: 2em;\">\nErlang </span>\n<span style=\"color: #ed6d00;\">\nPhoenix </span>\n"

Or just transform the AST

iex(4)> markdown = [
...(4)> "Elixir %tc: 12 20 800", "",
...(4)> "Erlang %tc: 10/red 2em", "",
...(4)> "Phoenix %tc: 8/sandybrown" ]
...(4)> render_ast(markdown)
[
{"span", [{"style", "color: #000000; font-size: 20pt; font-weight: 800;"}], ["Elixir "], %{annotation: "%tc: 12 20 800"}},
{"span", [{"style", "color: #ff7171; font-size: 2em;"}], ["Erlang "], %{annotation: "%tc: 10/red 2em"}},
{"span", [{"style", "color: #ed6d00;"}], ["Phoenix "], %{annotation: "%tc: 8/sandybrown"}}
]

which is a shortcut for this

iex(5)> markdown = [
...(5)> "Elixir %tc: 12 20 800", "",
...(5)> "Erlang %tc: 10/red 2em", "",
...(5)> "Phoenix %tc: 8/sandybrown" ]
...(5)> markdown
...(5)> |> Earmark.as_ast!(annotations: "%tc:", inner_html: true)
...(5)> |> make_tag_clouds
[
{"span", [{"style", "color: #000000; font-size: 20pt; font-weight: 800;"}], ["Elixir "], %{annotation: "%tc: 12 20 800"}},
{"span", [{"style", "color: #ff7171; font-size: 2em;"}], ["Erlang "], %{annotation: "%tc: 10/red 2em"}},
{"span", [{"style", "color: #ed6d00;"}], ["Phoenix "], %{annotation: "%tc: 8/sandybrown"}}
]

Of course not annotated blocks are not effected

iex(6)> markdown = [
...(6)> "Elixir %tc: 12 20 800", "",
...(6)> "Erlang", "",
...(6)> "Phoenix %tc: 8/sandybrown" ]
...(6)> render_ast(markdown)
[
{"span", [{"style", "color: #000000; font-size: 20pt; font-weight: 800;"}], ["Elixir "], %{annotation: "%tc: 12 20 800"}},
{"p", [], ["Erlang"], %{}},
{"span", [{"style", "color: #ed6d00;"}], ["Phoenix "], %{annotation: "%tc: 8/sandybrown"}}
]

And different annotations can be used, but than make_tag_clouds becomes a NOP

iex(7)> markdown = [
...(7)> "Elixir %%%: 12 20 800", "",
...(7)> "Erlang %%%: 10/red 2em", "",
...(7)> "Phoenix %%%: 8/sandybrown" ]
...(7)> markdown
...(7)> |> Earmark.as_ast!(annotations: "%%%:", inner_html: true)
...(7)> |> make_tag_clouds
[
{"p", [], ["Elixir "], %{annotation: "%%%: 12 20 800"}},
{"p", [], ["Erlang "], %{annotation: "%%%: 10/red 2em"}},
{"p", [], ["Phoenix "], %{annotation: "%%%: 8/sandybrown"}}
]

TagCloud.version/0

A convenience method to access this library's version

iex(8)> {:ok, _} = Version.parse(version())

TagCloud.Cli

usage:

tag_cloud --help
tag_cloud --version
tag_cloud [ options... <file> ]

convert file from Markdown to HTML.using Earmark and allowing for TagCloud annotations

cond do

file ends with .eex -> treat it as an EEx template
true -> treat file as plain markdown

TagCloud.version/0

A convenience method to access this library's version

iex(8)> {:ok, _} = Version.parse(version())

TagCloud.Compiler

Compiles tag cloud specifications of the form color font_size font_weight color to corresponding HTML attributes

TagCloud.Compiler.dsl_to_attributes/1

Implements the compilation

Gray Scale

iex(1)> dsl_to_attributes("10 12 100")
[{"style", "color: #717171; font-size: 12pt; font-weight: 100;"}]

Scale on Predefined Colors

All 140 color names defined by the CSS standard are supported. The complete list can be found here

iex(2)> dsl_to_attributes("8/fuchsia 3em 800")
[{"style", "color: #ff9bff; font-size: 3em; font-weight: 800;"}]

Just use your own color

iex(3)> dsl_to_attributes("#cafe00")
[{"style", "color: #cafe00;"}]

TagCloud.EarmarkAst

An Earmark AST processor which will change annotated tag cloud paragraphs into spans with the necessary attributes

Needs Earmark version 1.4.16-pre2 or later

E.g.

iex(1)> markdown = [
...(1)> "Elixir %tc: 10/blue 18 800", "",
...(1)> "Ruby %tc: 4/red 10 100"]
...(1)> render_html(markdown)
"<span style=\"color: #7171ff; font-size: 18pt; font-weight: 800;\">\nElixir </span>\n<span style=\"color: #ffd4d4; font-size: 10pt; font-weight: 100;\">\nRuby </span>\n"

Author

Copyright © 2021 Robert Dober, robert.dober@gmail.com,

LICENSE

Same as Elixir, which is Apache License v2.0. Please refer to LICENSE for details.