~jaro/balkon

2a2cdd51f9c7560ff2eb6e92a2fe3a4b75b54e1c — Jaro 1 year, 6 months ago 547bbaa
Add ancestor boxes to interface.
38 files changed, 528 insertions(+), 6 deletions(-)

M .golden/paginatedParagraphLayout/loremIpsum20em.golden
M .golden/paginatedParagraphLayout/spannedArabicFiller20em.golden
M .golden/paginatedRichParagraphLayout/loremIpsum20em.golden
M .golden/paragraphLayout/arabicFiller20em.golden
M .golden/paragraphLayout/czechHello.golden
M .golden/paragraphLayout/czechHelloParagraphNarrow.golden
M .golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden
M .golden/paragraphLayout/devanagari.golden
M .golden/paragraphLayout/devanagariAccent.golden
M .golden/paragraphLayout/devanagariPrefixedAccent.golden
M .golden/paragraphLayout/hardBreaksLTR.golden
M .golden/paragraphLayout/hardBreaksRTL.golden
M .golden/paragraphLayout/ligature.golden
M .golden/paragraphLayout/ligatureParagraphBreak1.golden
M .golden/paragraphLayout/ligatureParagraphBreak2.golden
M .golden/paragraphLayout/lineHeightLarger.golden
M .golden/paragraphLayout/lineHeightNormal.golden
M .golden/paragraphLayout/lineHeightSmaller.golden
M .golden/paragraphLayout/loremIpsum100em.golden
M .golden/paragraphLayout/loremIpsum20em.golden
M .golden/paragraphLayout/manySpaces.golden
M .golden/paragraphLayout/mixedLanguageLTR.golden
M .golden/paragraphLayout/mixedScriptWords.golden
M .golden/paragraphLayout/spannedArabicFiller20em.golden
M .golden/paragraphLayout/spannedLoremIpsum20em.golden
M .golden/richParagraphLayout/loremIpsum20em.golden
M .golden/richParagraphLayout/mixedSizes.golden
M .golden/richParagraphLayout/nestedBoxes.golden
M CHANGELOG.md
M balkon.cabal
M lib/Data/Text/ParagraphLayout/Plain.hs
M lib/Data/Text/ParagraphLayout/Rich.hs
A src/Data/Text/ParagraphLayout/Internal/AncestorBox.hs
M src/Data/Text/ParagraphLayout/Internal/Fragment.hs
M src/Data/Text/ParagraphLayout/Internal/Layout.hs
M src/Data/Text/ParagraphLayout/Internal/Plain.hs
M src/Data/Text/ParagraphLayout/Internal/Rich/ParagraphLayout.hs
M test/Data/Text/ParagraphLayout/PrettyShow.hs
M .golden/paginatedParagraphLayout/loremIpsum20em.golden => .golden/paginatedParagraphLayout/loremIpsum20em.golden +22 -0
@@ 5,6 5,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 52,6 54,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 105,6 109,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 19791, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 157,6 163,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17562, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 202,6 210,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 18769, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 254,6 264,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 19226, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 302,6 314,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 17973, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 351,6 365,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 18971, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 410,6 426,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 17239, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 455,6 473,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 19199, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 505,6 525,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 12076, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paginatedParagraphLayout/spannedArabicFiller20em.golden => .golden/paginatedParagraphLayout/spannedArabicFiller20em.golden +28 -0
@@ 5,6 5,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12652, y_origin = 0, x_size = 7198, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 34,6 36,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 7060, y_origin = 0, x_size = 5592, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 56,6 60,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 7060, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 86,6 92,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 14850, y_origin = -1500, x_size = 4045, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 107,6 115,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 9168, y_origin = -1500, x_size = 5682, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 134,6 144,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3213, y_origin = -1500, x_size = 5955, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 161,6 173,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 3213, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 218,6 232,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 14300, y_origin = 0, x_size = 4862, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 242,6 258,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 10225, y_origin = 0, x_size = 4075, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 262,6 280,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3898, y_origin = 0, x_size = 6327, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 289,6 309,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 3898, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 305,6 327,8 @@
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12238, y_origin = -1500, x_size = 2357, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 322,6 346,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 5880, y_origin = -1500, x_size = 6358, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 350,6 376,8 @@
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 5880, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =

