Compare commits

...

6 Commits

Author SHA1 Message Date
Thibaut Cuvelier
75f467fa13 MathML: use Core for XHTML, 3 for DocBook.
In a near future, this should rather be controlled by a user-visible parameter.
2024-09-28 16:50:29 +02:00
Thibaut Cuvelier
790c153737 Use proper minus sign character in MathML Core.
Fixes bug https://www.lyx.org/trac/ticket/13067.

Based on the patch in the ticket above by Jean-Marc Lasgouttes.
2024-09-28 16:50:29 +02:00
Thibaut Cuvelier
ca5d5a0b1a amend 2024-09-28 16:50:29 +02:00
Thibaut Cuvelier
a06528ee2a Fix switch indentation. 2024-09-28 16:50:29 +02:00
Thibaut Cuvelier
cb88a362ea MathML: add a version enum. 2024-09-28 16:50:29 +02:00
Juergen Spitzmueller
135889c634 Amend 770362da97
preview needs proper --lily-output-dir
2024-09-28 13:11:46 +02:00
5 changed files with 36 additions and 15 deletions

View File

@ -425,6 +425,10 @@ def main(argv):
if pdf_output:
lilypond_book += " --pdf"
lilypond_book += " --latex-program=%s" % latex.split()[0]
if pdf_output:
lilypond_book += " --lily-output-dir=ly-pdf"
else:
lilypond_book += " --lily-output-dir=ly-eps"
# Make a copy of the latex file
lytex_file = latex_file_re.sub(".lytex", latex_file)

View File

@ -239,6 +239,12 @@ void InsetMathChar::mathmlize(MathMLStream & ms) const
case '<': entity = "&lt;"; break;
case '>': entity = "&gt;"; break;
case '&': entity = "&amp;"; break;
case '-':
if (ms.version() == MathMLStream::mathmlCore) {
// U+2212 MINUS SIGN
entity = "&#x2212;";
}
break;
case ' ': {
ms << from_ascii("&#0160;");
return;

View File

@ -2417,7 +2417,7 @@ void InsetMathHull::docbook(XMLStream & xs, OutputParams const & runparams) cons
}
odocstringstream osmath;
MathMLStream ms(osmath, mathmlNamespacePrefix);
MathMLStream ms(osmath, mathmlNamespacePrefix, MathMLStream::mathml3);
// Output the MathML subtree.
// TeX transcription. Avoid MTag/ETag so that there are no extraneous spaces.
@ -2440,7 +2440,7 @@ void InsetMathHull::docbook(XMLStream & xs, OutputParams const & runparams) cons
// First, generate the MathML expression. If there is an error in the generation, this block is not fully
// executed, and the formula is not output to the DocBook stream.
odocstringstream ostmp;
MathMLStream mstmp(ostmp, ms.xmlns());
MathMLStream mstmp(ostmp, ms.xmlns(), ms.version());
mathmlize(mstmp);
// Choose the display style for the formula, to be output as an attribute near the formula root.
@ -2651,7 +2651,7 @@ docstring InsetMathHull::xhtml(XMLStream & xs, OutputParams const & op) const
// FIXME Eventually we would like to do this inset by inset.
if (mathtype == BufferParams::MathML) {
odocstringstream os;
MathMLStream ms(os);
MathMLStream ms(os, "", MathMLStream::mathmlCore);
try {
mathmlize(ms);
success = true;

View File

@ -288,8 +288,8 @@ TeXMathStream & operator<<(TeXMathStream & ws, unsigned int i)
//////////////////////////////////////////////////////////////////////
MathMLStream::MathMLStream(odocstream & os, std::string const & xmlns)
: os_(os), xmlns_(xmlns)
MathMLStream::MathMLStream(odocstream & os, std::string const & xmlns, MathMLVersion version)
: os_(os), xmlns_(xmlns), version_(version)
{
if (inText())
font_math_style_ = TEXT_STYLE;

View File

@ -376,8 +376,15 @@ class MathExportException : public std::exception {};
class MathMLStream {
public:
/// Builds a stream proxy for os; the MathML namespace is given by xmlns (supposed to be already defined elsewhere in the document).
explicit MathMLStream(odocstream & os, std::string const & xmlns = "");
///
enum MathMLVersion {
mathml3,
mathmlCore
};
/// Builds a stream proxy for os; the MathML namespace is given by xmlns
/// (supposed to be already defined elsewhere in the document).
explicit MathMLStream(odocstream & os, std::string const & xmlns = "", MathMLVersion version = mathml3);
///
void cr();
/// Indentation when nesting tags
@ -392,6 +399,8 @@ public:
bool inText() const { return text_level_ != nlevel; }
///
std::string xmlns() const { return xmlns_; }
///
MathMLVersion version() const { return version_; }
/// Returns the tag name prefixed by the name space if needed.
std::string namespacedTag(std::string const & tag) const {
return (xmlns().empty() ? "" : xmlns() + ":") + tag;
@ -403,7 +412,7 @@ public:
private:
/// Check whether it makes sense to start a <mtext>
void beforeText();
///Check whether there is a <mtext> to close here
/// Check whether there is a <mtext> to close here
void beforeTag();
///
odocstream & os_;
@ -420,6 +429,8 @@ private:
odocstringstream deferred_;
///
std::string xmlns_;
///
MathMLVersion version_;
/// The only important part of a FontInfo object.
MathStyle font_math_style_;
///