MathML: make InsetMathHull::mathmlize easier to read while doing less work

If `havetable == true`, a lot of the code didn't make any sense: in particular, it was outputting a level of <m:mrow> too many.

Also, add some comments and rewrite the comment about mlabeledtr.

Contributed by lynx: https://www.lyx.org/trac/ticket/12629
This commit is contained in:
Thibaut Cuvelier 2023-01-22 01:49:03 +01:00
parent e7d57338b9
commit d066a66a51

View File

@ -2532,33 +2532,37 @@ void InsetMathHull::mathmlize(MathMLStream & ms) const
{
bool const havetable = haveNumbers() || nrows() > 1 || ncols() > 1;
if (havetable) {
if (getType() == hullSimple) {
ms << MTag("mtable");
} else if (getType() >= hullAlign && getType() <= hullXXAlignAt) {
string alignment;
for (col_type col = 0; col < ncols(); ++col) {
alignment += (col % 2) ? "left " : "right ";
}
ms << MTag("mtable", "displaystyle='true' columnalign='" + alignment + "'");
} else {
ms << MTag("mtable", "displaystyle='true'");
// Simplest case: single row, single column, no numbering.
if (!havetable) {
ms << cell(index(0, 0));
return;
}
// More complex case: wrap elements in a table.
if (getType() == hullSimple) {
ms << MTag("mtable");
} else if (getType() >= hullAlign && getType() <= hullXXAlignAt) {
// hullAlign, hullAlignAt, hullXAlignAt, hullXXAlignAt
string alignment;
for (col_type col = 0; col < ncols(); ++col) {
alignment += (col % 2) ? "left " : "right ";
}
ms << MTag("mtable", "displaystyle='true' columnalign='" + alignment + "'");
} else {
ms << MTag("mtable", "displaystyle='true'");
}
char const * const celltag = havetable ? "mtd" : "mrow";
// FIXME There does not seem to be wide support at the moment
// for mlabeledtr, so we have to use just mtr for now.
// char const * const rowtag = haveNumbers() ? "mlabeledtr" : "mtr";
char const * const rowtag = "mtr";
for (row_type row = 0; row < nrows(); ++row) {
if (havetable)
ms << MTag(rowtag);
// No Wed browser supports mlabeledtr in 2023, even though it has been introduced in
// MathML 2 (2003). Moreover, it is not supported in MathML 4 Core.
ms << MTag("mtr");
for (col_type col = 0; col < ncols(); ++col) {
ms << MTag(celltag)
ms << MTag("mtd")
<< cell(index(row, col))
<< ETag(celltag);
<< ETag("mtd");
}
// fleqn?
if (haveNumbers()) {
ms << MTag("mtd");
@ -2567,11 +2571,11 @@ void InsetMathHull::mathmlize(MathMLStream & ms) const
ms << MTagInline("mtext") << '(' << num << ')' << ETagInline("mtext");
ms << ETag("mtd");
}
if (havetable)
ms << ETag(rowtag);
ms << ETag("mtr");
}
if (havetable)
ms << ETag("mtable");
ms << ETag("mtable");
}