commit 98d1b04160c938ddca4b73809fc72c7bcb762635
Author: Thibaut Cuvelier <[email protected]>
Date:   Thu Jul 27 01:21:46 2023 -0400

    Before this patch, each character within InsetMathClass was output 
separately, without understanding their meaning, using the default text output 
(with [] around each character). This commit changes the behaviour to skip the 
InsetMathClass during the MathML output. This effectively renders the inset 
useless for MathML (instead of controlling spacing), as expected, because the 
MathML processor is supposed to handle the spacing itself.
    
    Another implementation would have been to use the lspace and rspace 
attributes in MathML, but they require to give the exact spacing before and 
after the operator instead of relying on rules like TeX.
    
    For instance, `$a\mathbin{+}b$` resulted in this MathML output before the 
patch:
    
    ```
    <math xmlns='http://www.w3.org/1998/Math/MathML'>
    <mrow>
     <mi>a</mi><!--  -->
     <mi>[mathbin [char + mathalpha]]</mi>
     <mi>b</mi>
    </mrow>
    </math>
    ```
    
    For comparison, this was the output with LyX 2.3.7
    
    ```
    <math xmlns="http://www.w3.org/1998/Math/MathML";>
     <mrow>
      <mrow><mi>a</mi><!--  -->
       <mi>[mathbin [char + mathalpha]]
       </mi><mi>b</mi>
      </mrow>
     </mrow></math>
     ```
    
     After this patch, it looks like:
    
     ```
     <math xmlns='http://www.w3.org/1998/Math/MathML'>
     <mstyle class='math'>
      <mrow>
       <mi>a</mi>
       <mo>+</mo>
       <mi>b</mi>
      </mrow>
     </mstyle>
     </math>
     ```
---
 src/mathed/InsetMathClass.cpp |   11 +++++++++++
 src/mathed/InsetMathClass.h   |    2 ++
 src/mathed/MathClass.h        |    2 +-
 3 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/src/mathed/InsetMathClass.cpp b/src/mathed/InsetMathClass.cpp
index 0c22d47..2bfea82 100644
--- a/src/mathed/InsetMathClass.cpp
+++ b/src/mathed/InsetMathClass.cpp
@@ -11,6 +11,7 @@
 #include <config.h>
 
 #include "InsetMathClass.h"
+#include "MathStream.h"
 
 #include "support/docstream.h"
 
@@ -56,6 +57,16 @@ void InsetMathClass::write(TeXMathStream & os) const
 }
 
 
+void InsetMathClass::mathmlize(MathMLStream & ms) const
+{
+       // Skip the \mathXXX macro, the MathML processor is supposed to handle
+       // spacing down the line.
+       for (size_t i = 0; i < nargs(); ++i) {
+               ms << cell(i);
+       }
+}
+
+
 docstring InsetMathClass::name() const
 {
        return class_to_string(math_class_);
diff --git a/src/mathed/InsetMathClass.h b/src/mathed/InsetMathClass.h
index 89189f2..f4308be 100644
--- a/src/mathed/InsetMathClass.h
+++ b/src/mathed/InsetMathClass.h
@@ -43,6 +43,8 @@ public:
        ///
        void write(TeXMathStream & os) const override;
        ///
+       void mathmlize(MathMLStream & ms) const override;
+       ///
        void infoize(odocstream & os) const override;
        ///
        InsetCode lyxCode() const override { return MATH_CLASS_CODE; }
diff --git a/src/mathed/MathClass.h b/src/mathed/MathClass.h
index 169bfdb..af4f884 100644
--- a/src/mathed/MathClass.h
+++ b/src/mathed/MathClass.h
@@ -40,7 +40,7 @@ class MetricsBase;
  * + Vcent: a vbox to be centered, produced by \vcenter.
  *
  * Over, Under, Acc, Rad and Vcent are not considered in the enum
- * below. The relvant elements will be considered as Ord.
+ * below. The relevant elements will be considered as Ord.
  */
 enum MathClass {
        MC_ORD,
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to