Skip to content

Commit 09aacb0

Browse files
committed
[IFC] Incorrect line breaking when hyphen candidate position is _after_ overflow
https://bugs.webkit.org/show_bug.cgi?id=279486 Reviewed by Antti Koivisto. Let's call 1. lastHyphenPosition when we are dealing with the non-overflowing runs (this is when we can't break the overflowing part of the content and try to break runs _before_ the overflowing point). Since these runs are not overflowing, we should simply pick the last hyphenation position. 2. firstHyphenPosition when even the first hyphenation would produce overflowing content (e.g. minimum-content with computation) 3. hyphenPositionBefore when dealing with normal overflowing breaking (neither #1 nor #2) * LayoutTests/fast/inline/overflowing-content-with-hypens-expected.html: Added. * LayoutTests/fast/inline/overflowing-content-with-hypens.html: Added. * Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.cpp: (WebCore::Layout::firstTextRunIndex): (WebCore::Layout::InlineContentBreaker::processOverflowingContent const): (WebCore::Layout::limitBeforeValue): (WebCore::Layout::limitAfterValue): (WebCore::Layout::hasEnoughContentForHyphenation): (WebCore::Layout::firstHyphenPosition): (WebCore::Layout::lastHyphenPosition): (WebCore::Layout::hyphenPositionBefore): (WebCore::Layout::InlineContentBreaker::tryBreakingTextRun const): (WebCore::Layout::InlineContentBreaker::tryHyphenationAcrossOverflowingInlineTextItems const): (WebCore::Layout::hyphenPosition): Deleted. Canonical link: https://commits.webkit.org/283528@main
1 parent b9c607b commit 09aacb0

7 files changed

+99
-58
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<html lang="en">
2+
<style>
3+
div {
4+
font-family: Ahem;
5+
font-size: 20px;
6+
margin-bottom: 10px;
7+
width: 0px;
8+
}
9+
</style>
10+
<div>ability</div>
11+
<div>abil&shyity</div>
12+
<div>abil&shyity</div>
13+
<div>abil&shyity</div>
14+
<div>abil&shyity&nbspabil&shyity</div>
15+
<div>abil&shyity&nbspabil&shyity&nbspabil&shyity</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<html lang="en">
2+
<style>
3+
div {
4+
hyphens: auto;
5+
font-family: Ahem;
6+
font-size: 20px;
7+
margin-bottom: 10px;
8+
}
9+
</style>
10+
<div>ability</div>
11+
<div style="width: 0px;">ability</div>
12+
<div style="width: 10px;">ability</div>
13+
<div style="width: 40px;">ability</div>
14+
<div style="width: 0px;">ability&nbspability</div>
15+
<div style="width: 0px;">ability&nbspability&nbspability</div>