M .golden/paginatedRichParagraphLayout/loremIpsum20em.golden => .golden/paginatedRichParagraphLayout/loremIpsum20em.golden +22 -0
@@ 4,6 4,8 @@
        [ Fragment
            { fragmentUserData = "text"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 51,6 53,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 103,6 107,8 @@
        [ Fragment
            { fragmentUserData = "text"
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 19791, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 155,6 161,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17562, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 200,6 208,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 18769, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 252,6 262,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 19226, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 300,6 312,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 17973, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 349,6 363,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 18971, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 407,6 423,8 @@
        [ Fragment
            { fragmentUserData = "text"
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 17239, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 452,6 470,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 19199, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 502,6 522,8 @@
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 12076, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/arabicFiller20em.golden => .golden/paragraphLayout/arabicFiller20em.golden +8 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 19850, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 61,6 63,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 18895, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 120,6 124,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 19162, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 174,6 180,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 14595, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =

M .golden/paragraphLayout/czechHello.golden => .golden/paragraphLayout/czechHello.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 5274, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/czechHelloParagraphNarrow.golden => .golden/paragraphLayout/czechHelloParagraphNarrow.golden +10 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1234, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 15,6 17,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 1089, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 26,6 30,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 948, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 36,6 42,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 961, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 46,6 54,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 835, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden => .golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden +22 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 663, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 14,6 16,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 571, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 23,6 27,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 590, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 32,6 38,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 253, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 41,6 49,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 246, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 50,6 60,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 446, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 59,6 71,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 502, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 68,6 82,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 559, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 77,6 93,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 402, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 86,6 104,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 559, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 95,6 115,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 276, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/devanagari.golden => .golden/paragraphLayout/devanagari.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 8640, y_size = -1630}
            , fragmentPen = (0, -1171)
            , fragmentGlyphs =

M .golden/paragraphLayout/devanagariAccent.golden => .golden/paragraphLayout/devanagariAccent.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 645, y_size = -1000}
            , fragmentPen = (0, -500)
            , fragmentGlyphs =

M .golden/paragraphLayout/devanagariPrefixedAccent.golden => .golden/paragraphLayout/devanagariPrefixedAccent.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 0, y_size = -1000}
            , fragmentPen = (0, -500)
            , fragmentGlyphs =

M .golden/paragraphLayout/hardBreaksLTR.golden => .golden/paragraphLayout/hardBreaksLTR.golden +18 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1563, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 19,6 21,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 3357, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 40,6 44,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 1563, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 54,6 60,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 4305, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 67,6 75,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 861, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 76,6 86,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 1563, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 90,6 102,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 0, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 98,6 112,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 3675, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 111,6 127,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 1722, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/hardBreaksRTL.golden => .golden/paragraphLayout/hardBreaksRTL.golden +18 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 2808, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 19,6 21,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 5852, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 40,6 44,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 2808, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 54,6 60,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 4884, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 68,6 76,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6000, x_size = 1211, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 77,6 87,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7500, x_size = 2808, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 91,6 103,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -9000, x_size = 0, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 99,6 113,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -10500, x_size = 4156, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 112,6 128,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -12000, x_size = 1960, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =

M .golden/paragraphLayout/ligature.golden => .golden/paragraphLayout/ligature.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 4672, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/ligatureParagraphBreak1.golden => .golden/paragraphLayout/ligatureParagraphBreak1.golden +6 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 2162, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 17,6 19,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 2104, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 30,6 34,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 402, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/ligatureParagraphBreak2.golden => .golden/paragraphLayout/ligatureParagraphBreak2.golden +6 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1772, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 17,6 19,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 1361, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 28,6 32,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 1535, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/lineHeightLarger.golden => .golden/paragraphLayout/lineHeightLarger.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -1600}
            , fragmentPen = (0, -1172)
            , fragmentGlyphs =

M .golden/paragraphLayout/lineHeightNormal.golden => .golden/paragraphLayout/lineHeightNormal.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/lineHeightSmaller.golden => .golden/paragraphLayout/lineHeightSmaller.golden +2 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -599}
            , fragmentPen = (0, -671)
            , fragmentGlyphs =

M .golden/paragraphLayout/loremIpsum100em.golden => .golden/paragraphLayout/loremIpsum100em.golden +6 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 95412, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 225,6 227,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 98954, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 454,6 458,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 4041, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/loremIpsum20em.golden => .golden/paragraphLayout/loremIpsum20em.golden +22 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 52,6 54,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 98,6 102,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 19791, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 150,6 156,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 17562, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 195,6 203,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 18769, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 247,6 257,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 19226, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 295,6 307,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 17973, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 344,6 358,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 18971, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 396,6 412,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 17239, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 441,6 459,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 19199, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 491,6 511,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 12076, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/manySpaces.golden => .golden/paragraphLayout/manySpaces.golden +8 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 3132, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 19,6 21,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 3132, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 33,6 37,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 3132, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 47,6 53,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 3132, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/mixedLanguageLTR.golden => .golden/paragraphLayout/mixedLanguageLTR.golden +4 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 4837, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 27,6 29,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 4837, y_origin = 0, x_size = 1276, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/mixedScriptWords.golden => .golden/paragraphLayout/mixedScriptWords.golden +46 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 16,6 18,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 777, y_origin = 0, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 27,6 31,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3112, y_origin = 0, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 38,6 44,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 49,6 57,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 777, y_origin = -1121, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 60,6 70,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3112, y_origin = -1121, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 71,6 83,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 82,6 96,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 2335, y_origin = -2242, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 93,6 109,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3112, y_origin = -2242, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 104,6 122,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 115,6 135,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 2335, y_origin = -3363, x_size = 777, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 126,6 148,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3112, y_origin = -3363, x_size = 2335, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 137,6 161,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 253, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 146,6 172,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 253, y_origin = -4484, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 155,6 183,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 1016, y_origin = -4484, x_size = 737, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 166,6 196,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 1753, y_origin = -4484, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 175,6 207,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 2516, y_origin = -4484, x_size = 484, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 185,6 219,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3000, y_origin = -4484, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 194,6 230,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3763, y_origin = -4484, x_size = 253, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 203,6 241,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 4016, y_origin = -4484, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 212,6 252,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 221,6 263,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 763, y_origin = -5605, x_size = 253, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 230,6 274,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 1016, y_origin = -5605, x_size = 763, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/paragraphLayout/spannedArabicFiller20em.golden => .golden/paragraphLayout/spannedArabicFiller20em.golden +28 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12652, y_origin = 0, x_size = 7198, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 34,6 36,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 7060, y_origin = 0, x_size = 5592, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 56,6 60,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 7060, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 86,6 92,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 14850, y_origin = -1500, x_size = 4045, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 107,6 115,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 9168, y_origin = -1500, x_size = 5682, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 134,6 144,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3213, y_origin = -1500, x_size = 5955, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 161,6 173,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 3213, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 178,6 192,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 14300, y_origin = -3000, x_size = 4862, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 202,6 218,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 10225, y_origin = -3000, x_size = 4075, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 222,6 240,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3898, y_origin = -3000, x_size = 6327, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 249,6 269,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 3898, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 265,6 287,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12238, y_origin = -4500, x_size = 2357, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 282,6 306,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 5880, y_origin = -4500, x_size = 6358, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =


@@ 310,6 336,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 5880, y_size = -1500}
            , fragmentPen = (0, -1085)
            , fragmentGlyphs =

