X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fgtkmathview-bonobo%2Fsrc%2Faux.cc;h=6fe151bc1035141ae88bb739e80da7e3ff4f93e6;hb=e03554e83a734994353488594810b5c32bfc46af;hp=4eaef1074172dfd23cb406520e49f448a6a61dfb;hpb=4d6c4a7262efde3ffa94e3d62307b517b6d83924;p=helm.git diff --git a/helm/gtkmathview-bonobo/src/aux.cc b/helm/gtkmathview-bonobo/src/aux.cc index 4eaef1074..6fe151bc1 100644 --- a/helm/gtkmathview-bonobo/src/aux.cc +++ b/helm/gtkmathview-bonobo/src/aux.cc @@ -21,7 +21,8 @@ // #include -#include + +#include #include @@ -30,10 +31,28 @@ #include +#include "aux.h" + #define MATHML_NS_URI "http://www.w3.org/1998/Math/MathML" namespace DOM = GdomeSmartDOM; +static DOM::Element +findElementById(const DOM::Element& el, + const DOM::GdomeString& ns, const DOM::GdomeString& name, + const DOM::GdomeString& id) +{ + assert(el); + if (el.getAttributeNS(ns, name) == id) + return el; + else + for (DOM::Node p = el.get_firstChild(); p; p = p.get_nextSibling()) + if (p.get_nodeType() == DOM::Node::ELEMENT_NODE) + if (DOM::Element res = findElementById(p, ns, name, id)) + return res; + return DOM::Element(); +} + static unsigned getDepth(const DOM::Element& elem) { @@ -260,20 +279,17 @@ find_xref_element(GdomeElement* elem) extern "C" GdomeDOMString* find_hyperlink(GdomeElement* elem) { - DOM::Element el = findElementWithAttribute(DOM::Element(elem),"href"); - if (el) return el.getAttribute("href").gdome_str(); - else return NULL; + DOM::Element el = findElementWithAttribute(DOM::Element(elem),"href"); + if (el) return el.getAttribute("href").gdome_str(); + else return NULL; } - -extern "C" void -delete_element(GdomeElement* elem) +extern "C" GdomeElement* +find_element_by_id(GdomeElement* root, GdomeDOMString* ns_uri, GdomeDOMString* name, + const char* id) { - DOM::Element p(elem); - - DOM::Element parent = p.get_parentNode(); - assert(parent); - - parent.removeChild(p); + DOM::Element el = findElementById(DOM::Element(root), + DOM::GdomeString(ns_uri), DOM::GdomeString(name), + DOM::GdomeString(id)); + return gdome_cast_el(el.gdome_object()); } -