X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTDocument.cc;h=ca4878e6c75b385b31a2418b9062255556b6a4c5;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=a7b5c8d3a5d2cb57fcd5adc11f79eb6e61ad91ab;hpb=7bea7bddf7ca13260f4d3965182dc4fb58d035e7;p=helm.git diff --git a/helm/DEVEL/mathml_editor/src/TDocument.cc b/helm/DEVEL/mathml_editor/src/TDocument.cc index a7b5c8d3a..ca4878e6c 100644 --- a/helm/DEVEL/mathml_editor/src/TDocument.cc +++ b/helm/DEVEL/mathml_editor/src/TDocument.cc @@ -1,5 +1,30 @@ +/* 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 #include "globals.hh" #include "dom.hh" @@ -27,6 +52,15 @@ TDocument::~TDocument() et.removeEventListener("DOMSubtreeModified", *this, false); } +void +TDocument::reset() +{ + DOM::Element root = doc.createElementNS(TML_NS_URI, "tml:tex"); + root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI); + doc.replaceChild(root, doc.get_documentElement()); + clearDirty(); +} + void TDocument::serialize(const char* filename) const { @@ -34,16 +68,19 @@ TDocument::serialize(const char* filename) const di.saveDocumentToFile(doc, filename, GDOME_SAVE_LIBXML_INDENT); } +std::string +TDocument::makeId(unsigned id) +{ + std::ostringstream os; + os << "I" << id; + return os.str(); +} + TNode TDocument::create(const std::string& name, unsigned id) const { DOM::Element elem = doc.createElementNS(TML_NS_URI, "tml:" + name); - if (id > 0) - { - ostringstream os; - os << "I" << id; - elem.setAttribute("id", os.str()); - } + if (id > 0) elem.setAttribute("id", makeId(id)); return elem; } @@ -86,7 +123,7 @@ TDocument::findCommonAncestor(const DOM::Node& node1, const DOM::Node& node2) unsigned d1 = nodeDepth(n1); unsigned d2 = nodeDepth(n2); - cout << "finding common ancestor " << d1 << " " << d2 << endl; + // cout << "finding common ancestor " << d1 << " " << d2 << endl; while (d1 < d2) { @@ -130,16 +167,36 @@ TDocument::findIdNode(const DOM::Node& node) return DOM::Node(0); } +TNode +TDocument::getNodeByIdAux(const TNode& node, const std::string& id) +{ + if (node.hasId(id)) return node; + else + for (TNode p = node.first(); p; p = p.next()) + if (TNode res = getNodeByIdAux(p, id)) return res; + return TNode(); +} + +TNode +TDocument::getNodeById(unsigned id) const +{ + DOM::Element root = doc.get_documentElement(); + assert(root); + return getNodeByIdAux(root, makeId(id)); +} + void TDocument::handleEvent(const DOM::Event& ev) { DOM::MutationEvent me(ev); assert(me); +#if 0 if (dirty) cout << "TDocument::handleEvent DIRTY BEFORE = " << dirty.getAttribute("id") << endl; else cout << "TDocument::handleEvent DIRTY BEFORE = (nil)" << endl; +#endif if (DOM::Node node = me.get_target()) if (dirty) @@ -149,7 +206,8 @@ TDocument::handleEvent(const DOM::Event& ev) else assert(0); +#if 0 cout << "TDocument::handleEvent target = " << DOM::Node(me.get_target()).get_nodeName() << " DIRTY AFTER = " << dirty.getAttribute("id") << " ME = " << DOM::Node(me.get_target()).get_nodeName() << endl; - +#endif }