From: Luca Padovani Date: Sat, 21 Feb 2004 09:58:05 +0000 (+0000) Subject: * updated the updating method so that the root element is not changed X-Git-Tag: v0_0_4~119 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=999ac09ca61c59fafcaa5b866bf89a56d193c6ac;p=helm.git * updated the updating method so that the root element is not changed (removes the listeners in the new editor) --- 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)