Index: Source/core/layout/LayoutRuby.cpp |
diff --git a/Source/core/layout/LayoutRuby.cpp b/Source/core/layout/LayoutRuby.cpp |
index 17ae3fe6152021bb7b315b49445a728f0d45cd30..d7dc6f40a58efc1e57194e5ba92571021b5187ab 100644 |
--- a/Source/core/layout/LayoutRuby.cpp |
+++ b/Source/core/layout/LayoutRuby.cpp |
@@ -34,70 +34,16 @@ |
#include "core/frame/UseCounter.h" |
#include "core/layout/LayoutRubyRun.h" |
-#include "core/style/ComputedStyle.h" |
-#include "wtf/RefPtr.h" |
namespace blink { |
// === generic helper functions to avoid excessive code duplication === |
-static inline bool isAnonymousRubyInlineBlock(const LayoutObject* object) |
-{ |
- ASSERT(!object |
- || !object->parent()->isRuby() |
- || object->isRubyRun() |
- || (object->isInline() && (object->isBeforeContent() || object->isAfterContent())) |
- || (object->isAnonymous() && object->isLayoutBlock() && object->style()->display() == INLINE_BLOCK)); |
- |
- return object |
- && object->parent()->isRuby() |
- && object->isLayoutBlock() |
- && !object->isRubyRun(); |
-} |
- |
-static inline bool isRubyBeforeBlock(const LayoutObject* object) |
-{ |
- return isAnonymousRubyInlineBlock(object) |
- && !object->previousSibling() |
- && toLayoutBlock(object)->firstChild() |
- && toLayoutBlock(object)->firstChild()->style()->styleType() == BEFORE; |
-} |
- |
-static inline bool isRubyAfterBlock(const LayoutObject* object) |
-{ |
- return isAnonymousRubyInlineBlock(object) |
- && !object->nextSibling() |
- && toLayoutBlock(object)->firstChild() |
- && toLayoutBlock(object)->firstChild()->style()->styleType() == AFTER; |
-} |
- |
-static inline LayoutBlock* rubyBeforeBlock(const LayoutObject* ruby) |
-{ |
- LayoutObject* child = ruby->slowFirstChild(); |
- return isRubyBeforeBlock(child) ? toLayoutBlock(child) : 0; |
-} |
- |
-static inline LayoutBlock* rubyAfterBlock(const LayoutObject* ruby) |
-{ |
- LayoutObject* child = ruby->slowLastChild(); |
- return isRubyAfterBlock(child) ? toLayoutBlock(child) : 0; |
-} |
- |
-static LayoutBlockFlow* createAnonymousRubyInlineBlock(LayoutObject* ruby) |
-{ |
- RefPtr<ComputedStyle> newStyle = ComputedStyle::createAnonymousStyleWithDisplay(ruby->styleRef(), INLINE_BLOCK); |
- LayoutBlockFlow* newBlock = LayoutBlockFlow::createAnonymous(&ruby->document()); |
- newBlock->setStyle(newStyle.release()); |
- return newBlock; |
-} |
- |
static LayoutRubyRun* lastRubyRun(const LayoutObject* ruby) |
{ |
LayoutObject* child = ruby->slowLastChild(); |
- if (child && !child->isRubyRun()) |
- child = child->previousSibling(); |
- ASSERT(!child || child->isRubyRun() || child->isBeforeContent() || child == rubyBeforeBlock(ruby)); |
- return child && child->isRubyRun() ? toLayoutRubyRun(child) : 0; |
+ ASSERT(!child || child->isRubyRun()); |
+ return toLayoutRubyRun(child); |
} |
static inline LayoutRubyRun* findRubyRunParent(LayoutObject* child) |
@@ -127,45 +73,13 @@ void LayoutRubyAsInline::styleDidChange(StyleDifference diff, const ComputedStyl |
void LayoutRubyAsInline::addChild(LayoutObject* child, LayoutObject* beforeChild) |
{ |
- // Insert :before and :after content before/after the LayoutRubyRun(s) |
- if (child->isBeforeContent()) { |
- if (child->isInline()) { |
- // Add generated inline content normally |
- LayoutInline::addChild(child, firstChild()); |
- } else { |
- // Wrap non-inline content with an anonymous inline-block. |
- LayoutBlock* beforeBlock = rubyBeforeBlock(this); |
- if (!beforeBlock) { |
- beforeBlock = createAnonymousRubyInlineBlock(this); |
- LayoutInline::addChild(beforeBlock, firstChild()); |
- } |
- beforeBlock->addChild(child); |
- } |
- return; |
- } |
- if (child->isAfterContent()) { |
- if (child->isInline()) { |
- // Add generated inline content normally |
- LayoutInline::addChild(child); |
- } else { |
- // Wrap non-inline content with an anonymous inline-block. |
- LayoutBlock* afterBlock = rubyAfterBlock(this); |
- if (!afterBlock) { |
- afterBlock = createAnonymousRubyInlineBlock(this); |
- LayoutInline::addChild(afterBlock); |
- } |
- afterBlock->addChild(child); |
- } |
- return; |
- } |
- |
// If the child is a ruby run, just add it normally. |
if (child->isRubyRun()) { |
LayoutInline::addChild(child, beforeChild); |
return; |
} |
- if (beforeChild && !isAfterContent(beforeChild)) { |
+ if (beforeChild) { |
// insert child into run |
LayoutObject* run = beforeChild; |
while (run && !run->isRubyRun()) |
@@ -194,21 +108,12 @@ void LayoutRubyAsInline::addChild(LayoutObject* child, LayoutObject* beforeChild |
void LayoutRubyAsInline::removeChild(LayoutObject* child) |
{ |
- // If the child's parent is *this (must be a ruby run or generated content or anonymous block), |
- // just use the normal remove method. |
+ // If the child's parent is *this (must be a ruby run), just use the normal remove method. |
if (child->parent() == this) { |
- ASSERT(child->isRubyRun() || child->isBeforeContent() || child->isAfterContent() || isAnonymousRubyInlineBlock(child)); |
+ ASSERT(child->isRubyRun()); |
LayoutInline::removeChild(child); |
return; |
} |
- // If the child's parent is an anoymous block (must be generated :before/:after content) |
- // just use the block's remove method. |
- if (isAnonymousRubyInlineBlock(child->parent())) { |
- ASSERT(child->isBeforeContent() || child->isAfterContent()); |
- child->parent()->removeChild(child); |
- removeChild(child->parent()); |
- return; |
- } |
// Otherwise find the containing run and remove it from there. |
LayoutRubyRun* run = findRubyRunParent(child); |
@@ -236,45 +141,13 @@ void LayoutRubyAsBlock::styleDidChange(StyleDifference diff, const ComputedStyle |
void LayoutRubyAsBlock::addChild(LayoutObject* child, LayoutObject* beforeChild) |
{ |
- // Insert :before and :after content before/after the LayoutRubyRun(s) |
- if (child->isBeforeContent()) { |
- if (child->isInline()) { |
- // Add generated inline content normally |
- LayoutBlockFlow::addChild(child, firstChild()); |
- } else { |
- // Wrap non-inline content with an anonymous inline-block. |
- LayoutBlock* beforeBlock = rubyBeforeBlock(this); |
- if (!beforeBlock) { |
- beforeBlock = createAnonymousRubyInlineBlock(this); |
- LayoutBlockFlow::addChild(beforeBlock, firstChild()); |
- } |
- beforeBlock->addChild(child); |
- } |
- return; |
- } |
- if (child->isAfterContent()) { |
- if (child->isInline()) { |
- // Add generated inline content normally |
- LayoutBlockFlow::addChild(child); |
- } else { |
- // Wrap non-inline content with an anonymous inline-block. |
- LayoutBlock* afterBlock = rubyAfterBlock(this); |
- if (!afterBlock) { |
- afterBlock = createAnonymousRubyInlineBlock(this); |
- LayoutBlockFlow::addChild(afterBlock); |
- } |
- afterBlock->addChild(child); |
- } |
- return; |
- } |
- |
// If the child is a ruby run, just add it normally. |
if (child->isRubyRun()) { |
LayoutBlockFlow::addChild(child, beforeChild); |
return; |
} |
- if (beforeChild && !isAfterContent(beforeChild)) { |
+ if (beforeChild) { |
// insert child into run |
LayoutObject* run = beforeChild; |
while (run && !run->isRubyRun()) |
@@ -303,21 +176,12 @@ void LayoutRubyAsBlock::addChild(LayoutObject* child, LayoutObject* beforeChild) |
void LayoutRubyAsBlock::removeChild(LayoutObject* child) |
{ |
- // If the child's parent is *this (must be a ruby run or generated content or anonymous block), |
- // just use the normal remove method. |
+ // If the child's parent is *this (must be a ruby run), just use the normal remove method. |
if (child->parent() == this) { |
- ASSERT(child->isRubyRun() || child->isBeforeContent() || child->isAfterContent() || isAnonymousRubyInlineBlock(child)); |
+ ASSERT(child->isRubyRun()); |
LayoutBlockFlow::removeChild(child); |
return; |
} |
- // If the child's parent is an anoymous block (must be generated :before/:after content) |
- // just use the block's remove method. |
- if (isAnonymousRubyInlineBlock(child->parent())) { |
- ASSERT(child->isBeforeContent() || child->isAfterContent()); |
- child->parent()->removeChild(child); |
- removeChild(child->parent()); |
- return; |
- } |
// Otherwise find the containing run and remove it from there. |
LayoutRubyRun* run = findRubyRunParent(child); |