From: Jean-Marc Lasgouttes Date: Fri, 22 Mar 2019 14:19:27 +0000 (+0100) Subject: Treat math style a bit more like other font features X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=77fc530a20ae584c4063847ff8e3e6b1752e563b;p=features.git Treat math style a bit more like other font features While math style (scriptstyle,...) is not really something that can be set, it is useful for text subscripts and superscripts and therefore it makes sense to handle it in some places. With this change, style is still not a first class feature, but good enough for now. In particular, it is taken into account in update(). --- diff --git a/src/Font.cpp b/src/Font.cpp index a920220c6f..965a8309ef 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -154,6 +154,7 @@ docstring const stateText(FontInfo const & f, bool const terse) os << _(GUIShapeNames[f.shape()]) << ", "; if (f.size() != FONT_SIZE_INHERIT && (!terse || f.size() != FONT_SIZE_IGNORE)) os << _(GUISizeNames[f.size()]) << ", "; + // FIXME: shall style be handled there? Probably not. if (f.color() != Color_inherit && (!terse || f.color() != Color_ignore)) os << lcolor.getGUIName(f.color()) << ", "; // FIXME: uncomment this when we support background. @@ -225,6 +226,7 @@ void Font::lyxWriteChanges(Font const & orgfont, os << "\\shape " << LyXShapeNames[bits_.shape()] << "\n"; if (orgfont.fontInfo().size() != bits_.size()) os << "\\size " << LyXSizeNames[bits_.size()] << "\n"; + // FIXME: shall style be handled there? Probably not. if (orgfont.fontInfo().emph() != bits_.emph()) os << "\\emph " << LyXMiscNames[bits_.emph()] << "\n"; if (orgfont.fontInfo().number() != bits_.number()) @@ -662,7 +664,7 @@ bool Font::fromString(string const & data, bool & toggle) } else if (token == "size") { int const next = lex.getInteger(); bits_.setSize(FontSize(next)); - + // FIXME: shall style be handled there? Probably not. } else if (token == "emph" || token == "underbar" || token == "noun" || token == "number" || token == "uuline" || token == "uwave" @@ -808,6 +810,7 @@ ostream & operator<<(ostream & os, FontInfo const & f) << " series " << f.series() << " shape " << f.shape() << " size " << f.size() + << " style " << f.style() << " color " << f.color() // FIXME: uncomment this when we support background. //<< " background " << f.background() diff --git a/src/FontEnums.h b/src/FontEnums.h index 43d614d22b..dadbb981db 100644 --- a/src/FontEnums.h +++ b/src/FontEnums.h @@ -154,6 +154,10 @@ enum MathStyle { /// LM_ST_DISPLAY, /// + LM_ST_INHERIT, + /// + LM_ST_IGNORE, + /// the text and display fonts are the same NUM_STYLE = LM_ST_DISPLAY }; diff --git a/src/FontInfo.cpp b/src/FontInfo.cpp index 983499db68..a813c9c111 100644 --- a/src/FontInfo.cpp +++ b/src/FontInfo.cpp @@ -62,6 +62,7 @@ FontInfo const sane_font( MEDIUM_SERIES, UP_SHAPE, FONT_SIZE_NORMAL, + LM_ST_TEXT, Color_none, Color_background, FONT_OFF, @@ -79,6 +80,7 @@ FontInfo const inherit_font( INHERIT_SERIES, INHERIT_SHAPE, FONT_SIZE_INHERIT, + LM_ST_INHERIT, Color_inherit, Color_inherit, FONT_INHERIT, @@ -96,6 +98,7 @@ FontInfo const ignore_font( IGNORE_SERIES, IGNORE_SHAPE, FONT_SIZE_IGNORE, + LM_ST_IGNORE, Color_ignore, Color_ignore, FONT_IGNORE, @@ -187,6 +190,8 @@ double FontInfo::realSize() const switch (style()) { case LM_ST_DISPLAY: case LM_ST_TEXT: + case LM_ST_INHERIT: + case LM_ST_IGNORE: break; case LM_ST_SCRIPT: d *= .73; @@ -211,6 +216,8 @@ void FontInfo::reduce(FontInfo const & tmplt) shape_ = INHERIT_SHAPE; if (size_ == tmplt.size_) size_ = FONT_SIZE_INHERIT; + if (style_ == tmplt.style_) + style_ = LM_ST_INHERIT; if (emph_ == tmplt.emph_) emph_ = FONT_INHERIT; if (underbar_ == tmplt.underbar_) @@ -254,6 +261,9 @@ FontInfo & FontInfo::realize(FontInfo const & tmplt) if (size_ == FONT_SIZE_INHERIT) size_ = tmplt.size_; + if (style_ == LM_ST_INHERIT) + style_ = tmplt.style_; + if (emph_ == FONT_INHERIT) emph_ = tmplt.emph_; @@ -375,6 +385,10 @@ void FontInfo::update(FontInfo const & newfont, bool toggleall) size_ = newfont.size_; } + if (newfont.style_ != LM_ST_IGNORE) { + style_ = newfont.style_; + } + setEmph(setMisc(newfont.emph_, emph_)); setUnderbar(setMisc(newfont.underbar_, underbar_)); setStrikeout(setMisc(newfont.strikeout_, strikeout_)); @@ -401,6 +415,7 @@ bool FontInfo::resolved() const { return (family_ != INHERIT_FAMILY && series_ != INHERIT_SERIES && shape_ != INHERIT_SHAPE && size_ != FONT_SIZE_INHERIT + && style_ != LM_ST_INHERIT && emph_ != FONT_INHERIT && underbar_ != FONT_INHERIT && uuline_ != FONT_INHERIT && uwave_ != FONT_INHERIT && strikeout_ != FONT_INHERIT && xout_ != FONT_INHERIT @@ -736,6 +751,7 @@ void lyxWrite(ostream & os, FontInfo const & f, string const & start, int level) if (f.size() != FONT_SIZE_INHERIT) oss << indent << "\tSize " << LyXSizeNames[f.size()] << '\n'; + //FIXME: shall style be handled here? Probably not. if (f.underbar() == FONT_ON) oss << indent << "\tMisc Underbar\n"; else if (f.underbar() == FONT_OFF) diff --git a/src/FontInfo.h b/src/FontInfo.h index 696e64db47..3e0ac5d4a7 100644 --- a/src/FontInfo.h +++ b/src/FontInfo.h @@ -39,6 +39,7 @@ public: FontSeries series, FontShape shape, FontSize size, + MathStyle style, ColorCode color, ColorCode background, FontState emph, @@ -51,7 +52,7 @@ public: FontState number, FontState nospellcheck) : family_(family), series_(series), shape_(shape), size_(size), - style_(LM_ST_TEXT), color_(color), background_(background), emph_(emph), + style_(style), color_(color), background_(background), emph_(emph), underbar_(underbar), strikeout_(strikeout), xout_(xout), uuline_(uuline), uwave_(uwave), noun_(noun), number_(number), nospellcheck_(nospellcheck) {} @@ -206,6 +207,7 @@ inline bool operator==(FontInfo const & lhs, FontInfo const & rhs) && lhs.series_ == rhs.series_ && lhs.shape_ == rhs.shape_ && lhs.size_ == rhs.size_ + && lhs.style_ == rhs.style_ && lhs.color_ == rhs.color_ && lhs.background_ == rhs.background_ && lhs.emph_ == rhs.emph_ diff --git a/src/MetricsInfo.cpp b/src/MetricsInfo.cpp index 93782f9476..0e90876f19 100644 --- a/src/MetricsInfo.cpp +++ b/src/MetricsInfo.cpp @@ -188,6 +188,9 @@ Changer MetricsBase::changeScript() case LM_ST_SCRIPT: case LM_ST_SCRIPTSCRIPT: return font.changeStyle(LM_ST_SCRIPTSCRIPT); + case LM_ST_INHERIT: + case LM_ST_IGNORE: + return Changer(); } //remove Warning return Changer(); @@ -204,6 +207,9 @@ Changer MetricsBase::changeFrac() case LM_ST_SCRIPT: case LM_ST_SCRIPTSCRIPT: return font.changeStyle(LM_ST_SCRIPTSCRIPT); + case LM_ST_INHERIT: + case LM_ST_IGNORE: + return Changer(); } //remove Warning return Changer(); diff --git a/src/mathed/MathClass.cpp b/src/mathed/MathClass.cpp index f000a3e114..a2aee06193 100644 --- a/src/mathed/MathClass.cpp +++ b/src/mathed/MathClass.cpp @@ -149,6 +149,8 @@ int class_spacing(MathClass const mc1, MathClass const mc2, switch (mb.font.style()) { case LM_ST_DISPLAY: case LM_ST_TEXT: + case LM_ST_IGNORE: + case LM_ST_INHERIT: spc_code = abs(spc_code); break; case LM_ST_SCRIPT: