~jaro/balkon

ref: 2fea437c601cce8ab25715c2c6a6a57748582031 balkon/src/Data d---------
Clarify that fragmentContentRect is unstandardised.
Add content rect to Fragment.
Add helper function to strut empty boxes.
Allow trimmed whitespace to generate empty fragments.

BREAKING: Output may now contain more fragments with zero glyphs,
representing runs of whitespace that was trimmed away. These runs may
also start a box at the end of a line, instead of the beginning of the
next line.

BREAKING: Trimmed whitespace now affects line height.
Prevent empty shaped runs.

This is in preparation for a breaking change that introduces some
empty fragments into the output. Since the shaped runs output is not
concerned with runs of zero glyphs, these will be proactively removed.
Add forceLeftAlign function for testing.
Generalise shiftFragment function.

Intended for testing paragraphSafeWidth.
Allow explicit control of box collapsing.
Allow generating an empty run.
Add extensible filter for invisible lines.
Store default level in BiDiLevels.

This will be required for handling empty text sequences.
Prepare for vertical-align in BoxOptions.
Implement calculation of safe paragraph width.
Refactor lineNumbers into a common module.
Allow paragraphRect without point 0,0.
Add start/end paragraph alignment.

In the future, when the paragraph direction is not explicitly set,
start/end options will allow alignment to change line by line,
whereas left/right alignment will be constant.
Add centre/right paragraph alignment.
Internally mark hard line breaks.
Internally allow splitting texts at endpoints.

This is required in order to preserve a hard line break at the end of
the input.
Internally support text breaks in ascending order.

Intended as a workaround to `breaksRight` not including the status of
the end-of-text break.
Next