X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTDocument.cc;h=cbf163c7afc185b024d89098bd6c9a28b682dfaf;hb=1957a1f151c547f04625c4379e51ab66bddb69c7;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..cbf163c7a 100644 --- a/helm/DEVEL/mathml_editor/src/TDocument.cc +++ b/helm/DEVEL/mathml_editor/src/TDocument.cc @@ -27,6 +27,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 +43,19 @@ TDocument::serialize(const char* filename) const di.saveDocumentToFile(doc, filename, GDOME_SAVE_LIBXML_INDENT); } +std::string +TDocument::makeId(unsigned id) +{ + 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 +98,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 +142,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 +181,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 }