X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFontInfo.cpp;h=d7b3a4f377d3b9f0e59a16b5c03efe17216bbe6f;hb=1e519d1115f41f71c253cb9e2fbb7803e9a583a9;hp=b6e7d6726efbd8fd90c3d31333d8c918efc405a6;hpb=75bfed55079cab6b73fbea6ce4ae3f10d1af3b91;p=lyx.git diff --git a/src/FontInfo.cpp b/src/FontInfo.cpp index b6e7d6726e..d7b3a4f377 100644 --- a/src/FontInfo.cpp +++ b/src/FontInfo.cpp @@ -22,6 +22,7 @@ #include "support/convert.h" #include "support/debug.h" #include "support/docstring.h" +#include "support/gettext.h" #include "support/lstrings.h" #include "support/RefChanger.h" @@ -34,6 +35,31 @@ using namespace lyx::support; namespace lyx { +// +// Names for the GUI +// + +char const * GUIFamilyNames[NUM_FAMILIES + 2 /* default & error */] = +{ N_("Roman"), N_("Sans Serif"), N_("Typewriter"), N_("Symbol"), + "cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "rsfs", "stmry", + "wasy", "esint", N_("Inherit"), N_("Ignore") }; + +char const * GUISeriesNames[NUM_SERIES + 2 /* default & error */] = +{ N_("Medium"), N_("Bold"), N_("Inherit"), N_("Ignore") }; + +char const * GUIShapeNames[NUM_SHAPE + 2 /* default & error */] = +{ N_("Upright"), N_("Italic"), N_("Slanted"), N_("Smallcaps"), N_("Inherit"), + N_("Ignore") }; + +char const * GUISizeNames[NUM_SIZE + 4 /* increase, decrease, default & error */] = +{ N_("Tiny"), N_("Smallest"), N_("Smaller"), N_("Small"), N_("Normal"), N_("Large"), + N_("Larger"), N_("Largest"), N_("Huge"), N_("Huger"), N_("Increase"), N_("Decrease"), + N_("Inherit"), N_("Ignore") }; + +char const * GUIMiscNames[5] = +{ N_("Off"), N_("On"), N_("Toggle"), N_("Inherit"), N_("Ignore") }; + + // // Strings used to read and write .lyx format files // @@ -62,6 +88,7 @@ FontInfo const sane_font( MEDIUM_SERIES, UP_SHAPE, FONT_SIZE_NORMAL, + LM_ST_TEXT, Color_none, Color_background, FONT_OFF, @@ -71,6 +98,7 @@ FontInfo const sane_font( FONT_OFF, FONT_OFF, FONT_OFF, + FONT_OFF, FONT_OFF); FontInfo const inherit_font( @@ -78,6 +106,7 @@ FontInfo const inherit_font( INHERIT_SERIES, INHERIT_SHAPE, FONT_SIZE_INHERIT, + LM_ST_INHERIT, Color_inherit, Color_inherit, FONT_INHERIT, @@ -87,13 +116,15 @@ FontInfo const inherit_font( FONT_INHERIT, FONT_INHERIT, FONT_INHERIT, - FONT_OFF); + FONT_OFF, + FONT_INHERIT); FontInfo const ignore_font( IGNORE_FAMILY, IGNORE_SERIES, IGNORE_SHAPE, FONT_SIZE_IGNORE, + LM_ST_IGNORE, Color_ignore, Color_ignore, FONT_IGNORE, @@ -103,6 +134,7 @@ FontInfo const ignore_font( FONT_IGNORE, FONT_IGNORE, FONT_IGNORE, + FONT_IGNORE, FONT_IGNORE); @@ -184,6 +216,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; @@ -208,6 +242,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_) @@ -226,6 +262,8 @@ void FontInfo::reduce(FontInfo const & tmplt) color_ = Color_inherit; if (background_ == tmplt.background_) background_ = Color_inherit; + if (nospellcheck_ == tmplt.nospellcheck_) + nospellcheck_ = FONT_INHERIT; } @@ -249,6 +287,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_; @@ -276,6 +317,9 @@ FontInfo & FontInfo::realize(FontInfo const & tmplt) if (background_ == Color_inherit) background_ = tmplt.background_; + if (nospellcheck_ == FONT_INHERIT) + nospellcheck_ = tmplt.nospellcheck_; + return *this; } @@ -367,6 +411,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_)); @@ -375,6 +423,7 @@ void FontInfo::update(FontInfo const & newfont, bool toggleall) setUwave(setMisc(newfont.uwave_, uwave_)); setNoun(setMisc(newfont.noun_, noun_)); setNumber(setMisc(newfont.number_, number_)); + setNoSpellcheck(setMisc(newfont.nospellcheck_, nospellcheck_)); if (newfont.color_ == color_ && toggleall) setColor(Color_inherit); // toggle 'back' @@ -392,11 +441,12 @@ 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 && noun_ != FONT_INHERIT && color_ != Color_inherit - && background_ != Color_inherit); + && background_ != Color_inherit && nospellcheck_ != FONT_INHERIT); } @@ -524,7 +574,7 @@ string getSizeCSS(FontSize const & s) return ""; } -} // namespace anonymous +} // namespace // FIXME This does not yet handle color @@ -545,6 +595,51 @@ docstring FontInfo::asCSS() const } +docstring const FontInfo::stateText(bool const terse) const +{ + odocstringstream os; + if (family() != INHERIT_FAMILY && (!terse || family() != IGNORE_FAMILY)) + os << _(GUIFamilyNames[family()]) << ", "; + if (series() != INHERIT_SERIES && (!terse || series() != IGNORE_SERIES)) + os << _(GUISeriesNames[series()]) << ", "; + if (shape() != INHERIT_SHAPE && (!terse || shape() != IGNORE_SHAPE)) + os << _(GUIShapeNames[shape()]) << ", "; + if (size() != FONT_SIZE_INHERIT && (!terse || size() != FONT_SIZE_IGNORE)) + os << _(GUISizeNames[size()]) << ", "; + // FIXME: shall style be handled there? Probably not. + if (color() != Color_inherit && (!terse || color() != Color_ignore)) + os << lcolor.getGUIName(color()) << ", "; + // FIXME: uncomment this when we support background. + //if (background() != Color_inherit) + // os << lcolor.getGUIName(background()) << ", "; + if (emph() != FONT_INHERIT && (!terse || emph() != FONT_IGNORE)) + os << bformat(_("Emphasis %1$s, "), + _(GUIMiscNames[emph()])); + if (underbar() != FONT_INHERIT && (!terse || underbar() == FONT_ON)) + os << bformat(_("Underline %1$s, "), + _(GUIMiscNames[underbar()])); + if (uuline() != FONT_INHERIT && (!terse || uuline() == FONT_ON)) + os << bformat(_("Double underline %1$s, "), + _(GUIMiscNames[uuline()])); + if (uwave() != FONT_INHERIT && (!terse || uwave() == FONT_ON)) + os << bformat(_("Wavy underline %1$s, "), + _(GUIMiscNames[uwave()])); + if (strikeout() != FONT_INHERIT && (!terse || strikeout() == FONT_ON)) + os << bformat(_("Strike out %1$s, "), + _(GUIMiscNames[strikeout()])); + if (xout() != FONT_INHERIT && (!terse || xout() == FONT_ON)) + os << bformat(_("Cross out %1$s, "), + _(GUIMiscNames[xout()])); + if (noun() != FONT_INHERIT && (!terse || noun() != FONT_IGNORE)) + os << bformat(_("Noun %1$s, "), + _(GUIMiscNames[noun()])); + if (*this == inherit_font) + os << _("Default") << ", "; + + return os.str(); +} + + // Set family according to lyx format string void setLyXFamily(string const & fam, FontInfo & f) { @@ -689,6 +784,10 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi) f.setUwave(FONT_ON); } else if (ttok == "noun") { f.setNoun(FONT_ON); + } else if (ttok == "nospellcheck") { + f.setNoSpellcheck(FONT_ON); + } else if (ttok == "no_nospellcheck") { + f.setNoSpellcheck(FONT_OFF); } else { lex.printError("Illegal misc type"); } @@ -723,6 +822,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) @@ -751,6 +851,10 @@ void lyxWrite(ostream & os, FontInfo const & f, string const & start, int level) oss << indent << "\tMisc Noun\n"; else if (f.noun() == FONT_OFF) oss << indent << "\tMisc No_Noun\n"; + if (f.nospellcheck() == FONT_ON) + oss << indent << "\tMisc NoSpellcheck\n"; + else if (f.nospellcheck() == FONT_OFF) + oss << indent << "\tMisc No_NoSpellcheck\n"; if (f.color() != Color_inherit && f.color() != Color_none) oss << indent << "\tColor " << lcolor.getLyXName(f.color()) << '\n';