]> git.lyx.org Git - lyx.git/blobdiff - src/FontInfo.cpp
de.po
[lyx.git] / src / FontInfo.cpp
index b6e7d6726efbd8fd90c3d31333d8c918efc405a6..d7b3a4f377d3b9f0e59a16b5c03efe17216bbe6f 100644 (file)
@@ -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';