void ContentDistributor::distributeNodeChildrenTo(InsertionPoint* insertionPoint, ContainerNode* containerNode) { ContentDistribution distribution; for (Node* node = containerNode->firstChild(); node; node = node->nextSibling()) { if (isActiveInsertionPoint(node)) { InsertionPoint* innerInsertionPoint = toInsertionPoint(node); if (innerInsertionPoint->hasDistribution()) { for (size_t i = 0; i < innerInsertionPoint->size(); ++i) { distribution.append(innerInsertionPoint->at(i)); if (!m_nodeToInsertionPoint.contains(innerInsertionPoint->at(i))) m_nodeToInsertionPoint.add(innerInsertionPoint->at(i), insertionPoint); } } else { for (Node* child = innerInsertionPoint->firstChild(); child; child = child->nextSibling()) { distribution.append(child); m_nodeToInsertionPoint.add(child, insertionPoint); } } } else { distribution.append(node); if (!m_nodeToInsertionPoint.contains(node)) m_nodeToInsertionPoint.add(node, insertionPoint); } } insertionPoint->setDistribution(distribution); }
void ContentDistributor::populate(Node* node, ContentDistribution& pool) { if (!isActiveInsertionPoint(node)) { pool.append(node); return; } InsertionPoint* insertionPoint = toInsertionPoint(node); if (insertionPoint->hasDistribution()) { for (size_t i = 0; i < insertionPoint->size(); ++i) populate(insertionPoint->at(i), pool); } else { for (Node* fallbackNode = insertionPoint->firstChild(); fallbackNode; fallbackNode = fallbackNode->nextSibling()) pool.append(fallbackNode); } }