void SVGTextLayoutAttributesBuilder::collectTextPositioningElements(RenderBoxModelObject& start, bool& lastCharacterWasSpace) { ASSERT(!is<RenderSVGText>(start) || m_textPositions.isEmpty()); for (RenderObject* child = start.firstChild(); child; child = child->nextSibling()) { if (is<RenderSVGInlineText>(*child)) { processRenderSVGInlineText(downcast<RenderSVGInlineText>(*child), m_textLength, lastCharacterWasSpace); continue; } if (!is<RenderSVGInline>(*child)) continue; RenderSVGInline& inlineChild = downcast<RenderSVGInline>(*child); SVGTextPositioningElement* element = SVGTextPositioningElement::elementFromRenderer(inlineChild); unsigned atPosition = m_textPositions.size(); if (element) m_textPositions.append(TextPosition(element, m_textLength)); collectTextPositioningElements(inlineChild, lastCharacterWasSpace); if (!element) continue; // Update text position, after we're back from recursion. TextPosition& position = m_textPositions[atPosition]; ASSERT(!position.length); position.length = m_textLength - position.start; } }