IO ANSI Table v0.1.13 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
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).
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([non_neg_integer], [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]
write(%IO.ANSI.Table.Formatter.Helper{header_fixes: term, headers: term, key_headers: term, margin: term, rows: term, style: term, widths: term}, atom | [atom]) :: :ok
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]