#pragma once
#include "RenderBlockFlow.h"
namespace WebCore {
class RenderRubyBase;
class RenderRubyText;
class RenderRubyRun final : public RenderBlockFlow {
public:
RenderRubyRun(Document&, RenderStyle&&);
virtual ~RenderRubyRun();
bool hasRubyText() const;
bool hasRubyBase() const;
RenderRubyText* rubyText() const;
RenderRubyBase* rubyBase() const;
RenderRubyBase* rubyBaseSafe();
RenderObject* layoutSpecialExcludedChild(bool relayoutChildren) override;
void layout() override;
void layoutBlock(bool relayoutChildren, LayoutUnit pageHeight = 0) override;
bool isChildAllowed(const RenderObject&, const RenderStyle&) const override;
void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
void removeChild(RenderObject&) override;
RenderBlock* firstLineBlock() const override;
void updateFirstLetter(RenderTreeMutationIsAllowed = RenderTreeMutationIsAllowed::Yes) override;
void getOverhang(bool firstLine, RenderObject* startRenderer, RenderObject* endRenderer, float& startOverhang, float& endOverhang) const;
static RenderRubyRun* staticCreateRubyRun(const RenderObject* parentRuby);
void updatePriorContextFromCachedBreakIterator(LazyLineBreakIterator&) const;
void setCachedPriorCharacters(UChar last, UChar secondToLast)
{
m_lastCharacter = last;
m_secondToLastCharacter = secondToLast;
}
bool canBreakBefore(const LazyLineBreakIterator&) const;
protected:
RenderRubyBase* createRubyBase() const;
private:
bool isRubyRun() const override { return true; }
const char* renderName() const override { return "RenderRubyRun (anonymous)"; }
bool createsAnonymousWrapper() const override { return true; }
void removeLeftoverAnonymousBlock(RenderBlock*) override { }
private:
UChar m_lastCharacter;
UChar m_secondToLastCharacter;
};
}
SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderRubyRun, isRubyRun())