Commit 256e7a49 authored by Javier Fernández García-Boente's avatar Javier Fernández García-Boente Committed by Chromium LUCI CQ

Determine the non-hangable run end when soft-hyphen is disabled

Since r807457 we changed the TextBreakIterator default's behavior so
that it breaks always after a space, instead of before any space run.
In order to implement this new behavior, we needed to compute as well
the end of the non-hangable run of the Item being processed.

In the mentioned change, we forgot to apply this behavior in the code
path used when the soft-hypenation is not enabled. This CL fixes that
by determining the non-hangable run end in that case.

Bug: 1158747
Change-Id: I1a1324b3d775c24e44aa29b097c45e626d0ad76f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2597581
Commit-Queue: Koji Ishii <kojii@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#838749}
parent 8c0c5cbf
......@@ -157,10 +157,13 @@ ShapingLineBreaker::PreviousBreakOpportunity(unsigned offset,
for (;; offset--) {
offset = break_iterator_->PreviousBreakOpportunity(offset, start);
if (offset <= start || offset >= text.length() ||
text[offset - 1] != kSoftHyphenCharacter)
text[offset - 1] != kSoftHyphenCharacter) {
if (IsBreakableSpace(text[offset - 1]))
return {offset, FindNonHangableEnd(text, offset - 1), false};
return {offset, false};
}
}
}
if (UNLIKELY(hyphenation_))
return Hyphenate(offset, start, true);
......@@ -183,10 +186,13 @@ ShapingLineBreaker::BreakOpportunity ShapingLineBreaker::NextBreakOpportunity(
if (UNLIKELY(!IsSoftHyphenEnabled())) {
for (;; offset++) {
offset = break_iterator_->NextBreakOpportunity(offset);
if (offset >= text.length() || text[offset - 1] != kSoftHyphenCharacter)
if (offset >= text.length() || text[offset - 1] != kSoftHyphenCharacter) {
if (IsBreakableSpace(text[offset - 1]))
return {offset, FindNonHangableEnd(text, offset - 1), false};
return {offset, false};
}
}
}
if (UNLIKELY(hyphenation_))
return Hyphenate(offset, start, false);
......
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Text level 3 Test: Line breaking with floats and disabled hyphenation </title>
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"/>
<link rel="help" title="5.4. Hyphenation: the hyphens property" href="https://drafts.csswg.org/css-text-3/#hyphenation">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-hyphens-none">
<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
<meta name="assert" content="A span with hypens 'none' is wrapped based on the available space left by a float image.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
div { font: 20px/1 Ahem; }
img { float:right; }
.test {
max-width: 100px;
color: green;
}
span { hyphens: none; }
.ref {
position: absolute;
background: green linear-gradient(red, red) 2ch 0/3ch 3ch no-repeat;
color: red;
width: 100px;
height: 100px;
z-index: -1;
}
</style>
<p>Test passes if there is a filled green square.</p>
<div class="ref">XX<br>X</br></div>
<div class="test">
<img src="/css/support/60x60-green.png" alt="">
<span>XX X</span>
</div>
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Text level 3 Test: Line breaking with floats and disabled hyphenation </title>
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"/>
<link rel="help" title="5.4. Hyphenation: the hyphens property" href="https://drafts.csswg.org/css-text-3/#hyphenation">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-hyphens-manual">
<link rel="match" href="../../reference/ref-filled-green-200px-square.html">
<meta name="assert" content="A span with hypens 'none' is wrapped in multiple lines based on the available space left by a float image.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
div { font: 20px/1 Ahem; }
img { float:right; }
.test {
max-width: 200px;
color: green;
}
span { hyphens: none; }
.ref {
position: absolute;
background: green linear-gradient(red, red) 7ch 0/3ch 3ch no-repeat;
color: red;
width: 200px;
height: 200px;
z-index: -1;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="ref">XX X<br>XXX</br>XXXX XX<br>XXX</div>
<div class="test">
<img src="/css/support/60x60-green.png" alt="">
<span>XX X XXX XXXX XX XXX</span>
</div>
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