IO ANSI Table v0.1.18 IO.ANSI.Table.Formatter.Helper
Prints a table of rows with headers, applying a table style (configurable).
Summary
Functions
Returns the list of attributes for a given table style and line/row type
Takes a list of elements and a tuple of 3 delimiters (left,
inner and right)
Takes a list of widths and a list of corresponding attributes
Takes a list of elements and a tuple of 3 borders (left, inner
and right)
Creates a table formatter helper (struct)
Takes a list of rows (string sublists), a list of headers, a list
of key headers, a map of header fixes, a keyword list of margins,
a list of column widths, a table style and whether to ring the bell
Takes a list of column widths, a list of elements and a tuple
of 3 multipart border widths (left, inner and right)
Writes one or many table lines depending on the line type given
Types
t() :: %IO.ANSI.Table.Formatter.Helper{header_fixes: map | nil, headers: [IO.ANSI.Table.Formatter.collection_key] | nil, key_headers: [IO.ANSI.Table.Formatter.collection_key] | nil, margin: String.t | nil, rows: [IO.ANSI.Table.Formatter.row] | nil, style: IO.ANSI.Table.Style.t | nil, widths: [IO.ANSI.Table.Formatter.column_width] | nil}
Functions
Returns the list of attributes for a given table style and line/row type.
Examples
iex> alias IO.ANSI.Table.Formatter.Helper
iex> headers = ["Number", "Created At", "Title"]
iex> key_headers = ["Created At"]
iex> style = :dark
iex> type = :header
iex> Helper.attrs(headers, key_headers, style, type)
[ :light_green, :normal, # left border
:light_red, :normal, # non key column
:normal, :light_green, :normal, # inner border
[:light_white, :light_red_background], :normal, # key column
:normal, :light_green, :normal, # inner border
:light_red, :normal, # non key column
:normal, :light_green # right border
]
iex> alias IO.ANSI.Table.Formatter.Helper
iex> headers = ["Number", "Created At", "Title"]
iex> key_headers = ["Created At"]
iex> style = :dark
iex> type = :row
iex> Helper.attrs(headers, key_headers, style, type)
[ :light_green, :normal, # left border
:light_green, :normal, # non key column
:normal, :light_green, :normal, # inner border
:light_magenta, :normal, # key column
:normal, :light_green, :normal, # inner border
:light_green, :normal, # non key column
:normal, :light_green # right border
]
Takes a list of elements and a tuple of 3 delimiters (left,
inner and right).
Expands the list of elements by combining the delimiters.
The inner delimiter is inserted between all elements and
the result is then surrounded by the left and right delimiters.
Returns a flattened list in case any element or delimiter is a list.
Examples
iex> alias IO.ANSI.Table.Formatter.Helper
iex> elements = ["Number", "Created At", "Title"]
iex> delimiters = {"<", "~", ">"}
iex> Helper.expand(elements, delimiters)
["<", "Number", "~", "Created At", "~", "Title", ">"]
iex> alias IO.ANSI.Table.Formatter.Helper
iex> elements = ["Number", "Created At", "Title"]
iex> delimiters = {["<", " "], [" ", "~", " "], [" ", ">"]}
iex> Helper.expand(elements, delimiters)
[ "<", " ",
"Number",
" ", "~", " ",
"Created At",
" ", "~", " ",
"Title",
" ", ">"
]
iex> alias IO.ANSI.Table.Formatter.Helper
iex> elements = [6, 10, 5]
iex> delimiters = {[1, 1], [1, 1, 1], [1, 1]}
iex> Helper.expand(elements, delimiters)
[1, 1, 6, 1, 1, 1, 10, 1, 1, 1, 5, 1, 1]
Takes a list of widths and a list of corresponding attributes.
Returns an Erlang io format reflecting these widths and attributes.
It consists of a string with embedded
ANSI color codes
(escape sequences).
Here are a few ANSI color codes:
- light yellow - \e[93m
- light cyan - \e[96m
- reset - \e[0m
Examples
iex> alias IO.ANSI.Table.Formatter.Helper
iex> widths = [2, 0, 6]
iex> attrs = [:light_yellow, :normal, :light_cyan]
iex> Helper.format(widths, attrs)
"\e[93m~-2ts\e[0m~-0ts\e[96m~-6ts\e[0m~n"
Takes a list of elements and a tuple of 3 borders (left, inner
and right).
Will expand the list of elements by combining “fillers” and borders.
Examples
iex> alias IO.ANSI.Table.Formatter.Helper
iex> elements = ["Number", "Created At", "Title"]
iex> borders = {"<", "~", ">"}
iex> Helper.items(elements, borders)
[ "<", "",
"Number", "",
"", "~", "",
"Created At", "",
"", "~", "",
"Title", "",
"", ">"
]
Creates a table formatter helper (struct).
print_table([IO.ANSI.Table.Formatter.row], [IO.ANSI.Table.Formatter.collection_key], [IO.ANSI.Table.Formatter.collection_key], map, Keyword.t, [IO.ANSI.Table.Formatter.column_width], IO.ANSI.Table.Style.t, boolean) :: :ok
Takes a list of rows (string sublists), a list of headers, a list
of key headers, a map of header fixes, a keyword list of margins,
a list of column widths, a table style and whether to ring the bell.
Prints a table to STDOUT of the strings in each row.
The columns are identified by successive headers.
Table styles
:light- light colors:light_alt- light colors, alternating row colors:light_mult- light colors, 3 repeating row colors:medium- medium colors:medium_alt- medium colors, alternating row colors:medium_mult- medium colors, 3 repeating row colors:dark- dark colors:dark_alt- dark colors, alternating row colors:dark_mult- dark colors, 3 repeating row colors:pretty- multicolored:pretty_alt- multicolored, alternating row colors:pretty_mult- multicolored, 3 repeating row colors:cyan- light cyan background:yellow- light yellow background:green- light green background:CYAN- light cyan border:YELLOW- light yellow border:GREEN- light green border:mixed- fillers revealed:dotted- slightly colored:dotted_alt- slightly colored, alternating row colors:dotted_mult- slightly colored, 3 repeating row colors:dashed- no colors:plain- slightly colored:test- no colors:bare- no colors:barish- like bare but colored:green_padded- like green but with extra padding:green_unpadded- like green but without padding:GREEN_PADDED- like GREEN but with extra padding:GREEN_UNPADDED- like GREEN but without padding:black_alt- black header, alternating row colors:black_mult- black header, 3 repeating row colors:green_alt- green header, alternating row colors:green_mult- green header, 3 repeating row colors
Examples
alias IO.ANSI.Table.Formatter.Helper
capitals = [
["Ottawa", "Canada" , "1,142,700"],
["Zagreb", "Croatia", " 685,500"],
["Paris" , "France" , "9,854,000"]
]
headers = ['city', 'country', 'population']
key_headers = ['country']
header_fixes = %{}
margins = [top: 2, bottom: 2, left: 2]
widths = [6, 7, 10]
table_style = :medium
bell = true
Helper.print_table(
capitals, headers, key_headers,
header_fixes, margins, widths, table_style, bell
)
iex> alias IO.ANSI.Table.Formatter.Helper
iex> alias ExUnit.CaptureIO
iex> capitals = [
...> ["Ottawa", "Canada" , "1,142,700"],
...> ["Zagreb", "Croatia", " 685,500"],
...> ["Paris" , "France" , "9,854,000"]
...> ]
iex> headers = ['city', :country, "population"]
iex> key_headers = [:country]
iex> header_fixes = %{}
iex> margins = [top: 2, bottom: 2, left: 3]
iex> widths = [6, 7, 10]
iex> table_style = :dashed
iex> bell = false
iex> CaptureIO.capture_io fn ->
...> Helper.print_table(
...> capitals, headers, key_headers,
...> header_fixes, margins, widths, table_style, bell
...> )
...> end
"\n\n" <> """
+--------+---------+------------+
| City | Country | Population |
+--------+---------+------------+
| Ottawa | Canada | 1,142,700 |
| Zagreb | Croatia | 685,500 |
| Paris | France | 9,854,000 |
+--------+---------+------------+
""" <> "\n\n"
widths([IO.ANSI.Table.Formatter.column_width], [String.t], {[...], [...], [...]}) :: [non_neg_integer]
Takes a list of column widths, a list of elements and a tuple
of 3 multipart border widths (left, inner and right):
left- widths of left border and “filler”inner- widths of “filler”, inner border and “filler”right- widths of “filler” and right border
Returns the widths of elements and their “fillers” combined with
border widths.
Examples
iex> alias IO.ANSI.Table.Formatter.Helper
iex> widths = [6, 13, 11]
iex> elements = ["Number", "Created At", "Title"]
iex> border_widths = {[1, 1], [1, 1, 1], [1, 1]}
iex> Helper.widths(widths, elements, border_widths)
[1, 1, 6, 0, 1, 1, 1, 10, 3, 1, 1, 1, 5, 6, 1, 1]
Writes one or many table lines depending on the line type given.
Line types
:top- top line:header- line of table header(s):separator- separator linerow types- list of related row type(s):bottom- bottom line
Row types
:row- single row type:even_row- first alternating row type:odd_row- second alternating row type:row_1- first row type of repeating group of 3:row_2- second row type of repeating group of 3:row_3- third row type of repeating group of 3
Examples
alias IO.ANSI.Table.Formatter.Helper
helper = %Helper{
rows: [
["Ottawa", "Canada" , "1,142,700"],
["Zagreb", "Croatia", " 685,500"],
["Paris" , "France" , "9,854,000"]
],
headers: ["city", "country", "population"],
key_headers: ["country"],
header_fixes: %{},
margin: " ",
widths: [6, 7, 10],
style: :pretty_alt
}
Enum.each [:top, :header, :separator], &Helper.write(helper, &1)
Helper.write helper, [:even_row, :odd_row]


