]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/src/TDocument.cc
debian release 0.0.4-1
[helm.git] / helm / DEVEL / mathml_editor / src / TDocument.cc
index 4c3bbbaea6bfca6d3b2b1fa1c2e94b49fce9f527..cbf163c7afc185b024d89098bd6c9a28b682dfaf 100644 (file)
@@ -11,8 +11,8 @@ TDocument::TDocument()
   DOM::DocumentType dt;
   doc = di.createDocument(TML_NS_URI, "tml:tex", dt);
   DOM::Element root = doc.get_documentElement();
-  root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI);
   assert(root);
+  root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI);
 
   DOM::EventTarget et(doc);
   assert(et);
@@ -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
 }