From 35a5cc75e3831fa3139ebb43dcf2e0948a76be16 Mon Sep 17 00:00:00 2001 From: Jaro Date: Wed, 10 May 2023 11:19:45 +0200 Subject: [PATCH] Handle ancestor boxes in rich layout. --- .../loremIpsum20em.golden | 33 +++-- .../spannedArabicFiller20em.golden | 42 ++++-- .../paragraphLayout/arabicFiller20em.golden | 12 +- .golden/paragraphLayout/czechHello.golden | 3 +- .../czechHelloParagraphNarrow.golden | 15 +- .../czechHelloParagraphUltraNarrow.golden | 33 +++-- .golden/paragraphLayout/devanagari.golden | 3 +- .../paragraphLayout/devanagariAccent.golden | 3 +- .../devanagariPrefixedAccent.golden | 3 +- .golden/paragraphLayout/hardBreaksLTR.golden | 27 ++-- .golden/paragraphLayout/hardBreaksRTL.golden | 27 ++-- .golden/paragraphLayout/ligature.golden | 3 +- .../ligatureParagraphBreak1.golden | 9 +- .../ligatureParagraphBreak2.golden | 9 +- .../paragraphLayout/lineHeightLarger.golden | 3 +- .../paragraphLayout/lineHeightNormal.golden | 3 +- .../paragraphLayout/lineHeightSmaller.golden | 3 +- .../paragraphLayout/loremIpsum100em.golden | 9 +- .golden/paragraphLayout/loremIpsum20em.golden | 33 +++-- .golden/paragraphLayout/manySpaces.golden | 12 +- .../paragraphLayout/mixedLanguageLTR.golden | 6 +- .../paragraphLayout/mixedScriptWords.golden | 69 ++++++--- .../spannedArabicFiller20em.golden | 42 ++++-- .../spannedLoremIpsum20em.golden | 90 ++++++++---- .golden/richParagraphLayout/mixedSizes.golden | 6 +- .../richParagraphLayout/nestedBoxes.golden | 7 +- CHANGELOG.md | 3 + balkon.cabal | 1 + .../Text/ParagraphLayout/Internal/Layout.hs | 136 ++++++++++++++---- .../ParagraphLayout/Internal/ProtoLine.hs | 76 ++++++++++ 30 files changed, 524 insertions(+), 197 deletions(-) create mode 100644 src/Data/Text/ParagraphLayout/Internal/ProtoLine.hs diff --git a/.golden/paginatedParagraphLayout/loremIpsum20em.golden b/.golden/paginatedParagraphLayout/loremIpsum20em.golden index 3aafe8a..3091fcb 100644 --- a/.golden/paginatedParagraphLayout/loremIpsum20em.golden +++ b/.golden/paginatedParagraphLayout/loremIpsum20em.golden @@ -6,7 +6,8 @@ { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -55,7 +56,8 @@ { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -110,7 +112,8 @@ { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 19791, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -164,7 +167,8 @@ { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17562, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -211,7 +215,8 @@ { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 18769, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -265,7 +270,8 @@ { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 19226, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -315,7 +321,8 @@ { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 17973, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -366,7 +373,8 @@ { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 18971, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -427,7 +435,8 @@ { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 17239, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -474,7 +483,8 @@ { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 19199, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -526,7 +536,8 @@ { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 12076, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paginatedParagraphLayout/spannedArabicFiller20em.golden b/.golden/paginatedParagraphLayout/spannedArabicFiller20em.golden index bdffa12..07df1d7 100644 --- a/.golden/paginatedParagraphLayout/spannedArabicFiller20em.golden +++ b/.golden/paginatedParagraphLayout/spannedArabicFiller20em.golden @@ -6,7 +6,8 @@ { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 12652, y_origin = 0, x_size = 7198, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -37,7 +38,8 @@ { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 7060, y_origin = 0, x_size = 5592, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -61,7 +63,8 @@ { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 7060, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -93,7 +96,8 @@ { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 14850, y_origin = -1500, x_size = 4045, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -116,7 +120,8 @@ { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 9168, y_origin = -1500, x_size = 5682, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -145,7 +150,8 @@ { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 3213, y_origin = -1500, x_size = 5955, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -174,7 +180,8 @@ { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 3213, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -233,7 +240,8 @@ { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 14300, y_origin = 0, x_size = 4862, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -259,7 +267,8 @@ { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 10225, y_origin = 0, x_size = 4075, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -281,7 +290,8 @@ { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 3898, y_origin = 0, x_size = 6327, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -310,7 +320,8 @@ { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 3898, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -328,7 +339,8 @@ { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 12238, y_origin = -1500, x_size = 2357, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -347,7 +359,8 @@ { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 5880, y_origin = -1500, x_size = 6358, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -377,7 +390,8 @@ { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 5880, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/arabicFiller20em.golden b/.golden/paragraphLayout/arabicFiller20em.golden index b5e19b7..f33ae64 100644 --- a/.golden/paragraphLayout/arabicFiller20em.golden +++ b/.golden/paragraphLayout/arabicFiller20em.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 19850, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -64,7 +65,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 18895, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -125,7 +127,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 19162, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -181,7 +184,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 14595, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/czechHello.golden b/.golden/paragraphLayout/czechHello.golden index 0cbb174..43d44f9 100644 --- a/.golden/paragraphLayout/czechHello.golden +++ b/.golden/paragraphLayout/czechHello.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 5274, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/czechHelloParagraphNarrow.golden b/.golden/paragraphLayout/czechHelloParagraphNarrow.golden index 7b6084d..75a6d74 100644 --- a/.golden/paragraphLayout/czechHelloParagraphNarrow.golden +++ b/.golden/paragraphLayout/czechHelloParagraphNarrow.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1234, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -18,7 +19,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 1089, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -31,7 +33,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 948, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -43,7 +46,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 961, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -55,7 +59,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 835, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden b/.golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden index 9f75e2a..e440321 100644 --- a/.golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden +++ b/.golden/paragraphLayout/czechHelloParagraphUltraNarrow.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 663, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -17,7 +18,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 571, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -28,7 +30,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 590, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -39,7 +42,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 253, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -50,7 +54,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 246, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -61,7 +66,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 446, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -72,7 +78,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 502, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -83,7 +90,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 559, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -94,7 +102,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 402, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -105,7 +114,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 559, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -116,7 +126,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 276, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/devanagari.golden b/.golden/paragraphLayout/devanagari.golden index b815e62..4a8dad8 100644 --- a/.golden/paragraphLayout/devanagari.golden +++ b/.golden/paragraphLayout/devanagari.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 8640, y_size = -1630} , fragmentPen = (0, -1171) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/devanagariAccent.golden b/.golden/paragraphLayout/devanagariAccent.golden index cb0028a..ef53225 100644 --- a/.golden/paragraphLayout/devanagariAccent.golden +++ b/.golden/paragraphLayout/devanagariAccent.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 645, y_size = -1000} , fragmentPen = (0, -500) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/devanagariPrefixedAccent.golden b/.golden/paragraphLayout/devanagariPrefixedAccent.golden index c2b8862..c1ee255 100644 --- a/.golden/paragraphLayout/devanagariPrefixedAccent.golden +++ b/.golden/paragraphLayout/devanagariPrefixedAccent.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 0, y_size = -1000} , fragmentPen = (0, -500) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/hardBreaksLTR.golden b/.golden/paragraphLayout/hardBreaksLTR.golden index 6ab1480..d497255 100644 --- a/.golden/paragraphLayout/hardBreaksLTR.golden +++ b/.golden/paragraphLayout/hardBreaksLTR.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1563, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -22,7 +23,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 3357, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -45,7 +47,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 1563, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -61,7 +64,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 4305, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -76,7 +80,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 861, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -87,7 +92,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 1563, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -103,7 +109,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 0, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -113,7 +120,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 3675, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -128,7 +136,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 1722, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/hardBreaksRTL.golden b/.golden/paragraphLayout/hardBreaksRTL.golden index bfe580a..ee81129 100644 --- a/.golden/paragraphLayout/hardBreaksRTL.golden +++ b/.golden/paragraphLayout/hardBreaksRTL.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 2808, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -22,7 +23,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 5852, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -45,7 +47,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 2808, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -61,7 +64,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 4884, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -77,7 +81,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -6000, x_size = 1211, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -88,7 +93,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -7500, x_size = 2808, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -104,7 +110,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -9000, x_size = 0, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -114,7 +121,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -10500, x_size = 4156, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -129,7 +137,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -12000, x_size = 1960, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/ligature.golden b/.golden/paragraphLayout/ligature.golden index e7e3734..6984e92 100644 --- a/.golden/paragraphLayout/ligature.golden +++ b/.golden/paragraphLayout/ligature.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 4672, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/ligatureParagraphBreak1.golden b/.golden/paragraphLayout/ligatureParagraphBreak1.golden index c841adc..f956762 100644 --- a/.golden/paragraphLayout/ligatureParagraphBreak1.golden +++ b/.golden/paragraphLayout/ligatureParagraphBreak1.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 2162, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -20,7 +21,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 2104, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -35,7 +37,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 402, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/ligatureParagraphBreak2.golden b/.golden/paragraphLayout/ligatureParagraphBreak2.golden index 678db38..efed7c6 100644 --- a/.golden/paragraphLayout/ligatureParagraphBreak2.golden +++ b/.golden/paragraphLayout/ligatureParagraphBreak2.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 1772, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -20,7 +21,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 1361, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -33,7 +35,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 1535, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/lineHeightLarger.golden b/.golden/paragraphLayout/lineHeightLarger.golden index 9ef9836..22f1175 100644 --- a/.golden/paragraphLayout/lineHeightLarger.golden +++ b/.golden/paragraphLayout/lineHeightLarger.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -1600} , fragmentPen = (0, -1172) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/lineHeightNormal.golden b/.golden/paragraphLayout/lineHeightNormal.golden index b4aed99..68de8fd 100644 --- a/.golden/paragraphLayout/lineHeightNormal.golden +++ b/.golden/paragraphLayout/lineHeightNormal.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/lineHeightSmaller.golden b/.golden/paragraphLayout/lineHeightSmaller.golden index 64a00a6..ccb8a86 100644 --- a/.golden/paragraphLayout/lineHeightSmaller.golden +++ b/.golden/paragraphLayout/lineHeightSmaller.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 522, y_size = -599} , fragmentPen = (0, -671) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/loremIpsum100em.golden b/.golden/paragraphLayout/loremIpsum100em.golden index 2b24b6a..4256a8e 100644 --- a/.golden/paragraphLayout/loremIpsum100em.golden +++ b/.golden/paragraphLayout/loremIpsum100em.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 95412, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -228,7 +229,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 98954, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -459,7 +461,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 4041, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/loremIpsum20em.golden b/.golden/paragraphLayout/loremIpsum20em.golden index ddf2e36..8c3f949 100644 --- a/.golden/paragraphLayout/loremIpsum20em.golden +++ b/.golden/paragraphLayout/loremIpsum20em.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 18310, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -55,7 +56,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 17443, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -103,7 +105,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 19791, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -157,7 +160,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 17562, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -204,7 +208,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 18769, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -258,7 +263,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 19226, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -308,7 +314,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 17973, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -359,7 +366,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 18971, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -413,7 +421,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 17239, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -460,7 +469,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 19199, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -512,7 +522,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 12076, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/manySpaces.golden b/.golden/paragraphLayout/manySpaces.golden index 2060b76..ae88182 100644 --- a/.golden/paragraphLayout/manySpaces.golden +++ b/.golden/paragraphLayout/manySpaces.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 3132, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -22,7 +23,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 3132, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -38,7 +40,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 3132, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -54,7 +57,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 3132, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/mixedLanguageLTR.golden b/.golden/paragraphLayout/mixedLanguageLTR.golden index 9584802..2e89bdd 100644 --- a/.golden/paragraphLayout/mixedLanguageLTR.golden +++ b/.golden/paragraphLayout/mixedLanguageLTR.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 4837, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -30,7 +31,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 4837, y_origin = 0, x_size = 1276, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/mixedScriptWords.golden b/.golden/paragraphLayout/mixedScriptWords.golden index 2105e27..b9035b6 100644 --- a/.golden/paragraphLayout/mixedScriptWords.golden +++ b/.golden/paragraphLayout/mixedScriptWords.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -19,7 +20,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 777, y_origin = 0, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -32,7 +34,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3112, y_origin = 0, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -45,7 +48,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -58,7 +62,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 777, y_origin = -1121, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -71,7 +76,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3112, y_origin = -1121, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -84,7 +90,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -97,7 +104,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 2335, y_origin = -2242, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -110,7 +118,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3112, y_origin = -2242, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -123,7 +132,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -136,7 +146,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 2335, y_origin = -3363, x_size = 777, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -149,7 +160,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3112, y_origin = -3363, x_size = 2335, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -162,7 +174,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 253, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -173,7 +186,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 253, y_origin = -4484, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -184,7 +198,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 1016, y_origin = -4484, x_size = 737, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -197,7 +212,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 1753, y_origin = -4484, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -208,7 +224,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 2516, y_origin = -4484, x_size = 484, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -220,7 +237,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3000, y_origin = -4484, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -231,7 +249,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 3763, y_origin = -4484, x_size = 253, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -242,7 +261,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 4016, y_origin = -4484, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -253,7 +273,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -264,7 +285,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Nothing, boxStartSpacing = Nothing, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 763, y_origin = -5605, x_size = 253, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -275,7 +297,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 1016, y_origin = -5605, x_size = 763, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/spannedArabicFiller20em.golden b/.golden/paragraphLayout/spannedArabicFiller20em.golden index 6538e9c..01d3f56 100644 --- a/.golden/paragraphLayout/spannedArabicFiller20em.golden +++ b/.golden/paragraphLayout/spannedArabicFiller20em.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 12652, y_origin = 0, x_size = 7198, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -37,7 +38,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 7060, y_origin = 0, x_size = 5592, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -61,7 +63,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 7060, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -93,7 +96,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 14850, y_origin = -1500, x_size = 4045, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -116,7 +120,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 9168, y_origin = -1500, x_size = 5682, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -145,7 +150,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 3213, y_origin = -1500, x_size = 5955, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -174,7 +180,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1500, x_size = 3213, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -193,7 +200,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 14300, y_origin = -3000, x_size = 4862, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -219,7 +227,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 10225, y_origin = -3000, x_size = 4075, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -241,7 +250,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 3898, y_origin = -3000, x_size = 6327, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -270,7 +280,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3000, x_size = 3898, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -288,7 +299,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 12238, y_origin = -4500, x_size = 2357, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -307,7 +319,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 5880, y_origin = -4500, x_size = 6358, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = @@ -337,7 +350,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4500, x_size = 5880, y_size = -1500} , fragmentPen = (0, -1085) , fragmentGlyphs = diff --git a/.golden/paragraphLayout/spannedLoremIpsum20em.golden b/.golden/paragraphLayout/spannedLoremIpsum20em.golden index c3d7b8d..8736bff 100644 --- a/.golden/paragraphLayout/spannedLoremIpsum20em.golden +++ b/.golden/paragraphLayout/spannedLoremIpsum20em.golden @@ -6,7 +6,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = 0, x_size = 8747, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -37,7 +38,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 8747, y_origin = 0, x_size = 9563, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -71,7 +73,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -1121, x_size = 8553, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -105,7 +108,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 2 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 8553, y_origin = -1121, x_size = 8890, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -135,7 +139,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -2242, x_size = 9114, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -169,7 +174,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 9114, y_origin = -2242, x_size = 7467, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -197,7 +203,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 3 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 16581, y_origin = -2242, x_size = 3210, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -215,7 +222,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -3363, x_size = 3799, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -236,7 +244,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 3799, y_origin = -3363, x_size = 7878, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -265,7 +274,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 4 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 11677, y_origin = -3363, x_size = 5885, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -288,7 +298,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -4484, x_size = 5686, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -314,7 +325,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 5686, y_origin = -4484, x_size = 8592, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -347,7 +359,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 5 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 14278, y_origin = -4484, x_size = 4491, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -368,7 +381,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -5605, x_size = 1301, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -384,7 +398,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 1301, y_origin = -5605, x_size = 11041, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -418,7 +433,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 6 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 12342, y_origin = -5605, x_size = 6884, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -447,7 +463,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -6726, x_size = 10089, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -482,7 +499,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 7 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 10089, y_origin = -6726, x_size = 7884, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -514,7 +532,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -7847, x_size = 8158, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -545,7 +564,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 8158, y_origin = -7847, x_size = 6988, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -575,7 +595,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 8 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 15146, y_origin = -7847, x_size = 3825, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -594,7 +615,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -8968, x_size = 4594, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -616,7 +638,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 4594, y_origin = -8968, x_size = 10907, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -654,7 +677,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 9 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 15501, y_origin = -8968, x_size = 1738, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -667,7 +691,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -10089, x_size = 6426, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -694,7 +719,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 6426, y_origin = -10089, x_size = 5590, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -721,7 +747,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 10 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 12016, y_origin = -10089, x_size = 7183, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -745,7 +772,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 0, y_origin = -11210, x_size = 2652, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -764,7 +792,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 2652, y_origin = -11210, x_size = 5383, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -790,7 +819,8 @@ ParagraphLayout { fragmentUserData = () , fragmentLine = 11 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = (), boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 8035, y_origin = -11210, x_size = 4041, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/.golden/richParagraphLayout/mixedSizes.golden b/.golden/richParagraphLayout/mixedSizes.golden index 4d27003..753cd74 100644 --- a/.golden/richParagraphLayout/mixedSizes.golden +++ b/.golden/richParagraphLayout/mixedSizes.golden @@ -19,7 +19,8 @@ ParagraphLayout { fragmentUserData = "smallText1" , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = "smallBox1", boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 1651, y_origin = 0, x_size = 1956, y_size = -841} , fragmentPen = (0, -699) , fragmentGlyphs = @@ -49,7 +50,8 @@ ParagraphLayout { fragmentUserData = "smallText2" , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = "smallBox2", boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 5258, y_origin = 0, x_size = 1956, y_size = -841} , fragmentPen = (0, -699) , fragmentGlyphs = diff --git a/.golden/richParagraphLayout/nestedBoxes.golden b/.golden/richParagraphLayout/nestedBoxes.golden index 74c04e2..860f61e 100644 --- a/.golden/richParagraphLayout/nestedBoxes.golden +++ b/.golden/richParagraphLayout/nestedBoxes.golden @@ -34,7 +34,9 @@ ParagraphLayout { fragmentUserData = "text2" , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = "box3", boxLeftSpacing = Just 0, boxRightSpacing = Just 0, boxStartSpacing = Just 0, boxEndSpacing = Just 0} + , AncestorBox {boxUserData = "box2", boxLeftSpacing = Just 0, boxRightSpacing = Nothing, boxStartSpacing = Just 0, boxEndSpacing = Nothing} + ] , fragmentRect = Rect {x_origin = 8569, y_origin = 0, x_size = 3350, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = @@ -51,7 +53,8 @@ ParagraphLayout { fragmentUserData = "text3" , fragmentLine = 1 , fragmentAncestorBoxes = - [] + [ AncestorBox {boxUserData = "box2", boxLeftSpacing = Nothing, boxRightSpacing = Just 0, boxStartSpacing = Nothing, boxEndSpacing = Just 0} + ] , fragmentRect = Rect {x_origin = 11919, y_origin = 0, x_size = 2657, y_size = -1121} , fragmentPen = (0, -932) , fragmentGlyphs = diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b8789f..d1048fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ * Supports multiple fonts in the same paragraph. Where line height varies, text will be aligned by its top edge. + * Supports nested boxes, each with optional spacing applied to its left + and right edge. + * Requires user to set base text direction (LTR or RTL). * Moved existing plain text interface into `Data.Text.ParagraphLayout.Plain` diff --git a/balkon.cabal b/balkon.cabal index 1a78a30..b643748 100644 --- a/balkon.cabal +++ b/balkon.cabal @@ -139,6 +139,7 @@ library balkon-internal Data.Text.ParagraphLayout.Internal.ParagraphExtents, Data.Text.ParagraphLayout.Internal.ParagraphLine, Data.Text.ParagraphLayout.Internal.ProtoFragment, + Data.Text.ParagraphLayout.Internal.ProtoLine, Data.Text.ParagraphLayout.Internal.Script build-depends: diff --git a/src/Data/Text/ParagraphLayout/Internal/Layout.hs b/src/Data/Text/ParagraphLayout/Internal/Layout.hs index 8e898e0..30c12cb 100644 --- a/src/Data/Text/ParagraphLayout/Internal/Layout.hs +++ b/src/Data/Text/ParagraphLayout/Internal/Layout.hs @@ -10,11 +10,12 @@ import Data.Int (Int32) import Data.List (mapAccumL) import Data.List.NonEmpty (NonEmpty ((:|)), nonEmpty, (<|)) import qualified Data.List.NonEmpty as NonEmpty -import Data.Maybe (catMaybes) +import Data.Maybe (catMaybes, fromMaybe) import Data.Text.Foreign (lengthWord8) import Data.Text.Glyphize ( Buffer (..) , ContentType (ContentTypeUnicode) + , Direction (DirLTR, DirRTL) , FontExtents (..) , GlyphInfo , GlyphPos @@ -25,13 +26,17 @@ import Data.Text.Glyphize import qualified Data.Text.ICU as BreakStatus (Line (Hard)) import qualified Data.Text.Lazy as Lazy +import Data.Text.ParagraphLayout.Internal.AncestorBox +import Data.Text.ParagraphLayout.Internal.ApplyBoxes import Data.Text.ParagraphLayout.Internal.BiDiReorder import Data.Text.ParagraphLayout.Internal.Break import Data.Text.ParagraphLayout.Internal.Fragment import Data.Text.ParagraphLayout.Internal.LineHeight import Data.Text.ParagraphLayout.Internal.ParagraphExtents import qualified Data.Text.ParagraphLayout.Internal.ProtoFragment as PF +import qualified Data.Text.ParagraphLayout.Internal.ProtoLine as PL import Data.Text.ParagraphLayout.Internal.Rect +import qualified Data.Text.ParagraphLayout.Internal.ResolvedBox as RB import qualified Data.Text.ParagraphLayout.Internal.ResolvedSpan as RS import Data.Text.ParagraphLayout.Internal.Run import Data.Text.ParagraphLayout.Internal.TextContainer @@ -43,6 +48,7 @@ import Data.Text.ParagraphLayout.Internal.WithSpan -- for the actual `spanUserData` before returning it to the user. type ProtoFragmentWithSpan d = WithSpan d PF.ProtoFragment type FragmentWithSpan d = WithSpan d (Fragment d) +type ProtoFragmentWithBoxes d = WithBoxes d (ProtoFragmentWithSpan d) -- | Create a multi-line layout from the given runs, splitting them as -- necessary to fit within the requested line width. @@ -55,27 +61,36 @@ layoutAndAlignLines maxWidth runs = frags frags = concatMap NonEmpty.toList fragsInLines (_, fragsInLines) = mapAccumL positionLineH originY numberedLines numberedLines = zip [1 ..] canonicalLines - canonicalLines = fmap reorder logicalLines - logicalLines = nonEmptyItems $ layoutLines maxWidth runs + canonicalLines = fmap reorderProtoFragments logicalLines + logicalLines = nonEmptyItems $ layoutLines maxWidth [] runs originY = paragraphOriginY -nonEmptyItems :: Foldable t => t [a] -> [NonEmpty a] -nonEmptyItems = catMaybes . map nonEmpty . toList +reorderProtoFragments :: PL.ProtoLine NonEmpty d -> PL.ProtoLine NonEmpty d +reorderProtoFragments pl@(PL.ProtoLine { PL.protoFragments = pfs }) = + pl { PL.protoFragments = reorder pfs } + +nonEmptyItems :: Foldable t => + t (PL.ProtoLine [] d) -> [PL.ProtoLine NonEmpty d] +nonEmptyItems = catMaybes . map PL.nonEmpty . toList -- | Create a multi-line layout from the given runs, splitting them as -- necessary to fit within the requested line width. -- -- The output is a two-dimensional list of fragments positioned along the -- horizontal axis. -layoutLines :: - Int32 -> NonEmpty (WithSpan d Run) -> NonEmpty [ProtoFragmentWithSpan d] -layoutLines maxWidth runs = case nonEmpty rest of +layoutLines :: Int32 -> [RB.ResolvedBox d] -> NonEmpty (WithSpan d Run) -> + NonEmpty (PL.ProtoLine [] d) +layoutLines maxWidth openBoxes runs = case nonEmpty rest of -- Everything fits. We are done. Nothing -> fitting :| [] -- Something fits, the rest goes on the next line. - Just rest' -> fitting <| layoutLines maxWidth rest' + Just runs' -> fitting <| layoutLines maxWidth openBoxes' runs' where - (fitting, rest) = layoutAndWrapRunsH maxWidth runs + (fitting, rest) = layoutAndWrapRunsH maxWidth openBoxes runs + -- Update the list of open boxes using the logically last run on this + -- line, if there is one. + openBoxes' = + openBoxes `fromMaybe` lastSpanBoxes (PL.protoFragments fitting) -- TODO: Allow a run across multiple spans (e.g. if they only differ by colour). @@ -86,27 +101,33 @@ layoutLines maxWidth runs = case nonEmpty rest of -- @vertical-align: top@ in CSS. -- -- TODO: For rich text, allow other types of vertical alignment. -positionLineH :: Int32 -> (Int, NonEmpty (ProtoFragmentWithSpan d)) -> +positionLineH :: Int32 -> (Int, PL.ProtoLine NonEmpty d) -> (Int32, NonEmpty (FragmentWithSpan d)) -positionLineH originY (line, pfs) = (nextY, frags) +positionLineH originY (num, pl) = (nextY, frags) where nextY = maximum $ fmap y_min rects rects = fmap (\ (WithSpan _ r) -> fragmentRect r) frags - (_, frags) = mapAccumL (positionFragmentH line originY) originX pfs + (_, frags) = mapAccumL (positionFragmentH num originY) originX wpfs + wpfs = PL.applyBoxes pl originX = paragraphOriginX -- | Position the given horizontal fragment on a line, -- using @originY@ as its top edge and @originX@ as its left edge, -- returning the X coordinate of its right edge for continuation. -positionFragmentH :: Int -> Int32 -> Int32 -> ProtoFragmentWithSpan d -> +positionFragmentH :: Int -> Int32 -> Int32 -> ProtoFragmentWithBoxes d -> (Int32, FragmentWithSpan d) -positionFragmentH line originY originX (WithSpan rs pf) = +positionFragmentH line originY originX (WithBoxes lbs (WithSpan rs pf) rbs) = (nextX, WithSpan rs frag) where - nextX = originX + PF.advance pf - frag = Fragment userData line [] rect (penX, penY) (PF.glyphs pf) + nextX = contentX + contentWidth + rightSpacing + contentX = originX + leftSpacing + contentWidth = PF.advance pf + leftSpacing = totalLeftSpacing bs + rightSpacing = totalRightSpacing bs + frag = Fragment userData line bs rect (penX, penY) (PF.glyphs pf) userData = RS.spanUserData rs - rect = Rect originX originY (PF.advance pf) (-lineHeight) + bs = ancestorBoxes lbs rbs rs + rect = Rect contentX originY contentWidth (-lineHeight) penX = 0 penY = descent + leading `div` 2 - lineHeight lineHeight = case textLineHeight opts of @@ -119,22 +140,83 @@ positionFragmentH line originY originX (WithSpan rs pf) = extents = fontExtentsForDir (textFont opts) (PF.direction pf) opts = RS.spanTextOptions rs +ancestorBoxes + :: [RB.ResolvedBox d] + -> [RB.ResolvedBox d] + -> RS.ResolvedSpan d + -> [AncestorBox d] +ancestorBoxes leftBoxes rightBoxes rs = map ancestorBox $ RS.spanBoxes rs + where + ancestorBox b = case RB.boxDirection b of + DirLTR -> AncestorBox + { boxUserData = RB.boxUserData b + , boxLeftSpacing = leftSpacing b + , boxRightSpacing = rightSpacing b + , boxStartSpacing = leftSpacing b + , boxEndSpacing = rightSpacing b + } + DirRTL -> AncestorBox + { boxUserData = RB.boxUserData b + , boxLeftSpacing = leftSpacing b + , boxRightSpacing = rightSpacing b + , boxStartSpacing = rightSpacing b + , boxEndSpacing = leftSpacing b + } + _ -> AncestorBox + { boxUserData = RB.boxUserData b + , boxLeftSpacing = Nothing + , boxRightSpacing = Nothing + , boxStartSpacing = Nothing + , boxEndSpacing = Nothing + } + leftSpacing b = if b `elem` leftBoxes + then Just $ RB.boxLeftSpacing b + else Nothing + rightSpacing b = if b `elem` rightBoxes + then Just $ RB.boxRightSpacing b + else Nothing + -- | Calculate layout for multiple horizontal runs, breaking them as necessary -- to fit as much content as possible without exceeding the maximum line width, -- and return the remaining runs to be placed on other lines. -layoutAndWrapRunsH :: Int32 -> NonEmpty (WithSpan d Run) -> - ([ProtoFragmentWithSpan d], [WithSpan d Run]) -layoutAndWrapRunsH maxWidth runs = NonEmpty.head $ validLayouts +layoutAndWrapRunsH + :: Int32 + -> [RB.ResolvedBox d] + -> NonEmpty (WithSpan d Run) + -> (PL.ProtoLine [] d, [WithSpan d Run]) +layoutAndWrapRunsH maxWidth prevOpenBoxes runs = NonEmpty.head $ validProtoLines where - validLayouts = dropWhile1 tooLong layouts - tooLong (pfs, _) = totalAdvances pfs > maxWidth - layouts = fmap layoutFst splits - layoutFst (runs1, runs2) = (layoutRunsH runs1, runs2) + validProtoLines = dropWhile1 tooLong layouts + tooLong (pl, _) = PL.width pl > maxWidth + layouts = fmap fstToProtoLine splits + fstToProtoLine (runs1, runs2) = + (protoLine prevOpenBoxes (layoutRunsH runs1) runs2, runs2) -- TODO: Consider optimising. -- We do not need to look for soft breaks further than the -- shortest hard break. splits = hardSplit runs :| softSplits runs +-- | Construct a `ProtoLine`, peeking at the text run on the following line +-- to determine `nextOpenBoxes`. +protoLine + :: [RB.ResolvedBox d] + -> [ProtoFragmentWithSpan d] + -> [WithSpan d Run] + -> PL.ProtoLine [] d +protoLine prev pfs rest = PL.ProtoLine pfs prev next + where + next = [] `fromMaybe` firstSpanBoxes rest + +firstSpanBoxes :: [WithSpan d a] -> Maybe [RB.ResolvedBox d] +firstSpanBoxes xs = case xs of + [] -> Nothing + (WithSpan rs _) : _ -> Just $ RS.spanBoxes rs + +lastSpanBoxes :: [WithSpan d a] -> Maybe [RB.ResolvedBox d] +lastSpanBoxes xs = case reverse xs of + [] -> Nothing + (WithSpan rs _) : _ -> Just $ RS.spanBoxes rs + -- | Treat a list of runs as a contiguous sequence, and split them into two -- lists so that the first list contains as many non-whitespace characters as -- possible without crossing a hard line break (typically after a newline @@ -209,10 +291,6 @@ dropWhile1 p list = case NonEmpty.uncons list of layoutRunsH :: [WithSpan d Run] -> [ProtoFragmentWithSpan d] layoutRunsH runs = map layoutRunH runs --- | Sum of all advances within the given fragments. -totalAdvances :: [ProtoFragmentWithSpan d] -> Int32 -totalAdvances pfs = sum $ map (\ (WithSpan _ pf) -> PF.advance pf) pfs - -- | Calculate layout for the given horizontal run and attach extra information. layoutRunH :: WithSpan d Run -> ProtoFragmentWithSpan d layoutRunH (WithSpan rs run) = WithSpan rs pf diff --git a/src/Data/Text/ParagraphLayout/Internal/ProtoLine.hs b/src/Data/Text/ParagraphLayout/Internal/ProtoLine.hs new file mode 100644 index 0000000..2632e40 --- /dev/null +++ b/src/Data/Text/ParagraphLayout/Internal/ProtoLine.hs @@ -0,0 +1,76 @@ +module Data.Text.ParagraphLayout.Internal.ProtoLine + ( ProtoLine (..) + , nonEmpty + , width + , applyBoxes + ) +where + +import Data.Int (Int32) +import Data.List.NonEmpty (NonEmpty ((:|))) + +import qualified Data.Text.ParagraphLayout.Internal.ApplyBoxes as Algo +import Data.Text.ParagraphLayout.Internal.ProtoFragment +import Data.Text.ParagraphLayout.Internal.ResolvedBox +import Data.Text.ParagraphLayout.Internal.WithSpan + +-- | Contents of a line that have not been visually ordered or positioned yet. +data ProtoLine f d = ProtoLine + + { protoFragments :: f (WithSpan d ProtoFragment) + -- ^ Fragments on the line, in logical order. + -- Intended to be either a regular list or a non-empty list. + + , prevOpenBoxes :: [ResolvedBox d] + -- ^ Boxes whose starts are located on preceding lines. + -- The spacing for their start edge will not count towards this line. + + , nextOpenBoxes :: [ResolvedBox d] + -- ^ Boxes whose ends are located on following lines. + -- The spacing for their end edge will not count towards this line. + + } + +-- | Covert a line with a regular list of fragments into `Just` a line with +-- a non-empty list of fragments, or `Nothing` if there are no fragments. +nonEmpty :: ProtoLine [] d -> Maybe (ProtoLine NonEmpty d) +nonEmpty (ProtoLine [] _ _) = Nothing +nonEmpty pl@(ProtoLine { protoFragments = (f : fs) }) = + Just pl { protoFragments = f :| fs } + +-- | Total width of the line (content and spacing). +width :: (Foldable f, Functor f) => ProtoLine f d -> Int32 +width pl = totalAdvances pl + totalBoxesStart pl + totalBoxesEnd pl + +-- | Determine which horizontal fragments are the leftmost and which are the +-- rightmost within their ancestor inline boxes. +-- +-- The input must be ordered from left to right. +applyBoxes :: ProtoLine NonEmpty d -> + NonEmpty (Algo.WithBoxes d (WithSpan d ProtoFragment)) +applyBoxes pl = Algo.applyBoxes prevOpen nextOpen pfs + where + prevOpen = prevOpenBoxes pl + nextOpen = nextOpenBoxes pl + pfs = protoFragments pl + +-- | Total glyph advances on the line. +totalAdvances :: (Foldable f, Functor f) => ProtoLine f d -> Int32 +totalAdvances pl = sum $ fmap getAdvance $ protoFragments pl + where getAdvance (WithSpan _ pf) = advance pf + +-- | Total spacing for boxes starting on the line. +totalBoxesStart :: (Foldable f, Functor f) => ProtoLine f d -> Int32 +totalBoxesStart pl = sum $ fmap boxStartSpacing $ boxesStart pl + +-- | Total spacing for boxes ending on the line. +totalBoxesEnd :: (Foldable f, Functor f) => ProtoLine f d -> Int32 +totalBoxesEnd pl = sum $ fmap boxEndSpacing $ boxesEnd pl + +-- | Boxes that start on the given line. +boxesStart :: (Foldable f, Functor f) => ProtoLine f d -> [ResolvedBox d] +boxesStart pl = allBoxes (protoFragments pl) `diff` prevOpenBoxes pl + +-- | Boxes that end on the given line. +boxesEnd :: (Foldable f, Functor f) => ProtoLine f d -> [ResolvedBox d] +boxesEnd pl = allBoxes (protoFragments pl) `diff` nextOpenBoxes pl -- 2.30.2