M .golden/paragraphLayout/spannedLoremIpsum20em.golden => .golden/paragraphLayout/spannedLoremIpsum20em.golden +60 -0
@@ 5,6 5,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 8747, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 34,6 36,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 8747, y_origin = 0, x_size = 9563, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 66,6 70,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 8553, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 98,6 104,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 8553, y_origin = -1121, x_size = 8890, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 126,6 134,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 9114, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 158,6 168,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 9114, y_origin = -2242, x_size = 7467, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 184,6 196,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 16581, y_origin = -2242, x_size = 3210, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 200,6 214,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 3799, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 219,6 235,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3799, y_origin = -3363, x_size = 7878, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 246,6 264,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 11677, y_origin = -3363, x_size = 5885, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 267,6 287,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 5686, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 291,6 313,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 5686, y_origin = -4484, x_size = 8592, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 322,6 346,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 14278, y_origin = -4484, x_size = 4491, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 341,6 367,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 1301, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 355,6 383,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 1301, y_origin = -5605, x_size = 11041, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 387,6 417,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12342, y_origin = -5605, x_size = 6884, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 414,6 446,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 10089, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 447,6 481,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 10089, y_origin = -6726, x_size = 7884, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 477,6 513,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 8158, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 506,6 544,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 8158, y_origin = -7847, x_size = 6988, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 534,6 574,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 15146, y_origin = -7847, x_size = 3825, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 551,6 593,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 4594, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 571,6 615,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 4594, y_origin = -8968, x_size = 10907, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 607,6 653,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 15501, y_origin = -8968, x_size = 1738, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 618,6 666,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 6426, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 643,6 693,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 6426, y_origin = -10089, x_size = 5590, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 668,6 720,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 12016, y_origin = -10089, x_size = 7183, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 690,6 744,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 2652, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 707,6 763,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 2652, y_origin = -11210, x_size = 5383, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 731,6 789,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = ()
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 8035, y_origin = -11210, x_size = 4041, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/richParagraphLayout/loremIpsum20em.golden => .golden/richParagraphLayout/loremIpsum20em.golden +22 -0
@@ 4,6 4,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = "text"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 51,6 53,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 2
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 97,6 101,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 3
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 19791, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 149,6 155,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 4
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 17562, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 194,6 202,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 5
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 18769, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 246,6 256,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 6
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 19226, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 294,6 306,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 7
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 17973, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 343,6 357,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 8
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 18971, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 395,6 411,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 9
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 17239, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 440,6 458,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 10
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 19199, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 490,6 510,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text"
            , fragmentLine = 11
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 12076, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/richParagraphLayout/mixedSizes.golden => .golden/richParagraphLayout/mixedSizes.golden +10 -0
@@ 4,6 4,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = "bigText1"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1651, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 16,6 18,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "smallText1"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 1651, y_origin = 0, x_size = 1956, y_size = -841}
            , fragmentPen = (0, -699)
            , fragmentGlyphs =


