Changeset 226221 in webkit


Ignore:
Timestamp:
Dec 21, 2017 7:13:26 AM (6 years ago)
Author:
Alan Bujtas
Message:

[RenderTreeBuilder] Move ruby mutation code to a dedicated class.
https://bugs.webkit.org/show_bug.cgi?id=181066
<rdar://problem/36167692>

Reviewed by Antti Koivisto.

This is in preparation for moving all ruby mutation code here.

No change in functionality.

  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • rendering/updating/RenderTreeBuilder.cpp:

(WebCore::RenderTreeBuilder::insertChild):
(WebCore::RenderTreeBuilder::rubyRunInsertChild): Deleted.

  • rendering/updating/RenderTreeBuilder.h:

(WebCore::RenderTreeBuilder::rubyBuilder):

  • rendering/updating/RenderTreeBuilderRuby.cpp: Added.

(WebCore::RenderTreeBuilder::Ruby::Ruby):
(WebCore::RenderTreeBuilder::Ruby::insertChild):

  • rendering/updating/RenderTreeBuilderRuby.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
Location:
trunk/Source/WebCore
Files:
1 added
5 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r226220 r226221  
     12017-12-21  Zalan Bujtas  <zalan@apple.com>
     2
     3        [RenderTreeBuilder] Move ruby mutation code to a dedicated class.
     4        https://bugs.webkit.org/show_bug.cgi?id=181066
     5        <rdar://problem/36167692>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        This is in preparation for moving all ruby mutation code here.
     10
     11        No change in functionality.
     12
     13        * Sources.txt:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * rendering/updating/RenderTreeBuilder.cpp:
     16        (WebCore::RenderTreeBuilder::insertChild):
     17        (WebCore::RenderTreeBuilder::rubyRunInsertChild): Deleted.
     18        * rendering/updating/RenderTreeBuilder.h:
     19        (WebCore::RenderTreeBuilder::rubyBuilder):
     20        * rendering/updating/RenderTreeBuilderRuby.cpp: Added.
     21        (WebCore::RenderTreeBuilder::Ruby::Ruby):
     22        (WebCore::RenderTreeBuilder::Ruby::insertChild):
     23        * rendering/updating/RenderTreeBuilderRuby.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
     24
    1252017-12-21  Ms2ger  <Ms2ger@igalia.com>
    226
  • trunk/Source/WebCore/Sources.txt

    r226179 r226221  
    19841984rendering/updating/RenderTreeBuilderList.cpp
    19851985rendering/updating/RenderTreeBuilderMultiColumn.cpp
     1986rendering/updating/RenderTreeBuilderRuby.cpp
    19861987rendering/updating/RenderTreeBuilderTable.cpp
    19871988rendering/updating/RenderTreePosition.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r226189 r226221  
    392392                113D0B521F9FDD2B00F611BB /* LayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 113D0B501F9FDD2B00F611BB /* LayoutContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
    393393                119340791FE8B92300935F1E /* RenderTreeBuilderTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */; };
     394                1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */ = {isa = PBXBuildFile; fileRef = 119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */; };
    394395                11E067EE1E6246E500162D16 /* SimpleLineLayoutCoverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */; settings = {ATTRIBUTES = (Private, ); }; };
    395396                1400D7A817136EA70077CE05 /* ScriptWrappableInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    55685569                119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderTable.cpp; sourceTree = "<group>"; };
    55695570                119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderTable.h; sourceTree = "<group>"; };
     5571                119340871FEB355D00935F1E /* RenderTreeBuilderRuby.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTreeBuilderRuby.cpp; sourceTree = "<group>"; };
     5572                119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderTreeBuilderRuby.h; sourceTree = "<group>"; };
    55705573                11E067EB1E62461300162D16 /* SimpleLineLayoutCoverage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleLineLayoutCoverage.cpp; sourceTree = "<group>"; };
    55715574                11E067ED1E6246E500162D16 /* SimpleLineLayoutCoverage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutCoverage.h; sourceTree = "<group>"; };
     
    2450624509                                E47C39231FE6E0DA00BBBC6B /* RenderTreeBuilderMultiColumn.cpp */,
    2450724510                                E47C39271FE6E0DC00BBBC6B /* RenderTreeBuilderMultiColumn.h */,
     24511                                119340871FEB355D00935F1E /* RenderTreeBuilderRuby.cpp */,
     24512                                119340881FEB355D00935F1E /* RenderTreeBuilderRuby.h */,
    2450824513                                119340761FE8B92300935F1E /* RenderTreeBuilderTable.cpp */,
    2450924514                                119340771FE8B92300935F1E /* RenderTreeBuilderTable.h */,
     
    2722727232                                0707568C142262D600414161 /* HTMLTrackElement.h in Headers */,
    2722827233                                977B37261228721700B81FF8 /* HTMLTreeBuilder.h in Headers */,
    27229                                 E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */,
    2723027234                                A8EA79F20A1916DF00A8EF5F /* HTMLUListElement.h in Headers */,
    2723127235                                AD49914318F0815100BF0092 /* HTMLUnknownElement.h in Headers */,
     
    2891528919                                93F1998C08245E59001E9ABC /* RenderTreeAsText.h in Headers */,
    2891628920                                E47C392D1FE6E0F300BBBC6B /* RenderTreeBuilder.h in Headers */,
     28921                                E47C39301FE6E0FD00BBBC6B /* RenderTreeBuilderFirstLetter.h in Headers */,
     28922                                E47C39321FE6E10500BBBC6B /* RenderTreeBuilderList.h in Headers */,
     28923                                E47C39331FE6E10800BBBC6B /* RenderTreeBuilderMultiColumn.h in Headers */,
     28924                                1193408A1FEB355D00935F1E /* RenderTreeBuilderRuby.h in Headers */,
    2891728925                                119340791FE8B92300935F1E /* RenderTreeBuilderTable.h in Headers */,
    2891828926                                E47C392E1FE6E0F700BBBC6B /* RenderTreePosition.h in Headers */,
    2891928927                                E47C392F1FE6E0F900BBBC6B /* RenderTreeUpdater.h in Headers */,
    2892028928                                E47C39311FE6E10200BBBC6B /* RenderTreeUpdaterGeneratedContent.h in Headers */,
    28921                                 E47C39321FE6E10500BBBC6B /* RenderTreeBuilderList.h in Headers */,
    28922                                 E47C39331FE6E10800BBBC6B /* RenderTreeBuilderMultiColumn.h in Headers */,
    2892328929                                E44614520CD68A3500FADA75 /* RenderVideo.h in Headers */,
    2892428930                                BCEA4868097D93020094C9E4 /* RenderView.h in Headers */,
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp

    r226181 r226221  
    3636#include "RenderTreeBuilderList.h"
    3737#include "RenderTreeBuilderMultiColumn.h"
     38#include "RenderTreeBuilderRuby.h"
    3839#include "RenderTreeBuilderTable.h"
    3940
     
    4849    , m_multiColumnBuilder(std::make_unique<MultiColumn>(*this))
    4950    , m_tableBuilder(std::make_unique<Table>(*this))
     51    , m_rubyBuilder(std::make_unique<Ruby>(*this))
    5052{
    5153    RELEASE_ASSERT(!s_current || &m_view != &s_current->m_view);
     
    99101
    100102    if (is<RenderRubyRun>(parent)) {
    101         rubyRunInsertChild(downcast<RenderRubyRun>(parent), WTFMove(child), beforeChild);
     103        rubyBuilder().insertChild(downcast<RenderRubyRun>(parent), WTFMove(child), beforeChild);
    102104        return;
    103105    }
     
    121123}
    122124
    123 void RenderTreeBuilder::rubyRunInsertChild(RenderRubyRun& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
    124 {
    125     if (child->isRubyText()) {
    126         if (!beforeChild) {
    127             // RenderRuby has already ascertained that we can add the child here.
    128             ASSERT(!parent.hasRubyText());
    129             // prepend ruby texts as first child
    130             parent.addChild(*this, WTFMove(child), parent.firstChild());
    131             return;
    132         }
    133         if (beforeChild->isRubyText()) {
    134             // New text is inserted just before another.
    135             // In this case the new text takes the place of the old one, and
    136             // the old text goes into a new run that is inserted as next sibling.
    137             ASSERT(beforeChild->parent() == &parent);
    138             RenderElement* ruby = parent.parent();
    139             ASSERT(isRuby(ruby));
    140             auto newRun = RenderRubyRun::staticCreateRubyRun(ruby);
    141             insertChild(*ruby, WTFMove(newRun), parent.nextSibling());
    142             // Add the new ruby text and move the old one to the new run
    143             // Note: Doing it in this order and not using RenderRubyRun's methods,
    144             // in order to avoid automatic removal of the ruby run in case there is no
    145             // other child besides the old ruby text.
    146             parent.addChild(*this, WTFMove(child), beforeChild);
    147             auto takenBeforeChild = parent.RenderBlockFlow::takeChild(*beforeChild);
    148             insertChild(*newRun, WTFMove(takenBeforeChild));
    149             return;
    150         }
    151         if (parent.hasRubyBase()) {
    152             // Insertion before a ruby base object.
    153             // In this case we need insert a new run before the current one and split the base.
    154             RenderElement* ruby = parent.parent();
    155             auto newRun = RenderRubyRun::staticCreateRubyRun(ruby);
    156             auto& run = *newRun;
    157             insertChild(*ruby, WTFMove(newRun), &parent);
    158             insertChild(run, WTFMove(child));
    159             parent.rubyBaseSafe()->moveChildren(run.rubyBaseSafe(), beforeChild);
    160         }
    161         return;
    162     }
    163     // child is not a text -> insert it into the base
    164     // (append it instead if beforeChild is the ruby text)
    165     if (beforeChild && beforeChild->isRubyText())
    166         beforeChild = nullptr;
    167     insertChild(*parent.rubyBaseSafe(), WTFMove(child), beforeChild);
    168125}
    169 
    170 }
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h

    r226179 r226221  
    5252    class MultiColumn;
    5353    class Table;
    54 
    55     void rubyRunInsertChild(RenderRubyRun&, RenderPtr<RenderObject> child, RenderObject* beforeChild);
     54    class Ruby;
    5655
    5756    FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
     
    5958    MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; }
    6059    Table& tableBuilder() { return *m_tableBuilder; }
     60    Ruby& rubyBuilder() { return *m_rubyBuilder; }
    6161
    6262    RenderView& m_view;
     
    6969    std::unique_ptr<MultiColumn> m_multiColumnBuilder;
    7070    std::unique_ptr<Table> m_tableBuilder;
     71    std::unique_ptr<Ruby> m_rubyBuilder;
    7172};
    7273
    7374}
     75
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.h

    r226220 r226221  
    2626#pragma once
    2727
    28 #include "RenderTreePosition.h"
     28#include "RenderTreeUpdater.h"
    2929
    3030namespace WebCore {
    3131
     32class RenderObject;
    3233class RenderRubyRun;
    33 class RenderTreeUpdater;
     34class RenderTreeBuilder;
    3435
    35 class RenderTreeBuilder {
     36class RenderTreeBuilder::Ruby {
    3637public:
    37     RenderTreeBuilder(RenderView&);
    38     ~RenderTreeBuilder();
     38    Ruby(RenderTreeBuilder&);
    3939
    40     void insertChild(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
    41     void insertChild(RenderTreePosition&, RenderPtr<RenderObject>);
    42 
    43     void updateAfterDescendants(RenderElement&);
    44 
    45     // This avoids having to convert all sites that need RenderTreeBuilder in one go.
    46     // FIXME: Remove.
    47     static RenderTreeBuilder* current() { return s_current; }
     40    void insertChild(RenderRubyRun& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
    4841
    4942private:
    50     class FirstLetter;
    51     class List;
    52     class MultiColumn;
    53     class Table;
    54 
    55     void rubyRunInsertChild(RenderRubyRun&, RenderPtr<RenderObject> child, RenderObject* beforeChild);
    56 
    57     FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
    58     List& listBuilder() { return *m_listBuilder; }
    59     MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; }
    60     Table& tableBuilder() { return *m_tableBuilder; }
    61 
    62     RenderView& m_view;
    63 
    64     RenderTreeBuilder* m_previous { nullptr };
    65     static RenderTreeBuilder* s_current;
    66 
    67     std::unique_ptr<FirstLetter> m_firstLetterBuilder;
    68     std::unique_ptr<List> m_listBuilder;
    69     std::unique_ptr<MultiColumn> m_multiColumnBuilder;
    70     std::unique_ptr<Table> m_tableBuilder;
     43    RenderTreeBuilder& m_builder;
    7144};
    7245
    7346}
     47
Note: See TracChangeset for help on using the changeset viewer.