Title: [285324] trunk/Source/WebCore
Revision
285324
Author
[email protected]
Date
2021-11-04 18:35:44 -0700 (Thu, 04 Nov 2021)

Log Message

[LFC][IFC] Use objectReplacementCharacter to mark atomic inline box position.
https://bugs.webkit.org/show_bug.cgi?id=232718

Reviewed by Antti Koivisto.

objectReplacementCharacter is input to the bidi code as atomic inline level box marker.

* layout/formattingContexts/inline/InlineItemsBuilder.cpp:
(WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox):
(WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent): Take the atomic inline level boxes into account when building previous content for bidi processing.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (285323 => 285324)


--- trunk/Source/WebCore/ChangeLog	2021-11-05 01:01:37 UTC (rev 285323)
+++ trunk/Source/WebCore/ChangeLog	2021-11-05 01:35:44 UTC (rev 285324)
@@ -1,3 +1,16 @@
+2021-11-04  Alan Bujtas  <[email protected]>
+
+        [LFC][IFC] Use objectReplacementCharacter to mark atomic inline box position.
+        https://bugs.webkit.org/show_bug.cgi?id=232718
+
+        Reviewed by Antti Koivisto.
+
+        objectReplacementCharacter is input to the bidi code as atomic inline level box marker.
+
+        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
+        (WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox):
+        (WebCore::Layout::InlineItemsBuilder::buildPreviousTextContent): Take the atomic inline level boxes into account when building previous content for bidi processing.
+
 2021-11-04  Kate Cheney  <[email protected]>
 
         Form action with a redirect should report correct blocked URI

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp (285323 => 285324)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp	2021-11-05 01:01:37 UTC (rev 285323)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp	2021-11-05 01:35:44 UTC (rev 285324)
@@ -402,11 +402,17 @@
 
 void InlineItemsBuilder::handleInlineLevelBox(const Box& layoutBox, InlineItems& inlineItems)
 {
-    if (layoutBox.isAtomicInlineLevelBox())
-        return inlineItems.append({ layoutBox, InlineItem::Type::Box });
+    if (layoutBox.isAtomicInlineLevelBox()) {
+        inlineItems.append({ layoutBox, InlineItem::Type::Box });
+        if (hasSeenBidiContent())
+            m_paragraphContentBuilder.append(objectReplacementCharacter);
+        return;
+    }
 
-    if (layoutBox.isLineBreakBox())
+    if (layoutBox.isLineBreakBox()) {
+        // FIXME: Figure out what (if any) character to append to the bidi paragraph.
         return inlineItems.append({ layoutBox, downcast<LineBreakBox>(layoutBox).isOptional() ? InlineItem::Type::WordBreakOpportunity : InlineItem::Type::HardLineBreak });
+    }
 
     ASSERT_NOT_REACHED();
 }
@@ -431,18 +437,19 @@
     ASSERT(!hasSeenBidiContent());
     ASSERT(m_contentOffsetMap.isEmpty());
 
-    const Box* lastLayoutBox = nullptr;
+    const Box* lastInlineTextBox = nullptr;
     for (auto& inlineItem : inlineItems) {
-        if (!inlineItem.isText())
-            continue;
-        auto& layoutBox = inlineItem.layoutBox();
-        if (lastLayoutBox == &layoutBox) {
-            // We've already appended this content.
-            continue;
-        }
-        m_contentOffsetMap.set(&layoutBox, m_paragraphContentBuilder.length());
-        m_paragraphContentBuilder.append(downcast<InlineTextBox>(layoutBox).content());
-        lastLayoutBox = &layoutBox;
+        if (inlineItem.isText()) {
+            auto& layoutBox = inlineItem.layoutBox();
+            if (lastInlineTextBox != &layoutBox) {
+                m_contentOffsetMap.set(&layoutBox, m_paragraphContentBuilder.length());
+                m_paragraphContentBuilder.append(downcast<InlineTextBox>(layoutBox).content());
+                lastInlineTextBox = &layoutBox;
+            }
+        } else if (inlineItem.isBox())
+            m_paragraphContentBuilder.append(objectReplacementCharacter);
+        else
+            ASSERT_NOT_IMPLEMENTED_YET();
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to