#ifndef RenderRubyRun_h
#define RenderRubyRun_h
#include "RenderBlockFlow.h"
namespace WebCore {
class RenderRubyBase;
class RenderRubyText;
class RenderRubyRun final : public RenderBlockFlow {
public:
RenderRubyRun(Document&, Ref<RenderStyle>&&);
virtual ~RenderRubyRun();
bool hasRubyText() const;
bool hasRubyBase() const;
virtual bool isEmpty() const override;
RenderRubyText* rubyText() const;
RenderRubyBase* rubyBase() const;
RenderRubyBase* rubyBaseSafe();
virtual RenderObject* layoutSpecialExcludedChild(bool relayoutChildren) override;
virtual void layout() override;
virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const override;
virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
virtual void removeChild(RenderObject&) override;
virtual RenderBlock* firstLineBlock() const override;
virtual void updateFirstLetter() 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:
virtual bool isRubyRun() const override { return true; }
virtual const char* renderName() const override { return "RenderRubyRun (anonymous)"; }
virtual bool createsAnonymousWrapper() const override { return true; }
virtual void removeLeftoverAnonymousBlock(RenderBlock*) override { }
private:
UChar m_lastCharacter;
UChar m_secondToLastCharacter;
};
}
SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderRubyRun, isRubyRun())
#endif // RenderRubyRun_h