From 85a8664ba5f961ae54aafe6d2e7d5e3002808945 Mon Sep 17 00:00:00 2001 From: Thibaut Cuvelier Date: Thu, 5 Nov 2020 02:18:47 +0100 Subject: [PATCH] MathML: make InsetMathXArrow generate valid XML entities when required. Before this, it only supported HTML entities. --- src/mathed/InsetMathXArrow.cpp | 104 ++++++++++++++++++++++----------- 1 file changed, 71 insertions(+), 33 deletions(-) diff --git a/src/mathed/InsetMathXArrow.cpp b/src/mathed/InsetMathXArrow.cpp index 37445da1d8..cdf3fbf175 100644 --- a/src/mathed/InsetMathXArrow.cpp +++ b/src/mathed/InsetMathXArrow.cpp @@ -88,40 +88,78 @@ void InsetMathXArrow::mathmlize(MathStream & ms) const { char const * arrow; - if (name_ == "xleftarrow") - arrow = "←"; - else if (name_ == "xrightarrow") - arrow = "→"; - else if (name_ == "xhookleftarrow") - arrow = "↩"; - else if (name_ == "xhookrightarrow") - arrow = "↪"; - else if (name_ == "xLeftarrow") - arrow = "⇐"; - else if (name_ == "xRightarrow") - arrow = "⇒"; - else if (name_ == "xleftrightarrow") - arrow = "↔"; - else if (name_ == "xLeftrightarrow") - arrow = "⇔"; - else if (name_ == "xleftharpoondown") - arrow = "↽"; - else if (name_ == "xleftharpoonup") - arrow = "↼"; - else if (name_ == "xleftrightharpoons") - arrow = "⇋"; - else if (name_ == "xrightharpoondown") - arrow = "⇁"; - else if (name_ == "xrightharpoonup") - arrow = "⇀"; - else if (name_ == "xrightleftharpoons") - arrow = "⇌"; - else if (name_ == "xmapsto") - arrow = "↦"; - else { - lyxerr << "mathmlize conversion for '" << name_ << "' not implemented" << endl; - LASSERT(false, arrow = "→"); + if (!ms.xmlMode()) { // Use HTML entities. + if (name_ == "xleftarrow") + arrow = "←"; + else if (name_ == "xrightarrow") + arrow = "→"; + else if (name_ == "xhookleftarrow") + arrow = "↩"; + else if (name_ == "xhookrightarrow") + arrow = "↪"; + else if (name_ == "xLeftarrow") + arrow = "⇐"; + else if (name_ == "xRightarrow") + arrow = "⇒"; + else if (name_ == "xleftrightarrow") + arrow = "↔"; + else if (name_ == "xLeftrightarrow") + arrow = "⇔"; + else if (name_ == "xleftharpoondown") + arrow = "↽"; + else if (name_ == "xleftharpoonup") + arrow = "↼"; + else if (name_ == "xleftrightharpoons") + arrow = "⇋"; + else if (name_ == "xrightharpoondown") + arrow = "⇁"; + else if (name_ == "xrightharpoonup") + arrow = "⇀"; + else if (name_ == "xrightleftharpoons") + arrow = "⇌"; + else if (name_ == "xmapsto") + arrow = "↦"; + else { + lyxerr << "mathmlize conversion for '" << name_ << "' not implemented" << endl; + LASSERT(false, arrow = "→"); + } + } else { // Use XML entities. + if (name_ == "xleftarrow") + arrow = "←"; + else if (name_ == "xrightarrow") + arrow = "→"; + else if (name_ == "xhookleftarrow") + arrow = "↩"; + else if (name_ == "xhookrightarrow") + arrow = "↪"; + else if (name_ == "xLeftarrow") + arrow = "⇐"; + else if (name_ == "xRightarrow") + arrow = "⇒"; + else if (name_ == "xleftrightarrow") + arrow = "↔"; + else if (name_ == "xLeftrightarrow") + arrow = "⇔"; + else if (name_ == "xleftharpoondown") + arrow = "↽"; + else if (name_ == "xleftharpoonup") + arrow = "↼"; + else if (name_ == "xleftrightharpoons") + arrow = "⇋"; + else if (name_ == "xrightharpoondown") + arrow = "⇁"; + else if (name_ == "xrightharpoonup") + arrow = "⇀"; + else if (name_ == "xrightleftharpoons") + arrow = "⇌"; + else if (name_ == "xmapsto") + arrow = "↦"; + else { + lyxerr << "mathmlize XML conversion for '" << name_ << "' not implemented" << endl; + LASSERT(false, arrow = "→"); + } } + ms << "<" << from_ascii(ms.namespacedTag("munderover")) << " accent='false' accentunder='false'>" << arrow << cell(1) << cell(0) << ""; -- 2.39.5