@@ 30,6 34,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "bigText2"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 3607, y_origin = 0, x_size = 1651, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 42,6 48,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "smallText2"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 5258, y_origin = 0, x_size = 1956, y_size = -841}
            , fragmentPen = (0, -699)
            , fragmentGlyphs =


@@ 56,6 64,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "bigText3"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 7214, y_origin = 0, x_size = 1420, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M .golden/richParagraphLayout/nestedBoxes.golden => .golden/richParagraphLayout/nestedBoxes.golden +6 -0
@@ 4,6 4,8 @@ ParagraphLayout
        [ Fragment
            { fragmentUserData = "text1"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 8569, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 31,6 33,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text2"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 8569, y_origin = 0, x_size = 3350, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =


@@ 46,6 50,8 @@ ParagraphLayout
        , Fragment
            { fragmentUserData = "text3"
            , fragmentLine = 1
            , fragmentAncestorBoxes =
                []
            , fragmentRect = Rect {x_origin = 11919, y_origin = 0, x_size = 2657, y_size = -1121}
            , fragmentPen = (0, -932)
            , fragmentGlyphs =

M CHANGELOG.md => CHANGELOG.md +4 -0
@@ 23,6 23,10 @@

* Added line numbers to laid out fragments.

* Added information about ancestor boxes of laid out fragments.
  The plain text interface implicitly generates one box per span, while
  the rich text interface gives the user direct control over the box hierarchy.

## 0.3.0.1 -- TBD

* Increased font size for the "shaped runs" output so that it better fits

M balkon.cabal => balkon.cabal +1 -0
@@ 104,6 104,7 @@ library balkon-internal

    -- Modules exported to tests and to the public part of the library.
    exposed-modules:
        Data.Text.ParagraphLayout.Internal.AncestorBox,
        Data.Text.ParagraphLayout.Internal.ApplyBoxes,
        Data.Text.ParagraphLayout.Internal.BiDiReorder,
        Data.Text.ParagraphLayout.Internal.BoxOptions,

M lib/Data/Text/ParagraphLayout/Plain.hs => lib/Data/Text/ParagraphLayout/Plain.hs +10 -0
@@ 35,13 35,23 @@ module Data.Text.ParagraphLayout.Plain
        ( Fragment
        , fragmentUserData
        , fragmentLine
        , fragmentAncestorBoxes
        , fragmentRect
        , fragmentPen
        , fragmentGlyphs
        )
    , AncestorBox
        ( AncestorBox
        , boxUserData
        , boxLeftSpacing
        , boxRightSpacing
        , boxStartSpacing
        , boxEndSpacing
        )
    )
where

import Data.Text.ParagraphLayout.Internal.AncestorBox
import Data.Text.ParagraphLayout.Internal.Fragment
import Data.Text.ParagraphLayout.Internal.LineHeight
import Data.Text.ParagraphLayout.Internal.ParagraphOptions

M lib/Data/Text/ParagraphLayout/Rich.hs => lib/Data/Text/ParagraphLayout/Rich.hs +11 -0
@@ 45,13 45,24 @@ module Data.Text.ParagraphLayout.Rich
        ( Fragment
        , fragmentUserData
        , fragmentLine
        , fragmentAncestorBoxes
        , fragmentRect
        , fragmentPen
        , fragmentGlyphs
        )
    , fragmentSpacedRect
    , AncestorBox
        ( AncestorBox
        , boxUserData
        , boxLeftSpacing
        , boxRightSpacing
        , boxStartSpacing
        , boxEndSpacing
        )
    )
where

import Data.Text.ParagraphLayout.Internal.AncestorBox
import Data.Text.ParagraphLayout.Internal.BoxOptions
import Data.Text.ParagraphLayout.Internal.Fragment
import Data.Text.ParagraphLayout.Internal.LineHeight

A src/Data/Text/ParagraphLayout/Internal/AncestorBox.hs => src/Data/Text/ParagraphLayout/Internal/AncestorBox.hs +70 -0
@@ 0,0 1,70 @@
module Data.Text.ParagraphLayout.Internal.AncestorBox
    ( AncestorBox (..)
    , totalLeftSpacing
    , totalRightSpacing
    )
where

import Data.Int (Int32)
import Data.Maybe (catMaybes)

-- | Describes the relationship of a fragment to an inline box that contains it.
--
-- A box can have many fragments, and a fragment contained by a box is also
-- contained by all ancestors of that box.
--
-- The root inline box, which forms the basis of each paragraph, is implied
-- and not described by this type of record.
data AncestorBox d = AncestorBox

    { boxUserData :: d
    -- ^ User-defined data associated with the inline box.

    , boxLeftSpacing :: Maybe Int32
    -- ^ `Just` an amount of empty space to add to the left side
    -- of the fragment on account of this inline box, or `Nothing`
    -- if this is not the leftmost fragment of this inline box.
    --
    -- Equal to `boxStartSpacing` for LTR boxes.
    --
    -- Equal to `boxEndSpacing` for RTL boxes.

    , boxRightSpacing :: Maybe Int32
    -- ^ `Just` an amount of empty space to add to the right side
    -- of the fragment on account of this inline box, or `Nothing`
    -- if this is not the rightmost fragment of this inline box.
    --
    -- Equal to `boxStartSpacing` for RTL boxes.
    --
    -- Equal to `boxEndSpacing` for LTR boxes.

    , boxStartSpacing :: Maybe Int32
    -- ^ `Just` an amount of empty space to add to the start side
    -- of the fragment on account of this inline box, or `Nothing`
    -- if this is not the startmost fragment of this inline box.
    --
    -- Equal to `boxLeftSpacing` for LTR boxes.
    --
    -- Equal to `boxRightSpacing` for RTL boxes.

    , boxEndSpacing :: Maybe Int32
    -- ^ `Just` an amount of empty space to add to the end side
    -- of the fragment on account of this inline box, or `Nothing`
    -- if this is not the endmost fragment of this inline box.
    --
    -- Equal to `boxLeftSpacing` for RTL boxes.
    --
    -- Equal to `boxRightSpacing` for LTR boxes.

    }
    deriving (Eq, Read, Show)

-- | Amount of empty space to add to the left side
-- on account of all given boxes in sum.
totalLeftSpacing :: [AncestorBox d] -> Int32
totalLeftSpacing bs = sum $ catMaybes $ map boxLeftSpacing bs

-- | Amount of empty space to add to the right side
-- on account of all given boxes in sum.
totalRightSpacing :: [AncestorBox d] -> Int32
totalRightSpacing bs = sum $ catMaybes $ map boxRightSpacing bs

M src/Data/Text/ParagraphLayout/Internal/Fragment.hs => src/Data/Text/ParagraphLayout/Internal/Fragment.hs +28 -1
@@ 1,12 1,15 @@
module Data.Text.ParagraphLayout.Internal.Fragment
    ( Fragment (..)
    , ShapedRun
    , shapedRun)
    , fragmentSpacedRect
    , shapedRun
    )
