static void write_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLWriter* w, bool skipRoot) { if (!skipRoot) { const char* elem = dom.getName(node); if (dom.getType(node) == SkDOM::kText_Type) { SkASSERT(dom.countChildren(node) == 0); w->addText(elem, strlen(elem)); return; } w->startElement(elem); SkDOM::AttrIter iter(dom, node); const char* name; const char* value; while ((name = iter.next(&value)) != nullptr) { w->addAttribute(name, value); } } node = dom.getFirstChild(node, nullptr); while (node) { write_dom(dom, node, w, false); node = dom.getNextSibling(node, nullptr); } if (!skipRoot) { w->endElement(); } }
static void write_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLWriter* w, bool skipRoot) { if (!skipRoot) { w->startElement(dom.getName(node)); SkDOM::AttrIter iter(dom, node); const char* name; const char* value; while ((name = iter.next(&value)) != NULL) w->addAttribute(name, value); } node = dom.getFirstChild(node, NULL); while (node) { write_dom(dom, node, w, false); node = dom.getNextSibling(node, NULL); } if (!skipRoot) w->endElement(); }
void SkXMLWriter::writeDOM(const SkDOM& dom, const SkDOM::Node* node, bool skipRoot) { if (node) write_dom(dom, node, this, skipRoot); }