IO ANSI Table v0.1.5 IO.ANSI.Table.Formatter.Helper
Prints a table of rows with headers, applying a table style (configurable).
Summary
Functions
Takes a list of elements and 3 delimiters (left, inner and right)
Takes a list of widths and a list of corresponding attributes
Creates a new table formatter helper (struct)
Takes a list of rows (string sublists), a list of headers,
a list of key headers, a list of margins, a list of column widths,
a table style and whether to ring the bell
Writes one or many table lines depending on the line type given
Functions
Takes a list of elements and 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.
For details of ANSI color codes (attributes) see
ANSI color codes.
Here are a few examples:
- 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"
Creates a new table formatter helper (struct).
Takes a list of rows (string sublists), a list of headers,
a list of key headers, a 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:medium- medium colors:dark- dark colors:pretty- multicolored: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: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_terms = []
margins = [top: 2, bottom: 2, left: 2]
widths = [6, 7, 10]
table_style = :medium
bell = true
Helper.print_table(
capitals, headers, key_headers, header_terms,
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_terms = []
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_terms,
...> 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"
write(%IO.ANSI.Table.Formatter.Helper{header_terms: term, headers: term, key_headers: term, margin: term, rows: term, style: term, widths: term}, atom) :: :ok
Writes one or many table lines depending on the line type given.
Line types
:top- top line:header- line of header(s) between top & separator:separator- separator line between header & data rowsrow types- list of related row type(s) listed below: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
# Evaluate rows, headers, key headers, margin, widths and style...
alias IO.ANSI.Table.Formatter.Helper
helper = Helper.new(rows, headers, key_headers, margin, widths, style)
Helper.write(helper, :top)
...
Helper.write(helper, [:row])
...
