String RenderCounter::originalText() const { if (!m_counterNode) { RenderElement* beforeAfterContainer = parent(); while (true) { if (!beforeAfterContainer) return String(); if (!beforeAfterContainer->isAnonymous() && !beforeAfterContainer->isPseudoElement()) return String(); // RenderCounters are restricted to before and after pseudo elements PseudoId containerStyle = beforeAfterContainer->style()->styleType(); if ((containerStyle == BEFORE) || (containerStyle == AFTER)) break; beforeAfterContainer = beforeAfterContainer->parent(); } makeCounterNode(beforeAfterContainer, m_counter.identifier(), true)->addRenderer(const_cast<RenderCounter*>(this)); ASSERT(m_counterNode); } CounterNode* child = m_counterNode; int value = child->actsAsReset() ? child->value() : child->countInParent(); String text = listMarkerText(m_counter.listStyle(), value); if (!m_counter.separator().isNull()) { if (!child->actsAsReset()) child = child->parent(); while (CounterNode* parent = child->parent()) { text = listMarkerText(m_counter.listStyle(), child->countInParent()) + m_counter.separator() + text; child = parent; } } return text; }
std::unique_ptr<RenderStyle> RenderNamedFlowFragment::computeStyleInRegion(RenderElement& renderer, const RenderStyle& parentStyle) const { ASSERT(!renderer.isAnonymous()); // FIXME: Region styling fails for pseudo-elements because the renderers don't have a node. auto renderObjectRegionStyle = renderer.element()->styleResolver().styleForElement(*renderer.element(), &parentStyle, MatchAllRules, this).renderStyle; return renderObjectRegionStyle; }
PassRefPtr<RenderStyle> RenderNamedFlowFragment::computeStyleInRegion(RenderElement& renderer, RenderStyle& parentStyle) { ASSERT(!renderer.isAnonymous()); // FIXME: Region styling fails for pseudo-elements because the renderers don't have a node. RefPtr<RenderStyle> renderObjectRegionStyle = renderer.view().document().ensureStyleResolver().styleForElement(renderer.element(), &parentStyle, DisallowStyleSharing, MatchAllRules, this); return renderObjectRegionStyle.release(); }
void RenderNamedFlowThread::addFlowChild(RenderElement& newChild) { // The child list is used to sort the flow thread's children render objects // based on their corresponding nodes DOM order. The list is needed to avoid searching the whole DOM. if (newChild.isAnonymous()) return; auto* beforeChild = nextRendererForElement(*newChild.element()); if (beforeChild) m_flowThreadChildList.insertBefore(beforeChild, &newChild); else m_flowThreadChildList.add(&newChild); }