[LyX/2.3.x] Fix bug #11007

Enrico Forestieri forenr at lyx.org
Mon Mar 1 09:34:24 UTC 2021


commit 9a831200a485f16c63baf3ffa96826494e333162
Author: Enrico Forestieri <forenr at lyx.org>
Date:   Mon Mar 1 10:38:02 2021 +0100

    Fix bug #11007
    
    The math color inset inherits the mode of the containing inset.
    This mode is inferred by the kind of font in effect. Setting the
    right mode allows to insert spaces where these should be allowed.
    Another small glitch was that the selection was always parsed in
    math mode, so that any space was swallowed, even if the inset would
    allow them.
---
 src/Cursor.cpp                |    5 ++++-
 src/mathed/InsetMathColor.cpp |    9 ++++++++-
 src/mathed/InsetMathColor.h   |    4 ++++
 status.23x                    |    2 ++
 4 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/Cursor.cpp b/src/Cursor.cpp
index 0963da6..bdfba61 100644
--- a/src/Cursor.cpp
+++ b/src/Cursor.cpp
@@ -1556,8 +1556,11 @@ docstring Cursor::macroName()
 void Cursor::handleNest(MathAtom const & a, int c)
 {
 	//lyxerr << "Cursor::handleNest: " << c << endl;
+	InsetMath const * im = selectionBegin().inset().asInsetMath();
+	Parse::flags const f = im && im->currentMode() != InsetMath::MATH_MODE
+		? Parse::TEXTMODE : Parse::NORMAL;
 	MathAtom t = a;
-	asArray(cap::grabAndEraseSelection(*this), t.nucleus()->cell(c));
+	asArray(cap::grabAndEraseSelection(*this), t.nucleus()->cell(c), f);
 	insert(t);
 	posBackward();
 	pushBackward(*nextInset());
diff --git a/src/mathed/InsetMathColor.cpp b/src/mathed/InsetMathColor.cpp
index d665734..f80895b 100644
--- a/src/mathed/InsetMathColor.cpp
+++ b/src/mathed/InsetMathColor.cpp
@@ -36,7 +36,8 @@ InsetMathColor::InsetMathColor(Buffer * buf, bool oldstyle, ColorCode color)
 
 InsetMathColor::InsetMathColor(Buffer * buf, bool oldstyle,
 		docstring const & color)
-	: InsetMathNest(buf, 1), oldstyle_(oldstyle), color_(color)
+	: InsetMathNest(buf, 1), oldstyle_(oldstyle), color_(color),
+	  current_mode_(UNDECIDED_MODE)
 {}
 
 
@@ -48,12 +49,18 @@ Inset * InsetMathColor::clone() const
 
 void InsetMathColor::metrics(MetricsInfo & mi, Dimension & dim) const
 {
+	current_mode_ = isTextFont(mi.base.fontname) ? TEXT_MODE : MATH_MODE;
+	Changer dummy = mi.base.changeEnsureMath(current_mode_);
+
 	cell(0).metrics(mi, dim);
 }
 
 
 void InsetMathColor::draw(PainterInfo & pi, int x, int y) const
 {
+	current_mode_ = isTextFont(pi.base.fontname) ? TEXT_MODE : MATH_MODE;
+	Changer dummy = pi.base.changeEnsureMath(current_mode_);
+
 	ColorCode origcol = pi.base.font.color();
 	pi.base.font.setColor(lcolor.getFromLaTeXName(to_utf8(color_)));
 	cell(0).draw(pi, x, y);
diff --git a/src/mathed/InsetMathColor.h b/src/mathed/InsetMathColor.h
index 08495b3..d3098d9 100644
--- a/src/mathed/InsetMathColor.h
+++ b/src/mathed/InsetMathColor.h
@@ -34,6 +34,8 @@ public:
 	void draw(PainterInfo & pi, int x, int y) const;
 	/// we need package color
 	void validate(LaTeXFeatures & features) const;
+	/// we inherit the mode
+	mode_type currentMode() const override { return current_mode_; }
 	///
 	void write(WriteStream & os) const;
 	/// FIXME XHTML For now, we do nothing with color.
@@ -53,6 +55,8 @@ private:
 	bool oldstyle_;
 	/// Our color. Only valid LaTeX colors are allowed.
 	docstring color_;
+	/// the inherited mode
+	mutable mode_type current_mode_;
 };
 
 
diff --git a/status.23x b/status.23x
index 82253ef..0120c49 100644
--- a/status.23x
+++ b/status.23x
@@ -90,6 +90,8 @@ What's new
 
 - On screen, show upper case greek letters in \mathbf as bold (bug 3751).
 
+- Fix coloring of text-mode material in math equations (bug 11007).
+
 
 * INTERNALS
 


More information about the lyx-cvs mailing list