[LyX/master] Amend [5ed01cd6/lyxgit]

Enrico Forestieri forenr at lyx.org
Sat Feb 6 19:16:00 UTC 2021


commit 3cf5a7146359e00203344c5fb72551fdfb4b11e9
Author: Enrico Forestieri <forenr at lyx.org>
Date:   Sat Feb 6 20:07:31 2021 +0100

    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 5d522bb..c06291e 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 6f4da39..e14e850 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 153e7df..c2dadf2 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;


More information about the lyx-cvs mailing list