LayoutTests/fast/text/simple-line-layout-hyphen-limit-before-expected.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
<div>accou-trements acces-sories anom-alistic auspi-cious favor-able pros-perous circum-locu-tion con-viviali-ty cor-uscant cuddle-some cyno-sure equa-nimity excogi-tate gas-conad-ing idio-syn-cratic lumi-nescent mag-nani-mous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous prof-itable advan-tageous remu-nera-tive prof-itability saxi-colous ses-quipedalian super-abun-dant unen-cum-bered respon-sibili-ties<br>un-paragoned peer-less</div>
1818
<div>accou-trements acces-sories anom-alistic auspi-cious favor-able pros-perous circum-locu-tion con-viviali-ty cor-uscant cuddle-some cyno-sure equa-nimity excogi-tate gas-conad-ing idio-syn-cratic lumi-nescent mag-nani-mous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous prof-itable advan-tageous remu-nera-tive prof-itability saxi-colous ses-quipedalian super-abun-dant unen-cum-bered respon-sibili-ties<br>un-paragoned peer-less</div>
1919
<div>accou-trements acces-sories anom-alistic auspi-cious favor-able pros-perous circum-locu-tion con-viviali-ty cor-uscant cuddle-some cyno-sure equa-nimity excogi-tate gas-conad-ing idio-syn-cratic lumi-nescent mag-nani-mous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous prof-itable advan-tageous remu-nera-tive prof-itability saxi-colous ses-quipedalian super-abun-dant unen-cum-bered respon-sibili-ties unparagoned peer-less</div>
20-
<div>accou-trements acces-sories anom-alistic auspi-cious favor-able pros-perous circum-locu-tion conviviality corus-cant cuddle-some cyno-sure equa-nimity excogi-tate gasconading idio-syncratic lumi-nescent magnanimous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous prof-itable advan-tageous remu-nera-tive prof-itability saxi-colous sesquipedalian super-abun-dant unen-cumbered respon-sibili-ties unparagoned peer-less</div>
21-
<div>accou-trements acces-sories anomalistic auspi-cious favor-able prosperous circum-locution conviviality corus-cant cuddle-some cynosure equanimity excogi-tate gasconading idiosyncratic luminescent magnanimous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous profitable advan-tageous remunerative profitability saxicolous sesquipedalian super-abundant unencumbered respon-sibili-ties unparagoned peerless</div>
22-
<div>accoutrements accessories anomalistic auspicious favorable prosperous circum-locution conviviality coruscant cuddle-some cynosure equanimity excogi-tate gasconading idiosyncratic luminescent magnanimous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous profitable advantageous remunerative profitability saxicolous sesquipedalian superabundant unencumbered respon-sibili-ties unparagoned peerless</div>
23-
<div>accoutrements accessories anomalistic auspicious favorable prosperous circumlocution conviviality coruscant cuddlesome cynosure equanimity excogitate gasconading idiosyncratic luminescent magnanimous nidificate penulti-mate perfidi-ousness perspicacious proficuous profitable advantageous remunerative profitability saxicolous sesquipedalian superabundant unencumbered responsibilities unparagoned peerless</div>
20+
<div>accou-trements acces-sories anom-alistic auspi-cious favor-able pros-perous circum-locu-tion convivi-ality corus-cant cuddle-some cyno-sure equa-nimity excogi-tate gasconad-ing idio-syncrat-ic lumi-nescent magnan-imous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous prof-itable advan-tageous remu-nera-tive prof-itability saxi-colous sesquipedalian super-abun-dant unen-cumbered respon-sibili-ties unparagoned peer-less</div>
21+
<div>accou-trements acces-sories anomal-istic auspi-cious favor-able prosper-ous circum-locution convivi-ality corus-cant cuddle-some cynosure equanim-ity excogi-tate gasconad-ing idiosyncratic lumines-cent magnan-imous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous profitable advan-tageous remuner-ative profitabil-ity saxicolous sesquipedalian super-abundant unencum-bered respon-sibili-ties unparagoned peerless</div>
22+
<div>accoutrements accessories anomal-istic auspicious favorable prosper-ous circum-locution convivi-ality coruscant cuddle-some cynosure equanim-ity excogi-tate gasconad-ing idiosyncratic lumines-cent magnan-imous nidifi-cate penulti-mate perfidi-ousness perspi-cacious profic-uous profitable advanta-geous remuner-ative profitabil-ity saxicolous sesquipedalian superabun-dant unencum-bered respon-sibili-ties unparagoned peerless</div>
23+
<div>accoutrements accessories anomalis-tic auspicious favorable prosper-ous circumlo-cution convivi-ality coruscant cuddlesome cynosure equanim-ity excogitate gasconad-ing idiosyncratic lumines-cent magnani-mous nidificate penulti-mate perfidi-ousness perspica-cious proficu-ous profitable advanta-geous remuner-ative profitabil-ity saxicolous sesquipedalian superabun-dant unencum-bered responsi-bilities unparagoned peerless</div>
2424
</body>
2525
</html>

LayoutTests/fast/text/simple-line-layout-hyphen-limit-lines-expected.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
</head>
1414
<body>
1515
<div>accoutrements accessories anomalistic auspicious favorable prosperous circumlocution conviviality coruscant cuddlesome cynosure equanimity excogitate gasconading idiosyncratic luminescent magnanimous nidificate penultimate perfidiousness perspicacious proficuous profitable advantageous remunerative profitability saxicolous sesquipedalian superabundant unencumbered responsibilities unparagoned peerless</div>
16-
<div>ac-coutrements ac-cessories anomalistic aus-picious fa-vorable pros-perous cir-cumlocution con-viviality cor-uscant cud-dlesome cynosure equanimity ex-cogitate gas-conading idio-syncratic lumi-nescent mag-nanimous nid-ificate penultimate per-fidiousness per-spicacious proficuous prof-itable ad-vantageous re-munerative prof-itability saxi-colous ses-quipedalian su-perabundant un-encumbered re-sponsibilities un-paragoned peer-less</div>
17-
<div>ac-coutrements ac-ces-sories anomalistic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locution con-vivi-ality cor-us-cant cud-dle-some cynosure equanimity ex-cogi-tate gas-conading idio-syn-cratic lumi-nes-cent mag-nani-mous nid-ifi-cate penultimate per-fidi-ousness per-spi-cacious proficuous prof-itable ad-van-tageous re-munerative prof-itability saxi-colous ses-quipedalian su-per-abundant un-en-cumbered re-sponsibilities un-paragoned peer-less</div>
18-
<div>ac-coutrements ac-ces-sories anomalistic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cynosure equanimity ex-cogi-tate gas-conading idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penultimate per-fidi-ous-ness per-spi-ca-cious proficuous prof-itable ad-van-tageous re-munerative prof-itability saxi-colous ses-quipedalian su-per-abundant un-en-cum-bered re-sponsibilities un-paragoned peer-less</div>
19-
<div>ac-coutrements ac-ces-sories anomalistic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cynosure equanimity ex-cogi-tate gas-conading idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penultimate per-fidi-ous-ness per-spi-ca-cious proficuous prof-itable ad-van-tageous re-munerative prof-itability saxi-colous ses-quipedalian su-per-abundant un-en-cum-bered re-sponsibilities un-paragoned peer-less</div>
20-
<div>ac-coutrements ac-ces-sories anomalistic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cynosure equanimity ex-cogi-tate gas-conading idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penultimate per-fidi-ous-ness per-spi-ca-cious proficuous prof-itable ad-van-tageous re-munerative prof-itability saxi-colous ses-quipedalian su-per-abundant un-en-cum-bered re-sponsibilities un-paragoned peer-less</div>
16+
<div>ac-coutrements ac-cessories anom-alistic aus-picious fa-vorable pros-perous cir-cumlocution con-viviality cor-uscant cud-dlesome cyno-sure equa-nimity ex-cogitate gas-conading idio-syncratic lumi-nescent mag-nanimous nid-ificate penul-timate per-fidiousness per-spicacious profi-cuous prof-itable ad-vantageous re-munerative prof-itability saxi-colous ses-quipedalian su-perabundant un-encumbered re-sponsibilities un-paragoned peer-less</div>
17+
<div>ac-coutrements ac-ces-sories anom-alis-tic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locution con-vivi-ality cor-us-cant cud-dle-some cyno-sure equa-nimi-ty ex-cogi-tate gas-conad-ing idio-syn-cratic lumi-nes-cent mag-nani-mous nid-ifi-cate penul-ti-mate per-fidi-ousness per-spi-cacious profi-cu-ous prof-itable ad-van-tageous re-muner-ative prof-itabil-ity saxi-colous ses-quipedalian su-per-abundant un-en-cumbered re-spon-sibilities un-paragoned peer-less</div>
18+
<div>ac-coutrements ac-ces-sories anom-alis-tic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cyno-sure equa-nimi-ty ex-cogi-tate gas-conad-ing idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penul-ti-mate per-fidi-ous-ness per-spi-ca-cious profi-cu-ous prof-itable ad-van-tageous re-muner-ative prof-itabil-ity saxi-colous ses-quipedalian su-per-abun-dant un-en-cum-bered re-spon-sibil-ities un-paragoned peer-less</div>
19+
<div>ac-coutrements ac-ces-sories anom-alis-tic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cyno-sure equa-nimi-ty ex-cogi-tate gas-conad-ing idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penul-ti-mate per-fidi-ous-ness per-spi-ca-cious profi-cu-ous prof-itable ad-van-tageous re-muner-ative prof-itabil-ity saxi-colous ses-quipedalian su-per-abun-dant un-en-cum-bered re-spon-sibil-ities un-paragoned peer-less</div>
20+
<div>ac-coutrements ac-ces-sories anom-alis-tic aus-pi-cious fa-vor-able pros-per-ous cir-cum-locu-tion con-vivi-ality cor-us-cant cud-dle-some cyno-sure equa-nimi-ty ex-cogi-tate gas-conad-ing idio-syn-crat-ic lumi-nes-cent mag-nani-mous nid-ifi-cate penul-ti-mate per-fidi-ous-ness per-spi-ca-cious profi-cu-ous prof-itable ad-van-tageous re-muner-ative prof-itabil-ity saxi-colous ses-quipedalian su-per-abun-dant un-en-cum-bered re-spon-sibil-ities un-paragoned peer-less</div>
2121
</body>
2222
</html>
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<title>This tests that simple and normal line layout produce the same lines with hyphenation and enlarged font</title>
54
<style>
65
div {
76
display: inline-block;
@@ -13,8 +12,8 @@
1312
</style>
1413
</head>
1514
<body>
16-
<div>advantageous remunerative profitability</div>
17-
<div>saxicolous sesquipedalian superabundant</div>
18-
<div>unencumbered responsibilities unparagoned peerless</div>
15+
<div>ad&shyvan&shytageous re&shymuner&shyative prof&shyitabil&shyity</div>
16+
<div>saxi&shycolous ses&shyquipedalian su&shyper&shyabun&shydant</div>
17+
<div>un&shyen&shycum&shybered re&shyspon&shysibil&shyities un&shyparagoned peer&shyless</div>
1918
</body>
2019
</html>

LayoutTests/fast/text/simple-line-layout-hyphenation-constrains.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<title>This tests that simple and normal line layout produce the same lines with hyphenation and enlarged font</title>
54
<style>
65
div {
76
display: inline-block;

0 commit comments

Comments
 (0)