diff options
Diffstat (limited to 'Source/WebCore')
| -rw-r--r-- | Source/WebCore/rendering/RenderBlock.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp index 49dd169..86d8a98 100644 --- a/Source/WebCore/rendering/RenderBlock.cpp +++ b/Source/WebCore/rendering/RenderBlock.cpp @@ -5380,21 +5380,28 @@ void RenderBlock::updateFirstLetter() // Drill into inlines looking for our first text child. RenderObject* currChild = firstLetterBlock->firstChild(); - while (currChild && ((!currChild->isReplaced() && !currChild->isRenderButton() && !currChild->isMenuList()) || currChild->isFloatingOrPositioned()) && !currChild->isText()) { - if (currChild->isFloatingOrPositioned()) { + while (currChild) { + if (currChild->isText()) + break; + if (currChild->isListMarker()) + currChild = currChild->nextSibling(); + else if (currChild->isFloatingOrPositioned()) { if (currChild->style()->styleType() == FIRST_LETTER) { currChild = currChild->firstChild(); break; - } + } currChild = currChild->nextSibling(); - } else + } else if (currChild->isReplaced() || currChild->isRenderButton() || currChild->isMenuList()) + break; + else if (currChild->style()->hasPseudoStyle(FIRST_LETTER) && currChild->canHaveChildren()) { + // We found a lower-level node with first-letter, which supersedes the higher-level style + firstLetterBlock = currChild; + currChild = currChild->firstChild(); + } + else currChild = currChild->firstChild(); } - // Get list markers out of the way. - while (currChild && currChild->isListMarker()) - currChild = currChild->nextSibling(); - if (!currChild) return; |
