X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Ftest%2Faux.cc;h=bb17013fbd78af452af349ae6e4310743d02afc0;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=61f9e5d795e32372c9fa0016c600faa6acf97d08;hpb=89262281b6e83bd2321150f81f1a0583645eb0c8;p=helm.git diff --git a/helm/DEVEL/mathml_editor/test/aux.cc b/helm/DEVEL/mathml_editor/test/aux.cc index 61f9e5d79..bb17013fb 100644 --- a/helm/DEVEL/mathml_editor/test/aux.cc +++ b/helm/DEVEL/mathml_editor/test/aux.cc @@ -1,24 +1,27 @@ -// Copyright (C) 2000-2002, Luca Padovani . -// -// This file is part of GtkMathView, a Gtk widget for MathML. -// -// GtkMathView is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// GtkMathView is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with GtkMathView; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -// For details, see the GtkMathView World-Wide-Web page, -// http://www.cs.unibo.it/helm/mml-widget, or send a mail to -// +/* This file is part of EdiTeX, an editor of mathematical + * expressions based on TeX syntax. + * + * Copyright (C) 2002-2003 Luca Padovani , + * 2003 Paolo Marinelli . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * For more information, please visit the project's home page + * http://helm.cs.unibo.it/editex/ + * or send an email to + */ #include #include @@ -124,6 +127,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 +199,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 +222,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) {