]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc
ocaml 3.09 transition
[helm.git] / helm / DEVEL / mathml_editor / src / CMathMLFactoryXSLT.cc
index 07eb4b3540e19ff1d9ffca835b273aabc46746a3..8884520308d2b24edef48811edf5749a5a87b238 100644 (file)
@@ -39,6 +39,7 @@ CMathMLFactoryXSLT::CMathMLFactoryXSLT(ALogger& l, const DOMX::XSLTStylesheet& s
   result = di.createDocument(MATHML_NS_URI, "m:math", dt);
 }
 
+#if 1
 void
 CMathMLFactoryXSLT::documentModified(TDocument& doc)
 {
@@ -51,32 +52,70 @@ CMathMLFactoryXSLT::documentModified(TDocument& doc)
   assert(res);
   //style.save(doc.document(), stdout);
 
-  if (DOM::Element root = res.get_documentElement())
+  if (DOM::Element wrapper = res.get_documentElement())
+    {
+      if (DOM::Element root = wrapper.get_firstChild())
+       if (DOM::Element oldRoot = result.get_documentElement().get_firstChild())
          {
-      if (result.get_documentElement().hasAttribute("xref"))
-        {
-          bool ok = subst(result.get_documentElement(), root.getAttribute("xref"), result.importNode(root, true));
-          assert(ok);
-          doc.clearDirty();
-        }
-      else
-        result.replaceChild(result.importNode(root, true), result.get_documentElement());
+           bool ok = subst(oldRoot, root.getAttribute("xref"), result.importNode(root, true));
+           assert(ok);
+           doc.clearDirty();
          }
        else
-               {
-                       // Something wrong happened while applying the stylesheet.
-                       DOM::Element root = result.get_documentElement();
-                       DOM::Node p = root.get_firstChild();
-                       while (p) {
-                               DOM::Node next = p.get_nextSibling();
-                               root.removeChild(p);
-                               p = next;
-                       }
+         {
+           result.get_documentElement().appendChild(result.importNode(root, true));
+         }
+    }
+  else
+    {
+      // Something wrong happened while applying the stylesheet.
+      DOM::Element root = result.get_documentElement();
+      DOM::Node p = root.get_firstChild();
+      while (p) {
+       DOM::Node next = p.get_nextSibling();
+       root.removeChild(p);
+       p = next;
+      }
       logger.error("The stylesheet produced an empty document");
     }
 
   //style.save(result, stdout);
 }
+#else
+void
+CMathMLFactoryXSLT::documentModified(TDocument& doc)
+{
+  DOM::Document res = style.apply(doc.document());
+  assert(res);
+
+  if (DOM::Element root = res.get_documentElement())
+    {
+      DOM::Element newRoot = root.get_firstChild();
+      assert(newRoot);
+
+      if (DOM::Element oldSubRoot = result.get_documentElement().get_firstChild())
+        {
+         result.get_documentElement().replaceChild(result.importNode(newRoot, true), oldSubRoot);
+        }
+      else
+       {
+         result.get_documentElement().appendChild(result.importNode(newRoot, true));
+       }
+    }
+  else
+    {
+      // Something wrong happened while applying the stylesheet.
+      DOM::Element root = result.get_documentElement();
+      DOM::Node p = root.get_firstChild();
+      while (p) {
+       DOM::Node next = p.get_nextSibling();
+       root.removeChild(p);
+       p = next;
+      }
+      logger.error("The stylesheet produced an empty document");
+    }
+}
+#endif
 
 bool
 CMathMLFactoryXSLT::subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2)