// <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)
{
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());
}
-