From 314e30d5fdd243fca204effb20acdd6b8b8469b1 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Sun, 25 Sep 2016 01:11:16 +0200 Subject: [PATCH] Correctly classify macros Some macros defined in the lib/symbols file are classified are texmode. But the MathMacro class was missing a currentMode method for returning this information. --- src/mathed/MathMacro.cpp | 15 ++++++++++++--- src/mathed/MathMacro.h | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mathed/MathMacro.cpp b/src/mathed/MathMacro.cpp index e1484e81b1..d1a8b50c7b 100644 --- a/src/mathed/MathMacro.cpp +++ b/src/mathed/MathMacro.cpp @@ -614,9 +614,7 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const drawMarkers2(pi, expx, expy); } else { bool drawBox = lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_INLINE_BOX; - bool user_macro = !MacroTable::globalMacros().get(name()); - bool upshape = user_macro ? false : d->macro_ && d->macro_->symbol() - && d->macro_->symbol()->extra == "textmode"; + bool upshape = currentMode() == TEXT_MODE; Changer dummy = pi.base.font.changeShape(upshape ? UP_SHAPE : pi.base.font.shape()); @@ -753,6 +751,17 @@ size_t MathMacro::appetite() const } +InsetMath::mode_type MathMacro::currentMode() const +{ + // User defined macros are always assumed to be mathmode macros. + // Only the global macros defined in lib/symbols may be textmode. + + MacroData const * data = MacroTable::globalMacros().get(name()); + bool textmode = data && data->symbol() && data->symbol()->extra == "textmode"; + return textmode ? TEXT_MODE : MATH_MODE; +} + + void MathMacro::validate(LaTeXFeatures & features) const { // Immediately after a document is loaded, in some cases the MacroData diff --git a/src/mathed/MathMacro.h b/src/mathed/MathMacro.h index b389e272e4..1a8654ac40 100644 --- a/src/mathed/MathMacro.h +++ b/src/mathed/MathMacro.h @@ -70,6 +70,8 @@ public: /// void validate(LaTeXFeatures &) const; + /// + mode_type currentMode() const; /// void write(WriteStream & os) const;