This source file includes following definitions.
- pseudoElementTagName
 
- pseudoElementNameForEvents
 
- m_pseudoId
 
- customStyleForRenderer
 
- dispose
 
- attach
 
- rendererIsNeeded
 
- didRecalcStyle
 
#include "config.h"
#include "core/dom/PseudoElement.h"
#include "core/inspector/InspectorInstrumentation.h"
#include "core/rendering/RenderObject.h"
#include "core/rendering/RenderQuote.h"
#include "core/rendering/style/ContentData.h"
namespace WebCore {
const QualifiedName& pseudoElementTagName()
{
    DEFINE_STATIC_LOCAL(QualifiedName, name, (nullAtom, "<pseudo>", nullAtom));
    return name;
}
String PseudoElement::pseudoElementNameForEvents(PseudoId pseudoId)
{
    DEFINE_STATIC_LOCAL(const String, after, ("::after"));
    DEFINE_STATIC_LOCAL(const String, before, ("::before"));
    switch (pseudoId) {
    case AFTER:
        return after;
    case BEFORE:
        return before;
    default:
        return emptyString();
    }
}
PseudoElement::PseudoElement(Element* parent, PseudoId pseudoId)
    : Element(pseudoElementTagName(), &parent->document(), CreateElement)
    , m_pseudoId(pseudoId)
{
    ASSERT(pseudoId != NOPSEUDO);
    setParentOrShadowHostNode(parent);
    setHasCustomStyleCallbacks();
}
PassRefPtr<RenderStyle> PseudoElement::customStyleForRenderer()
{
    return parentOrShadowHostElement()->renderer()->getCachedPseudoStyle(m_pseudoId);
}
void PseudoElement::dispose()
{
    ASSERT(parentOrShadowHostElement());
    InspectorInstrumentation::pseudoElementDestroyed(this);
    ASSERT(!nextSibling());
    ASSERT(!previousSibling());
    detach();
    RefPtr<Element> parent = parentOrShadowHostElement();
    setParentOrShadowHostNode(0);
    removedFrom(parent.get());
}
void PseudoElement::attach(const AttachContext& context)
{
    ASSERT(!renderer());
    Element::attach(context);
    RenderObject* renderer = this->renderer();
    if (!renderer)
        return;
    RenderStyle* style = renderer->style();
    if (style->styleType() != BEFORE && style->styleType() != AFTER)
        return;
    ASSERT(style->contentData());
    for (const ContentData* content = style->contentData(); content; content = content->next()) {
        RenderObject* child = content->createRenderer(document(), style);
        if (renderer->isChildAllowed(child, style)) {
            renderer->addChild(child);
            if (child->isQuote())
                toRenderQuote(child)->attachQuote();
        } else
            child->destroy();
    }
}
bool PseudoElement::rendererIsNeeded(const RenderStyle& style)
{
    return pseudoElementRendererIsNeeded(&style);
}
void PseudoElement::didRecalcStyle(StyleRecalcChange)
{
    if (!renderer())
        return;
    
    
    RenderObject* renderer = this->renderer();
    for (RenderObject* child = renderer->nextInPreOrder(renderer); child; child = child->nextInPreOrder(renderer)) {
        
        if (!child->isText() && !child->isQuote() && !child->isImage())
            continue;
        
        if (child->style()->styleType() == FIRST_LETTER)
            continue;
        child->setPseudoStyle(renderer->style());
    }
}
}