std::string NodeTraits::get_type_string(Inkscape::XML::Node const &node) { std::string name; switch (node.type()) { case Inkscape::XML::TEXT_NODE: name = "string"; break; case Inkscape::XML::ELEMENT_NODE: { char const *const sptype = node.attribute("sodipodi:type"); if (sptype) { name = sptype; } else { name = node.name(); } break; } default: name = ""; break; } return name; }
void SPTextPath::build(SPDocument *doc, Inkscape::XML::Node *repr) { this->readAttr( "x" ); this->readAttr( "y" ); this->readAttr( "dx" ); this->readAttr( "dy" ); this->readAttr( "rotate" ); this->readAttr( "startOffset" ); this->readAttr( "xlink:href" ); bool no_content = true; for (Inkscape::XML::Node* rch = repr->firstChild() ; rch != NULL; rch = rch->next()) { if ( rch->type() == Inkscape::XML::TEXT_NODE ) { no_content = false; break; } } if ( no_content ) { Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::XML::Node* rch = xml_doc->createTextNode(""); repr->addChild(rch, NULL); } SPItem::build(doc, repr); }
static void sp_textpath_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr) { //SPTextPath *textpath = SP_TEXTPATH(object); sp_object_read_attr(object, "x"); sp_object_read_attr(object, "y"); sp_object_read_attr(object, "dx"); sp_object_read_attr(object, "dy"); sp_object_read_attr(object, "rotate"); sp_object_read_attr(object, "startOffset"); sp_object_read_attr(object, "xlink:href"); bool no_content=true; for (Inkscape::XML::Node* rch = repr->firstChild() ; rch != NULL; rch = rch->next()) { if ( rch->type() == Inkscape::XML::TEXT_NODE ) {no_content=false;break;} } if ( no_content ) { Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); Inkscape::XML::Node* rch = xml_doc->createTextNode(""); repr->addChild(rch, NULL); } if (((SPObjectClass *) textpath_parent_class)->build) ((SPObjectClass *) textpath_parent_class)->build(object, doc, repr); }
Inkscape::XML::Node * LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b) { using Inkscape::Algorithms::longest_common_suffix; Inkscape::XML::Node *ancestor = longest_common_suffix<Inkscape::XML::NodeParentIterator>( a, b, NULL, &same_repr ); if ( ancestor && ancestor->type() != Inkscape::XML::DOCUMENT_NODE ) { return ancestor; } else { return NULL; } }