Summary: | Soft hyphen is not shown when it is placed at the end of an inline element | ||
---|---|---|---|
Product: | WebKit | Reporter: | Roman Komarov <kizmarh> |
Component: | Text | Assignee: | zalan <zalan> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | ap, buildbot, commit-queue, esprehn+autocc, glenn, hyatt, jonlee, kondapallykalyan, mmaxfield, rniwa, zalan |
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Attachments: |
Description
Roman Komarov
2016-02-08 02:33:52 PST
We missed the case when the character at the breaking position does not fit the line and soft-hyphen is followed by this overflowing character. (foo­bar where b overflows the line). In such cases we don't yet have an item in the breaking history. This should fix it -> diff --git a/Source/WebCore/rendering/line/BreakingContext.h b/Source/WebCore/rendering/line/BreakingContext.h index b44c5a2..46b1c68 100644 --- a/Source/WebCore/rendering/line/BreakingContext.h +++ b/Source/WebCore/rendering/line/BreakingContext.h @@ -903,8 +903,28 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool m_lineInfo.setPreviousLineBrokeCleanly(true); wordMeasurement.endOffset = m_lineBreakHistory.offset(); } - if (m_lineBreakHistory.offset() && downcast<RenderText>(m_lineBreakHistory.renderer()) && downcast<RenderText>(*m_lineBreakHistory.renderer()).textLength() && downcast<RenderText>(*m_lineBreakHistory.renderer()).characterAt(m_lineBreakHistory.offset() - 1) == softHyphen && style.hyphens() != HyphensNone) - hyphenated = true; + // Check if the last breaking position is a soft-hyphen. + if (!hyphenated) { + const RenderText* textRenderer = nullptr; + Optional<int> breakingPositon; + if (m_lineBreakHistory.historyLength() && is<RenderText>(m_lineBreakHistory.renderer())) { + textRenderer = downcast<RenderText>(m_lineBreakHistory.renderer()); + breakingPositon = m_lineBreakHistory.offset(); + } else if (nextBreakablePosition > -1 && is<RenderText>(m_current.renderer())) { + textRenderer = downcast<RenderText>(m_current.renderer()); + breakingPositon = nextBreakablePosition; + } + if (textRenderer && breakingPositon) { + if (breakingPositon.value() == 0) { + // We need to check the previous renderer for the soft-hyphen character instead. + textRenderer = is<RenderText>(m_lastObject) ? downcast<RenderText>(m_lastObject) : nullptr; + if (textRenderer) + breakingPositon = textRenderer->textLength(); + } + UChar characterBeforeBreakingPosition = textRenderer->characterAt(breakingPositon.value() - 1); + hyphenated = characterBeforeBreakingPosition == softHyphen && style.hyphens() != HyphensNone; + } + } if (m_lineBreakHistory.offset() && m_lineBreakHistory.offset() != (unsigned)wordMeasurement.endOffset && !wordMeasurement.width) { if (charWidth) { wordMeasurement.endOffset = m_lineBreakHistory.offset(); Patch is coming up soon. (need to see first if checking prev is sufficient enough) Created attachment 271665 [details]
Patch
Comment on attachment 271665 [details] Patch Attachment 271665 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/850622 New failing tests: fast/text/midword-break-after-breakable-char.html Created attachment 271668 [details]
Archive of layout-test-results from ews100 for mac-yosemite
The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100 Port: mac-yosemite Platform: Mac OS X 10.10.5
Comment on attachment 271665 [details]
Patch
r=me
Comment on attachment 271665 [details] Patch Attachment 271665 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/850626 New failing tests: fast/text/midword-break-after-breakable-char.html Created attachment 271671 [details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2
The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Comment on attachment 271665 [details] Patch Attachment 271665 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/850625 New failing tests: fast/text/midword-break-after-breakable-char.html Created attachment 271672 [details]
Archive of layout-test-results from ews117 for mac-yosemite
The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews117 Port: mac-yosemite Platform: Mac OS X 10.10.5
Created attachment 271693 [details]
Patch
Comment on attachment 271693 [details] Patch Clearing flags on attachment: 271693 Committed r196782: <http://trac.webkit.org/changeset/196782> All reviewed patches have been landed. Closing bug. |