From 3cf5a7146359e00203344c5fb72551fdfb4b11e9 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Sat, 6 Feb 2021 20:07:31 +0100 Subject: [PATCH] Amend [5ed01cd6/lyxgit] This commit takes into account also the case in which a prime follows a superscript, a case not explicitly mentioned in bug 1633. This case has to be accounted for in a different way. We cannot look ahead when exporting, so we simply tell TeXMathStream to output an empty group if we just output a superscript and a prime comes next. --- src/mathed/InsetMathScript.cpp | 9 +++++++-- src/mathed/MathStream.cpp | 8 ++++++++ src/mathed/MathStream.h | 5 ++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/mathed/InsetMathScript.cpp b/src/mathed/InsetMathScript.cpp index 5d522bb9d3..c06291e31d 100644 --- a/src/mathed/InsetMathScript.cpp +++ b/src/mathed/InsetMathScript.cpp @@ -511,7 +511,7 @@ void InsetMathScript::write(TeXMathStream & os) const if (!nuc().empty()) { os << nuc(); - // Avoid double superscript errors (bug #1633) + // Avoid double superscript errors (bug 1633) if (os.latex() && hasUp() && nuc().back()->getChar() == '\'') os << "{}"; } else if (os.firstitem()) @@ -529,8 +529,13 @@ void InsetMathScript::write(TeXMathStream & os) const (up().size() == 1 && up().back()->asBraceInset() && up().back()->asBraceInset()->cell(0).empty()))) os << "^ {}"; - else + else { os << "^{" << up() << '}'; + // Avoid double superscript errors by writing an + // empty group {} when a prime immediately follows + if (os.latex()) + os.useBraces(true); + } } if (lock_ && !os.latex()) diff --git a/src/mathed/MathStream.cpp b/src/mathed/MathStream.cpp index 6f4da39bf7..e14e850e18 100644 --- a/src/mathed/MathStream.cpp +++ b/src/mathed/MathStream.cpp @@ -111,6 +111,10 @@ TeXMathStream & operator<<(TeXMathStream & ws, docstring const & s) else if (s[first] == ' ' && ws.textMode()) ws.os() << '\\'; ws.pendingSpace(false); + } else if (ws.useBraces()) { + if (s[first] == '\'') + ws.os() << "{}"; + ws.useBraces(false); } ws.os() << s.substr(first); int lf = 0; @@ -241,6 +245,10 @@ TeXMathStream & operator<<(TeXMathStream & ws, char c) else if (c == ' ' && ws.textMode()) ws.os() << '\\'; ws.pendingSpace(false); + } else if (ws.useBraces()) { + if (c == '\'') + ws.os() << "{}"; + ws.useBraces(false); } ws.os() << c; if (c == '\n') diff --git a/src/mathed/MathStream.h b/src/mathed/MathStream.h index 153e7df3c5..c2dadf243a 100644 --- a/src/mathed/MathStream.h +++ b/src/mathed/MathStream.h @@ -84,8 +84,10 @@ public: /// writes space if next thing is isalpha() bool pendingSpace() const { return pendingspace_; } /// write braces if a space is pending and next char is [ + /// or when a prime immediately follows a superscript void useBraces(bool braces); /// write braces if a space is pending and next char is [ + /// or when a prime immediately follows a superscript bool useBraces() const { return usebraces_; } /// tell whether to write the closing brace of \ensuremath void pendingBrace(bool brace); @@ -128,7 +130,8 @@ private: OutputType output_ = wsDefault; /// do we have a space pending? bool pendingspace_ = false; - /// do we have to write braces when a space is pending and [ follows? + /// do we have to write braces when a space is pending and [ follows, + /// or when a prime immediately follows a superscript? bool usebraces_ = false; /// do we have a brace pending? bool pendingbrace_ = false; -- 2.39.5