Added new Data.Text.ParagraphLayout.Rich
interface to support rich text.
Moved existing plain text interface into Data.Text.ParagraphLayout.Plain
submodule and marked it as deprecated.
Marked Data.Text.ParagraphLayout.ParagraphConstruction
as deprecated.
Input text spans can now have arbitrary user data attached to them.
All related data types (Paragraph
, Span
, Fragment
, SpanLayout
,
ParagraphLayout
) have been extended with a type variable.
Future-proofed ParagraphOptions
and SpanOptions
by hiding their
constructors. Use defaultParagraphOptions
and defaultSpanOptions
instead.
Added line numbers to laid out fragments.
Increased font size for the "shaped runs" output so that it better fits a window with 640 pixels of width.
Fixed compatibility with base < 4.15.
Added partial support for bidirectional text (LTR and RTL in the same paragraph).
The paragraph direction is assumed to be LTR. This will be configurable in a future interface.
Only strong directional characters are used to determine text direction.
The direction of weak directional characters and neutral characters is determined by the nearest preceding strong directional character, or if none is found, the nearest following strong directional character.
Explicit bidirectional formatting characters are ignored.
Exposed functions to allow verification of correct input text slicing:
paragraphSpanBounds
, paragraphSpanTexts
, and paragraphText
.
Added support for forced (hard) line breaks in the input text.
Now also trimming white space at the beginning of lines.
Internally, language tags will be cut at the first invalid character before being passed to ICU.
Tests will generate output in "shaped runs" format which can be passed to a text rendering application.
Text shaping using HarfBuzz.
Breaking text on line and character boundaries using the International Components for Unicode (ICU) library.
Trimming white space at the end of lines.
Calculation of containing block bounds and fragment bounds.
Support for plain text (single font and line height) in one horizontal direction (LTR or RTL).
Input can be divided into spans. This division will be preserved in the output.
Each span can use a different language for text shaping and line breaking.