Skip to content

Commit

Permalink
[IFC][hanging punctuation] Line::appendTextContent should call setTra…
Browse files Browse the repository at this point in the history
…ilingStopOrComma when it sees one

https://bugs.webkit.org/show_bug.cgi?id=249696

Reviewed by Antti Koivisto.

This is in preparation for supporting "hanging-punctuation: allow-end".

* Source/WebCore/layout/formattingContexts/inline/InlineLine.cpp:
(WebCore::Layout::Line::appendTextContent):
* Source/WebCore/layout/formattingContexts/inline/text/TextUtil.cpp:
(WebCore::Layout::TextUtil::hasHangableStopOrCommaEnd):
(WebCore::Layout::TextUtil::hangableStopOrCommaEndWidth):
* Source/WebCore/layout/formattingContexts/inline/text/TextUtil.h:

Canonical link: https://commits.webkit.org/258203@main
  • Loading branch information
alanbaradlay committed Dec 21, 2022
1 parent 4569ef0 commit 1c874db
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 6 deletions.
Expand Up @@ -519,17 +519,18 @@ void Line::appendTextContent(const InlineTextItem& inlineTextItem, const RenderS
m_hangingContent.setLeadingPunctuation(TextUtil::hangablePunctuationStartWidth(inlineTextItem, style));

auto runHasHangableWhitespaceEnd = inlineTextItem.isWhitespace() && !isTrimmable && m_runs[lastRunIndex].shouldTrailingWhitespaceHang();
auto runHasHangablePunctuationEnd = TextUtil::hasHangablePunctuationEnd(inlineTextItem, style);
if (runHasHangableWhitespaceEnd) {
ASSERT(!runHasHangablePunctuationEnd);
m_hangingContent.setTrailingWhitespace(inlineTextItem.length(), logicalWidth);
return;
}
if (runHasHangablePunctuationEnd) {
ASSERT(!runHasHangableWhitespaceEnd);
if (TextUtil::hasHangablePunctuationEnd(inlineTextItem, style)) {
m_hangingContent.setTrailingPunctuation(TextUtil::hangablePunctuationEndWidth(inlineTextItem, style));
return;
}
if (TextUtil::hasHangableStopOrCommaEnd(inlineTextItem, style)) {
m_hangingContent.setTrailingStopOrComma(TextUtil::hangableStopOrCommaEndWidth(inlineTextItem, style));
return;
}
m_hangingContent.resetTrailingContent();
};
updateHangingStatus();
Expand Down
13 changes: 11 additions & 2 deletions Source/WebCore/layout/formattingContexts/inline/text/TextUtil.cpp
Expand Up @@ -468,8 +468,11 @@ float TextUtil::hangablePunctuationEndWidth(const InlineTextItem& inlineTextItem
return width(inlineTextItem, style.fontCascade(), trailingPosition, trailingPosition + 1, { });
}

float TextUtil::hangableStopOrCommaEndWidth(const InlineTextItem& inlineTextItem, const RenderStyle& style)
bool TextUtil::hasHangableStopOrCommaEnd(const InlineTextItem& inlineTextItem, const RenderStyle& style)
{
ASSERT(inlineTextItem.length());
if (!style.hangingPunctuation().contains(HangingPunctuation::AllowEnd))
return false;
auto trailingPosition = inlineTextItem.end() - 1;
auto trailingCharacter = inlineTextItem.inlineTextBox().content()[trailingPosition];
auto isHangableStopOrComma = trailingCharacter == 0x002C
Expand All @@ -479,8 +482,14 @@ float TextUtil::hangableStopOrCommaEndWidth(const InlineTextItem& inlineTextItem
|| trailingCharacter == 0xFF0E || trailingCharacter == 0xFE50
|| trailingCharacter == 0xFE51 || trailingCharacter == 0xFE52
|| trailingCharacter == 0xFF61 || trailingCharacter == 0xFF64;
if (!isHangableStopOrComma)
return isHangableStopOrComma;
}

float TextUtil::hangableStopOrCommaEndWidth(const InlineTextItem& inlineTextItem, const RenderStyle& style)
{
if (!hasHangableStopOrCommaEnd(inlineTextItem, style))
return { };
auto trailingPosition = inlineTextItem.end() - 1;
return width(inlineTextItem, style.fontCascade(), trailingPosition, trailingPosition + 1, { });
}

Expand Down
Expand Up @@ -88,6 +88,7 @@ class TextUtil {
static bool hasHangablePunctuationEnd(const InlineTextItem&, const RenderStyle&);
static float hangablePunctuationEndWidth(const InlineTextItem&, const RenderStyle&);

static bool hasHangableStopOrCommaEnd(const InlineTextItem&, const RenderStyle&);
static float hangableStopOrCommaEndWidth(const InlineTextItem&, const RenderStyle&);

};
Expand Down

0 comments on commit 1c874db

Please sign in to comment.