Commit 1a3d27ba authored by Koji Ishii's avatar Koji Ishii Committed by Commit Bot

[LayoutNG] Re-implement 'text-overflow: ellipsis'

This patch re-implements 'text-overflow: ellipsis' in LayoutNG.

Before this patch, it was implemented in NGLineBreaker. It
helped sharing the code with other line breaking logic, and
working in logical coordinate made things simpler. However,
some tests fail due to taller fonts/objects in the hidden
part, or when out-of-flow/float objects in the line. While
these look edge cases, given the high usage of the
'text-overflow' property, this patch fixes them by moving
the logic to NGInlineLayoutAlgorithm.

The logic is largely independent and that it is moved to
a new class, NGLineTruncator.

This patch also uses a new ShapeResult::OffsetToFit()
function added in CL:1020760 for more accurate truncation.

Relative position is not supported yet. And tests for
inline-block container still fail, they will be investigated
in following patches.

Bug: 636993
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: Idb0d80b239d9f53cd6a4878a9378f5bfbc0d24ea
Reviewed-on: https://chromium-review.googlesource.com/1013019
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Reviewed-by: default avatarAleks Totic <atotic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555152}
parent 73999724
......@@ -187,10 +187,6 @@ crbug.com/591099 editing/selection/5354455-2.html [ Failure ]
crbug.com/591099 editing/selection/caret-at-bidi-boundary.html [ Failure ]
crbug.com/591099 editing/selection/continuations-with-move-caret-to-boundary.html [ Failure ]
crbug.com/591099 editing/selection/continuations-without-move-caret-to-boundary.html [ Failure ]
crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed.html [ Failure ]
crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed.html [ Failure ]
crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl.html [ Failure ]
crbug.com/591099 editing/selection/dont-select-text-overflow-ellipsis-when-wrapping.html [ Failure ]
crbug.com/591099 editing/selection/doubleclick-beside-cr-span.html [ Failure ]
crbug.com/591099 editing/selection/drag-in-iframe.html [ Failure ]
crbug.com/591099 editing/selection/extend-inside-transforms-backward.html [ Failure ]
......@@ -208,11 +204,6 @@ crbug.com/714962 editing/selection/offset-from-point.html [ Failure ]
crbug.com/591099 editing/selection/paint-hyphen.html [ Failure ]
crbug.com/591099 editing/selection/programmatic-selection-on-mac-is-directionless.html [ Timeout ]
crbug.com/591099 editing/selection/select-bidi-run.html [ Failure ]
crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2.html [ Failure ]
crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-ltr.html [ Failure ]
crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2.html [ Failure ]
crbug.com/591099 editing/selection/select-text-overflow-ellipsis-mixed-in-rtl.html [ Failure ]
crbug.com/591099 editing/selection/select-text-overflow-ellipsis.html [ Failure ]
crbug.com/591099 editing/selection/selection-button-text.html [ Failure ]
crbug.com/591099 editing/selection/shift-click.html [ Failure ]
crbug.com/591099 editing/selection/skip-over-contenteditable.html [ Failure ]
......@@ -449,14 +440,10 @@ crbug.com/714962 external/wpt/css/css-transforms/transform-abspos-006.html [ Fai
crbug.com/714962 external/wpt/css/css-transforms/transform-abspos-007.html [ Failure ]
crbug.com/591099 external/wpt/css/css-transforms/transform-transformed-tr-percent-height-child.html [ Failure ]
crbug.com/591099 external/wpt/css/css-transforms/transform3d-perspective-008.html [ Pass ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-006.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-010.html [ Pass ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-012.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-013.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-014.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-015.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-022.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-027.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-029.html [ Failure ]
crbug.com/591099 external/wpt/css/css-ui/text-overflow-026.html [ Pass ]
crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht [ Pass ]
crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht [ Pass ]
crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vlr-011.xht [ Pass ]
......@@ -1010,11 +997,6 @@ crbug.com/591099 fast/css/percent-min-width-img-src-change.html [ Failure ]
crbug.com/591099 fast/css/percent-width-img-src-change.html [ Failure ]
crbug.com/591099 fast/css/resize-corner-tracking.html [ Failure ]
crbug.com/591099 fast/css/sticky/sticky-top-overflow-scroll-by-fragment.html [ Failure ]
crbug.com/591099 fast/css/text-overflow-ellipsis-text-align-center.html [ Failure ]
crbug.com/591099 fast/css/text-overflow-ellipsis-text-align-justify.html [ Failure ]
crbug.com/591099 fast/css/text-overflow-ellipsis-text-align-left.html [ Failure ]
crbug.com/591099 fast/css/text-overflow-ellipsis-text-align-right.html [ Failure ]
crbug.com/714962 fast/css/text-overflow-ellipsis-vertical-hittest.html [ Failure ]
crbug.com/591099 fast/css/text-overflow-ellipsis-vertical-select.html [ Failure ]
crbug.com/591099 fast/css/transform-inline-style-remove.html [ Failure ]
crbug.com/591099 fast/css/vertical-align-lengths.html [ Failure ]
......@@ -1407,7 +1389,6 @@ crbug.com/591099 fast/text/decorations-with-text-combine.html [ Failure ]
crbug.com/714962 fast/text/ellipsis-in-justified-text.html [ Failure ]
crbug.com/591099 fast/text/ellipsis-in-relative-inline-right.html [ Failure ]
crbug.com/591099 fast/text/ellipsis-in-relative-inline.html [ Failure ]
crbug.com/591099 fast/text/ellipsis-platform-font-change.html [ Failure ]
crbug.com/714962 fast/text/emoticons.html [ Failure ]
crbug.com/591099 fast/text/emphasis-avoid-ruby.html [ Failure ]
crbug.com/591099 fast/text/emphasis-combined-text.html [ Failure ]
......
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x104
LayoutNGBlockFlow {HTML} at (0,0) size 800x104
LayoutNGBlockFlow {BODY} at (8,16) size 784x80
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 482x19
text run at (0,0) width 482: "crbug.com/642454: Don't select part of the ellipsis when wrapping selection."
LayoutNGBlockFlow {DL} at (200,36) size 384x44
LayoutNGBlockFlow {DT} at (0,22) size 384x22
LayoutText {#text} at (0,0) size 212x21
text run at (0,0) width 212: "Lorem ipsum dolor sit amet"
layer at (248,52) size 344x22
LayoutNGBlockFlow {DD} at (40,0) size 344x22
LayoutText {#text} at (0,0) size 338x21
text run at (0,0) width 319: "Lorem ipsum dolor sit amet, consetetur sa"
text run at (319,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 10 of child 0 {#text} of child 3 {DT} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x104
LayoutNGBlockFlow {HTML} at (0,0) size 800x104
LayoutNGBlockFlow {BODY} at (8,16) size 784x80
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 482x19
text run at (0,0) width 482: "crbug.com/642454: Don't select part of the ellipsis when wrapping selection."
LayoutNGBlockFlow {DL} at (200,36) size 384x44
LayoutNGBlockFlow {DT} at (0,22) size 384x22
LayoutText {#text} at (0,0) size 212x21
text run at (0,0) width 212: "Lorem ipsum dolor sit amet"
layer at (248,52) size 344x22
LayoutNGBlockFlow {DD} at (40,0) size 344x22
LayoutText {#text} at (0,0) size 342x21
text run at (0,0) width 56: "Lorem "
text run at (56,0) width 267: "\x{5D0} \x{5DB}\x{5D9}\x{5E0}\x{5D5}\x{5D9} \x{5DC}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D7}\x{5E1}\x{5E8} \x{5DE}\x{5E9}\x{5DE}\x{5E2}\x{5D5}\x{5EA} \x{5DC}\x{5D7}\x{5DC}\x{5D5}\x{5D8}\x{5D9}\x{5DF}"
text run at (323,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 10 of child 0 {#text} of child 3 {DT} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x104
LayoutNGBlockFlow {HTML} at (0,0) size 800x104
LayoutNGBlockFlow {BODY} at (8,16) size 784x80
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 482x19
text run at (0,0) width 482: "crbug.com/642454: Don't select part of the ellipsis when wrapping selection."
LayoutNGBlockFlow {DL} at (200,36) size 384x44
LayoutNGBlockFlow {DT} at (0,22) size 384x22
LayoutText {#text} at (0,0) size 212x21
text run at (0,0) width 212: "Lorem ipsum dolor sit amet"
layer at (208,52) size 344x22
LayoutNGBlockFlow {DD} at (0,0) size 344x22
LayoutText {#text} at (-873,0) size 1217x21
text run at (-873,0) width 5: "."
text run at (21,0) width 323: "e magna aliquyam erat, sed diam voluptua"
text run at (2,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 10 of child 0 {#text} of child 3 {DT} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x104
LayoutNGBlockFlow {HTML} at (0,0) size 800x104
LayoutNGBlockFlow {BODY} at (8,16) size 784x80
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 482x19
text run at (0,0) width 482: "crbug.com/642454: Don't select part of the ellipsis when wrapping selection."
LayoutNGBlockFlow {DL} at (200,36) size 384x44
LayoutNGBlockFlow {DT} at (0,22) size 384x22
LayoutText {#text} at (0,0) size 212x21
text run at (0,0) width 212: "Lorem ipsum dolor sit amet"
layer at (208,52) size 344x22
LayoutNGBlockFlow {DD} at (0,0) size 344x22
LayoutText {#text} at (29,0) size 334x21
text run at (29,0) width 264: " \x{5DC}\x{5D5}\x{5E8}\x{5DD} \x{5D0}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5DD} \x{5D4}\x{5D5}\x{5D0} \x{5DB}\x{5D9}\x{5E0}\x{5D5}\x{5D9} \x{5DC}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D7}\x{5E1}\x{5E8} "
text run at (293,0) width 51: "Lorem"
text run at (10,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 10 of child 0 {#text} of child 3 {DT} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x600
LayoutNGBlockFlow {HTML} at (0,0) size 800x600
LayoutNGBlockFlow {BODY} at (8,8) size 784x584
LayoutNGBlockFlow {H3} at (0,0) size 784x23
LayoutText {#text} at (0,0) size 66x22
text run at (0,0) width 66: "Test for "
LayoutInline {A} at (0,0) size 155x22 [color=#0000EE]
LayoutText {#text} at (66,0) size 155x22
text run at (66,0) width 155: "WebKit bug 29968"
LayoutText {#text} at (221,0) size 560x22
text run at (221,0) width 560: ": Selecting text with text-overflow ellipsis should not show cut off text"
layer at (8,50) size 95x20
LayoutNGBlockFlow {DIV} at (0,41.72) size 95x20
LayoutText {#text} at (0,0) size 88x19
text run at (0,0) width 72: "Lorem ipsu"
text run at (72,0) width 16: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 3 {DIV} of body
selection end: position 11 of child 0 {#text} of child 3 {DIV} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x82
LayoutNGBlockFlow {HTML} at (0,0) size 800x82
LayoutNGBlockFlow {BODY} at (8,16) size 784x58
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 692x19
text run at (0,0) width 692: "crbug.com/642454: Select all text in mixed ltr-rtl in rtl flow. None of the dots in the ellipsis should be selected."
LayoutNGBlockFlow {DL} at (200,36) size 384x22
layer at (248,52) size 344x22
LayoutNGBlockFlow {DD} at (40,0) size 344x22
LayoutText {#text} at (0,0) size 341x21
text run at (0,0) width 108: "Lorem ipsum "
text run at (108,0) width 214: "\x{5D9} \x{5D4}\x{5E1}\x{5D5}\x{5E4}\x{5D9}\x{5E2}\x{5D3} \x{5E9}\x{5D9}\x{5D4}\x{5D9}\x{5D4} \x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D0}\x{5DE}\x{5D9}\x{5EA}"
text run at (322,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 66 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x82
LayoutNGBlockFlow {HTML} at (0,0) size 800x82
LayoutNGBlockFlow {BODY} at (8,16) size 784x58
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 374x19
text run at (0,0) width 374: "crbug.com/634445: Select all text in mixed ltr-rtl in ltr flow."
LayoutNGBlockFlow {DL} at (200,36) size 384x22
layer at (248,52) size 344x22
LayoutNGBlockFlow {DD} at (40,0) size 344x22
LayoutText {#text} at (0,0) size 342x21
text run at (0,0) width 56: "Lorem "
text run at (56,0) width 267: "\x{5D0} \x{5DB}\x{5D9}\x{5E0}\x{5D5}\x{5D9} \x{5DC}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D7}\x{5E1}\x{5E8} \x{5DE}\x{5E9}\x{5DE}\x{5E2}\x{5D5}\x{5EA} \x{5DC}\x{5D7}\x{5DC}\x{5D5}\x{5D8}\x{5D9}\x{5DF}"
text run at (323,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 52 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x82
LayoutNGBlockFlow {HTML} at (0,0) size 800x82
LayoutNGBlockFlow {BODY} at (8,16) size 784x58
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 692x19
text run at (0,0) width 692: "crbug.com/642454: Select all text in mixed ltr-rtl in rtl flow. None of the dots in the ellipsis should be selected."
LayoutNGBlockFlow {DL} at (200,36) size 384x22
layer at (208,52) size 344x22
LayoutNGBlockFlow {DD} at (0,0) size 344x22
LayoutText {#text} at (23,0) size 340x21
text run at (23,0) width 218: " \x{5D9}\x{5E0}\x{5D8}\x{5E8}\x{5E0}\x{5D8} \x{5D5}\x{5DB}\x{5D5}' \x{5D1}\x{5DE}\x{5E7}\x{5D5}\x{5DD} \x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D4}\x{5D0}"
text run at (241,0) width 103: "Lorem ipsum"
text run at (4,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 66 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x82
LayoutNGBlockFlow {HTML} at (0,0) size 800x82
LayoutNGBlockFlow {BODY} at (8,16) size 784x58
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 374x19
text run at (0,0) width 374: "crbug.com/634445: Select all text in mixed ltr-rtl in rtl flow."
LayoutNGBlockFlow {DL} at (200,36) size 384x22
layer at (208,52) size 344x22
LayoutNGBlockFlow {DD} at (0,0) size 344x22
LayoutText {#text} at (29,0) size 334x21
text run at (29,0) width 264: " \x{5DC}\x{5D5}\x{5E8}\x{5DD} \x{5D0}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5DD} \x{5D4}\x{5D5}\x{5D0} \x{5DB}\x{5D9}\x{5E0}\x{5D5}\x{5D9} \x{5DC}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D7}\x{5E1}\x{5E8} "
text run at (293,0) width 51: "Lorem"
text run at (10,0) width 19: "\x{2026}"
selection start: position 0 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
selection end: position 52 of child 0 {#text} of child 1 {DD} of child 2 {DL} of body
......@@ -26,11 +26,12 @@ layer at (8,88) size 207x20
text run at (203,0) width 4: "\x{202B} "
layer at (8,108) size 207x20
LayoutNGBlockFlow {DIV} at (0,100) size 207x20
LayoutText {#text} at (4,0) size 203x19
text run at (4,0) width 16: "\x{2026}"
LayoutText {#text} at (-125,0) size 332x19
text run at (-125,0) width 4: " \x{202C}"
text run at (20,0) width 103: " \x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5D1}\x{5E8}\x{5D9} \x{5DC}\x{5D3}\x{5D5}\x{5D2}"
text run at (123,0) width 80: "English Text"
text run at (203,0) width 4: "\x{202B} "
text run at (4,0) width 16: "\x{2026}"
layer at (8,168) size 207x20
LayoutNGBlockFlow {DIV} at (0,160) size 207x20
LayoutText {#text} at (0,0) size 243x19
......@@ -43,11 +44,12 @@ layer at (8,168) size 207x20
text run at (214,0) width 29: "\x{5D0}\x{5D7}\x{5EA}"
layer at (8,188) size 207x20
LayoutNGBlockFlow {DIV} at (0,180) size 207x20
LayoutText {#text} at (0,0) size 207x19
LayoutText {#text} at (0,0) size 243x19
text run at (0,0) width 29: "\x{5DE}\x{5D9}\x{5DC}\x{5D4}"
text run at (29,0) width 41: " word "
text run at (70,0) width 37: "\x{5D0}\x{5D7}\x{5E8}\x{5EA}"
text run at (107,0) width 55: " another "
text run at (162,0) width 25: "\x{5D5}\x{5E2}\x{5D5}\x{5D3}"
text run at (187,0) width 4: " "
text run at (214,0) width 29: "\x{5D0}\x{5D7}\x{5EA}"
text run at (191,0) width 16: "\x{2026}"
......@@ -10,29 +10,29 @@ layer at (8,8) size 343x30 clip at (13,13) size 333x20
text run at (312,5) width 16: "\x{2026}"
layer at (8,58) size 343x30 clip at (13,63) size 333x20
LayoutNGBlockFlow {DIV} at (0,50) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (25,5) size 303x19
text run at (25,5) width 16: "\x{2026}"
text run at (41,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutText {#text} at (46,5) size 303x19
text run at (46,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (30,5) width 16: "\x{2026}"
layer at (8,108) size 343x30 clip at (13,113) size 333x20
LayoutNGBlockFlow {DIV} at (0,100) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (30,5) size 303x19
text run at (30,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (317,5) width 16: "\x{2026}"
LayoutText {#text} at (25,5) size 303x19
text run at (25,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (312,5) width 16: "\x{2026}"
layer at (8,158) size 343x30 clip at (13,163) size 333x20
LayoutNGBlockFlow {DIV} at (0,150) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (30,5) size 303x19
text run at (30,5) width 16: "\x{2026}"
LayoutText {#text} at (46,5) size 303x19
text run at (46,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (30,5) width 16: "\x{2026}"
layer at (8,208) size 343x30 clip at (13,213) size 333x20
LayoutNGBlockFlow {DIV} at (0,200) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (27,5) size 304x19
text run at (27,5) width 288: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (314,5) width 17: "\x{2026}"
LayoutText {#text} at (25,5) size 303x19
text run at (25,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (312,5) width 16: "\x{2026}"
layer at (8,258) size 343x30 clip at (13,263) size 333x20
LayoutNGBlockFlow {DIV} at (0,250) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (27,5) size 304x19
text run at (27,5) width 17: "\x{2026}"
text run at (43,5) width 288: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutText {#text} at (46,5) size 303x19
text run at (46,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (30,5) width 16: "\x{2026}"
layer at (8,308) size 343x30 clip at (13,313) size 333x20
LayoutNGBlockFlow {DIV} at (0,300) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (25,5) size 303x19
......@@ -40,6 +40,6 @@ layer at (8,308) size 343x30 clip at (13,313) size 333x20
text run at (312,5) width 16: "\x{2026}"
layer at (8,358) size 343x30 clip at (13,363) size 333x20
LayoutNGBlockFlow {DIV} at (0,350) size 343x30 [border: (5px solid #008000)]
LayoutText {#text} at (30,5) size 303x19
text run at (30,5) width 16: "\x{2026}"
LayoutText {#text} at (46,5) size 303x19
text run at (46,5) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (30,5) width 16: "\x{2026}"
......@@ -46,32 +46,32 @@ layer at (0,0) size 800x770 backgroundClip at (0,0) size 800x600 clip at (0,0) s
text run at (0,0) width 205: "LTR link with forced rtl content:"
layer at (8,108) size 182x22 clip at (9,109) size 180x20
LayoutNGBlockFlow {DIV} at (0,100) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (3,1) width 16: "\x{2026}"
layer at (8,170) size 182x22 clip at (9,171) size 180x20
LayoutNGBlockFlow {DIV} at (0,162) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
text run at (3,1) width 16: "\x{2026}"
layer at (8,232) size 182x22 clip at (9,233) size 180x20
LayoutNGBlockFlow {DIV} at (0,224) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,294) size 182x22 clip at (9,295) size 180x20
LayoutNGBlockFlow {DIV} at (0,286) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
LayoutText {#text} at (23,1) size 174x19
text run at (23,1) width 158: "et, consectetur adipiscing"
text run at (7,1) width 16: "\x{2026}"
layer at (8,356) size 182x22 clip at (9,357) size 180x20
LayoutNGBlockFlow {DIV} at (0,348) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
LayoutInline {A} at (0,0) size 174x19 [color=#0000EE]
LayoutText {#text} at (23,1) size 174x19
text run at (23,1) width 158: "et, consectetur adipiscing"
text run at (7,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,418) size 182x22 clip at (9,419) size 180x20
LayoutNGBlockFlow {DIV} at (0,410) size 182x22 [border: (1px solid #000000)]
......@@ -87,30 +87,30 @@ layer at (8,480) size 182x22 clip at (9,481) size 180x20
text run at (163,1) width 16: "\x{2026}"
layer at (8,542) size 182x22 clip at (9,543) size 180x20
LayoutNGBlockFlow {DIV} at (0,534) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (163,1) width 16: "\x{2026}"
LayoutText {#text} at (1,1) size 175x19
text run at (1,1) width 159: "\x{5D4}\x{5D5}\x{5E1}\x{5D9}\x{5E3} \x{5D0}\x{5DC}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5EA} \x{5D1}\x{5E1}\x{5D5}\x{5E3} \x{5E9}\x{5D5}\x{5E8}\x{5D4}"
text run at (160,1) width 16: "\x{2026}"
layer at (8,604) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,596) size 182x22 [border: (1px solid #000000)]
LayoutInline {SPAN} at (0,0) size 178x19
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "Lorem ipsum dolor sit am"
text run at (163,1) width 16: "\x{2026}"
LayoutInline {SPAN} at (0,0) size 174x19
LayoutText {#text} at (1,1) size 174x19
text run at (1,1) width 158: "et, consectetur adipiscing"
text run at (159,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,666) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,658) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (163,1) width 16: "\x{2026}"
LayoutInline {A} at (0,0) size 175x19 [color=#0000EE]
LayoutText {#text} at (1,1) size 175x19
text run at (1,1) width 159: "\x{5D4}\x{5D5}\x{5E1}\x{5D9}\x{5E3} \x{5D0}\x{5DC}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5EA} \x{5D1}\x{5E1}\x{5D5}\x{5E3} \x{5E9}\x{5D5}\x{5E8}\x{5D4}"
text run at (160,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,728) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,720) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutInline {A} at (0,0) size 174x19 [color=#0000EE]
LayoutText {#text} at (0,0) size 0x0
LayoutInline {SPAN} at (0,0) size 178x19
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "Lorem ipsum dolor sit am"
text run at (163,1) width 16: "\x{2026}"
LayoutInline {SPAN} at (0,0) size 174x19
LayoutText {#text} at (1,1) size 174x19
text run at (1,1) width 158: "et, consectetur adipiscing"
text run at (159,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
LayoutText {#text} at (0,0) size 0x0
......@@ -46,32 +46,32 @@ layer at (0,0) size 800x770 backgroundClip at (0,0) size 800x600 clip at (0,0) s
text run at (0,0) width 205: "LTR link with forced rtl content:"
layer at (8,108) size 182x22 clip at (9,109) size 180x20
LayoutNGBlockFlow {DIV} at (0,100) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (3,1) width 16: "\x{2026}"
layer at (8,170) size 182x22 clip at (9,171) size 180x20
LayoutNGBlockFlow {DIV} at (0,162) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
text run at (3,1) width 16: "\x{2026}"
layer at (8,232) size 182x22 clip at (9,233) size 180x20
LayoutNGBlockFlow {DIV} at (0,224) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (19,1) size 178x19
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
text run at (3,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,294) size 182x22 clip at (9,295) size 180x20
LayoutNGBlockFlow {DIV} at (0,286) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
LayoutText {#text} at (23,1) size 174x19
text run at (23,1) width 158: "et, consectetur adipiscing"
text run at (7,1) width 16: "\x{2026}"
layer at (8,356) size 182x22 clip at (9,357) size 180x20
LayoutNGBlockFlow {DIV} at (0,348) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (3,1) size 178x19
text run at (3,1) width 16: "\x{2026}"
text run at (19,1) width 162: "Lorem ipsum dolor sit am"
LayoutInline {A} at (0,0) size 174x19 [color=#0000EE]
LayoutText {#text} at (23,1) size 174x19
text run at (23,1) width 158: "et, consectetur adipiscing"
text run at (7,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,418) size 182x22 clip at (9,419) size 180x20
LayoutNGBlockFlow {DIV} at (0,410) size 182x22 [border: (1px solid #000000)]
......@@ -87,30 +87,30 @@ layer at (8,480) size 182x22 clip at (9,481) size 180x20
text run at (163,1) width 16: "\x{2026}"
layer at (8,542) size 182x22 clip at (9,543) size 180x20
LayoutNGBlockFlow {DIV} at (0,534) size 182x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (163,1) width 16: "\x{2026}"
LayoutText {#text} at (1,1) size 175x19
text run at (1,1) width 159: "\x{5D4}\x{5D5}\x{5E1}\x{5D9}\x{5E3} \x{5D0}\x{5DC}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5EA} \x{5D1}\x{5E1}\x{5D5}\x{5E3} \x{5E9}\x{5D5}\x{5E8}\x{5D4}"
text run at (160,1) width 16: "\x{2026}"
layer at (8,604) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,596) size 182x22 [border: (1px solid #000000)]
LayoutInline {SPAN} at (0,0) size 178x19
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "Lorem ipsum dolor sit am"
text run at (163,1) width 16: "\x{2026}"
LayoutInline {SPAN} at (0,0) size 174x19
LayoutText {#text} at (1,1) size 174x19
text run at (1,1) width 158: "et, consectetur adipiscing"
text run at (159,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,666) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,658) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "\x{5DB}\x{5E9}\x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5E2}\x{5E8}\x{5D5}\x{5DA} \x{5DE}\x{5D3}\x{5D9} \x{5E0}\x{5E8}\x{5E6}\x{5D4} "
text run at (163,1) width 16: "\x{2026}"
LayoutInline {A} at (0,0) size 175x19 [color=#0000EE]
LayoutText {#text} at (1,1) size 175x19
text run at (1,1) width 159: "\x{5D4}\x{5D5}\x{5E1}\x{5D9}\x{5E3} \x{5D0}\x{5DC}\x{5D9}\x{5E4}\x{5E1}\x{5D5}\x{5EA} \x{5D1}\x{5E1}\x{5D5}\x{5E3} \x{5E9}\x{5D5}\x{5E8}\x{5D4}"
text run at (160,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
layer at (8,728) size 182x22 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,720) size 182x22 [border: (1px solid #000000)]
LayoutInline {A} at (0,0) size 178x19 [color=#0000EE]
LayoutInline {A} at (0,0) size 174x19 [color=#0000EE]
LayoutText {#text} at (0,0) size 0x0
LayoutInline {SPAN} at (0,0) size 178x19
LayoutText {#text} at (1,1) size 178x19
text run at (1,1) width 162: "Lorem ipsum dolor sit am"
text run at (163,1) width 16: "\x{2026}"
LayoutInline {SPAN} at (0,0) size 174x19
LayoutText {#text} at (1,1) size 174x19
text run at (1,1) width 158: "et, consectetur adipiscing"
text run at (159,1) width 16: "\x{2026}"
LayoutText {#text} at (0,0) size 0x0
LayoutText {#text} at (0,0) size 0x0
layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 912
LayoutView at (0,0) size 800x600
layer at (0,0) size 785x912 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
LayoutNGBlockFlow {HTML} at (0,0) size 785x912.47
LayoutNGBlockFlow {BODY} at (8,8) size 769x884.47
LayoutNGBlockFlow {P} at (0,0) size 769x20
LayoutText {#text} at (0,0) size 550x19
text run at (0,0) width 550: "This test checks that text with text-overflow:ellipsis follows 'text-align: center' correctly."
LayoutNGBlockFlow {P} at (0,36) size 769x20
LayoutText {#text} at (0,0) size 386x19
text run at (0,0) width 386: "The text in all boxes should have the text centered in the box."
LayoutNGBlockFlow {H3} at (0,74.72) size 769x23
LayoutText {#text} at (0,0) size 84x22
text run at (0,0) width 84: "Single line"
LayoutNGBlockFlow {H3} at (0,158.44) size 769x23
LayoutText {#text} at (0,0) size 79x22
text run at (0,0) width 79: "Multi line"
LayoutNGBlockFlow {H3} at (0,302.16) size 769x23
LayoutText {#text} at (0,0) size 232x22
text run at (0,0) width 232: "Containing replaced content"
LayoutNGBlockFlow {H3} at (0,395.88) size 769x23
LayoutText {#text} at (0,0) size 396x22
text run at (0,0) width 396: "Containing replaced content blocking the ellipsis"
LayoutNGBlockFlow {H3} at (0,489.59) size 769x23
LayoutText {#text} at (0,0) size 197x22
text run at (0,0) width 197: "Right-To-Left single line"
LayoutNGBlockFlow {H3} at (0,573.31) size 769x23
LayoutText {#text} at (0,0) size 196x22
text run at (0,0) width 196: "Right-To-Left Multi line"
LayoutNGBlockFlow {H3} at (0,717.03) size 769x23
LayoutText {#text} at (0,0) size 343x22
text run at (0,0) width 343: "Right-To-Left containing replaced content"
LayoutNGBlockFlow {H3} at (0,810.75) size 769x23
LayoutText {#text} at (0,0) size 507x22
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,124) size 310x22 clip at (9,125) size 308x20
LayoutNGBlockFlow {DIV} at (0,116.44) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
layer at (8,208) size 310x82 clip at (9,209) size 308x80
LayoutNGBlockFlow {DIV} at (0,200.16) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
LayoutBR {BR} at (719,1) size 0x0
LayoutText {#text} at (1,21) size 306x19
text run at (1,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (291,21) width 16: "\x{2026}"
LayoutBR {BR} at (709,21) size 0x0
LayoutText {#text} at (1,41) size 302x19
text run at (1,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (287,41) width 16: "\x{2026}"
LayoutBR {BR} at (701,41) size 0x0
LayoutText {#text} at (1,61) size 305x19
text run at (1,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (290,61) width 16: "\x{2026}"
LayoutBR {BR} at (696,61) size 0x0
layer at (8,352) size 310x32 clip at (9,353) size 308x30
LayoutNGBlockFlow {DIV} at (0,343.88) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 181x19
text run at (1,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (182,1) size 25x25
LayoutText {#text} at (207,11) size 102x19
text run at (207,11) width 86: " consectetur a"
text run at (293,11) width 16: "\x{2026}"
layer at (8,446) size 310x32 clip at (9,447) size 308x30
LayoutNGBlockFlow {DIV} at (0,437.59) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 287x19
text run at (1,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (272,11) width 16: "\x{2026}"
LayoutImage {IMG} at (744,1) size 25x25
LayoutText {#text} at (744,11) size 447x19
text run at (744,11) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,539) size 310x22 clip at (9,540) size 308x20
LayoutNGBlockFlow {DIV} at (0,531.31) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
layer at (8,623) size 310x82 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,615.03) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
LayoutBR {BR} at (-410,1) size 0x0
LayoutText {#text} at (19,21) size 306x19
text run at (19,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (3,21) width 16: "\x{2026}"
LayoutBR {BR} at (-400,21) size 0x0
LayoutText {#text} at (23,41) size 302x19
text run at (23,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (7,41) width 16: "\x{2026}"
LayoutBR {BR} at (-392,41) size 0x0
LayoutText {#text} at (20,61) size 305x19
text run at (20,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (4,61) width 16: "\x{2026}"
LayoutBR {BR} at (-387,61) size 0x0
layer at (8,767) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,758.75) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (128,11) size 181x19
text run at (128,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (103,1) size 25x25
LayoutText {#text} at (17,11) size 102x19
text run at (17,11) width 86: " consectetur a"
text run at (1,11) width 16: "\x{2026}"
layer at (8,860) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,852.47) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (38,11) size 287x19
text run at (38,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (22,11) width 16: "\x{2026}"
LayoutImage {IMG} at (309,1) size 25x25
LayoutText {#text} at (309,11) size 448x19
text run at (309,11) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 932
LayoutView at (0,0) size 800x600
layer at (0,0) size 785x932 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
LayoutNGBlockFlow {HTML} at (0,0) size 785x932.47
LayoutNGBlockFlow {BODY} at (8,8) size 769x904.47
LayoutNGBlockFlow {P} at (0,0) size 769x20
LayoutText {#text} at (0,0) size 551x19
text run at (0,0) width 551: "This test checks that text with text-overflow:ellipsis follows 'text-align: justify' correctly."
LayoutNGBlockFlow {P} at (0,36) size 769x40
LayoutText {#text} at (0,0) size 740x39
text run at (0,0) width 740: "LTR text should be aligned with the left hand side of their box. RTL text should be aligned with the right hand side of"
text run at (0,20) width 60: "their box."
LayoutNGBlockFlow {H3} at (0,94.72) size 769x23
LayoutText {#text} at (0,0) size 84x22
text run at (0,0) width 84: "Single line"
LayoutNGBlockFlow {H3} at (0,178.44) size 769x23
LayoutText {#text} at (0,0) size 79x22
text run at (0,0) width 79: "Multi line"
LayoutNGBlockFlow {H3} at (0,322.16) size 769x23
LayoutText {#text} at (0,0) size 232x22
text run at (0,0) width 232: "Containing replaced content"
LayoutNGBlockFlow {H3} at (0,415.88) size 769x23
LayoutText {#text} at (0,0) size 396x22
text run at (0,0) width 396: "Containing replaced content blocking the ellipsis"
LayoutNGBlockFlow {H3} at (0,509.59) size 769x23
LayoutText {#text} at (0,0) size 197x22
text run at (0,0) width 197: "Right-To-Left single line"
LayoutNGBlockFlow {H3} at (0,593.31) size 769x23
LayoutText {#text} at (0,0) size 196x22
text run at (0,0) width 196: "Right-To-Left Multi line"
LayoutNGBlockFlow {H3} at (0,737.03) size 769x23
LayoutText {#text} at (0,0) size 343x22
text run at (0,0) width 343: "Right-To-Left containing replaced content"
LayoutNGBlockFlow {H3} at (0,830.75) size 769x23
LayoutText {#text} at (0,0) size 507x22
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,144) size 310x22 clip at (9,145) size 308x20
LayoutNGBlockFlow {DIV} at (0,136.44) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
layer at (8,228) size 310x82 clip at (9,229) size 308x80
LayoutNGBlockFlow {DIV} at (0,220.16) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
LayoutBR {BR} at (719,1) size 0x0
LayoutText {#text} at (1,21) size 306x19
text run at (1,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (291,21) width 16: "\x{2026}"
LayoutBR {BR} at (709,21) size 0x0
LayoutText {#text} at (1,41) size 302x19
text run at (1,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (287,41) width 16: "\x{2026}"
LayoutBR {BR} at (701,41) size 0x0
LayoutText {#text} at (1,61) size 305x19
text run at (1,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (290,61) width 16: "\x{2026}"
LayoutBR {BR} at (696,61) size 0x0
layer at (8,372) size 310x32 clip at (9,373) size 308x30
LayoutNGBlockFlow {DIV} at (0,363.88) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 181x19
text run at (1,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (182,1) size 25x25
LayoutText {#text} at (207,11) size 102x19
text run at (207,11) width 86: " consectetur a"
text run at (293,11) width 16: "\x{2026}"
layer at (8,466) size 310x32 clip at (9,467) size 308x30
LayoutNGBlockFlow {DIV} at (0,457.59) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 287x19
text run at (1,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (272,11) width 16: "\x{2026}"
LayoutImage {IMG} at (744,1) size 25x25
LayoutText {#text} at (744,11) size 447x19
text run at (744,11) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,559) size 310x22 clip at (9,560) size 308x20
LayoutNGBlockFlow {DIV} at (0,551.31) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
layer at (8,643) size 310x82 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,635.03) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
LayoutBR {BR} at (-410,1) size 0x0
LayoutText {#text} at (19,21) size 306x19
text run at (19,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (3,21) width 16: "\x{2026}"
LayoutBR {BR} at (-400,21) size 0x0
LayoutText {#text} at (23,41) size 302x19
text run at (23,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (7,41) width 16: "\x{2026}"
LayoutBR {BR} at (-392,41) size 0x0
LayoutText {#text} at (20,61) size 305x19
text run at (20,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (4,61) width 16: "\x{2026}"
LayoutBR {BR} at (-387,61) size 0x0
layer at (8,787) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,778.75) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (128,11) size 181x19
text run at (128,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (103,1) size 25x25
LayoutText {#text} at (17,11) size 102x19
text run at (17,11) width 86: " consectetur a"
text run at (1,11) width 16: "\x{2026}"
layer at (8,880) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,872.47) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (38,11) size 287x19
text run at (38,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (22,11) width 16: "\x{2026}"
LayoutImage {IMG} at (309,1) size 25x25
LayoutText {#text} at (309,11) size 448x19
text run at (309,11) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 912
LayoutView at (0,0) size 800x600
layer at (0,0) size 785x912 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
LayoutNGBlockFlow {HTML} at (0,0) size 785x912.47
LayoutNGBlockFlow {BODY} at (8,8) size 769x884.47
LayoutNGBlockFlow {P} at (0,0) size 769x20
LayoutText {#text} at (0,0) size 532x19
text run at (0,0) width 532: "This test checks that text with text-overflow:ellipsis follows 'text-align: left' correctly."
LayoutNGBlockFlow {P} at (0,36) size 769x20
LayoutText {#text} at (0,0) size 484x19
text run at (0,0) width 484: "The text in all boxes should be left aligned, sticking to the left side of the box"
LayoutNGBlockFlow {H3} at (0,74.72) size 769x23
LayoutText {#text} at (0,0) size 84x22
text run at (0,0) width 84: "Single line"
LayoutNGBlockFlow {H3} at (0,158.44) size 769x23
LayoutText {#text} at (0,0) size 79x22
text run at (0,0) width 79: "Multi line"
LayoutNGBlockFlow {H3} at (0,302.16) size 769x23
LayoutText {#text} at (0,0) size 232x22
text run at (0,0) width 232: "Containing replaced content"
LayoutNGBlockFlow {H3} at (0,395.88) size 769x23
LayoutText {#text} at (0,0) size 396x22
text run at (0,0) width 396: "Containing replaced content blocking the ellipsis"
LayoutNGBlockFlow {H3} at (0,489.59) size 769x23
LayoutText {#text} at (0,0) size 197x22
text run at (0,0) width 197: "Right-To-Left single line"
LayoutNGBlockFlow {H3} at (0,573.31) size 769x23
LayoutText {#text} at (0,0) size 196x22
text run at (0,0) width 196: "Right-To-Left Multi line"
LayoutNGBlockFlow {H3} at (0,717.03) size 769x23
LayoutText {#text} at (0,0) size 343x22
text run at (0,0) width 343: "Right-To-Left containing replaced content"
LayoutNGBlockFlow {H3} at (0,810.75) size 769x23
LayoutText {#text} at (0,0) size 507x22
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,124) size 310x22 clip at (9,125) size 308x20
LayoutNGBlockFlow {DIV} at (0,116.44) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
layer at (8,208) size 310x82 clip at (9,209) size 308x80
LayoutNGBlockFlow {DIV} at (0,200.16) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
LayoutBR {BR} at (719,1) size 0x0
LayoutText {#text} at (1,21) size 306x19
text run at (1,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (291,21) width 16: "\x{2026}"
LayoutBR {BR} at (709,21) size 0x0
LayoutText {#text} at (1,41) size 302x19
text run at (1,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (287,41) width 16: "\x{2026}"
LayoutBR {BR} at (701,41) size 0x0
LayoutText {#text} at (1,61) size 305x19
text run at (1,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (290,61) width 16: "\x{2026}"
LayoutBR {BR} at (696,61) size 0x0
layer at (8,352) size 310x32 clip at (9,353) size 308x30
LayoutNGBlockFlow {DIV} at (0,343.88) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 181x19
text run at (1,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (182,1) size 25x25
LayoutText {#text} at (207,11) size 102x19
text run at (207,11) width 86: " consectetur a"
text run at (293,11) width 16: "\x{2026}"
layer at (8,446) size 310x32 clip at (9,447) size 308x30
LayoutNGBlockFlow {DIV} at (0,437.59) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 287x19
text run at (1,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (272,11) width 16: "\x{2026}"
LayoutImage {IMG} at (744,1) size 25x25
LayoutText {#text} at (744,11) size 447x19
text run at (744,11) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,539) size 310x22 clip at (9,540) size 308x20
LayoutNGBlockFlow {DIV} at (0,531.31) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
layer at (8,623) size 310x82 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,615.03) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
LayoutBR {BR} at (-410,1) size 0x0
LayoutText {#text} at (19,21) size 306x19
text run at (19,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (3,21) width 16: "\x{2026}"
LayoutBR {BR} at (-400,21) size 0x0
LayoutText {#text} at (23,41) size 302x19
text run at (23,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (7,41) width 16: "\x{2026}"
LayoutBR {BR} at (-392,41) size 0x0
LayoutText {#text} at (20,61) size 305x19
text run at (20,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (4,61) width 16: "\x{2026}"
LayoutBR {BR} at (-387,61) size 0x0
layer at (8,767) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,758.75) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (128,11) size 181x19
text run at (128,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (103,1) size 25x25
LayoutText {#text} at (17,11) size 102x19
text run at (17,11) width 86: " consectetur a"
text run at (1,11) width 16: "\x{2026}"
layer at (8,860) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,852.47) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (38,11) size 287x19
text run at (38,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (22,11) width 16: "\x{2026}"
LayoutImage {IMG} at (309,1) size 25x25
LayoutText {#text} at (309,11) size 448x19
text run at (309,11) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 912
LayoutView at (0,0) size 800x600
layer at (0,0) size 785x912 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
LayoutNGBlockFlow {HTML} at (0,0) size 785x912.47
LayoutNGBlockFlow {BODY} at (8,8) size 769x884.47
LayoutNGBlockFlow {P} at (0,0) size 769x20
LayoutText {#text} at (0,0) size 541x19
text run at (0,0) width 541: "This test checks that text with text-overflow:ellipsis follows 'text-align: right' correctly."
LayoutNGBlockFlow {P} at (0,36) size 769x20
LayoutText {#text} at (0,0) size 502x19
text run at (0,0) width 502: "The text in all boxes should be right aligned, sticking to the right side of the box"
LayoutNGBlockFlow {H3} at (0,74.72) size 769x23
LayoutText {#text} at (0,0) size 84x22
text run at (0,0) width 84: "Single line"
LayoutNGBlockFlow {H3} at (0,158.44) size 769x23
LayoutText {#text} at (0,0) size 79x22
text run at (0,0) width 79: "Multi line"
LayoutNGBlockFlow {H3} at (0,302.16) size 769x23
LayoutText {#text} at (0,0) size 232x22
text run at (0,0) width 232: "Containing replaced content"
LayoutNGBlockFlow {H3} at (0,395.88) size 769x23
LayoutText {#text} at (0,0) size 396x22
text run at (0,0) width 396: "Containing replaced content blocking the ellipsis"
LayoutNGBlockFlow {H3} at (0,489.59) size 769x23
LayoutText {#text} at (0,0) size 197x22
text run at (0,0) width 197: "Right-To-Left single line"
LayoutNGBlockFlow {H3} at (0,573.31) size 769x23
LayoutText {#text} at (0,0) size 196x22
text run at (0,0) width 196: "Right-To-Left Multi line"
LayoutNGBlockFlow {H3} at (0,717.03) size 769x23
LayoutText {#text} at (0,0) size 343x22
text run at (0,0) width 343: "Right-To-Left containing replaced content"
LayoutNGBlockFlow {H3} at (0,810.75) size 769x23
LayoutText {#text} at (0,0) size 507x22
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,124) size 310x22 clip at (9,125) size 308x20
LayoutNGBlockFlow {DIV} at (0,116.44) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
layer at (8,208) size 310x82 clip at (9,209) size 308x80
LayoutNGBlockFlow {DIV} at (0,200.16) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (1,1) size 303x19
text run at (1,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (288,1) width 16: "\x{2026}"
LayoutBR {BR} at (719,1) size 0x0
LayoutText {#text} at (1,21) size 306x19
text run at (1,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (291,21) width 16: "\x{2026}"
LayoutBR {BR} at (709,21) size 0x0
LayoutText {#text} at (1,41) size 302x19
text run at (1,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (287,41) width 16: "\x{2026}"
LayoutBR {BR} at (701,41) size 0x0
LayoutText {#text} at (1,61) size 305x19
text run at (1,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (290,61) width 16: "\x{2026}"
LayoutBR {BR} at (696,61) size 0x0
layer at (8,352) size 310x32 clip at (9,353) size 308x30
LayoutNGBlockFlow {DIV} at (0,343.88) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 181x19
text run at (1,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (182,1) size 25x25
LayoutText {#text} at (207,11) size 102x19
text run at (207,11) width 86: " consectetur a"
text run at (293,11) width 16: "\x{2026}"
layer at (8,446) size 310x32 clip at (9,447) size 308x30
LayoutNGBlockFlow {DIV} at (0,437.59) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (1,11) size 287x19
text run at (1,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (272,11) width 16: "\x{2026}"
LayoutImage {IMG} at (744,1) size 25x25
LayoutText {#text} at (744,11) size 447x19
text run at (744,11) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,539) size 310x22 clip at (9,540) size 308x20
LayoutNGBlockFlow {DIV} at (0,531.31) size 310x22 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
layer at (8,623) size 310x82 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,615.03) size 310x82 [border: (1px solid #000000)]
LayoutText {#text} at (22,1) size 303x19
text run at (22,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (6,1) width 16: "\x{2026}"
LayoutBR {BR} at (-410,1) size 0x0
LayoutText {#text} at (19,21) size 306x19
text run at (19,21) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (3,21) width 16: "\x{2026}"
LayoutBR {BR} at (-400,21) size 0x0
LayoutText {#text} at (23,41) size 302x19
text run at (23,41) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (7,41) width 16: "\x{2026}"
LayoutBR {BR} at (-392,41) size 0x0
LayoutText {#text} at (20,61) size 305x19
text run at (20,61) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (4,61) width 16: "\x{2026}"
LayoutBR {BR} at (-387,61) size 0x0
layer at (8,767) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,758.75) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (128,11) size 181x19
text run at (128,11) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (103,1) size 25x25
LayoutText {#text} at (17,11) size 102x19
text run at (17,11) width 86: " consectetur a"
text run at (1,11) width 16: "\x{2026}"
layer at (8,860) size 310x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,852.47) size 310x32 [border: (1px solid #000000)]
LayoutText {#text} at (38,11) size 287x19
text run at (38,11) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (22,11) width 16: "\x{2026}"
LayoutImage {IMG} at (309,1) size 25x25
LayoutText {#text} at (309,11) size 448x19
text run at (309,11) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
clicked
clicked
......@@ -29,27 +29,27 @@ layer at (0,0) size 785x2982 backgroundClip at (0,0) size 785x600 clip at (0,0)
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,50) size 22x310 clip at (9,51) size 20x308
LayoutNGBlockFlow {DIV} at (0,41.72) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,3) size 19x304
text run at (2,3) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,290) width 16: "\x{2026}"
LayoutText {#text} at (2,1) size 19x303
text run at (2,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,288) width 16: "\x{2026}"
layer at (8,421) size 82x310 backgroundClip at (8,421) size 82x179 clip at (9,422) size 80x178
LayoutNGBlockFlow {DIV} at (0,413.44) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,3) size 19x304
text run at (62,3) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,290) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,2) size 19x306
text run at (42,2) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,292) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,4) size 19x302
text run at (22,4) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,290) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,2) size 19x306
text run at (2,2) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,291) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (62,1) size 19x303
text run at (62,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,288) width 16: "\x{2026}"
LayoutBR {BR} at (62,719) size 0x0
LayoutText {#text} at (42,1) size 19x306
text run at (42,1) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,291) width 16: "\x{2026}"
LayoutBR {BR} at (42,709) size 0x0
LayoutText {#text} at (22,1) size 19x302
text run at (22,1) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,287) width 16: "\x{2026}"
LayoutBR {BR} at (22,701) size 0x0
LayoutText {#text} at (2,1) size 19x305
text run at (2,1) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,290) width 16: "\x{2026}"
LayoutBR {BR} at (2,696) size 0x0
layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,785.16) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x181
......@@ -58,48 +58,50 @@ layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size
LayoutText {#text} at (4,207) size 19x102
text run at (4,207) width 86: " consectetur a"
text run at (4,293) width 16: "\x{2026}"
layer at (8,1165) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,15) size 19x280
text run at (2,15) width 263: "Lorem ipsum dolor sit amet, consectetur a"
text run at (2,278) width 16: "\x{2026}"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
layer at (8,1165) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x287
text run at (4,1) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,272) width 16: "\x{2026}"
LayoutImage {IMG} at (1,744) size 25x25
LayoutText {#text} at (4,744) size 19x447
text run at (4,744) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,1537) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1528.59) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,3) size 19x304
text run at (2,3) width 16: "\x{2026}"
text run at (2,19) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutText {#text} at (2,22) size 19x303
text run at (2,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,6) width 16: "\x{2026}"
layer at (8,1908) size 82x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1900.31) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,3) size 19x304
text run at (62,3) width 16: "\x{2026}"
text run at (62,19) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,2) size 19x306
text run at (42,2) width 16: "\x{2026}"
text run at (42,18) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,4) size 19x302
text run at (22,4) width 16: "\x{2026}"
text run at (22,20) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,2) size 19x306
text run at (2,2) width 16: "\x{2026}"
text run at (2,18) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (62,22) size 19x303
text run at (62,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,6) width 16: "\x{2026}"
LayoutBR {BR} at (62,-410) size 0x0
LayoutText {#text} at (42,19) size 19x306
text run at (42,19) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,3) width 16: "\x{2026}"
LayoutBR {BR} at (42,-400) size 0x0
LayoutText {#text} at (22,23) size 19x302
text run at (22,23) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,7) width 16: "\x{2026}"
LayoutBR {BR} at (22,-392) size 0x0
LayoutText {#text} at (2,20) size 19x305
text run at (2,20) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,4) width 16: "\x{2026}"
LayoutBR {BR} at (2,-387) size 0x0
layer at (8,2280) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2272.03) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,128) size 19x181
text run at (4,128) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (1,103) size 25x25
LayoutText {#text} at (4,1) size 19x102
text run at (4,1) width 16: "\x{2026}"
LayoutText {#text} at (4,17) size 19x102
text run at (4,17) width 86: " consectetur a"
layer at (8,2652) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,15) size 19x280
text run at (2,15) width 16: "\x{2026}"
text run at (2,31) width 263: "Lorem ipsum dolor sit amet, consectetur a"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
text run at (4,1) width 16: "\x{2026}"
layer at (8,2652) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,38) size 19x287
text run at (4,38) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,22) width 16: "\x{2026}"
LayoutImage {IMG} at (1,309) size 25x25
LayoutText {#text} at (4,309) size 19x448
text run at (4,309) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
......@@ -37,19 +37,19 @@ layer at (8,421) size 82x310 backgroundClip at (8,421) size 82x179 clip at (9,42
LayoutText {#text} at (62,1) size 19x303
text run at (62,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,288) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (62,719) size 0x0
LayoutText {#text} at (42,1) size 19x306
text run at (42,1) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,291) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (42,709) size 0x0
LayoutText {#text} at (22,1) size 19x302
text run at (22,1) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,287) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (22,701) size 0x0
LayoutText {#text} at (2,1) size 19x305
text run at (2,1) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,290) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (2,696) size 0x0
layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,785.16) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x181
......@@ -58,48 +58,50 @@ layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size
LayoutText {#text} at (4,207) size 19x102
text run at (4,207) width 86: " consectetur a"
text run at (4,293) width 16: "\x{2026}"
layer at (8,1165) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,1) size 19x279
text run at (2,1) width 263: "Lorem ipsum dolor sit amet, consectetur a"
text run at (2,264) width 16: "\x{2026}"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
layer at (8,1165) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x287
text run at (4,1) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,272) width 16: "\x{2026}"
LayoutImage {IMG} at (1,744) size 25x25
LayoutText {#text} at (4,744) size 19x447
text run at (4,744) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,1537) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1528.59) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,6) size 19x303
text run at (2,6) width 16: "\x{2026}"
LayoutText {#text} at (2,22) size 19x303
text run at (2,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,6) width 16: "\x{2026}"
layer at (8,1908) size 82x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1900.31) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,6) size 19x303
text run at (62,6) width 16: "\x{2026}"
LayoutText {#text} at (62,22) size 19x303
text run at (62,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,3) size 19x306
text run at (42,3) width 16: "\x{2026}"
text run at (62,6) width 16: "\x{2026}"
LayoutBR {BR} at (62,-410) size 0x0
LayoutText {#text} at (42,19) size 19x306
text run at (42,19) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,7) size 19x302
text run at (22,7) width 16: "\x{2026}"
text run at (42,3) width 16: "\x{2026}"
LayoutBR {BR} at (42,-400) size 0x0
LayoutText {#text} at (22,23) size 19x302
text run at (22,23) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,4) size 19x305
text run at (2,4) width 16: "\x{2026}"
text run at (22,7) width 16: "\x{2026}"
LayoutBR {BR} at (22,-392) size 0x0
LayoutText {#text} at (2,20) size 19x305
text run at (2,20) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
LayoutBR {BR} at (0,0) size 0x0
text run at (2,4) width 16: "\x{2026}"
LayoutBR {BR} at (2,-387) size 0x0
layer at (8,2280) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2272.03) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,128) size 19x181
text run at (4,128) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (1,103) size 25x25
LayoutText {#text} at (4,1) size 19x102
text run at (4,1) width 16: "\x{2026}"
LayoutText {#text} at (4,17) size 19x102
text run at (4,17) width 86: " consectetur a"
layer at (8,2652) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,30) size 19x279
text run at (2,30) width 16: "\x{2026}"
text run at (2,46) width 263: "Lorem ipsum dolor sit amet, consectetur a"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
text run at (4,1) width 16: "\x{2026}"
layer at (8,2652) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,38) size 19x287
text run at (4,38) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,22) width 16: "\x{2026}"
LayoutImage {IMG} at (1,309) size 25x25
LayoutText {#text} at (4,309) size 19x448
text run at (4,309) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
......@@ -37,19 +37,19 @@ layer at (8,421) size 82x310 backgroundClip at (8,421) size 82x179 clip at (9,42
LayoutText {#text} at (62,1) size 19x303
text run at (62,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,288) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (62,719) size 0x0
LayoutText {#text} at (42,1) size 19x306
text run at (42,1) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,291) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (42,709) size 0x0
LayoutText {#text} at (22,1) size 19x302
text run at (22,1) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,287) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (22,701) size 0x0
LayoutText {#text} at (2,1) size 19x305
text run at (2,1) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,290) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutBR {BR} at (2,696) size 0x0
layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,785.16) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x181
......@@ -58,48 +58,50 @@ layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size
LayoutText {#text} at (4,207) size 19x102
text run at (4,207) width 86: " consectetur a"
text run at (4,293) width 16: "\x{2026}"
layer at (8,1165) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,1) size 19x279
text run at (2,1) width 263: "Lorem ipsum dolor sit amet, consectetur a"
text run at (2,264) width 16: "\x{2026}"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
layer at (8,1165) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x287
text run at (4,1) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,272) width 16: "\x{2026}"
LayoutImage {IMG} at (1,744) size 25x25
LayoutText {#text} at (4,744) size 19x447
text run at (4,744) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,1537) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1528.59) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,1) size 19x303
text run at (2,1) width 16: "\x{2026}"
text run at (2,17) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutText {#text} at (2,22) size 19x303
text run at (2,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,6) width 16: "\x{2026}"
layer at (8,1908) size 82x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1900.31) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,1) size 19x303
text run at (62,1) width 16: "\x{2026}"
text run at (62,17) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,1) size 19x306
text run at (42,1) width 16: "\x{2026}"
text run at (42,17) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,1) size 19x302
text run at (22,1) width 16: "\x{2026}"
text run at (22,17) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,1) size 19x305
text run at (2,1) width 16: "\x{2026}"
text run at (2,17) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (62,22) size 19x303
text run at (62,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,6) width 16: "\x{2026}"
LayoutBR {BR} at (62,-410) size 0x0
LayoutText {#text} at (42,19) size 19x306
text run at (42,19) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,3) width 16: "\x{2026}"
LayoutBR {BR} at (42,-400) size 0x0
LayoutText {#text} at (22,23) size 19x302
text run at (22,23) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,7) width 16: "\x{2026}"
LayoutBR {BR} at (22,-392) size 0x0
LayoutText {#text} at (2,20) size 19x305
text run at (2,20) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,4) width 16: "\x{2026}"
LayoutBR {BR} at (2,-387) size 0x0
layer at (8,2280) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2272.03) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,128) size 19x181
text run at (4,128) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (1,103) size 25x25
LayoutText {#text} at (4,1) size 19x102
text run at (4,1) width 16: "\x{2026}"
LayoutText {#text} at (4,17) size 19x102
text run at (4,17) width 86: " consectetur a"
layer at (8,2652) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,1) size 19x279
text run at (2,1) width 16: "\x{2026}"
text run at (2,17) width 263: "Lorem ipsum dolor sit amet, consectetur a"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
text run at (4,1) width 16: "\x{2026}"
layer at (8,2652) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,38) size 19x287
text run at (4,38) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,22) width 16: "\x{2026}"
LayoutImage {IMG} at (1,309) size 25x25
LayoutText {#text} at (4,309) size 19x448
text run at (4,309) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
......@@ -29,27 +29,27 @@ layer at (0,0) size 785x2982 backgroundClip at (0,0) size 785x600 clip at (0,0)
text run at (0,0) width 507: "Right-To-Left containing replaced content blocking the ellipsis"
layer at (8,50) size 22x310 clip at (9,51) size 20x308
LayoutNGBlockFlow {DIV} at (0,41.72) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,6) size 19x303
text run at (2,6) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,293) width 16: "\x{2026}"
LayoutText {#text} at (2,1) size 19x303
text run at (2,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,288) width 16: "\x{2026}"
layer at (8,421) size 82x310 backgroundClip at (8,421) size 82x179 clip at (9,422) size 80x178
LayoutNGBlockFlow {DIV} at (0,413.44) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,6) size 19x303
text run at (62,6) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,293) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,3) size 19x306
text run at (42,3) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,293) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,7) size 19x302
text run at (22,7) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,293) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,4) size 19x305
text run at (2,4) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,293) width 16: "\x{2026}"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (62,1) size 19x303
text run at (62,1) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (62,288) width 16: "\x{2026}"
LayoutBR {BR} at (62,719) size 0x0
LayoutText {#text} at (42,1) size 19x306
text run at (42,1) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
text run at (42,291) width 16: "\x{2026}"
LayoutBR {BR} at (42,709) size 0x0
LayoutText {#text} at (22,1) size 19x302
text run at (22,1) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
text run at (22,287) width 16: "\x{2026}"
LayoutBR {BR} at (22,701) size 0x0
LayoutText {#text} at (2,1) size 19x305
text run at (2,1) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
text run at (2,290) width 16: "\x{2026}"
LayoutBR {BR} at (2,696) size 0x0
layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,785.16) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x181
......@@ -58,48 +58,50 @@ layer at (8,793) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size
LayoutText {#text} at (4,207) size 19x102
text run at (4,207) width 86: " consectetur a"
text run at (4,293) width 16: "\x{2026}"
layer at (8,1165) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,30) size 19x279
text run at (2,30) width 263: "Lorem ipsum dolor sit amet, consectetur a"
text run at (2,293) width 16: "\x{2026}"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
layer at (8,1165) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1156.88) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,1) size 19x287
text run at (4,1) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,272) width 16: "\x{2026}"
LayoutImage {IMG} at (1,744) size 25x25
LayoutText {#text} at (4,744) size 19x447
text run at (4,744) width 447: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (8,1537) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1528.59) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,6) size 19x303
text run at (2,6) width 16: "\x{2026}"
LayoutText {#text} at (2,22) size 19x303
text run at (2,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
text run at (2,6) width 16: "\x{2026}"
layer at (8,1908) size 82x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,1900.31) size 82x310 [border: (1px solid #000000)]
LayoutText {#text} at (62,6) size 19x303
text run at (62,6) width 16: "\x{2026}"
LayoutText {#text} at (62,22) size 19x303
text run at (62,22) width 287: "Lorem ipsum dolor sit amet, consectetur adipi"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (42,3) size 19x306
text run at (42,3) width 16: "\x{2026}"
text run at (62,6) width 16: "\x{2026}"
LayoutBR {BR} at (62,-410) size 0x0
LayoutText {#text} at (42,19) size 19x306
text run at (42,19) width 290: "orem ipsum dolor sit amet, consectetur adipisc"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (22,7) size 19x302
text run at (22,7) width 16: "\x{2026}"
text run at (42,3) width 16: "\x{2026}"
LayoutBR {BR} at (42,-400) size 0x0
LayoutText {#text} at (22,23) size 19x302
text run at (22,23) width 286: "rem ipsum dolor sit amet, consectetur adipisci"
LayoutBR {BR} at (0,0) size 0x0
LayoutText {#text} at (2,4) size 19x305
text run at (2,4) width 16: "\x{2026}"
text run at (22,7) width 16: "\x{2026}"
LayoutBR {BR} at (22,-392) size 0x0
LayoutText {#text} at (2,20) size 19x305
text run at (2,20) width 289: "em ipsum dolor sit amet, consectetur adipiscin"
LayoutBR {BR} at (0,0) size 0x0
text run at (2,4) width 16: "\x{2026}"
LayoutBR {BR} at (2,-387) size 0x0
layer at (8,2280) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2272.03) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,128) size 19x181
text run at (4,128) width 181: "Lorem ipsum dolor sit amet, "
LayoutImage {IMG} at (1,103) size 25x25
LayoutText {#text} at (4,1) size 19x102
text run at (4,1) width 16: "\x{2026}"
LayoutText {#text} at (4,17) size 19x102
text run at (4,17) width 86: " consectetur a"
layer at (8,2652) size 22x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 22x310 [border: (1px solid #000000)]
LayoutText {#text} at (2,30) size 19x279
text run at (2,30) width 16: "\x{2026}"
text run at (2,46) width 263: "Lorem ipsum dolor sit amet, consectetur a"
LayoutImage {IMG} at (0,0) size 25x25
LayoutText {#text} at (0,0) size 0x0
text run at (4,1) width 16: "\x{2026}"
layer at (8,2652) size 27x310 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
LayoutNGBlockFlow {DIV} at (0,2643.75) size 27x310 [border: (1px solid #000000)]
LayoutText {#text} at (4,38) size 19x287
text run at (4,38) width 271: "Lorem ipsum dolor sit amet, consectetur ad"
text run at (4,22) width 16: "\x{2026}"
LayoutImage {IMG} at (1,309) size 25x25
LayoutText {#text} at (4,309) size 19x448
text run at (4,309) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x116
LayoutNGBlockFlow {HTML} at (0,0) size 800x116
LayoutNGBlockFlow {BODY} at (8,16) size 784x92
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 479x19
text run at (0,0) width 479: "crbug.com/634445: Rtl text in a ltr flow should truncate the text left-to-right."
LayoutNGBlockFlow {P} at (0,36) size 784x20
LayoutText {#text} at (0,0) size 404x19
text run at (0,0) width 404: "You should see an underline beneath the text but not the ellipsis."
layer at (8,88) size 350x20
LayoutNGBlockFlow {DIV} at (0,72) size 350x20
LayoutText {#text} at (6,0) size 344x19
text run at (6,0) width 16: "\x{2026}"
text run at (22,0) width 244: " \x{5D9}\x{5E0}\x{5D8}\x{5E8}\x{5E0}\x{5D8} \x{5D5}\x{5DB}\x{5D5}' \x{5D1}\x{5DE}\x{5E7}\x{5D5}\x{5DD} \x{5D4}\x{5D8}\x{5E7}\x{5E1}\x{5D8} \x{5D4}\x{5D0}\x{5DE}\x{5D9}\x{5EA}\x{5D9} \x{5D4}\x{5E1}\x{5D5}\x{5E4}\x{5D9}\x{5E2}\x{5D3} "
text run at (266,0) width 84: "Lorem ipsum"
layer at (0,0) size 800x600
LayoutView at (0,0) size 800x600
layer at (0,0) size 800x116
LayoutNGBlockFlow {HTML} at (0,0) size 800x116
LayoutNGBlockFlow {BODY} at (8,16) size 784x92
LayoutNGBlockFlow {P} at (0,0) size 784x20
LayoutText {#text} at (0,0) size 479x19
text run at (0,0) width 479: "crbug.com/634445: Rtl text in a rtl flow should truncate the text right-to-left."
LayoutNGBlockFlow {P} at (0,36) size 784x20
LayoutText {#text} at (0,0) size 286x19
text run at (0,0) width 286: "You should see an underline beneath the text."
layer at (8,88) size 125x20
LayoutNGBlockFlow {DIV} at (0,72) size 125x20
LayoutText {#text} at (3,0) size 122x19
text run at (3,0) width 16: "\x{2026}"
text run at (19,0) width 64: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}\x{5D4}\x{5D5}\x{5D6}\x{5D7}\x{5D8}\x{5D9}"
text run at (83,0) width 42: "Lorem"
......@@ -346,6 +346,8 @@ blink_core_sources("layout") {
"ng/inline/ng_line_breaker.h",
"ng/inline/ng_line_height_metrics.cc",
"ng/inline/ng_line_height_metrics.h",
"ng/inline/ng_line_truncator.cc",
"ng/inline/ng_line_truncator.h",
"ng/inline/ng_line_utils.cc",
"ng/inline/ng_line_utils.h",
"ng/inline/ng_offset_mapping.cc",
......
......@@ -17,6 +17,7 @@
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_truncator.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_text_fragment.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_text_fragment_builder.h"
#include "third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker.h"
......@@ -245,6 +246,13 @@ void NGInlineLayoutAlgorithm::CreateLine(NGLineInfo* line_info,
box_states_->UpdateAfterReorder(&line_box_);
LayoutUnit inline_size = box_states_->ComputeInlinePositions(&line_box_);
// Truncate the line if 'text-overflow: ellipsis' is set.
if (UNLIKELY(inline_size > line_info->AvailableWidth() &&
node_.GetLayoutBlockFlow()->ShouldTruncateOverflowingText())) {
inline_size = NGLineTruncator(node_, *line_info)
.TruncateLine(inline_size, &line_box_);
}
// Create box fragmetns if needed. After this point forward, |line_box_| is a
// tree structure.
if (box_states_->HasBoxFragments())
......
......@@ -56,6 +56,25 @@ const NGPhysicalFragment* NGLineBoxFragmentBuilder::Child::PhysicalFragment()
: fragment.get();
}
NGLineBoxFragmentBuilder::Child*
NGLineBoxFragmentBuilder::ChildList::FirstInFlowChild() {
for (auto& child : *this) {
if (child.HasInFlowFragment())
return &child;
}
return nullptr;
}
NGLineBoxFragmentBuilder::Child*
NGLineBoxFragmentBuilder::ChildList::LastInFlowChild() {
for (auto it = rbegin(); it != rend(); it++) {
auto& child = *it;
if (child.HasInFlowFragment())
return &child;
}
return nullptr;
}
void NGLineBoxFragmentBuilder::ChildList::InsertChild(
unsigned index,
scoped_refptr<NGLayoutResult> layout_result,
......
......@@ -77,6 +77,14 @@ class CORE_EXPORT NGLineBoxFragmentBuilder final
inline_size(inline_size),
bidi_level(bidi_level) {}
// Create an in-flow |NGPhysicalFragment|.
Child(scoped_refptr<NGPhysicalFragment> fragment,
NGLogicalOffset offset,
LayoutUnit inline_size,
UBiDiLevel bidi_level)
: fragment(std::move(fragment)),
offset(offset),
inline_size(inline_size),
bidi_level(bidi_level) {}
Child(scoped_refptr<NGPhysicalFragment> fragment,
LayoutUnit block_offset,
LayoutUnit inline_size,
......@@ -130,6 +138,15 @@ class CORE_EXPORT NGLineBoxFragmentBuilder final
using const_iterator = Vector<Child, 16>::const_iterator;
const_iterator begin() const { return children_.begin(); }
const_iterator end() const { return children_.end(); }
using reverse_iterator = Vector<Child, 16>::reverse_iterator;
reverse_iterator rbegin() { return children_.rbegin(); }
reverse_iterator rend() { return children_.rend(); }
using const_reverse_iterator = Vector<Child, 16>::const_reverse_iterator;
const_reverse_iterator rbegin() const { return children_.rbegin(); }
const_reverse_iterator rend() const { return children_.rend(); }
Child* FirstInFlowChild();
Child* LastInFlowChild();
// Add a child. Accepts all constructor arguments for |Child|.
template <class... Args>
......
......@@ -186,14 +186,8 @@ bool NGLineBreaker::NextLine(const NGLayoutOpportunity& opportunity,
// TODO(kojii): There are cases where we need to PlaceItems() without creating
// line boxes. These cases need to be reviewed.
if (line_.should_create_line_box) {
if (!line_.CanFit() &&
node_.GetLayoutBlockFlow()->ShouldTruncateOverflowingText()) {
TruncateOverflowingText(line_info);
}
if (line_.should_create_line_box)
ComputeLineLocation(line_info);
}
return true;
}
......@@ -936,56 +930,6 @@ LayoutObject* NGLineBreaker::CurrentLayoutObject(
return nullptr;
}
// Truncate overflowing text and append ellipsis.
void NGLineBreaker::TruncateOverflowingText(NGLineInfo* line_info) {
// The ellipsis is styled according to the line style.
const Font& font = line_info->LineStyle().GetFont();
const SimpleFontData* font_data = font.PrimaryFont();
DCHECK(font_data);
String ellipsis =
font_data && font_data->GlyphForCharacter(kHorizontalEllipsisCharacter)
? String(&kHorizontalEllipsisCharacter, 1)
: String(u"...");
HarfBuzzShaper shaper(ellipsis.Characters16(), ellipsis.length());
scoped_refptr<ShapeResult> shape_result =
shaper.Shape(&font, line_info->BaseDirection());
// Truncate the line to (available_width - ellipsis_width) using 'line-break:
// anywhere'.
unsigned saved_item_index = item_index_;
unsigned saved_offset = offset_;
override_break_anywhere_ = true;
break_iterator_.SetBreakType(LineBreakType::kBreakCharacter);
HandleOverflow(line_info,
line_.AvailableWidth() - shape_result->SnappedWidth());
// Find the LayoutObject this ellpsis is tied to.
LayoutObject* layout_object = CurrentLayoutObject(*line_info);
// Restore item_index/offset to before HandleOverflow().
item_index_ = saved_item_index;
offset_ = saved_offset;
// Ellipsis should not have text decorations. Reset if it's set.
scoped_refptr<const ComputedStyle> style = &line_info->LineStyle();
if (style->TextDecorationsInEffect() != TextDecoration::kNone) {
scoped_refptr<ComputedStyle> ellipsis_style =
ComputedStyle::CreateAnonymousStyleWithDisplay(*style,
EDisplay::kInline);
ellipsis_style->ResetTextDecoration();
ellipsis_style->ClearAppliedTextDecorations();
style = std::move(ellipsis_style);
}
// The ellipsis should appear at the logical end of the line.
// This is stored seprately from other results so that it can be appended
// after bidi reorder.
NGTextFragmentBuilder builder(node_, constraint_space_.GetWritingMode());
builder.SetText(layout_object, ellipsis, style, true /* is_ellipsis_style */,
std::move(shape_result));
SetLineEndFragment(builder.ToTextFragment(), line_info);
}
void NGLineBreaker::SetCurrentStyle(const ComputedStyle& style) {
current_style_ = &style;
......
......@@ -147,7 +147,6 @@ class CORE_EXPORT NGLineBreaker {
void Rewind(NGLineInfo*, unsigned new_end);
LayoutObject* CurrentLayoutObject(const NGLineInfo&) const;
void TruncateOverflowingText(NGLineInfo*);
void SetCurrentStyle(const ComputedStyle&);
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_truncator.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_text_fragment_builder.h"
#include "third_party/blink/renderer/platform/fonts/font_baseline.h"
#include "third_party/blink/renderer/platform/fonts/shaping/harf_buzz_shaper.h"
namespace blink {
namespace {
// Create the style to use for the ellipsis characters.
//
// The ellipsis is styled according to the line style.
// https://drafts.csswg.org/css-ui/#ellipsing-details
scoped_refptr<const ComputedStyle> CreateEllipsisStyle(
scoped_refptr<const ComputedStyle> line_style) {
if (line_style->TextDecorationsInEffect() == TextDecoration::kNone)
return line_style;
// Ellipsis should not have text decorations. Reset if it's set.
// This is not defined, but 4 impls do this.
scoped_refptr<ComputedStyle> ellipsis_style =
ComputedStyle::CreateAnonymousStyleWithDisplay(*line_style,
EDisplay::kInline);
ellipsis_style->ResetTextDecoration();
ellipsis_style->ClearAppliedTextDecorations();
return ellipsis_style;
}
} // namespace
NGLineTruncator::NGLineTruncator(NGInlineNode& node,
const NGLineInfo& line_info)
: node_(node),
line_style_(&line_info.LineStyle()),
available_width_(line_info.AvailableWidth()),
line_direction_(line_info.BaseDirection()) {}
LayoutUnit NGLineTruncator::TruncateLine(
LayoutUnit line_width,
NGLineBoxFragmentBuilder::ChildList* line_box) {
// Shape the ellipsis and compute its inline size.
scoped_refptr<const ComputedStyle> ellipsis_style =
CreateEllipsisStyle(line_style_);
const Font& font = ellipsis_style->GetFont();
const SimpleFontData* font_data = font.PrimaryFont();
DCHECK(font_data);
String ellipsis_text =
font_data && font_data->GlyphForCharacter(kHorizontalEllipsisCharacter)
? String(&kHorizontalEllipsisCharacter, 1)
: String(u"...");
HarfBuzzShaper shaper(ellipsis_text.Characters16(), ellipsis_text.length());
scoped_refptr<ShapeResult> ellipsis_shape_result =
shaper.Shape(&font, line_direction_);
LayoutUnit ellipsis_width = ellipsis_shape_result->SnappedWidth();
// Loop children from the logical last to the logical first to determine where
// to place the ellipsis. Children maybe truncated or moved as part of the
// process.
LayoutUnit ellipsis_inline_offset;
LayoutObject* layout_object = nullptr;
if (IsLtr(line_direction_)) {
NGLineBoxFragmentBuilder::Child* first_child = line_box->FirstInFlowChild();
for (auto it = line_box->rbegin(); it != line_box->rend(); it++) {
auto& child = *it;
if (base::Optional<LayoutUnit> candidate =
EllipsisOffset(line_width, ellipsis_width, &child == first_child,
&layout_object, &child)) {
ellipsis_inline_offset = candidate.value();
break;
}
}
} else {
NGLineBoxFragmentBuilder::Child* first_child = line_box->LastInFlowChild();
ellipsis_inline_offset = available_width_ - ellipsis_width;
for (auto& child : *line_box) {
if (base::Optional<LayoutUnit> candidate =
EllipsisOffset(line_width, ellipsis_width, &child == first_child,
&layout_object, &child)) {
ellipsis_inline_offset = candidate.value();
break;
}
}
}
// Now the offset of the ellpisis is determined. Place the ellpisis into the
// line box.
NGTextFragmentBuilder builder(node_, line_style_->GetWritingMode());
builder.SetText(layout_object ? layout_object : node_.GetLayoutObject(),
ellipsis_text, ellipsis_style, true /* is_ellipsis_style */,
std::move(ellipsis_shape_result));
FontBaseline baseline_type = line_style_->IsHorizontalWritingMode()
? kAlphabeticBaseline
: kIdeographicBaseline;
NGLineHeightMetrics ellipsis_metrics(font_data->GetFontMetrics(),
baseline_type);
line_box->AddChild(
builder.ToTextFragment(),
NGLogicalOffset{ellipsis_inline_offset, -ellipsis_metrics.ascent},
ellipsis_width, 0);
return std::max(ellipsis_inline_offset + ellipsis_width, line_width);
}
// Return the offset to place the ellipsis.
//
// This function may truncate or move the child so that the ellipsis can fit.
base::Optional<LayoutUnit> NGLineTruncator::EllipsisOffset(
LayoutUnit line_width,
LayoutUnit ellipsis_width,
bool is_first_child,
LayoutObject** layout_object,
NGLineBoxFragmentBuilder::Child* child) {
// Leave out-of-flow children as is.
if (!child->HasInFlowFragment())
return base::nullopt;
// Can't place ellipsis if this child is completely outside of the box.
DCHECK_GE(line_width, child->offset.inline_offset + child->inline_size);
LayoutUnit child_inline_offset =
IsLtr(line_direction_)
? child->offset.inline_offset
: line_width - (child->offset.inline_offset + child->inline_size);
LayoutUnit space_for_child = available_width_ - child_inline_offset;
if (space_for_child <= 0)
return base::nullopt;
// Keep track of the last LayoutText.
// TODO(kojii): Somehow, we fail to paint text fragments if they are not tied
// to LayoutText. This code is needed to work around the problem, but still,
// due to this problem, ellipsis may not be painted if the line is only of
// atomic inlines.
if (child->fragment && child->fragment->GetLayoutObject() &&
child->fragment->GetLayoutObject()->IsInline())
*layout_object = child->fragment->GetLayoutObject();
// If not all of this child can fit, try to truncate.
space_for_child -= ellipsis_width;
if (space_for_child < child->inline_size &&
!TruncateChild(space_for_child, is_first_child, child)) {
// This child maybe partially visible. When it can't be truncated, move it
// out so that none of this child should be visible.
child->offset.inline_offset = line_width;
return base::nullopt;
}
return IsLtr(line_direction_)
? child->offset.inline_offset + child->inline_size
: child->offset.inline_offset - ellipsis_width;
}
// Truncate the specified child. Returns true if truncated successfully, false
// otherwise.
//
// Note that this function may return true even if it can't fit the child when
// |is_first_child|, because the spec defines that the first character or atomic
// inline-level element on a line must be clipped rather than ellipsed.
// https://drafts.csswg.org/css-ui/#text-overflow
bool NGLineTruncator::TruncateChild(LayoutUnit space_for_child,
bool is_first_child,
NGLineBoxFragmentBuilder::Child* child) {
// If the space is not enough, try the next child.
if (space_for_child <= 0 && !is_first_child)
return false;
// Only text fragments can be truncated.
if (!child->fragment)
return is_first_child;
auto& fragment = ToNGPhysicalTextFragment(*child->fragment);
const ShapeResult* shape_result = fragment.TextShapeResult();
if (!shape_result)
return is_first_child;
// Compute the offset to truncate.
unsigned new_length = shape_result->OffsetToFit(
IsLtr(line_direction_) ? space_for_child
: shape_result->Width() - space_for_child,
line_direction_);
if (!new_length || new_length == fragment.Length()) {
if (!is_first_child)
return false;
new_length = !new_length ? 1 : new_length - 1;
}
// Truncate the text fragment.
child->fragment = line_direction_ == shape_result->Direction()
? fragment.TrimText(fragment.StartOffset(),
fragment.StartOffset() + new_length)
: fragment.TrimText(fragment.StartOffset() + new_length,
fragment.EndOffset());
LayoutUnit new_inline_size = line_style_->IsHorizontalWritingMode()
? child->fragment->Size().width
: child->fragment->Size().height;
DCHECK_LE(new_inline_size, child->inline_size);
if (UNLIKELY(IsRtl(line_direction_)))
child->offset.inline_offset += child->inline_size - new_inline_size;
child->inline_size = new_inline_size;
return true;
}
} // namespace blink
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_LINE_TRUNCATOR_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_LINE_TRUNCATOR_H_
#include "base/optional.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.h"
#include "third_party/blink/renderer/platform/text/text_direction.h"
namespace blink {
class NGLineInfo;
// A class to truncate lines and place ellipsis, invoked by the CSS
// 'text-overflow: ellipsis' property.
// https://drafts.csswg.org/css-ui/#overflow-ellipsis
class CORE_EXPORT NGLineTruncator final {
STACK_ALLOCATED();
public:
NGLineTruncator(NGInlineNode& node, const NGLineInfo& line_info);
// Truncate |line_box| and place ellipsis. Returns the new inline-size of the
// |line_box|.
//
// |line_box| should be after bidi reorder, but before box fragments are
// created.
LayoutUnit TruncateLine(LayoutUnit line_width,
NGLineBoxFragmentBuilder::ChildList* line_box);
private:
base::Optional<LayoutUnit> EllipsisOffset(LayoutUnit line_width,
LayoutUnit ellipsis_width,
bool is_first_child,
LayoutObject**,
NGLineBoxFragmentBuilder::Child*);
bool TruncateChild(LayoutUnit space_for_this_child,
bool is_first_child,
NGLineBoxFragmentBuilder::Child* child);
NGInlineNode& node_;
scoped_refptr<const ComputedStyle> line_style_;
LayoutUnit available_width_;
TextDirection line_direction_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_LINE_TRUNCATOR_H_
......@@ -143,6 +143,24 @@ NGPhysicalOffsetRect NGPhysicalTextFragment::SelfVisualRect() const {
return local_visual_rect;
}
scoped_refptr<NGPhysicalFragment> NGPhysicalTextFragment::TrimText(
unsigned new_start_offset,
unsigned new_end_offset) const {
DCHECK(shape_result_);
DCHECK_GE(new_start_offset, StartOffset());
DCHECK_GT(new_end_offset, new_start_offset);
DCHECK_LE(new_end_offset, EndOffset());
scoped_refptr<ShapeResult> new_shape_result =
shape_result_->SubRange(new_start_offset, new_end_offset);
LayoutUnit new_inline_size = new_shape_result->SnappedWidth();
return base::AdoptRef(new NGPhysicalTextFragment(
layout_object_, Style(), static_cast<NGStyleVariant>(style_variant_),
TextType(), text_, new_start_offset, new_end_offset,
IsHorizontal() ? NGPhysicalSize{new_inline_size, size_.height}
: NGPhysicalSize{size_.width, new_inline_size},
LineOrientation(), EndEffect(), std::move(new_shape_result)));
}
scoped_refptr<NGPhysicalFragment> NGPhysicalTextFragment::CloneWithoutOffset()
const {
return base::AdoptRef(new NGPhysicalTextFragment(
......
......@@ -126,6 +126,11 @@ class CORE_EXPORT NGPhysicalTextFragment final : public NGPhysicalFragment {
return static_cast<NGTextEndEffect>(end_effect_);
}
// Create a new fragment that has part of the text of this fragment.
// All other properties are the same as this fragment.
scoped_refptr<NGPhysicalFragment> TrimText(unsigned start_offset,
unsigned end_offset) const;
scoped_refptr<NGPhysicalFragment> CloneWithoutOffset() const;
NGTextFragmentPaintInfo PaintInfo() const {
......
......@@ -241,6 +241,9 @@ void NGPhysicalFragment::Destroy() const {
const ComputedStyle& NGPhysicalFragment::Style() const {
DCHECK(style_);
// TODO(kojii): Returning |style_| locks the style at the layout time, and
// will not be updated when its base style is updated later. Line styles and
// ellipsis styles have this problem.
if (!GetLayoutObject())
return *style_;
switch ((NGStyleVariant)style_variant_) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment