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])
...