Test case: http://codepen.io/kizu/pen/bEQNVL When there is a soft hyphen at the end an inline element and there is a line break at it, the hyphen is not shown. This prevents authors from styling the soft hyphens only, as it is impossible to wrap them into their own element to apply styles, like `mmmmm<span class="soft-hyphen">­</span>mmmmmmmm`. In other browsers (Fx, Edge) everything works as intended.
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.