From a1f4bbf4c6e1a9a861a145a34cd097ea260b5a49 Mon Sep 17 00:00:00 2001 From: Koji Ishii Date: Tue, 1 Oct 2024 15:20:32 -0700 Subject: [PATCH] [initial-letter] Fix positioning for raised/sunken initial letters When the the `initial-letter` property[1] has its `size` larger than `sink`, the top of the initial letter glyph overhangs the top of the first line. Before this patch, the block-direction position of such initial letters were computed based on the actual size of the fragment. This patch changes it to the specified `size`, making it consistent across different font metrics. Note, the change to the positioning made two tests to hit existing issues in exclusion space in vertical flow. They are tracked at crbug.com/370423031. [1] https://drafts.csswg.org/css-inline-3/#sizing-drop-initials Bug: 370217727, 370423031 Change-Id: I24b8de13d1a76a27c30850297ca380f98f5021b8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5896658 Commit-Queue: Kent Tamura Auto-Submit: Koji Ishii Reviewed-by: Kent Tamura Cr-Commit-Position: refs/heads/main@{#1362700} --- .../Initial-letter-breaking-vlr-ref.html | 2 +- .../Initial-letter-breaking-vrl-ref.html | 2 +- ...letter-block-position-margins-vlr-ref.html | 2 +- ...letter-block-position-margins-vrl-ref.html | 2 +- ...er-block-position-raise-over-ruby-ref.html | 2 +- ...ock-position-raise-over-ruby-tall-ref.html | 2 +- ...r-block-position-raise-under-ruby-ref.html | 2 +- ...ck-position-raise-under-ruby-tall-ref.html | 2 +- .../initial-letter-drop-initial-vlr-ref.html | 2 +- .../initial-letter-drop-initial-vrl-ref.html | 2 +- .../initial-letter-float-001-vlr-ref.html | 2 +- .../initial-letter-raise-initial-ref.html | 25 +++++-- .../initial-letter-raise-initial-rtl-ref.html | 2 +- .../initial-letter-raise-initial-vlr-ref.html | 11 ++- .../initial-letter-raise-initial-vrl-ref.html | 8 +- .../initial-letter-raise-initial.html | 8 +- ...l-letter-raised-sunken-caps-raise-ref.html | 2 +- ...-letter-raised-sunken-caps-sunken-ref.html | 2 +- .../initial-letter-sunk-initial-ref.html | 17 ++++- .../initial-letter-sunk-initial-rtl-ref.html | 2 +- .../initial-letter-sunk-initial-vlr-ref.html | 8 +- .../initial-letter-sunk-initial-vrl-ref.html | 8 +- .../initial-letter-sunk-initial.html | 6 +- .../resources/initial-letter-variants.js | 75 +++++++++++++++++++ 24 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 css/css-inline/initial-letter/resources/initial-letter-variants.js diff --git a/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html b/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html index d43b2e39bfaca8..2c047b0b4aaff8 100644 --- a/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html +++ b/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html @@ -35,7 +35,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } diff --git a/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html b/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html index 0fe5e74a082b11..ce2b41135ea88c 100644 --- a/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html +++ b/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html @@ -35,7 +35,7 @@ background: lime; float: left; height: 80px; - margin-right: 8px; + margin-right: -4px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html index 6bbc5c3b7a620f..677e2a40db68ff 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html @@ -21,7 +21,7 @@ float: left; height: 80px; margin-bottom: 30px; - margin-left: 23px; + margin-left: 11px; margin-right: 45px; margin-top: 10px; width: 80px; diff --git a/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html index d608d256c96903..532f3a7d837639 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html @@ -22,7 +22,7 @@ height: 80px; margin-bottom: 30px; margin-left: 15px; - margin-right: 53px; + margin-right: 41px; margin-top: 10px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html index 43222b43dac567..23401fd646bba6 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html @@ -31,7 +31,7 @@
-



+


bc xyzXYZ
def
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html index f1086074c2a665..9511f3e6f2d180 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html @@ -21,7 +21,7 @@ background: lime; float: left; height: 80px; - margin-top: 8px; + margin-top: 32px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html index 9adde375569332..87bc6d0ff41281 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html @@ -32,7 +32,7 @@
-



+


bc xyzXYZ
def
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html b/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html index 7e334e55dbf062..e818de68cd8d1b 100644 --- a/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html +++ b/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html @@ -25,7 +25,7 @@ width: 80px; } - .surrounding { display:inline-block; margin-top: 72px; margin-bottom: -2px; } + .surrounding { display:inline-block; margin-top: 48px; margin-bottom: -2px; } diff --git a/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html b/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html index f28d1eed83013f..5447e2f099a9ac 100644 --- a/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html +++ b/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html @@ -20,7 +20,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html b/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html index 4ec34f4c0bb491..e1e04ccffe2980 100644 --- a/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html @@ -20,7 +20,7 @@ background: lime; float: left; height: 80px; - margin-right: 8px; + margin-right: -4px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html b/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html index 3982a3669cd394..b4567d288129e0 100644 --- a/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html +++ b/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html @@ -28,7 +28,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } diff --git a/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html b/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html index f59625a4a9de3e..29594f45f9595d 100644 --- a/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html +++ b/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html @@ -1,11 +1,11 @@ - - + Tests initial letter raise initial +
-



+


bc
def
ghi
jkl
mno
- - + diff --git a/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html b/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html index 9dce9e6e14c714..e5dd8f96b5cf40 100644 --- a/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html @@ -27,7 +27,7 @@
-



+


bc
def
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html b/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html index 58e5c333e11040..72d2dd05a3edbf 100644 --- a/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html +++ b/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html @@ -20,7 +20,7 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; + margin-left: -4px; margin-right: 8px; width: 80px; } @@ -29,14 +29,19 @@ display: inline-block; vertical-align: top; margin-top: -20px; + margin-right: -12px; + } + + .remainder2 { + margin-left: 12px; }
-
bc

-def
ghi
jkl
mno
+
bc
def
+
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html b/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html index 5fa68450681e0d..38be19283b2ba0 100644 --- a/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html @@ -20,8 +20,8 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; - margin-right: 8px; + margin-left: 20px; + margin-right: -4px; width: 80px; } @@ -35,8 +35,8 @@
-
bc

-def
ghi
jkl
mno
+
bc
def

+ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-raise-initial.html b/css/css-inline/initial-letter/initial-letter-raise-initial.html index 4b8e81453b74bb..ec2ec6bdc07983 100644 --- a/css/css-inline/initial-letter/initial-letter-raise-initial.html +++ b/css/css-inline/initial-letter/initial-letter-raise-initial.html @@ -1,12 +1,14 @@ - - Tests initial letter raise initial + + + +
-


+

bc
def
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html b/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html index 3318c7e8bdd2dc..cb26ab05f1e016 100644 --- a/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html @@ -27,7 +27,7 @@
-


+

bc
def
ghi
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html b/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html index c3ccef28140cf5..ebdb5a15694c24 100644 --- a/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html +++ b/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html @@ -20,14 +20,14 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; + margin-left: -4px; margin-right: 8px; width: 80px; } .remainder { display: inline-block; - margin-left: 48px; + margin-left: 24px; margin-top: -20px; vertical-align: bottom; } @@ -40,8 +40,8 @@
-
bc
def

-
ghi
jkl
mno
+
bc
def
ghi

+
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html b/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html index a7db8b9ea095d0..18735029d0c281 100644 --- a/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html +++ b/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html @@ -21,13 +21,13 @@ display: inline-block; height: 80px; margin-left: 8px; - margin-right: 8px; + margin-right: -4px; width: 80px; } .remainder { display: inline-block; - margin-right: 48px; + margin-right: 24px; margin-top: -20px; vertical-align: top; } @@ -40,8 +40,8 @@
-
bc
def

-
ghi
jkl
mno
+
bc
def
ghi

+
jkl
mno
diff --git a/css/css-inline/initial-letter/initial-letter-sunk-initial.html b/css/css-inline/initial-letter/initial-letter-sunk-initial.html index 701469ca90b9e6..3c00662d73cba1 100644 --- a/css/css-inline/initial-letter/initial-letter-sunk-initial.html +++ b/css/css-inline/initial-letter/initial-letter-sunk-initial.html @@ -1,12 +1,14 @@ - - Tests initial letter sunken initial + + + +