Packages
io_ansi_table
0.4.32
1.0.40
1.0.39
1.0.38
1.0.37
1.0.36
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.32
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
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
Writes data to "stdio" in a table with borders and colors. Can choose a table style to change the look of the table.
Current section
Files
Jump to
Current section
Files
lib/io/ansi/table/heading.ex
defmodule IO.ANSI.Table.Heading do
@moduledoc """
Functions related to the column headings of a table.
"""
alias IO.ANSI.Table.{Column, Spec}
@doc """
Updates the headings of a table specification.
## Examples
iex> alias IO.ANSI.Table.Heading
iex> spec = %{
...> headers: [:c4, :c1, :c2],
...> header_fixes: %{},
...> headings: [],
...> sort_attrs: [:asc, nil, nil],
...> sort_specs: [:c4],
...> sort_symbols: [desc: "↓", pos: :trailing, asc: "↑"]
...> }
iex> %{headings: headings} = Heading.headings(spec)
iex> headings
["C4↑", "C1", "C2"]
"""
@spec headings(Spec.t()) :: Spec.t()
def headings(spec) do
headings = Enum.map(spec.headers, &to_heading(&1, spec))
%{spec | headings: headings}
end
## Private functions
# @doc """
# Converts a `header` to a "heading".
# """
@spec to_heading(any, Spec.t()) :: String.t()
defp to_heading(header, spec) do
sort_symbol(header, spec, :leading) <>
titlecase(header, spec) <>
sort_symbol(header, spec, :trailing)
end
@spec sort_symbol(any, Spec.t(), atom) :: String.t()
defp sort_symbol(header, spec, loc) do
pos_list = [spec.sort_symbols[:pos]] |> List.flatten()
dir = Column.find_attr(header, spec.sort_specs, :asc)
(loc in pos_list && spec.sort_symbols[dir]) || ""
end
@spec titlecase(any, Spec.t()) :: String.t()
defp titlecase(header, spec)
# string, atom or charlist
when is_binary(header) or is_atom(header) or is_list(header) do
title =
header
|> to_string()
|> String.split(~r/(_| )+/, trim: true)
|> Enum.map_join(" ", &title/1)
Enum.reduce(spec.header_fixes, title, &fix/2)
end
defp titlecase(header, _spec), do: inspect(header)
# title("MPH") => "MPH"
# title("miles") => "Miles"
@spec title(String.t()) :: String.t()
defp title(word) do
word
|> String.first()
|> String.upcase()
|> Kernel.<>(String.slice(word, 1..-1))
end
# fix({" Of ", " of "}, "Nbr Of Yrs") => "Nbr of Yrs"
@spec fix(tuple, String.t()) :: String.t()
defp fix({key, value}, title), do: String.replace(title, key, value)
end