where

import Data.Int (Int32)
import Data.Text.Glyphize (GlyphInfo, GlyphPos)

import Data.Text.ParagraphLayout.Internal.AncestorBox
import Data.Text.ParagraphLayout.Internal.Rect

-- | A unit of text laid out in a rectangular area.


@@ 28,6 31,11 @@ data Fragment d = Fragment
    -- Fragments with the same line number are on the same line and will not be
    -- separated by page breaks.

    , fragmentAncestorBoxes :: [AncestorBox d]
    -- ^ Information about inline boxes which contain this fragment
    -- (starting from the nearest ancestor and continuing upwards through the
    -- tree, up to but excluding the root) and the spacing required by them.

    , fragmentRect :: Rect Int32
    -- ^ Physical position of the fragment within the paragraph, calculated
    -- using all glyph advances in this fragment and the calculated line height.


@@ 43,6 51,8 @@ data Fragment d = Fragment
    -- the area to draw on -- you need FreeType or a similar library for that.
    --
    -- The origin coordinates are relative to the paragraph.
    --
    -- This is the CSS equivalent of /content box/, before adding box spacing.

    , fragmentPen :: (Int32, Int32)
    -- ^ Coordinates of the initial pen position, from which the first glyph


@@ 56,6 66,23 @@ data Fragment d = Fragment
    }
    deriving (Eq, Read, Show)

