Pillars may be distributed over multiple tiers if
width > getOption("width")
. In this case each tier is at most
getOption("width")
characters wide. The very first step of formatting
is to determine how many tiers are shown at most, and the width of each
tier.
To avoid unnecessary computation for showing very wide colonnades, a first
pass tries to fit all capitals into the tiers.
For each pillar whose capital fits, it is then decided in which tier it is
shown, if at all, and how much horizontal space it may use (either its
minimum or its maximum width).
Remaining space is then distributed proportionally to pillars that do not
use their desired width.
For fitting pillars in one or more tiers, first a check is made
if all pillars fit with their maximum width (e.g.,
option(tibble.width = Inf)
or narrow colonnade).
If yes, this is the resulting fit, no more work needs to be done.
Otherwise, if the maximum width is too wide, the same test
is carried out with the minimum width.
If this is still too wide, this is the resulting fit.
Otherwise, some tiers from the start
will contain pillars with their maximum width, and the remaining tiers
contain pillars with their minimum width.
We determine the cut point where minimum and maximum assignment
agree.
Fitting pillars into tiers is very similar to a word-wrapping algorithm.
In a loop, new tiers are opened if the current tier overflows.
If a column is too wide to fit a single tier, it will never be
displayed, and the colonnade will be truncated there.
This case should never occur with reasonable display widths larger than
30 characters.
Truncation also happens if all available tiers are filled.
The remaining space is distributed from left to right.
Each column gains space proportional to the fraction of missing and
remaining space,
rounded down.
Any space remaining after rounding is distributed from left to right,
one space per column.