Packages
io_ansi_plus
0.1.18
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Functionality to render ANSI escape sequences. Clone of module IO.ANSI but supporting named xterm colors.
Current section
Files
Jump to
Current section
Files
lib/io/ansi/plus/ie.ex
defmodule IO.ANSI.Plus.IE do
alias IO.ANSI.Plus, as: ANSI
def color_samples do
:io_ansi_plus
|> Application.get_env(:colors)
|> Enum.map(fn %{code: code, hex: hex, names: names} ->
"#" <> hex_val = hex
name_list =
if Enum.empty?(names) do
"`:color#{code}` "
else
Enum.reduce(names, "", fn name, acc ->
acc <> "`#{inspect(name)}` "
end)
end
"- " <>
"#{name_list}(#{code})"
end)
end
def print_color_samples do
color_samples() |> Enum.each(&IO.puts/1)
end
@spec fave_names :: %{(name :: atom) => code :: 0..255}
def fave_names do
:io_ansi_plus
|> Application.get_env(:colors)
|> Enum.reduce(%{}, fn
%{code: _code, names: []}, acc -> acc
%{code: code, names: [name | _]}, acc -> Map.put(acc, name, code)
end)
end
@spec fave_name_codes :: %{(code :: 0..255) => name :: atom}
def fave_name_codes do
fave_names() |> Map.new(fn {name, code} -> {code, name} end)
end
@spec keyword :: keyword(code :: 16..255)
def keyword do
codes = fave_name_codes()
for i <- 16..255 do
if codes[i], do: {codes[i], i}, else: {:"color#{i}", i}
end
end
@spec keywords :: [keyword(code :: 16..255)]
def keywords do
keyword() |> Enum.chunk_every(6)
end
def black_foreground_codes do
[7, 10, 11, 14, 15] ++
Enum.to_list(34..51) ++
Enum.to_list(70..87) ++
Enum.to_list(106..123) ++
Enum.to_list(142..159) ++
Enum.to_list(178..195) ++ Enum.to_list(214..231) ++ Enum.to_list(244..255)
end
@spec print_xterm_colors(10..30) :: :ok
def print_xterm_colors(column_width \\ 17) when column_width in 10..30 do
for keyword <- keywords() do
Enum.each(keyword, fn {name, code} ->
[
:"#{name}_background",
:light_white,
if(code in black_foreground_codes(), do: :black, else: :light_white),
text(name, code, column_width)
]
|> ANSI.write()
end)
IO.write("\n")
end
IO.write("\n")
end
def adjust_text(text, column_width) do
if String.length(text) > column_width - 1 do
String.slice(text, 0..(column_width - 3)) <> "…"
else
text
end
|> String.pad_trailing(column_width)
end
def text(name, column_width) do
"#{inspect(name)}" |> adjust_text(column_width)
end
def text(name, code, column_width) do
text = "#{inspect(name)} (#{code})"
if String.length(text) > column_width - 1 do
"#{inspect(name)}"
else
text
end
|> adjust_text(column_width)
end
def print_standard_colors(column_width \\ 15) do
[:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
|> Enum.each(fn name ->
[
:"#{name}_background",
if(name == :white, do: :black, else: :light_white),
text(name, column_width)
]
|> ANSI.write()
end)
IO.write("\n")
end
def print_light_colors(column_width \\ 15) do
[:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
|> Enum.each(fn name ->
name = :"light_#{name}"
[
:"#{name}_background",
if(name in [:light_white, :light_yellow, :light_green, :light_cyan],
do: :black,
else: :light_white
),
text(name, column_width)
]
|> ANSI.write()
end)
IO.write("\n\n")
end
def print_system_colors(column_width \\ 15) do
codes = fave_name_codes()
keywords =
for i <- 0..15 do
if codes[i], do: {codes[i], i}, else: {:"color#{i}", i}
end
|> Enum.chunk_every(8)
for keyword <- keywords do
Enum.each(keyword, fn {name, code} ->
[
:"#{name}_background",
if(code in black_foreground_codes(), do: :black, else: :light_white),
text(name, code, column_width)
]
|> ANSI.write()
end)
IO.write("\n")
end
IO.write("\n")
end
def print_chart do
IO.write("\n")
print_standard_colors(12)
print_light_colors(12)
print_system_colors(12)
print_xterm_colors(18)
end
end