X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FCMathMLFactoryXSLT.cc;h=8884520308d2b24edef48811edf5749a5a87b238;hb=97c2d258a5c524eb5c4b85208899d80751a2c82f;hp=07eb4b3540e19ff1d9ffca835b273aabc46746a3;hpb=8a3290cb88bc523597c9b34a0da3419a5f82cbed;p=helm.git diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc index 07eb4b354..888452030 100644 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc +++ b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc @@ -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)