X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FCMathMLFactoryXSLT.cc;h=8884520308d2b24edef48811edf5749a5a87b238;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=e5cac369f890060c31ef8ac4dcfab6cff30f3282;hpb=5a369548a2f04fb59b5cbb94526325aae9bf415a;p=helm.git diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc index e5cac369f..888452030 100644 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc +++ b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc @@ -29,6 +29,7 @@ #include "TDocument.hh" #include "CMathMLFactoryXSLT.hh" #include "AMathMLConsumer.hh" +#include CMathMLFactoryXSLT::CMathMLFactoryXSLT(ALogger& l, const DOMX::XSLTStylesheet& s) : AMathMLFactory(l), style(s) @@ -38,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) { @@ -48,34 +50,72 @@ CMathMLFactoryXSLT::documentModified(TDocument& doc) DOM::GdomeString("'" + std::string(dirty["id"]) + "'"))); DOM::Document res = style.apply(doc.document(), dirtyId); assert(res); - style.save(doc.document(), stdout); + //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); + //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)