X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfont.h;h=0cfaaf24c5d94dbbcd5427f2a5b60f698dce5032;hb=e5a46922e916a06ad1b958d5895cc3cfb4f13d2c;hp=88f2a2f47c89d3e0c95776fddb866b07049c414c;hpb=15dc5fa5d666273e6de3b88aede0c4b42c21e4dc;p=lyx.git diff --git a/src/lyxfont.h b/src/lyxfont.h index 88f2a2f47c..0cfaaf24c5 100644 --- a/src/lyxfont.h +++ b/src/lyxfont.h @@ -1,6 +1,6 @@ // -*- C++ -*- /** - * \file lyxfont.h + * \file src/lyxfont.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * @@ -15,10 +15,13 @@ #ifndef LYXFONT_H #define LYXFONT_H -#include "support/std_string.h" -#include +#include "LColor.h" +#include "support/docstream.h" + + +namespace lyx { + -class EnumLColor; class LyXLex; class BufferParams; class Language; @@ -59,6 +62,8 @@ public: /// WASY_FAMILY, /// + ESINT_FAMILY, + /// INHERIT_FAMILY, /// IGNORE_FAMILY, @@ -156,6 +161,28 @@ public: ALL_SANE }; + struct FontBits { + /// + FONT_FAMILY family; + /// + FONT_SERIES series; + /// + FONT_SHAPE shape; + /// + FONT_SIZE size; + /** We store the LColor::color value as an int to get LColor.h out + * of the header file. + */ + int color; + /// + FONT_MISC_STATE emph; + /// + FONT_MISC_STATE underbar; + /// + FONT_MISC_STATE noun; + /// + FONT_MISC_STATE number; + }; /// LyXFont(); @@ -177,46 +204,32 @@ public: /// Decreases font size by one LyXFont & decSize(); - /// Increases font size by one LyXFont & incSize(); - /// - FONT_FAMILY family() const; - + FONT_FAMILY family() const { return bits.family; } /// - FONT_SERIES series() const; - + FONT_SERIES series() const { return bits.series; } /// - FONT_SHAPE shape() const; - + FONT_SHAPE shape() const { return bits.shape; } /// - FONT_SIZE size() const; - + FONT_SIZE size() const { return bits.size; } /// - FONT_MISC_STATE emph() const; - + FONT_MISC_STATE emph() const { return bits.emph; } /// - FONT_MISC_STATE underbar() const; - + FONT_MISC_STATE underbar() const { return bits.underbar; } /// - FONT_MISC_STATE noun() const; - + FONT_MISC_STATE noun() const { return bits.noun; } /// - FONT_MISC_STATE number() const; - + FONT_MISC_STATE number() const { return bits.number; } /// - EnumLColor color() const; - + LColor_color color() const; /// - Language const * language() const; - + Language const * language() const { return lang; } /// bool isRightToLeft() const; - /// bool isVisibleRightToLeft() const; - /// bool isSymbolFont() const; @@ -229,29 +242,29 @@ public: void setUnderbar(LyXFont::FONT_MISC_STATE u); void setNoun(LyXFont::FONT_MISC_STATE n); void setNumber(LyXFont::FONT_MISC_STATE n); - void setColor(EnumLColor c); + void setColor(LColor_color c); void setLanguage(Language const * l); /// Set family after LyX text format - LyXFont & setLyXFamily(string const &); + LyXFont & setLyXFamily(std::string const &); /// Set series after LyX text format - LyXFont & setLyXSeries(string const &); + LyXFont & setLyXSeries(std::string const &); /// Set shape after LyX text format - LyXFont & setLyXShape(string const &); + LyXFont & setLyXShape(std::string const &); /// Set size after LyX text format - LyXFont & setLyXSize(string const &); + LyXFont & setLyXSize(std::string const &); /// Returns misc flag after LyX text format - LyXFont::FONT_MISC_STATE setLyXMisc(string const &); + LyXFont::FONT_MISC_STATE setLyXMisc(std::string const &); /// Sets color after LyX text format - LyXFont & setLyXColor(string const &); + LyXFont & setLyXColor(std::string const &); /// Returns size of font in LaTeX text notation - string const latexSize() const; + std::string const latexSize() const; /** Updates font settings according to request. If an attribute is IGNORE, the attribute is left as it is. @@ -286,117 +299,78 @@ public: to this font. Returns number of chars written. Base is the font state active now. */ - int latexWriteStartChanges(std::ostream &, LyXFont const & base, - LyXFont const & prev) const; + int latexWriteStartChanges(odocstream &, LyXFont const & base, + LyXFont const & prev, + BufferParams const &) const; - /** Writes tha tail of the LaTeX needed to chagne to this font. + /** Writes the tail of the LaTeX needed to change to this font. Returns number of chars written. Base is the font state we want to achieve. */ - int latexWriteEndChanges(std::ostream &, LyXFont const & base, - LyXFont const & next) const; + int latexWriteEndChanges(odocstream &, LyXFont const & base, + LyXFont const & next, + BufferParams const &) const; + /// Build GUI description of font state - string const stateText(BufferParams * params) const; + docstring const stateText(BufferParams * params) const; /// - EnumLColor realColor() const; + LColor_color realColor() const; /// friend bool operator==(LyXFont const & font1, LyXFont const & font2); + /// + friend + std::ostream & operator<<(std::ostream & os, LyXFont const & font); /// Converts logical attributes to concrete shape attribute - LyXFont::FONT_SHAPE realShape() const; + // Try hard to inline this as it shows up with 4.6 % in the profiler. + LyXFont::FONT_SHAPE realShape() const { + if (bits.noun == ON) + return SMALLCAPS_SHAPE; + if (bits.emph == ON) + return (bits.shape == UP_SHAPE) ? ITALIC_SHAPE : UP_SHAPE; + return bits.shape; + } + /** Compaq cxx 6.5 requires that the definition be public so that it can compile operator==() */ - struct FontBits { - /// - FONT_FAMILY family; - /// - FONT_SERIES series; - /// - FONT_SHAPE shape; - /// - FONT_SIZE size; - /** We store the LColor::color value as an int to get LColor.h out - * of the header file. - */ - int color; - /// - FONT_MISC_STATE emph; - /// - FONT_MISC_STATE underbar; - /// - FONT_MISC_STATE noun; - /// - FONT_MISC_STATE number; - }; private: - /// FontBits bits; - /// Language const * lang; - /// Sane font static FontBits sane; - /// All inherit font static FontBits inherit; - /// All ignore font static FontBits ignore; - /// Updates a misc setting according to request LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont, LyXFont::FONT_MISC_STATE org); }; -inline -LyXFont::FONT_SHAPE LyXFont::shape() const -{ - return bits.shape; -} - - -inline -LyXFont::FONT_FAMILY LyXFont::family() const -{ - return bits.family; -} - - -inline -LyXFont::FONT_SERIES LyXFont::series() const -{ - return bits.series; -} - - -inline -LyXFont::FONT_SIZE LyXFont::size() const -{ - return bits.size; -} - - -inline -LyXFont::FONT_MISC_STATE LyXFont::emph() const -{ - return bits.emph; -} - +/** \c LyXFont_size is a wrapper for LyXFont::FONT_SIZE. + * It can be forward-declared and passed as a function argument without + * having to expose lyxfont.h. + */ +class LyXFont_size { +public: + /// + LyXFont_size(LyXFont::FONT_SIZE val) : val_(val) {} + /// + operator LyXFont::FONT_SIZE() const { return val_; } +private: + /// + LyXFont::FONT_SIZE val_; +}; -inline -LyXFont::FONT_MISC_STATE LyXFont::noun() const -{ - return bits.noun; -} inline @@ -410,6 +384,7 @@ bool LyXFont::isSymbolFont() const case LyXFont::MSA_FAMILY: case LyXFont::MSB_FAMILY: case LyXFont::WASY_FAMILY: + case LyXFont::ESINT_FAMILY: return true; default: return false; @@ -431,8 +406,7 @@ bool operator!=(LyXFont::FontBits const & lhs, LyXFont::FontBits const & rhs) inline bool operator==(LyXFont const & font1, LyXFont const & font2) { - return font1.bits == font2.bits && - font1.lang == font2.lang; + return font1.bits == font2.bits && font1.lang == font2.lang; } /// @@ -442,4 +416,7 @@ bool operator!=(LyXFont const & font1, LyXFont const & font2) return !(font1 == font2); } + +} // namespace lyx + #endif