Skip to content

Commit

Permalink
Don't do whitespace re-attachment for ::first-letter.
Browse files Browse the repository at this point in the history
If we have a white-space node before the text node with the first
letter, we would try to re-attach the white-space node with an incorrect
previous in-flow LayoutObject because we attach the ::first-letter after
all children have been attached, not where the ::first-letter would end
up in the layout tree.

We don't need to re-attach whitespace after ::first-letter because:

* We always create a remaining LayoutTextFragment for the text node
  which contains the first formatted letter. Wether the remaining text
  consists of white-space or is even empty.

* If the LayoutObject sibling following first-letter+remaining-text
  consists of white-space, it would have gotten a LayoutObject when
  attaching the LayoutText for the text node where the first-letter
  comes from.

That is, we will always have a LayoutObject for a white-space LayoutText
sibling of a first-letter LayoutObject.

Split out a separate method for ::first-letter for less complexity and
cost with which WhitespaceAttacher to use.

Bug: 876150
Change-Id: Ib1f34f0ba596d5fa5f1c7fcbd7c75550dd4f9d12
Reviewed-on: https://chromium-review.googlesource.com/1183231
Reviewed-by: Xiaocheng Hu <[email protected]>
Commit-Queue: Rune Lillesveen <[email protected]>
Cr-Commit-Position: refs/heads/master@{#584866}
  • Loading branch information
Rune Lillesveen authored and chromium-wpt-export-bot committed Aug 21, 2018
1 parent a6c7a82 commit 05f0eb4
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
11 changes: 11 additions & 0 deletions css/css-pseudo/first-letter-and-whitespace-ref.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Reference File</title>
<link rel="author" title="Rune Lillesveen" href="mailto:[email protected]">
<p>Pass if no space between "A", space between "B".</p>
<div><span style="float:left">A</span>A</div>
<div><span style="float:left">A</span>A</div>
<div>B B</div>
<div>B B</div>
<div>AAB B</div>
<div>AAB B</div>
31 changes: 31 additions & 0 deletions css/css-pseudo/first-letter-and-whitespace.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test: White-spaces around floated ::first-letter</title>
<link rel="author" title="Rune Lillesveen" href="mailto:[email protected]">
<link rel="match" href="first-letter-and-whitespace-ref.html">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
<meta name="assert" content="Test checks that white-spaces are correctly rendered for floated ::first-letter changes">
<style>
div::first-letter {
color: black;
}
.floatLetter::first-letter {
float: left;
}
</style>
<p>Pass if no space between "A", space between "B".</p>
<div id="t1"> <!---->AA</div>
<div id="t2"> <!---->A<!----> <!---->A</div>
<div id="t3" class="floatLetter"> <!---->B<!----> <!---->B</div>
<div id="t4" class="floatLetter"> <!---->B <!---->B</div>
<div id="t5" class="floatLetter"> <!---->AAB<!----> <!---->B</div>
<div id="t6" class="floatLetter"> <!---->AAB<!----> B</div>
<script>
document.body.offsetTop;
t1.className = "floatLetter";
t2.className = "floatLetter";
t3.className = "";
t4.className = "";
t5.className = "";
t6.className = "";
</script>

0 comments on commit 05f0eb4

Please sign in to comment.