defmodule IO.ANSI.Table.Spec.LeftMargin do @moduledoc """ Derives the left margin of a table. """ alias IO.ANSI.Plus, as: ANSI alias IO.ANSI.Table.Spec @doc """ Derives the left margin of a table. ## Examples iex> alias IO.ANSI.Table.Spec.LeftMargin iex> alias IO.ANSI.Table.Spec iex> spec = Spec.new([:c4, :c1, :c2], margins: [left: 3]) iex> %Spec{left_margin: left_margin} = LeftMargin.derive_and_put(spec) iex> left_margin "\e[3C" iex> alias IO.ANSI.Table.Spec.LeftMargin iex> alias IO.ANSI.Table.Spec iex> spec = Spec.new([:c4, :c1, :c2], margins: [left: 0]) iex> %Spec{left_margin: left_margin} = LeftMargin.derive_and_put(spec) iex> left_margin "" """ @spec derive_and_put(Spec.t()) :: Spec.t() def derive_and_put(%Spec{margins: margins} = spec) do left_margin = case margins[:left] do # Move the cursor forward N columns: \e[C n when n >= 1 -> ANSI.cursor_right(n) _ -> "" end put_in(spec.left_margin, left_margin) end end