lastS = q;
}
+static DOM::Element
+findElementWithRef(const DOM::Element& el)
+{
+ DOM::Element p = el;
+ while (p && !p.hasAttribute("xref")) p = p.get_parentNode();
+ return p;
+}
+
static DOM::Node
leftmostChild(const DOM::Node& node)
{
extern "C" GdomeElement*
find_common_ancestor(GdomeElement* first, GdomeElement* last)
{
- DOM::Element p(first);
- DOM::Element q(last);
- if (GdomeElement* res = gdome_cast_el(findCommonAncestor(p, q).gdome_object()))
+ if (GdomeNode* n = findCommonAncestor(DOM::Element(first), DOM::Element(last)).gdome_object())
{
- GdomeException exc = 0;
- gdome_el_ref(res, &exc);
- assert(exc == 0);
+ GdomeElement* res = gdome_cast_el(n);
+ g_assert(res != NULL);
return res;
}
else
- return 0;
+ return NULL;
}
extern "C" void
if (lastS != NULL) *lastS = gdome_cast_el(ls.gdome_object());
}
+extern "C" GdomeElement*
+find_element_with_ref(GdomeElement* elem)
+{
+ if (GdomeNode* n = findElementWithRef(DOM::Element(elem)).gdome_object())
+ {
+ GdomeElement* res = gdome_cast_el(n);
+ g_assert(res != NULL);
+ return res;
+ }
+ else
+ return NULL;
+}
+
+extern "C" GdomeElement*
+find_common_ancestor_with_ref(GdomeElement* first, GdomeElement* last)
+{
+ if (GdomeNode* n = findElementWithRef(findCommonAncestor(DOM::Element(first), DOM::Element(last))).gdome_object())
+ {
+ GdomeElement* res = gdome_cast_el(n);
+ g_assert(res != NULL);
+ return res;
+ }
+ else
+ return NULL;
+}
+
extern "C" void
delete_element(GdomeElement* elem)
{