MathML: let the user change the MathML version.

Discussed in https://www.lyx.org/trac/ticket/13058.
This commit is contained in:
Thibaut Cuvelier 2024-10-01 23:53:30 +02:00
parent df1ba8ee59
commit 7feffb89e9
15 changed files with 604 additions and 432 deletions

View File

@ -7,6 +7,11 @@ changes happened in particular if possible. A good example would be
-----------------------
2024-09-29 Thibaut Cuvelier <tcuvelier@lyx.org>
* Format incremented to 631: Add support for MathML versions, which
are stored separately for DocBook and XHTML (\docbook_mathml_version,
which is new, and \html_math_output, which receives a new value).
2024-08-25 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 630: Add support for a number of languages in
babel and polyglossia:

View File

@ -1015,6 +1015,48 @@ def revert_new_babel_languages(document):
if document.language == "hebrew" or find_token(document.body, "\\lang oldrussian", 0) != -1:
add_to_preamble(document, ["\\PassOptionsToPackage{provide*=*}{babel}"])
def convert_mathml_version(document):
"""Add MathML version header for DocBook to use MathML 3 preferably.
For cleanliness, add this header close to other DocBook headers if present.
Leave XHTML alone, as the default value is still probably what the user wants (MathML Core)."""
i = find_token(document.header, "\\docbook", 0)
if i == -1:
document.header += ["\\docbook_mathml_version 0"]
else:
document.header.insert(i + 1, "\\docbook_mathml_version 0")
def revert_mathml_version(document):
"""Remove MathML version header.
For XHTML, only remove the value 4 for \html_math_output (MathML 3) and replace it with 0
(MathML Core with format 631+, MathML for 630-).
For DocBook, totally remove the header (the default with 630- is MathML)."""
while True:
i = find_token(document.header, "\\html_math_output", 0)
if i == -1:
# nothing to do
break
# remove XHTML header if using the new value, leave alone otherwise.
if "4" in document.header:
document.header[i] = "\\html_math_output 0"
while True:
i = find_token(document.header, "\\docbook_mathml_version", 0)
if i == -1:
# nothing to do
return
# remove header
del document.header[i]
##
# Conversion hub
#
@ -1030,11 +1072,13 @@ convert = [
[627, [convert_nomencl, convert_index_sc]],
[628, []],
[629, []],
[630, []]
[630, []],
[631, [convert_mathml_version]]
]
revert = [
[630, [revert_mathml_version]],
[629, [revert_new_polyglossia_languages, revert_new_babel_languages]],
[628, [revert_langopts]],
[627, [revert_nomentbl]],

View File

@ -4472,8 +4472,11 @@ void Buffer::setMathFlavor(OutputParams & op) const
// In particular, this function has no impact on the DocBook code, as it
// uses another mechanism to handle math flavours.
switch (params().html_math_output) {
case BufferParams::MathML:
op.math_flavor = OutputParams::MathAsMathML;
case BufferParams::MathMLCore:
op.math_flavor = OutputParams::MathAsMathMLCore;
break;
case BufferParams::MathML3:
op.math_flavor = OutputParams::MathAsMathML3;
break;
case BufferParams::HTML:
op.math_flavor = OutputParams::MathAsHTML;

View File

@ -480,11 +480,12 @@ BufferParams::BufferParams()
// default index
indiceslist().addDefault(B_("Index"));
html_be_strict = false;
html_math_output = MathML;
html_math_output = MathMLCore;
html_math_img_scale = 1.0;
html_css_as_file = false;
docbook_table_output = HTMLTable;
docbook_mathml_prefix = MPrefix;
docbook_mathml_version = MathMLStream::mathml3;
display_pixel_ratio = 1.0;
shell_escape = false;
@ -1226,6 +1227,10 @@ string BufferParams::readToken(Lexer & lex, string const & token,
int temp;
lex >> temp;
docbook_mathml_prefix = static_cast<MathMLNameSpacePrefix>(temp);
} else if (token == "\\docbook_mathml_version") {
int temp;
lex >> temp;
docbook_mathml_version = static_cast<MathMLStream::MathMLVersion>(temp);
} else if (token == "\\output_sync") {
lex >> output_sync;
} else if (token == "\\output_sync_macro") {
@ -1621,6 +1626,7 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const
os << "\\docbook_table_output " << docbook_table_output << '\n';
os << "\\docbook_mathml_prefix " << docbook_mathml_prefix << '\n';
os << "\\docbook_mathml_version " << docbook_mathml_version << '\n';
if (html_math_img_scale != 1.0)
os << "\\html_math_img_scale " << convert<string>(html_math_img_scale) << '\n';

View File

@ -28,6 +28,8 @@
#include <map>
#include <vector>
#include "mathed/MathStream.h"
namespace lyx {
namespace support {
@ -587,7 +589,8 @@ public:
// do not change these values. we rely upon them.
enum MathOutput {
MathML = 0,
MathMLCore = 0,
MathML3 = 4,
HTML = 1,
Images = 2,
LaTeX = 3
@ -625,6 +628,9 @@ public:
/// what prefix to use when outputting MathML. present choices are above
MathMLNameSpacePrefix docbook_mathml_prefix;
/// what version of MathML to use for DocBook output (likely different from the version used for XHTML)
MathMLStream::MathMLVersion docbook_mathml_version;
/// allow the LaTeX backend to run external programs
bool shell_escape;
/// generate output usable for reverse/forward search

View File

@ -658,7 +658,7 @@ void putClipboard(ParagraphList const & paragraphs,
// We don't want to produce images that are not used. Therefore,
// output formulas as MathML. Even if this is not understood by all
// applications, the number that can parse it should go up in the future.
buffer->params().html_math_output = BufferParams::MathML;
buffer->params().html_math_output = BufferParams::MathMLCore;
// Copy authors to the params. We need those pointers.
for (Author const & a : bp.authors())

View File

@ -54,7 +54,8 @@ class OutputParams {
public:
enum MathFlavor {
NotApplicable,
MathAsMathML,
MathAsMathMLCore,
MathAsMathML3,
MathAsHTML,
MathAsImages,
MathAsLaTeX

View File

@ -952,6 +952,8 @@ GuiDocument::GuiDocument(GuiView & lv)
this, SLOT(change_adaptor()));
connect(outputModule->mathmlprefixCB, SIGNAL(currentIndexChanged(int)),
this, SLOT(change_adaptor()));
connect(outputModule->mathmlverCB, SIGNAL(currentIndexChanged(int)),
this, SLOT(change_adaptor()));
connect(outputModule->shellescapeCB, SIGNAL(stateChanged(int)),
this, SLOT(shellescapeChanged()));
@ -4076,6 +4078,12 @@ void GuiDocument::applyView()
auto const mp = static_cast<BufferParams::MathMLNameSpacePrefix>(mathmlprefix);
bp_.docbook_mathml_prefix = mp;
int mathmlversion = outputModule->mathmlverCB->currentIndex();
if (mathmlversion == -1)
mathmlversion = 0;
auto const mv = static_cast<MathMLStream::MathMLVersion>(mathmlversion);
bp_.docbook_mathml_version = mv;
bp_.save_transient_properties =
outputModule->saveTransientPropertiesCB->isChecked();
bp_.postpone_fragile_content =

View File

@ -6,17 +6,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>702</width>
<height>501</height>
<width>579</width>
<height>465</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="savingGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -47,7 +45,7 @@
</layout>
</widget>
</item>
<item>
<item row="1" column="0">
<widget class="QGroupBox" name="outputFormatGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -117,7 +115,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -132,7 +130,7 @@
</layout>
</widget>
</item>
<item>
<item row="2" column="0">
<widget class="QGroupBox" name="outputOptionsGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -143,7 +141,438 @@
<property name="title">
<string>Output Options</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>&amp;LaTeX</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QCheckBox" name="postponeFragileCB">
<property name="toolTip">
<string>If this is checked, fragile items such as labels and index entries are moved out of moving arguments such as sections and captions. This prevents LaTeX errors that can happen in such cases. It is recommended to keep this on.</string>
</property>
<property name="text">
<string>Put fra&amp;gile content out of moving arguments</string>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="outputsyncCB">
<property name="toolTip">
<string>Enable forward/reverse search between editor and output (e.g., SyncTeX)</string>
</property>
<property name="text">
<string>S&amp;ynchronize with output</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="synccustomLA">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>C&amp;ustom macro:</string>
</property>
<property name="buddy">
<cstring>synccustomCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="synccustomCB">
<property name="toolTip">
<string>Custom LaTeX preamble macro</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>&amp;XHTML</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="mathoutLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;Math output:</string>
</property>
<property name="buddy">
<cstring>mathmlverCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mathoutCB">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Format to use for math output.</string>
</property>
<item>
<property name="text">
<string>MathML Core (default)</string>
</property>
</item>
<item>
<property name="text">
<string>MathML 3</string>
</property>
</item>
<item>
<property name="text">
<string>HTML</string>
</property>
</item>
<item>
<property name="text">
<string>Images</string>
</property>
</item>
<item>
<property name="text">
<string>LaTeX</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QCheckBox" name="strictCB">
<property name="toolTip">
<string>Whether to comply strictly with XHTML 1.1.</string>
</property>
<property name="text">
<string>&amp;Strict XHTML 1.1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cssCB">
<property name="text">
<string>Write CSS to file</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>&amp;DocBook</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="tableoutLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;Table output:</string>
</property>
<property name="buddy">
<cstring>mathmlverCB</cstring>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QComboBox" name="tableoutCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Format to use for math output.</string>
</property>
<item>
<property name="text">
<string>HTML</string>
</property>
</item>
<item>
<property name="text">
<string>CALS</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>320</width>
<height>38</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="mathmlverLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>MathML &amp;version:</string>
</property>
<property name="buddy">
<cstring>mathmlverCB</cstring>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QComboBox" name="mathmlverCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Format to use for math output.</string>
</property>
<item>
<property name="text">
<string>MathML 3 (default)</string>
</property>
</item>
<item>
<property name="text">
<string>MathML Core</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0" colspan="3">
<widget class="QLabel" name="mathmlprefixLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;MathML namespace prefix:</string>
</property>
<property name="buddy">
<cstring>mathmlprefixCB</cstring>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QComboBox" name="mathmlprefixCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Namespace prefix to use for MathML formulae. For instance, with the &lt;code&gt;m&lt;/code&gt; prefix, the MathML tags will be output like &lt;code&gt;m:math&lt;/code&gt;.</string>
</property>
<item>
<property name="text">
<string>No prefix (namespace defined inline for each tag)</string>
</property>
</item>
<item>
<property name="text">
<string>m (default)</string>
</property>
</item>
<item>
<property name="text">
<string>mml</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@ -191,211 +620,7 @@
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>&amp;LaTeX</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QCheckBox" name="postponeFragileCB">
<property name="toolTip">
<string>If this is checked, fragile items such as labels and index entries are moved out of moving arguments such as sections and captions. This prevents LaTeX errors that can happen in such cases. It is recommended to keep this on.</string>
</property>
<property name="text">
<string>Put fra&amp;gile content out of moving arguments</string>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="outputsyncCB">
<property name="toolTip">
<string>Enable forward/reverse search between editor and output (e.g., SyncTeX)</string>
</property>
<property name="text">
<string>S&amp;ynchronize with output</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="synccustomLA">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>C&amp;ustom macro:</string>
</property>
<property name="buddy">
<cstring>synccustomCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="synccustomCB">
<property name="toolTip">
<string>Custom LaTeX preamble macro</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>&amp;XHTML</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QCheckBox" name="strictCB">
<property name="toolTip">
<string>Whether to comply strictly with XHTML 1.1.</string>
</property>
<property name="text">
<string>&amp;Strict XHTML 1.1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cssCB">
<property name="text">
<string>Write CSS to file</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="mathoutLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;Math output:</string>
</property>
<property name="buddy">
<cstring>tableoutCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mathoutCB">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Format to use for math output.</string>
</property>
<item>
<property name="text">
<string>MathML</string>
</property>
</item>
<item>
<property name="text">
<string>HTML</string>
</property>
</item>
<item>
<property name="text">
<string>Images</string>
</property>
</item>
<item>
<property name="text">
<string>LaTeX</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -409,144 +634,8 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>&amp;DocBook</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="tableoutLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;Table output:</string>
</property>
<property name="buddy">
<cstring>tableoutCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="tableoutCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Format to use for math output.</string>
</property>
<item>
<property name="text">
<string>HTML</string>
</property>
</item>
<item>
<property name="text">
<string>CALS</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>178</width>
<height>38</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="mathmlprefixLA">
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>&amp;MathML namespace prefix:</string>
</property>
<property name="buddy">
<cstring>mathmlprefixCB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mathmlprefixCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<bold>false</bold>
</font>
</property>
<property name="toolTip">
<string>Namespace prefix to use for MathML formulae. For instance, with the &lt;code&gt;m&lt;/code&gt; prefix, the MathML tags will be output like &lt;code&gt;m:math&lt;/code&gt;.</string>
</property>
<item>
<property name="text">
<string>No prefix (namespace defined inline for each tag)</string>
</property>
</item>
<item>
<property name="text">
<string>m (default)</string>
</property>
</item>
<item>
<property name="text">
<string>mml</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>148</width>
<height>28</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<item row="3" column="0">
<widget class="QCheckBox" name="shellescapeCB">
<property name="toolTip">
<string>Runs the LaTeX backend with the -shell-escape option (Warning: use only when really necessary)</string>
@ -556,15 +645,13 @@
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<item row="4" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Expanding</enum>
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>

View File

@ -119,7 +119,8 @@ void InsetMathBox::validate(LaTeXFeatures & features) const
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
if (features.runparams().math_flavor == OutputParams::MathAsMathML)
if (features.runparams().math_flavor == OutputParams::MathAsMathMLCore ||
features.runparams().math_flavor == OutputParams::MathAsMathML3)
features.addCSSSnippet("mtext.mathbox { font-style: normal; }");
else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
features.addCSSSnippet("span.mathbox { font-style: normal; }");
@ -204,7 +205,8 @@ void InsetMathFBox::validate(LaTeXFeatures & features) const
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
if (features.runparams().math_flavor == OutputParams::MathAsMathML)
if (features.runparams().math_flavor == OutputParams::MathAsMathMLCore ||
features.runparams().math_flavor == OutputParams::MathAsMathML3)
features.addCSSSnippet(
"mtext.fbox { border: 1px solid black; font-style: normal; padding: 0.5ex; }");
else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
@ -343,7 +345,8 @@ void InsetMathMakebox::validate(LaTeXFeatures & features) const
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
if (features.runparams().math_flavor == OutputParams::MathAsMathML)
if (features.runparams().math_flavor == OutputParams::MathAsMathMLCore ||
features.runparams().math_flavor == OutputParams::MathAsMathML3)
features.addCSSSnippet("mtext.framebox { border: 1px solid black; }");
else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
features.addCSSSnippet("span.framebox { border: 1px solid black; }");
@ -423,7 +426,8 @@ void InsetMathBoxed::validate(LaTeXFeatures & features) const
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
if (features.runparams().math_flavor == OutputParams::MathAsMathML)
if (features.runparams().math_flavor == OutputParams::MathAsMathMLCore ||
features.runparams().math_flavor == OutputParams::MathAsMathML3)
features.addCSSSnippet("mtext.boxed { border: 1px solid black; }");
else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
features.addCSSSnippet("span.boxed { border: 1px solid black; }");

View File

@ -98,7 +98,8 @@ void InsetMathEnsureMath::validate(LaTeXFeatures & features) const
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
if (features.runparams().math_flavor == OutputParams::MathAsMathML)
if (features.runparams().math_flavor == OutputParams::MathAsMathMLCore ||
features.runparams().math_flavor == OutputParams::MathAsMathML3)
features.addCSSSnippet("mstyle.math { font-style: italic; }");
else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
features.addCSSSnippet("span.mathbox { font-style: italic; }");

View File

@ -2655,9 +2655,13 @@ docstring InsetMathHull::xhtml(XMLStream & xs, OutputParams const & op) const
}
// FIXME Eventually we would like to do this inset by inset.
if (mathtype == BufferParams::MathML) {
if (mathtype == BufferParams::MathML3 || mathtype == BufferParams::MathMLCore) {
MathMLStream::MathMLVersion mathml_version = MathMLStream::mathmlCore;
if (mathtype == BufferParams::MathML3)
mathml_version = MathMLStream::mathml3;
odocstringstream os;
MathMLStream ms(os, "", MathMLStream::mathmlCore);
MathMLStream ms(os, "", mathml_version);
try {
mathmlize(ms);
success = true;

View File

@ -552,7 +552,7 @@ Preamble::Preamble() : one_language(true), explicit_babel(false),
// h_font_roman_opts;
// h_font_sans_opts;
// h_font_typewriter_opts;
//h_font_cjk
// h_font_cjk
h_is_mathindent = "0";
h_math_numbering_side = "default";
h_graphics = "default";
@ -562,6 +562,7 @@ Preamble::Preamble() : one_language(true), explicit_babel(false),
h_html_math_output = "0";
h_docbook_table_output = "0";
h_docbook_mathml_prefix = "1";
h_docbook_mathml_version = "0";
h_index[0] = "Index";
h_index_command = "default";
h_inputencoding = "auto-legacy";
@ -2168,6 +2169,7 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc, string const & outfiled
<< "\\html_be_strict " << h_html_be_strict << "\n"
<< "\\docbook_table_output " << h_docbook_table_output << "\n"
<< "\\docbook_mathml_prefix " << h_docbook_mathml_prefix << "\n"
<< "\\docbook_mathml_version " << h_docbook_mathml_version << "\n"
<< authors_
<< "\\end_header\n\n"
<< "\\begin_body\n";

View File

@ -199,6 +199,7 @@ private:
std::string h_html_math_output;
std::string h_docbook_table_output;
std::string h_docbook_mathml_prefix;
std::string h_docbook_mathml_version;
std::string h_index[99];
std::string h_index_command;
std::string h_inputencoding;

View File

@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
#define LYX_FORMAT_LYX 630 // spitz: language updates
#define LYX_FORMAT_TEX2LYX 630
#define LYX_FORMAT_LYX 631 // tcuvelier: add MathML version
#define LYX_FORMAT_TEX2LYX 631
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER