X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFontInfo.cpp;h=be792623071b74fb36f9f7bb9383b49bf65e6bd1;hb=16d5c49b383841826d1bc563e2d392e12e497ed8;hp=d7494707d2ee5dcaba9d939aa48db67d861196d2;hpb=aafd52f44167d5510be1ddcb974daa9dae486933;p=lyx.git diff --git a/src/FontInfo.cpp b/src/FontInfo.cpp index d7494707d2..be79262307 100644 --- a/src/FontInfo.cpp +++ b/src/FontInfo.cpp @@ -17,10 +17,17 @@ #include "ColorSet.h" #include "FontInfo.h" #include "Lexer.h" +#include "LyXRC.h" +#include "support/convert.h" #include "support/debug.h" #include "support/docstring.h" #include "support/lstrings.h" +#include "support/RefChanger.h" + +#include +#include +#include using namespace std; using namespace lyx::support; @@ -32,16 +39,16 @@ namespace lyx { // char const * LyXFamilyNames[NUM_FAMILIES + 2 /* default & error */] = { "roman", "sans", "typewriter", "symbol", - "cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "rsfs", "wasy", - "esint", "default", "error" }; + "cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "rsfs", "stmry", + "wasy", "esint", "default", "error" }; -char const * LyXSeriesNames[4] = +char const * LyXSeriesNames[NUM_SERIES + 2 /* default & error */] = { "medium", "bold", "default", "error" }; -char const * LyXShapeNames[6] = +char const * LyXShapeNames[NUM_SHAPE + 2 /* default & error */] = { "up", "italic", "slanted", "smallcaps", "default", "error" }; -char const * LyXSizeNames[14] = +char const * LyXSizeNames[NUM_SIZE + 4 /* increase, decrease, default & error */] = { "tiny", "scriptsize", "footnotesize", "small", "normal", "large", "larger", "largest", "huge", "giant", "increase", "decrease", "default", "error" }; @@ -164,6 +171,29 @@ FontInfo & FontInfo::incSize() } +double FontInfo::realSize() const +{ + double d = convert(lyxrc.font_sizes[size()]); + // The following is according to the average of the values in the + // definitions of \defaultscriptratio and \defaultscriptscriptratio in LaTeX + // font packages. No attempt is made to implement the actual values from + // \DefineMathSizes. + switch (style()) { + case LM_ST_DISPLAY: + case LM_ST_TEXT: + break; + case LM_ST_SCRIPT: + d *= .73; + break; + case LM_ST_SCRIPTSCRIPT: + d *= .55; + break; + } + // Never go below the smallest size + return max(d, convert(lyxrc.font_sizes[FONT_SIZE_TINY])); +} + + /// Reduce font to fall back to template where possible void FontInfo::reduce(FontInfo const & tmplt) { @@ -242,6 +272,32 @@ FontInfo & FontInfo::realize(FontInfo const & tmplt) } +Changer FontInfo::changeColor(ColorCode const color) +{ + return make_change(color_, color); +} + + +Changer FontInfo::changeShape(FontShape const shape) +{ + return make_change(shape_, shape); +} + + +Changer FontInfo::changeStyle(MathStyle const new_style) +{ + return make_change(style_, new_style); +} + + +Changer FontInfo::change(FontInfo font, bool realiz) +{ + if (realiz) + font.realize(*this); + return make_change(*this, font); +} + + /// Updates a misc setting according to request static FontState setMisc(FontState newfont, FontState org) @@ -380,6 +436,7 @@ string getFamilyCSS(FontFamily const & f) case MSB_FAMILY: case EUFRAK_FAMILY: case RSFS_FAMILY: + case STMARY_FAMILY: case WASY_FAMILY: case ESINT_FAMILY: case INHERIT_FAMILY: @@ -635,4 +692,57 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi) } +void lyxWrite(ostream & os, FontInfo const & f, string const & start, int level) +{ + string indent; + for (int i = 0; i < level; ++i) + indent += '\t'; + ostringstream oss; + if (f.family() != INHERIT_FAMILY) + oss << indent << "\tFamily " << LyXFamilyNames[f.family()] + << '\n'; + if (f.series() != INHERIT_SERIES) + oss << indent << "\tSeries " << LyXSeriesNames[f.series()] + << '\n'; + if (f.shape() != INHERIT_SHAPE) + oss << indent << "\tShape " << LyXShapeNames[f.shape()] + << '\n'; + if (f.size() != FONT_SIZE_INHERIT) + oss << indent << "\tSize " << LyXSizeNames[f.size()] + << '\n'; + if (f.underbar() == FONT_ON) + oss << indent << "\tMisc Underbar\n"; + else if (f.underbar() == FONT_OFF) + oss << indent << "\tMisc No_Bar\n"; + if (f.strikeout() == FONT_ON) + oss << indent << "\tMisc Strikeout\n"; + else if (f.strikeout() == FONT_OFF) + oss << indent << "\tMisc No_Strikeout\n"; + if (f.uuline() == FONT_ON) + oss << indent << "\tMisc Uuline\n"; + else if (f.uuline() == FONT_OFF) + oss << indent << "\tMisc No_Uuline\n"; + if (f.uwave() == FONT_ON) + oss << indent << "\tMisc Uwave\n"; + else if (f.uwave() == FONT_OFF) + oss << indent << "\tMisc No_Uwave\n"; + if (f.emph() == FONT_ON) + oss << indent << "\tMisc Emph\n"; + else if (f.emph() == FONT_OFF) + oss << indent << "\tMisc No_Emph\n"; + if (f.noun() == FONT_ON) + oss << indent << "\tMisc Noun\n"; + else if (f.noun() == FONT_OFF) + oss << indent << "\tMisc No_Noun\n"; + if (f.color() != Color_inherit && f.color() != Color_none) + oss << indent << "\tColor " << lcolor.getLyXName(f.color()) + << '\n'; + if (!oss.str().empty()) { + os << indent << start << '\n' + << oss.str() + << indent << "EndFont\n"; + } +} + + } // namespace lyx