X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFont.h;h=58f2696fa6e531ace6d6812aeee8b7e15841916d;hb=818249f69fbb59f8ecae17213e046069f53de438;hp=18544f171682ab978831e6d48acd1cbc77eeb34a;hpb=9d711c62fc352193ef2873000b872ebd203143f3;p=lyx.git diff --git a/src/Font.h b/src/Font.h index 18544f1716..58f2696fa6 100644 --- a/src/Font.h +++ b/src/Font.h @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author Angus Leeming * \author Dekel Tsur @@ -15,256 +15,39 @@ #ifndef FONT_H #define FONT_H -#ifdef TEX2LYX -#include "tex2lyx/Font.h" -#else +#include "FontInfo.h" -#include "Color.h" -#include "support/docstream.h" +#include "support/strfwd.h" namespace lyx { - -class Lexer; class BufferParams; class Language; +class LaTeXFeatures; class OutputParams; - +class otexstream; /// class Font { -public: - /** The value INHERIT_* means that the font attribute is - inherited from the layout. In the case of layout fonts, the - attribute is inherited from the default font. - The value IGNORE_* is used with Font::update() when the - attribute should not be changed. - */ - enum FONT_FAMILY { - /// - ROMAN_FAMILY, // fontstruct rely on this to be 0 - /// - SANS_FAMILY, - /// - TYPEWRITER_FAMILY, - /// - SYMBOL_FAMILY, - /// - CMR_FAMILY, - /// - CMSY_FAMILY, - /// - CMM_FAMILY, - /// - CMEX_FAMILY, - /// - MSA_FAMILY, - /// - MSB_FAMILY, - /// - EUFRAK_FAMILY, - /// - WASY_FAMILY, - /// - ESINT_FAMILY, - /// - INHERIT_FAMILY, - /// - IGNORE_FAMILY, - /// - NUM_FAMILIES = INHERIT_FAMILY - }; - - /// - enum FONT_SERIES { - /// - MEDIUM_SERIES, // fontstruct rely on this to be 0 - /// - BOLD_SERIES, - /// - INHERIT_SERIES, - /// - IGNORE_SERIES - }; - - /// - enum FONT_SHAPE { - /// - UP_SHAPE, // fontstruct rely on this to be 0 - /// - ITALIC_SHAPE, - /// - SLANTED_SHAPE, - /// - SMALLCAPS_SHAPE, - /// - INHERIT_SHAPE, - /// - IGNORE_SHAPE - }; - - /// - enum FONT_SIZE { - /// - SIZE_TINY, // fontstruct rely on this to be 0 - /// - SIZE_SCRIPT, - /// - SIZE_FOOTNOTE, - /// - SIZE_SMALL, - /// - SIZE_NORMAL, - /// - SIZE_LARGE, - /// - SIZE_LARGER, - /// - SIZE_LARGEST, - /// - SIZE_HUGE, - /// - SIZE_HUGER, - /// - INCREASE_SIZE, - /// - DECREASE_SIZE, - /// - INHERIT_SIZE, - /// - IGNORE_SIZE - }; - - /// Used for emph, underbar, noun and latex toggles - enum FONT_MISC_STATE { - /// - OFF, - /// - ON, - /// - TOGGLE, - /// - INHERIT, - /// - IGNORE - }; - - /// Trick to overload constructor and make it megafast - enum FONT_INIT1 { - /// - ALL_INHERIT - }; - /// - enum FONT_INIT2 { - /// - ALL_IGNORE - }; - /// - enum FONT_INIT3 { - /// - ALL_SANE - }; - struct FontBits { - /// - FONT_FAMILY family; - /// - FONT_SERIES series; - /// - FONT_SHAPE shape; - /// - FONT_SIZE size; - /** We store the Color::color value as an int to get Color.h out - * of the header file. - */ - int color; - /// - FONT_MISC_STATE emph; - /// - FONT_MISC_STATE underbar; - /// - FONT_MISC_STATE noun; - /// - FONT_MISC_STATE number; - }; +public: /// - Font(); - - /// Shortcut initialization - explicit Font(Font::FONT_INIT1); - /// Shortcut initialization - explicit Font(Font::FONT_INIT2); - /// Shortcut initialization - explicit Font(Font::FONT_INIT3); - /// Shortcut initialization - Font(Font::FONT_INIT1, Language const * l); - /// Shortcut initialization - Font(Font::FONT_INIT2, Language const * l); - /// Shortcut initialization - Font(Font::FONT_INIT3, Language const * l); + explicit Font(FontInfo = sane_font, Language const * l = 0); - /// Decreases font size by one - Font & decSize(); - /// Increases font size by one - Font & incSize(); - /// - FONT_FAMILY family() const { return bits.family; } - /// - FONT_SERIES series() const { return bits.series; } - /// - FONT_SHAPE shape() const { return bits.shape; } - /// - FONT_SIZE size() const { return bits.size; } - /// - FONT_MISC_STATE emph() const { return bits.emph; } /// - FONT_MISC_STATE underbar() const { return bits.underbar; } + FontInfo & fontInfo() { return bits_; } /// - FONT_MISC_STATE noun() const { return bits.noun; } + FontInfo const & fontInfo() const { return bits_; } /// - FONT_MISC_STATE number() const { return bits.number; } - /// - Color_color color() const; - /// - Language const * language() const { return lang; } + Language const * language() const { return lang_; } /// bool isRightToLeft() const; /// bool isVisibleRightToLeft() const; /// - bool isSymbolFont() const; - - /// - void setFamily(Font::FONT_FAMILY f); - void setSeries(Font::FONT_SERIES s); - void setShape(Font::FONT_SHAPE s); - void setSize(Font::FONT_SIZE s); - void setEmph(Font::FONT_MISC_STATE e); - void setUnderbar(Font::FONT_MISC_STATE u); - void setNoun(Font::FONT_MISC_STATE n); - void setNumber(Font::FONT_MISC_STATE n); - void setColor(Color_color c); void setLanguage(Language const * l); - /// Set family after LyX text format - Font & setLyXFamily(std::string const &); - - /// Set series after LyX text format - Font & setLyXSeries(std::string const &); - - /// Set shape after LyX text format - Font & setLyXShape(std::string const &); - - /// Set size after LyX text format - Font & setLyXSize(std::string const &); - - /// Returns misc flag after LyX text format - Font::FONT_MISC_STATE setLyXMisc(std::string const &); - - /// Sets color after LyX text format - Font & setLyXColor(std::string const &); - /// Returns size of font in LaTeX text notation std::string const latexSize() const; @@ -281,18 +64,6 @@ public: Language const * default_lang, bool toggleall = false); - /** Reduce font to fall back to template where possible. - Equal fields are reduced to INHERIT */ - void reduce(Font const & tmplt); - - /// Realize font from a template (INHERIT are realized) - Font & realize(Font const & tmplt); - /// Is a given font fully resolved? - bool resolved() const; - - /// Read a font specification from Lexer. Used for layout files. - Font & lyxRead(Lexer &); - /// Writes the changes from this font to orgfont in .lyx format in file void lyxWriteChanges(Font const & orgfont, std::ostream &) const; @@ -310,7 +81,7 @@ public: Returns number of chars written. Base is the font state we want to achieve. */ - int latexWriteEndChanges(odocstream &, BufferParams const & bparams, + int latexWriteEndChanges(otexstream &, BufferParams const & bparams, OutputParams const & runparams, Font const & base, Font const & next, @@ -321,7 +92,7 @@ public: docstring const stateText(BufferParams * params) const; /// - Color_color realColor() const; + void validate(LaTeXFeatures & features) const; /// friend @@ -330,90 +101,27 @@ public: friend std::ostream & operator<<(std::ostream & os, Font const & font); - /// Converts logical attributes to concrete shape attribute - // Try hard to inline this as it shows up with 4.6 % in the profiler. - inline Font::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; - } + /// Set \param data using \param font and \param toggle. + std::string toString(bool toggle) const; + /// Set \param font and \param toggle using \param data. Return success. + bool fromString(std::string const & data, bool & toggle); - /** Compaq cxx 6.5 requires that the definition be public so that - it can compile operator==() - */ private: /// - FontBits bits; + FontInfo 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 - Font::FONT_MISC_STATE setMisc(Font::FONT_MISC_STATE newfont, - Font::FONT_MISC_STATE org); + Language const * lang_; /// Did latexWriteStartChanges open an encoding environment? mutable bool open_encoding_; }; -/** \c Font_size is a wrapper for Font::FONT_SIZE. - * It can be forward-declared and passed as a function argument without - * having to expose Font.h. - */ -class Font_size { -public: - /// - Font_size(Font::FONT_SIZE val) : val_(val) {} - /// - operator Font::FONT_SIZE() const { return val_; } -private: - /// - Font::FONT_SIZE val_; -}; - - - -inline -bool Font::isSymbolFont() const -{ - switch (family()) { - case Font::SYMBOL_FAMILY: - case Font::CMSY_FAMILY: - case Font::CMM_FAMILY: - case Font::CMEX_FAMILY: - case Font::MSA_FAMILY: - case Font::MSB_FAMILY: - case Font::WASY_FAMILY: - case Font::ESINT_FAMILY: - return true; - default: - return false; - } -} - -/// -std::ostream & operator<<(std::ostream &, Font::FONT_MISC_STATE); - -bool operator==(Font::FontBits const & lhs, Font::FontBits const & rhs); - -inline -bool operator!=(Font::FontBits const & lhs, Font::FontBits const & rhs) -{ - return !(lhs == rhs); -} - /// inline bool operator==(Font const & font1, Font const & font2) { - return font1.bits == font2.bits && font1.lang == font2.lang; + return font1.bits_ == font2.bits_ && font1.lang_ == font2.lang_; } /// @@ -423,8 +131,11 @@ bool operator!=(Font const & font1, Font const & font2) return !(font1 == font2); } +/** Returns the current freefont, encoded as a std::string to be passed to the + * frontends. Implemented in Text3.cpp. + */ +std::string const freefont2string(); } // namespace lyx -#endif // TEX2LYX #endif