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.
This commit is contained in:
Enrico Forestieri 2021-03-01 10:38:02 +01:00
parent 51ec16b6c7
commit 9a831200a4
4 changed files with 18 additions and 2 deletions

View File

@ -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());

View File

@ -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);

View File

@ -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_;
};

View File

@ -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