IO ANSI Table v0.2.4 IO.ANSI.Table.Formatter.Helper View Source

Prints a table of rows with headers, applying a table style (configurable).

Link to this section Summary

Functions

Takes an enumerable and a tuple of 3 delimiters (left, inner and right)

Takes a list of item widths and a list of corresponding item attributes

Returns a list of attributes based on the given column types, table style and line/row type

Takes a list of column widths, a list of elements, a list of align attributes and a tuple of 3 multipart border widths (left, inner and right)

Takes a list of elements and a tuple of 3 borders (left, inner and right)

Takes a list of rows (string sublists), a list of headers, a list of key headers, a map of header fixes, a map of align attributes, a keyword 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

Link to this section Types

Link to this type align_attr() View Source
align_attr() :: :left | :center | :right
Link to this type column_type() View Source
column_type() :: :key | :non_key
Link to this type item_width() View Source
item_width() :: non_neg_integer
Link to this type t() View Source
t() :: %IO.ANSI.Table.Formatter.Helper{align_attrs: [align_attr] | nil, column_types: [column_type] | nil, column_widths: [IO.ANSI.Table.Formatter.column_width] | nil, headers: [header] | nil, left_margin: String.t | nil, rows: [IO.ANSI.Table.Formatter.row] | nil, style: IO.ANSI.Table.Style.t | nil}

Link to this section Functions

Link to this function expand(elems, arg) View Source
expand(Enumerable.t, {any, any, any}) :: [any]

Takes an enumerable and a tuple of 3 delimiters (left, inner and right).

Expands the elements in the enumerable 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 item widths and a list of corresponding item attributes.

Returns an Erlang io format reflecting these item widths and item 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> item_widths = [2, 0, 6]
iex> item_attrs = [:light_yellow, :normal, :light_cyan]
iex> Helper.format(item_widths, item_attrs)
"\e[93m~-2ts\e[0m~-0ts\e[96m~-6ts\e[0m~n"

Returns a list of attributes based on the given column types, table style and line/row type.

Examples

iex> alias IO.ANSI.Table.Formatter.Helper
iex> column_types = [:non_key, :key, :non_key]
iex> style = :medium
iex> type = :header
iex> Helper.item_attrs(column_types, style, type)
[ :light_yellow, :normal,                       # left border
  :normal, :light_green, :normal,               # non key column
  :normal, :light_yellow, :normal,              # inner border
  :normal, [:light_green, :underline], :normal, # key column
  :normal, :light_yellow, :normal,              # inner border
  :normal, :light_green, :normal,               # non key column
  :normal, :light_yellow                        # right border
]

iex> alias IO.ANSI.Table.Formatter.Helper
iex> column_types = [:non_key, :key, :non_key]
iex> style = :dark
iex> type = :row
iex> Helper.item_attrs(column_types, style, type)
[ :light_green, :normal,          # left border
  :normal, :light_green, :normal, # non key column
  :normal, :light_green, :normal, # inner border
  :normal, :light_white, :normal, # key column
  :normal, :light_green, :normal, # inner border
  :normal, :light_green, :normal, # non key column
  :normal, :light_green           # right border
]

Takes a list of column widths, a list of elements, a list of align attributes 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> column_widths = [7, 13, 11]
iex> elems = ["Number", "Created At", "Title"]
iex> align_attrs = [:right, :center, :left]
iex> border_widths = {[1, 1], [1, 1, 1], [1, 1]}
iex> Helper.item_widths(column_widths, elems, align_attrs, border_widths)
[1, 1, 1, 6, 0, 1, 1, 1, 1, 10, 2, 1, 1, 1, 0, 5, 6, 1, 1]

Takes a list of elements and a tuple of 3 borders (left, inner and right).

Expands 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)
[ "<", "",              # left border, filler
  "", "Number", "",     # filler, element, filler
  "", "~", "",          # filler, inner border, filler
  "", "Created At", "", # filler, element, filler
  "", "~", "",          # filler, inner border, filler
  "", "Title", "",      # filler, element, filler
  "", ">"               # filler, right border
]

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 line
  • row 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"],
  column_types: [:non_key, :key, :non_key],
  align_attrs: [:left, :left, :right],
  left_margin: "   ",
  column_widths: [6, 7, 10],
  style: :pretty_alt
}
Enum.each [:top, :header, :separator], &Helper.write(helper, &1)

write_header

Helper.write helper, [:even_row, :odd_row]

write_rows