[webkit-changes] [WebKit/WebKit] d20819: [IFC][Ruby] Add support for breakable ruby bases

Alan Baradlay noreply at github.com
Mon Dec 4 06:15:54 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d208198da1375a939e90e0416615e054e76107a4
      https://github.com/WebKit/WebKit/commit/d208198da1375a939e90e0416615e054e76107a4
  Author: Alan Baradlay <zalan at apple.com>
  Date:   2023-12-04 (Mon, 04 Dec 2023)

  Changed paths:
    M Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.h
    M Source/WebCore/layout/formattingContexts/inline/InlineFormattingUtils.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h
    M Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp
    M Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.cpp
    M Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.h
    M Source/WebCore/layout/layouttree/LayoutBox.h

  Log Message:
  -----------
  [IFC][Ruby] Add support for breakable ruby bases
https://bugs.webkit.org/show_bug.cgi?id=265752

Reviewed by Antti Koivisto.

Let's be more relaxed about where we can have a line break opportunity inside ruby boxes.

before/after ruby box -> yes (see FIXME for some special characters)
between ruby start/end and ruby base star/end -> no
between ruby start/end and adjacent ruby content -> no (this is similar to <span>no_break)
inside ruby base -> yes
between ruby bases -> yes

In this patch
- remove code for old behavior where ruby bases where handled atomic from line breaking point of view
- ensure we don't break when annotation would overflow (see minimumRequiredWidth)

* Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.cpp:
(WebCore::Layout::InlineContentBreaker::ContinuousContent::reset):
* Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.h:
(WebCore::Layout::InlineContentBreaker::ContinuousContent::minimumRequiredWidth const):
(WebCore::Layout::InlineContentBreaker::ContinuousContent::setMinimumRequiredWidth):
* Source/WebCore/layout/formattingContexts/inline/InlineFormattingUtils.cpp:
(WebCore::Layout::isAtSoftWrapOpportunity):
(WebCore::Layout::InlineFormattingUtils::nextWrapOpportunity):
* Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp:
(WebCore::Layout::LineCandidate::InlineContent::continuousContent const):
(WebCore::Layout::LineCandidate::InlineContent::appendtrailingWordBreakOpportunity):
(WebCore::Layout::LineCandidate::InlineContent::isEmpty const):
(WebCore::Layout::LineCandidate::InlineContent::setMinimumRequiredWidth):
(WebCore::Layout::LineCandidate::InlineContent::reset):
(WebCore::Layout::LineBuilder::candidateContentForLine):
(WebCore::Layout::LineBuilder::handleInlineContent):
(WebCore::Layout::LineCandidate::InlineContent::rubyContainerRange const): Deleted.
(WebCore::Layout::LineCandidate::InlineContent::appendRubyContainerRange): Deleted.
(WebCore::Layout::LineCandidate::InlineContent::isRuby const): Deleted.
(WebCore::Layout::LineBuilder::handleRubyContent): Deleted.
* Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h:
* Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::appendSpanningInlineBoxDisplayBox):
* Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.cpp:
(WebCore::Layout::RubyFormattingContext::isAtSoftWrapOpportunity):
(WebCore::Layout::RubyFormattingContext::annotationBoxLogicalWidth):
* Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.h:
* Source/WebCore/layout/layouttree/LayoutBox.h:
(WebCore::Layout::Box::isRubyInlineBox const):

Canonical link: https://commits.webkit.org/271473@main




More information about the webkit-changes mailing list