]> git.lyx.org Git - features.git/commitdiff
Treat math style a bit more like other font features
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 22 Mar 2019 14:19:27 +0000 (15:19 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:19 +0000 (15:48 +0200)
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().

src/Font.cpp
src/FontEnums.h
src/FontInfo.cpp
src/FontInfo.h
src/MetricsInfo.cpp
src/mathed/MathClass.cpp

index a920220c6fa156f8c8311e697ede3b1406c4aaab..965a8309ef992da27e76503106e05f08add099df 100644 (file)
@@ -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()
index 43d614d22bbbbec29f6aa581f23a02523a1c0ba6..dadbb981db39b12846739e0cc03e282e664335e6 100644 (file)
@@ -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
 };
 
index 983499db68a41f3c13ddfeea98aa581e24772eb1..a813c9c111f19c3610dfd9515f0b734e410a5825 100644 (file)
@@ -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)
index 696e64db47b2ce69af842ee3b0c0019bdbc818da..3e0ac5d4a7a566d28f2c765124c0307d4f19c224 100644 (file)
@@ -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_
index 93782f94765882948b245d7959d7965796b44d00..0e90876f19fa898b872675ed0b6964d9354d74d3 100644 (file)
@@ -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();
index f000a3e114b6296bf1b8fdbe186f28efeb4557b5..a2aee06193da7b9f2ff7b83343f02aec04d3458f 100644 (file)
@@ -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: