]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gtkmathview-bonobo/src/aux.cc
* advanced implementation of View interface
[helm.git] / helm / gtkmathview-bonobo / src / aux.cc
index 4eaef1074172dfd23cb406520e49f448a6a61dfb..6fe151bc1035141ae88bb739e80da7e3ff4f93e6 100644 (file)
@@ -21,7 +21,8 @@
 // <luca.padovani@cs.unibo.it>
 
 #include <config.h>
-#include <assert.h>
+
+#include <cassert>
 
 #include <sstream>
 
 
 #include <GdomeSmartDOM.hh>
 
+#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());
 }
-