]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/test/aux.cc
* this is a large commit
[helm.git] / helm / DEVEL / mathml_editor / test / aux.cc
index 61f9e5d795e32372c9fa0016c600faa6acf97d08..4b4404af4e41370e26c8a5cff9e525a440ef18fc 100644 (file)
@@ -124,6 +124,14 @@ findCommonSiblings(const DOM::Element& first, const DOM::Element& last,
   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)
 {
@@ -188,17 +196,14 @@ rightSibling(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
@@ -214,6 +219,32 @@ find_common_siblings(GdomeElement* first, GdomeElement* last,
   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)
 {