X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfont.C;h=22594630d3f3b1bac6c4b568ead5e4be5b6b4bd8;hb=69cf3b62043861ccad5f8ad7ffb4981fe50b078d;hp=7e4014b74feffbcb73abe920c237b2ff403322ce;hpb=9972899fa2437cf17346fe081c109e685176cb66;p=lyx.git diff --git a/src/lyxfont.C b/src/lyxfont.C index 7e4014b74f..22594630d3 100644 --- a/src/lyxfont.C +++ b/src/lyxfont.C @@ -1,8 +1,8 @@ /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Processor - * + * * Copyright 1995 Matthias Ettrich * Copyright 1995-2001 The LyX Team. * @@ -12,20 +12,17 @@ #include #include -#ifdef __GNUG__ -#pragma implementation -#endif - - #include "gettext.h" #include "lyxfont.h" #include "debug.h" #include "lyxrc.h" #include "lyxlex.h" -#include "FontLoader.h" +#include "language.h" #include "support/lstrings.h" #include "bufferparams.h" // stateText +#include "BoostFormat.h" + using std::ostream; using std::endl; @@ -39,62 +36,62 @@ using std::strlen; namespace { -char const * GUIFamilyNames[11] = -{ N_("Roman"), N_("Sans serif"), N_("Typewriter"), N_("Symbol"), - "cmsy", "cmm", "cmex", "msa", "msb", +char const * GUIFamilyNames[LyXFont::NUM_FAMILIES + 2 /* default & error */] = +{ N_("Roman"), N_("Sans Serif"), N_("Typewriter"), N_("Symbol"), + "cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "wasy", N_("Inherit"), N_("Ignore") }; -char const * GUISeriesNames[4] = +char const * GUISeriesNames[4] = { N_("Medium"), N_("Bold"), N_("Inherit"), N_("Ignore") }; -char const * GUIShapeNames[6] = +char const * GUIShapeNames[6] = { N_("Upright"), N_("Italic"), N_("Slanted"), N_("Smallcaps"), N_("Inherit"), N_("Ignore") }; -char const * GUISizeNames[14] = +char const * GUISizeNames[14] = { 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_("Larger"), N_("Largest"), N_("Huge"), N_("Huger"), N_("Increase"), N_("Decrease"), N_("Inherit"), N_("Ignore") }; - -char const * GUIMiscNames[5] = + +char const * GUIMiscNames[5] = { N_("Off"), N_("On"), N_("Toggle"), N_("Inherit"), N_("Ignore") }; // // Strings used to read and write .lyx format files // -char const * LyXFamilyNames[11] = +char const * LyXFamilyNames[LyXFont::NUM_FAMILIES + 2 /* default & error */] = { "roman", "sans", "typewriter", "symbol", - "cmsy", "cmm", "cmex", "msa", "msb", + "cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "wasy", "default", "error" }; -char const * LyXSeriesNames[4] = +char const * LyXSeriesNames[4] = { "medium", "bold", "default", "error" }; -char const * LyXShapeNames[6] = +char const * LyXShapeNames[6] = { "up", "italic", "slanted", "smallcaps", "default", "error" }; -char const * LyXSizeNames[14] = +char const * LyXSizeNames[14] = { "tiny", "scriptsize", "footnotesize", "small", "normal", "large", - "larger", "largest", "huge", "giant", - "increase-error", "decrease-error", "default", "error" }; + "larger", "largest", "huge", "giant", + "increase", "decrease", "default", "error" }; -char const * LyXMiscNames[5] = +char const * LyXMiscNames[5] = { "off", "on", "toggle", "default", "error" }; // // Strings used to write LaTeX files // -char const * LaTeXFamilyNames[6] = +char const * LaTeXFamilyNames[6] = { "textrm", "textsf", "texttt", "error1", "error2", "error3" }; -char const * LaTeXSeriesNames[4] = +char const * LaTeXSeriesNames[4] = { "textmd", "textbf", "error4", "error5" }; -char const * LaTeXShapeNames[6] = +char const * LaTeXShapeNames[6] = { "textup", "textit", "textsl", "textsc", "error6", "error7" }; -char const * LaTeXSizeNames[14] = +char const * LaTeXSizeNames[14] = { "tiny", "scriptsize", "footnotesize", "small", "normalsize", "large", "Large", "LARGE", "huge", "Huge", "error8", "error9", "error10", "error11" }; @@ -138,32 +135,28 @@ LyXFont::FontBits LyXFont::ignore = { IGNORE }; -bool LyXFont::FontBits::operator==(LyXFont::FontBits const & fb1) const +bool operator==(LyXFont::FontBits const & lhs, + LyXFont::FontBits const & rhs) { - return fb1.family == family && - fb1.series == series && - fb1.shape == shape && - fb1.size == size && - fb1.color == color && - fb1.emph == emph && - fb1.underbar == underbar && - fb1.noun == noun && - fb1.number == number; + return lhs.family == rhs.family && + lhs.series == rhs.series && + lhs.shape == rhs.shape && + lhs.size == rhs.size && + lhs.color == rhs.color && + lhs.emph == rhs.emph && + lhs.underbar == rhs.underbar && + lhs.noun == rhs.noun && + lhs.number == rhs.number; } -bool LyXFont::FontBits::operator!=(LyXFont::FontBits const & fb1) const -{ - return !(fb1 == *this); -} +LyXFont::LyXFont() + : bits(sane), lang(default_language) +{} LyXFont::LyXFont(LyXFont::FONT_INIT1) -#ifndef INHERIT_LANGUAGE : bits(inherit), lang(default_language) -#else - : bits(inherit), lang(inherit_language) -#endif {} @@ -198,31 +191,31 @@ LyXFont::FONT_MISC_STATE LyXFont::underbar() const } -LColor::color LyXFont::color() const +LColor::color LyXFont::color() const { return bits.color; } -Language const * LyXFont::language() const +Language const * LyXFont::language() const { return lang; } -LyXFont::FONT_MISC_STATE LyXFont::number() const +LyXFont::FONT_MISC_STATE LyXFont::number() const { return bits.number; } -bool LyXFont::isRightToLeft() const +bool LyXFont::isRightToLeft() const { return lang->RightToLeft(); } -bool LyXFont::isVisibleRightToLeft() const +bool LyXFont::isVisibleRightToLeft() const { return (lang->RightToLeft() && number() != ON); @@ -300,7 +293,7 @@ LyXFont & LyXFont::setNumber(LyXFont::FONT_MISC_STATE n) /// Decreases font size by one -LyXFont & LyXFont::decSize() +LyXFont & LyXFont::decSize() { switch (size()) { case SIZE_HUGER: setSize(SIZE_HUGE); break; @@ -331,7 +324,7 @@ LyXFont & LyXFont::decSize() /// Increases font size by one -LyXFont & LyXFont::incSize() +LyXFont & LyXFont::incSize() { switch (size()) { case SIZE_HUGER: break; @@ -362,7 +355,7 @@ LyXFont & LyXFont::incSize() /// Updates a misc setting according to request -LyXFont::FONT_MISC_STATE LyXFont::setMisc(FONT_MISC_STATE newfont, +LyXFont::FONT_MISC_STATE LyXFont::setMisc(FONT_MISC_STATE newfont, FONT_MISC_STATE org) { if (newfont == TOGGLE) { @@ -377,13 +370,13 @@ LyXFont::FONT_MISC_STATE LyXFont::setMisc(FONT_MISC_STATE newfont, } } else if (newfont == IGNORE) return org; - else + else return newfont; } /// Updates font settings according to request -void LyXFont::update(LyXFont const & newfont, +void LyXFont::update(LyXFont const & newfont, Language const * document_language, bool toggleall) { @@ -406,7 +399,7 @@ void LyXFont::update(LyXFont const & newfont, case INHERIT_SERIES: setSeries(newfont.series()); break; - case IGNORE_SERIES: + case IGNORE_SERIES: break; } @@ -428,17 +421,13 @@ void LyXFont::update(LyXFont const & newfont, setEmph(setMisc(newfont.emph(), emph())); setUnderbar(setMisc(newfont.underbar(), underbar())); setNoun(setMisc(newfont.noun(), noun())); - + setNumber(setMisc(newfont.number(), number())); if (newfont.language() == language() && toggleall) if (language() == document_language) setLanguage(default_language); else -#ifndef INHERIT_LANGUAGE setLanguage(document_language); -#else - setLanguage(inherit_language); -#endif else if (newfont.language() != ignore_language) setLanguage(newfont.language()); @@ -468,37 +457,17 @@ void LyXFont::reduce(LyXFont const & tmplt) setNoun(INHERIT); if (color() == tmplt.color()) setColor(LColor::inherit); -#ifdef INHERIT_LANGUAGE - if (language() == tmplt.language()) - setLanguage(inherit_language); -#endif } /// Realize font from a template -#ifndef INHERIT_LANGUAGE LyXFont & LyXFont::realize(LyXFont const & tmplt) -#else -LyXFont & LyXFont::realize(LyXFont const & tmplt, Language const * deflang) -#endif { -#ifdef INHERIT_LANGUAGE - if (language() == inherit_language) { - if (tmplt.language() == inherit_language || - tmplt.language() == ignore_language || - tmplt.language() == default_language) - { - setLanguage(deflang); - } else { - setLanguage(tmplt.language()); - } - } -#endif if (bits == inherit) { bits = tmplt.bits; return *this; } - + if (bits.family == INHERIT_FAMILY) { bits.family = tmplt.bits.family; } @@ -532,11 +501,8 @@ bool LyXFont::resolved() const { return (family() != INHERIT_FAMILY && series() != INHERIT_SERIES && shape() != INHERIT_SHAPE && size() != INHERIT_SIZE && - emph() != INHERIT && underbar() != INHERIT && + emph() != INHERIT && underbar() != INHERIT && noun() != INHERIT && -#ifdef INHERIT_LANGUAGE - language() != inherit_language && -#endif color() != LColor::inherit); } @@ -555,24 +521,50 @@ string const LyXFont::stateText(BufferParams * params) const ost << _(GUISizeNames[size()]) << ", "; if (color() != LColor::inherit) ost << lcolor.getGUIName(color()) << ", "; - if (emph() != INHERIT) - ost << _("Emphasis ") - << _(GUIMiscNames[emph()]) << ", "; - if (underbar() != INHERIT) - ost << _("Underline ") - << _(GUIMiscNames[underbar()]) << ", "; - if (noun() != INHERIT) + if (emph() != INHERIT) { +#if USE_BOOST_FORMAT + ost << boost::format(_("Emphasis %1$s, ")) + % _(GUIMiscNames[emph()]); +#else + ost << _("Emphasis ") << _(GUIMiscNames[emph()]) << ", "; +#endif + } + if (underbar() != INHERIT) { +#if USE_BOOST_FORMAT + ost << boost::format(_("Underline %1$s, ")) + % _(GUIMiscNames[underbar()]); +#else + ost << _("Underline ") << _(GUIMiscNames[underbar()]) << ", "; +#endif + } + if (noun() != INHERIT) { +#if USE_BOOST_FORMAT + ost << boost::format(_("Noun %1$s, ")) + % _(GUIMiscNames[noun()]); +#else ost << _("Noun ") << _(GUIMiscNames[noun()]) << ", "; +#endif + } if (bits == inherit) ost << _("Default") << ", "; - if (!params || (language() != params->language)) + if (!params || (language() != params->language)) { +#if USE_BOOST_FORMAT + ost << boost::format(_("Language: %1$s, ")) + % _(language()->display()); +#else ost << _("Language: ") << _(language()->display()) << ", "; - if (number() != OFF) +#endif + } + if (number() != OFF) { +#if USE_BOOST_FORMAT + ost << boost::format(_(" Number %1$s")) + % _(GUIMiscNames[number()]); +#else ost << _(" Number ") << _(GUIMiscNames[number()]); +#endif + } - string buf(ost.str().c_str()); - buf = strip(buf, ' '); - buf = strip(buf, ','); + string const buf = rtrim(STRCONV(ost.str()), ", "); return buf; } @@ -580,7 +572,7 @@ string const LyXFont::stateText(BufferParams * params) const // Set family according to lyx format string LyXFont & LyXFont::setLyXFamily(string const & fam) { - string const s = lowercase(fam); + string const s = ascii_lowercase(fam); int i = 0; while (s != LyXFamilyNames[i] && LyXFamilyNames[i] != "error") ++i; @@ -596,7 +588,7 @@ LyXFont & LyXFont::setLyXFamily(string const & fam) // Set series according to lyx format string LyXFont & LyXFont::setLyXSeries(string const & ser) { - string const s = lowercase(ser); + string const s = ascii_lowercase(ser); int i = 0; while (s != LyXSeriesNames[i] && LyXSeriesNames[i] != "error") ++i; @@ -612,7 +604,7 @@ LyXFont & LyXFont::setLyXSeries(string const & ser) // Set shape according to lyx format string LyXFont & LyXFont::setLyXShape(string const & sha) { - string const s = lowercase(sha); + string const s = ascii_lowercase(sha); int i = 0; while (s != LyXShapeNames[i] && LyXShapeNames[i] != "error") ++i; @@ -628,7 +620,7 @@ LyXFont & LyXFont::setLyXShape(string const & sha) // Set size according to lyx format string LyXFont & LyXFont::setLyXSize(string const & siz) { - string const s = lowercase(siz); + string const s = ascii_lowercase(siz); int i = 0; while (s != LyXSizeNames[i] && LyXSizeNames[i] != "error") ++i; if (s == LyXSizeNames[i]) { @@ -643,7 +635,7 @@ LyXFont & LyXFont::setLyXSize(string const & siz) // Set size according to lyx format string LyXFont::FONT_MISC_STATE LyXFont::setLyXMisc(string const & siz) { - string const s = lowercase(siz); + string const s = ascii_lowercase(siz); int i = 0; while (s != LyXMiscNames[i] && LyXMiscNames[i] != "error") ++i; if (s == LyXMiscNames[i]) @@ -677,7 +669,7 @@ LyXFont & LyXFont::lyxRead(LyXLex & lex) bool finished = false; while (!finished && lex.isOK() && !error) { lex.next(); - string const tok = lowercase(lex.getString()); + string const tok = ascii_lowercase(lex.getString()); if (tok.empty()) { continue; @@ -701,7 +693,7 @@ LyXFont & LyXFont::lyxRead(LyXLex & lex) setLyXSize(ttok); } else if (tok == "misc") { lex.next(); - string const ttok = lowercase(lex.getString()); + string const ttok = ascii_lowercase(lex.getString()); if (ttok == "no_bar") { setUnderbar(OFF); @@ -733,9 +725,6 @@ LyXFont & LyXFont::lyxRead(LyXLex & lex) /// Writes the changes from this font to orgfont in .lyx format in file void LyXFont::lyxWriteChanges(LyXFont const & orgfont, -#ifdef INHERIT_LANGUAGE - Language const * doclang, -#endif ostream & os) const { os << "\n"; @@ -785,13 +774,7 @@ void LyXFont::lyxWriteChanges(LyXFont const & orgfont, os << "\\color " << col_str << "\n"; } if (orgfont.language() != language()) { -#ifndef INHERIT_LANGUAGE if (language()) -#else - if (language() == inherit_language) - os << "\\lang " << doclang->lang() << "\n"; - else if (language()) -#endif os << "\\lang " << language()->lang() << "\n"; else os << "\\lang unknown\n"; @@ -808,7 +791,7 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, bool env = false; if (language()->babel() != base.language()->babel() && - language()->babel() != prev.language()->babel()) { + language() != prev.language()) { if (isRightToLeft() != prev.isRightToLeft()) { if (isRightToLeft()) { os << "\\R{"; @@ -834,7 +817,7 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, LyXFont f = *this; f.reduce(base); - + if (f.family() != INHERIT_FAMILY) { os << '\\' << LaTeXFamilyNames[f.family()] @@ -898,17 +881,16 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, // Returns number of chars written // This one corresponds to latexWriteStartChanges(). (Asger) int LyXFont::latexWriteEndChanges(ostream & os, LyXFont const & base, - LyXFont const & next) const + LyXFont const & next) const { int count = 0; bool env = false; - LyXFont f = *this; // why do you need this? - f.reduce(base); // why isn't this just "reduce(base);" (Lgb) - // Because this function is const. Everything breaks if this - // method changes the font it represents. There is no speed penalty - // by using the temporary. (Asger) - + // reduce the current font to changes against the base + // font (of the layout). We use a temporary for this to + // avoid changing this font instance, as that would break + LyXFont f = *this; + f.reduce(base); if (f.family() != INHERIT_FAMILY) { os << '}'; @@ -960,7 +942,7 @@ int LyXFont::latexWriteEndChanges(ostream & os, LyXFont const & base, } if (language() != base.language() && language() != next.language()) { - os << "}"; + os << '}'; ++count; }