-- | Physical position of the fragment within the paragraph, with spacing
-- added to the glyph advances. This is the space that the fragment takes up
-- in the paragraph.
fragmentSpacedRect :: Fragment d -> Rect Int32
fragmentSpacedRect (Fragment { fragmentRect = r, fragmentAncestorBoxes = bs })
    | x_size r >= 0 = r
        { x_origin = x_origin r - leftSpacing
        , x_size = x_size r + leftSpacing + rightSpacing
        }
    | otherwise = r
        { x_origin = x_origin r + rightSpacing
        , x_size = x_size r - leftSpacing - rightSpacing
        }
    where
        leftSpacing = totalLeftSpacing bs
        rightSpacing = totalRightSpacing bs

-- | A simplified representation of a box fragment, suitable for passing to a
-- text drawing library but lacking detailed size information.
type ShapedRun = (Int32, Int32, [(GlyphInfo, GlyphPos)])

M src/Data/Text/ParagraphLayout/Internal/Layout.hs => src/Data/Text/ParagraphLayout/Internal/Layout.hs +1 -1
@@ 104,7 104,7 @@ positionFragmentH line originY originX (WithSpan rs pf) =
    (nextX, WithSpan rs frag)
    where
        nextX = originX + PF.advance pf
        frag = Fragment userData line rect (penX, penY) (PF.glyphs pf)
        frag = Fragment userData line [] rect (penX, penY) (PF.glyphs pf)
        userData = RS.spanUserData rs
        rect = Rect originX originY (PF.advance pf) (-lineHeight)
        penX = 0

M src/Data/Text/ParagraphLayout/Internal/Plain.hs => src/Data/Text/ParagraphLayout/Internal/Plain.hs +8 -2
@@ 4,6 4,7 @@ where

import Data.Text.Glyphize (Direction (DirLTR))

import Data.Text.ParagraphLayout.Internal.AncestorBox
import Data.Text.ParagraphLayout.Internal.BoxOptions
import Data.Text.ParagraphLayout.Internal.Fragment
import Data.Text.ParagraphLayout.Internal.ParagraphOptions


@@ 71,5 72,10 @@ getSpanIndex :: Fragment (Int, d) -> Int
getSpanIndex Fragment { fragmentUserData = (i, _) } = i

stripSpanIndex :: Fragment (Int, d) -> Fragment d
stripSpanIndex f = case fragmentUserData f of
    (_, d) -> f { fragmentUserData = d }
stripSpanIndex f = f
    { fragmentUserData = snd (fragmentUserData f)
    , fragmentAncestorBoxes = map stripSpanIndexInBox (fragmentAncestorBoxes f)
    }

stripSpanIndexInBox :: AncestorBox (Int, d) -> AncestorBox d
stripSpanIndexInBox ab = ab { boxUserData = snd (boxUserData ab) }

M src/Data/Text/ParagraphLayout/Internal/Rich/ParagraphLayout.hs => src/Data/Text/ParagraphLayout/Internal/Rich/ParagraphLayout.hs +1 -1
@@ 35,7 35,7 @@ instance Line (ParagraphLayout d) where
-- | Wrap the given `Fragment`s and compute their containing rectangle.
paragraphLayout :: [Fragment d] -> ParagraphLayout d
paragraphLayout frags = ParagraphLayout pRect frags
    where pRect = containRects $ map fragmentRect frags
    where pRect = containRects $ map fragmentSpacedRect frags

-- | A `ParagraphLayout` with no fragments.
-- Useful as an identity element for `appendFragments`.

M test/Data/Text/ParagraphLayout/PrettyShow.hs => test/Data/Text/ParagraphLayout/PrettyShow.hs +6 -1
@@ 109,7 109,7 @@ instance Show d => PrettyShow (Plain.SpanLayout d) where
        ]

instance Show d => PrettyShow (Fragment d) where
    prettyShow (Fragment d l r pen glyphs) = concat
    prettyShow (Fragment d l bs r pen glyphs) = concat
        [ "Fragment"
        , newline
        , indent3


@@ 121,6 121,11 @@ instance Show d => PrettyShow (Fragment d) where
        , show l
        , newline
        , indent3
        , ", fragmentAncestorBoxes ="
        , newline
        , concat $ commaFirstList indent4 $ map show bs
        , newline
        , indent3
        , ", fragmentRect = "
        , show r
        , newline