# `IO.ANSI.Table.Column`
[🔗](https://github.com/RaymondLoranger/io_ansi_table/blob/main/lib/io/ansi/table/column.ex#L1)

Functions related to the columns of a table.

# `spread`

```elixir
@type spread() :: [width()]
```

A list of 3 contiguous widths: left width, inner width and right width

# `t`

```elixir
@type t() :: [String.t()]
```

Table column

# `width`

```elixir
@type width() :: non_neg_integer()
```

Column width

# `spread`

```elixir
@spec spread(width(), IO.ANSI.Table.Line.elem(), IO.ANSI.Table.Header.align_attr()) ::
  spread()
```

Spreads a `width` given an `element` and its `align attribute`.

## Examples

    iex> alias IO.ANSI.Table.Column
    iex> {
    ...>   Column.spread(7, "name", :left  ),
    ...>   Column.spread(7, "name", :center),
    ...>   Column.spread(7, "name", :right )
    ...> }
    {[0, 4, 3], [1, 4, 2], [3, 4, 0]}

    iex> alias IO.ANSI.Table.Column
    iex> {
    ...>   Column.spread(3, "name", :left  ),
    ...>   Column.spread(3, "name", :center),
    ...>   Column.spread(3, "name", :right )
    ...> }
    {[0, 3, 0], [0, 3, 0], [0, 3, 0]}

    iex> alias IO.ANSI.Table.Column
    iex> {
    ...>   Column.spread(10, "\e[32m\e[42mCHEETAH\e[0m", :left  ),
    ...>   Column.spread(10, "\e[32m\e[42mCHEETAH\e[0m", :center),
    ...>   Column.spread(10, "\e[32m\e[42mCHEETAH\e[0m", :right )
    ...> }
    {[0, 21, 3], [1, 21, 2], [3, 21, 0]}

    iex> alias IO.ANSI.Table.Column
    iex> {
    ...>   Column.spread(7, "\e[32m\e[42mCHEETAH\e[0m", :left  ),
    ...>   Column.spread(7, "\e[32m\e[42mCHEETAH\e[0m", :center),
    ...>   Column.spread(7, "\e[32m\e[42mCHEETAH\e[0m", :right )
    ...> }
    {[0, 21, 0], [0, 21, 0], [0, 21, 0]}

# `widths`

```elixir
@spec widths([t()], width()) :: [width()]
```

Returns a list of column widths capped by `maximum width`.

## Examples

    iex> alias IO.ANSI.Table.Column
    iex> columns = [["cat", "wombat", "elk"], ["mongoose", "ant", "gnu"]]
    iex> Column.widths(columns, 99)
    [6, 8]

    iex> alias IO.ANSI.Table.Column
    iex> columns = [["cat", "wombat", "elk"], ["mongoose", "ant", "gnu"]]
    iex> Column.widths(columns, 7)
    [6, 7]

    iex> alias IO.ANSI.Table.Column
    iex> columns = [["\e[32m\e[42mCHEETAH\e[0m", "elk"], ["mongoose", "ant"]]
    iex> Column.widths(columns, 99)
    [7, 8]

    iex> alias IO.ANSI.Table.Column
    iex> columns = [["\e[32m\e[42mCHEETAH\e[0m", "elk"], ["mongoose", "ant"]]
    iex> Column.widths(columns, 6)
    [6, 6]

---

*Consult [api-reference.md](api-reference.md) for complete listing*
