]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfont.h
STLPort compile fix
[lyx.git] / src / lyxfont.h
index 0c7c26ec43ac03fb1677b5a3d2c1fdc7cea274d3..488932d208f592e52bd8299aa101b0bfb9c8c9be 100644 (file)
@@ -1,43 +1,28 @@
 // -*- C++ -*-
-/* This file is part of
- * ======================================================
- * 
- *           LyX, The Document Processor
- *      
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.   
+/**
+ * \file src/lyxfont.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * ====================================================== */
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author Angus Leeming
+ * \author Dekel Tsur
+ *
+ * Full author contact details are available in file CREDITS.
+ */
 
 #ifndef LYXFONT_H
 #define LYXFONT_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include FORMS_H_LOCATION
-#include "LString.h"
-#include "debug.h"
-#include "direction.h"
-#include "LColor.h"
-
-// It might happen that locale.h defines ON and OFF. This is not good
-// for us, since we use these names below. But of course this is due
-// to some old compilers. Than is broken when it comes to C++ scoping.
-#include "gettext.h" // so that we are sure tht it won't be included
-// later. 
-#ifdef ON
-#undef ON
-#endif
-
-#ifdef OFF
-#undef OFF
-#endif
+#include <iosfwd>
+#include <string>
 
+class LColor_color;
 class LyXLex;
+class BufferParams;
+class Language;
 
-#define NEW_BITS 1
 
 ///
 class LyXFont {
@@ -58,9 +43,27 @@ public:
                ///
                SYMBOL_FAMILY,
                ///
+               CMR_FAMILY,
+               ///
+               CMSY_FAMILY,
+               ///
+               CMM_FAMILY,
+               ///
+               CMEX_FAMILY,
+               ///
+               MSA_FAMILY,
+               ///
+               MSB_FAMILY,
+               ///
+               EUFRAK_FAMILY,
+               ///
+               WASY_FAMILY,
+               ///
                INHERIT_FAMILY,
                ///
-               IGNORE_FAMILY
+               IGNORE_FAMILY,
+               ///
+               NUM_FAMILIES = INHERIT_FAMILY
        };
 
        ///
@@ -122,19 +125,6 @@ public:
                ///
                IGNORE_SIZE
        };
-       enum FONT_DIRECTION {
-               ///
-               LTR_DIR,
-               ///
-               RTL_DIR,
-               ///
-               TOGGLE_DIR,
-               ///
-               INHERIT_DIR,
-               ///
-               IGNORE_DIR
-       };
 
        /// Used for emph, underbar, noun and latex toggles
        enum FONT_MISC_STATE {
@@ -169,425 +159,227 @@ public:
        ///
        LyXFont();
 
-       /// LyXFont x(LyXFont ...) and LyXFont x = LyXFont ...
-       LyXFont(LyXFont const & x);
        /// Shortcut initialization
+       explicit
        LyXFont(LyXFont::FONT_INIT1);
        /// Shortcut initialization
+       explicit
        LyXFont(LyXFont::FONT_INIT2);
        /// Shortcut initialization
+       explicit
        LyXFont(LyXFont::FONT_INIT3);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT1, Language const * l);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT2, Language const * l);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT3, Language const * l);
 
-       /// LyXFont x, y; x = y;
-       LyXFont & operator=(LyXFont const & x);
        /// Decreases font size by one
        LyXFont & decSize();
+
        /// Increases font size by one
        LyXFont & incSize();
+
        ///
        FONT_FAMILY family() const;
+
        ///
        FONT_SERIES series() const;
+
        ///
        FONT_SHAPE shape() const;
+
        ///
        FONT_SIZE size() const;
+
        ///
        FONT_MISC_STATE emph() const;
+
        ///
        FONT_MISC_STATE underbar() const;
+
        ///
        FONT_MISC_STATE noun() const;
 
        ///
-       FONT_MISC_STATE latex() const;
+       FONT_MISC_STATE number() const;
 
        ///
-       LColor::color color() const;
-
-       ///
-       FONT_DIRECTION direction() const;
+       LColor_color color() const;
 
        ///
-       LyXDirection getFontDirection() const;
-       
-       ///
-       LyXFont & setFamily(LyXFont::FONT_FAMILY f);
-       ///
-       LyXFont & setSeries(LyXFont::FONT_SERIES s);
-       ///
-       LyXFont & setShape(LyXFont::FONT_SHAPE s);
-       ///
-       LyXFont & setSize(LyXFont::FONT_SIZE s);
-       ///
-       LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
+       Language const * language() const;
+
        ///
-       LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
+       bool isRightToLeft() const;
+
        ///
-       LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
+       bool isVisibleRightToLeft() const;
+
        ///
-       LyXFont & setLatex(LyXFont::FONT_MISC_STATE l);
+       bool isSymbolFont() const;
+
        ///
-       LyXFont & setColor(LColor::color c);
-       ///
-       LyXFont & setDirection(LyXFont::FONT_DIRECTION d);
+       void setFamily(LyXFont::FONT_FAMILY f);
+       void setSeries(LyXFont::FONT_SERIES s);
+       void setShape(LyXFont::FONT_SHAPE s);
+       void setSize(LyXFont::FONT_SIZE s);
+       void setEmph(LyXFont::FONT_MISC_STATE e);
+       void setUnderbar(LyXFont::FONT_MISC_STATE u);
+       void setNoun(LyXFont::FONT_MISC_STATE n);
+       void setNumber(LyXFont::FONT_MISC_STATE n);
+       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 &);
-       /// Sets size after GUI name
-       LyXFont & setGUISize(string const &);
+       LyXFont & setLyXColor(std::string const &);
+
        /// Returns size of font in LaTeX text notation
-       string latexSize() const;
-       /** Updates font settings according to request. If an
-           attribute is IGNORE, the attribute is left as it is. */
-       /* 
-        * When toggleall = true, all properties that matches the font in use
-        * will have the effect that the properties is reset to the
-        * default.  If we have a text that is TYPEWRITER_FAMILY, and is
-        * update()'ed with TYPEWRITER_FAMILY, the operation will be as if
-        * a INHERIT_FAMILY was asked for.  This is necessary for the
-        * toggle-user-defined-style button on the toolbar.
-        */
-       void update(LyXFont const & newfont, bool toggleall = false);
+       std::string const latexSize() const;
+
+       /** Updates font settings according to request.
+           If an attribute is IGNORE, the attribute is left as it is.
+           When toggleall = true, all properties that matches the font in use
+           will have the effect that the properties is reset to the
+           default.  If we have a text that is TYPEWRITER_FAMILY, and is
+           update()'ed with TYPEWRITER_FAMILY, the operation will be as if
+           a INHERIT_FAMILY was asked for.  This is necessary for the
+           toggle-user-defined-style button on the toolbar.
+       */
+       void update(LyXFont const & newfont,
+                   Language const * default_lang,
+                   bool toggleall = false);
+
        /** Reduce font to fall back to template where possible.
            Equal fields are reduced to INHERIT */
        void reduce(LyXFont const & tmplt);
+
        /// Realize font from a template (INHERIT are realized)
        LyXFont & realize(LyXFont const & tmplt);
-
        /// Is a given font fully resolved?
        bool resolved() const;
+
        /// Read a font specification from LyXLex. Used for layout files.
        LyXFont & lyxRead(LyXLex &);
+
        /// Writes the changes from this font to orgfont in .lyx format in file
-       void lyxWriteChanges(LyXFont const & orgfont, ostream &) const;
+       void lyxWriteChanges(LyXFont const & orgfont, std::ostream &) const;
 
        /** Writes the head of the LaTeX needed to change to this font.
            Writes to string, the head of the LaTeX needed to change
            to this font. Returns number of chars written. Base is the
            font state active now.
        */
-       int latexWriteStartChanges(string &, LyXFont const & base,
+       int latexWriteStartChanges(std::ostream &, LyXFont const & base,
                                   LyXFont const & prev) 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(string &, LyXFont const & base,
+       int latexWriteEndChanges(std::ostream &, LyXFont const & base,
                                 LyXFont const & next) const;
-       /// Build GUI description of font state
-       string stateText() const;
-
-       ///
-       int maxAscent() const; 
-
-       ///
-       int maxDescent() const;
-
-       ///
-       int ascent(char c) const;
-
-       ///
-       int descent(char c) const;
-
-       ///
-       int width(char c) const;
-
-       ///
-       int lbearing(char c) const;
-
-       ///
-       int rbearing(char c) const;
-       
-       ///
-       int textWidth(char const *s, int n) const;
-
-       ///
-       int stringWidth(string const & s) const;
-
-       ///
-       int signedStringWidth(string const & s) const;
-
-       /// Draws text and returns width of text
-       int drawText(char const *, int n, Pixmap, int baseline, int x) const;
 
-       ///
-       int drawString(string const &, Pixmap pm, int baseline, int x) const;
+       /// Build GUI description of font state
+       std::string const stateText(BufferParams * params) const;
 
        ///
-       LColor::color realColor() const;
+       LColor_color realColor() const;
 
        ///
-       XID getFontID() const {
-               return getXFontstruct()->fid;
-       }
-       
-       ///
-       friend inline
-       bool operator==(LyXFont const & font1, LyXFont const & font2) {
-               return font1.bits == font2.bits;
-       }
-
+       friend
+       bool operator==(LyXFont const & font1, LyXFont const & font2);
        ///
-       friend inline
-       bool operator!=(LyXFont const & font1, LyXFont const & font2) {
-               return font1.bits != font2.bits;
-       }
+       friend
+       std::ostream & operator<<(std::ostream & os, LyXFont const & font);
 
-       /// compares two fonts, ignoring the setting of the Latex part.
-       bool equalExceptLatex(LyXFont const &) const;
+       /// Converts logical attributes to concrete shape attribute
+       LyXFont::FONT_SHAPE realShape() const;
 
-private:
-#ifdef NEW_BITS
-       ///
+       /** Compaq cxx 6.5 requires that the definition be public so that
+           it can compile operator==()
+        */
        struct FontBits {
-               bool operator==(FontBits const & fb1) const {
-                       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.latex == latex &&
-                               fb1.direction == direction;
-               }
-               bool operator!=(FontBits const & fb1) const {
-                       return !(fb1 == *this);
-               }
-               
-               FONT_FAMILY family;
-               FONT_SERIES series;
-               FONT_SHAPE shape;
-               FONT_SIZE size;
-               LColor::color color;
-               FONT_MISC_STATE emph;
-               FONT_MISC_STATE underbar;
-               FONT_MISC_STATE noun;
-               FONT_MISC_STATE latex;
-               FONT_DIRECTION direction;
-       };
-#else
-       /// This have to be at least 32 bits, but 64 or more does not hurt
-       typedef unsigned int ui32;
-#endif
-
-       /** Representation: bit table
-           Layout of bit table:
-               11 1111 111 122 222 222 2233
-           Bit 012 34 567 8901 2345 678 901 234 567 8901
-               FFF SS SSS SSSS CCCC EEE UUU NNN LLL
-               aaa ee hhh iiii oooo mmm nnn ooo aaa
-               mmm rr aaa zzzz llll ppp ddd uuu ttt
-
-           Bit 76543210 76543210 76543210 76543210
-                                                --- Fam_Pos
-                                             --    Ser_Pos
-                                          ---      Sha_Pos
-                                     ----          Siz_Pos
-                                 ----              Col_Pos
-                             ---                   Emp_Pos
-                          ---                      Und_Pos
-                      - --                         Nou_Pos
-                   ---                             Lat_Pos
-               ----                                Dir_Pos
-               
-           Some might think this is a dirty representation, but it gives
-           us at least 25% speed-up, so why not? (Asger)
-
-           First of all it is a maintence nightmare...and now that we need
-           to enlarge the Color bits with 2 (from 4 to 6), we have a problem
-           since a 32 bit entity is not large enough... (Lgb)
-       */
-
-#ifdef NEW_BITS
-       FontBits bits;
-#else
-       ui32 bits;
-       
-       ///
-       enum FONT_POSITION {
-               ///
-               Fam_Pos =  0,
                ///
-               Ser_Pos =  3,
-               ///
-               Sha_Pos =  5,
+               FONT_FAMILY family;
                ///
-               Siz_Pos =  8,
+               FONT_SERIES series;
                ///
-               Col_Pos = 12,
+               FONT_SHAPE shape;
                ///
-               Emp_Pos = 16,
+               FONT_SIZE size;
+               /** We store the LColor::color value as an int to get LColor.h out
+                *  of the header file.
+                */
+               int color;
                ///
-               Und_Pos = 19,
+               FONT_MISC_STATE emph;
                ///
-               Nou_Pos = 22,
+               FONT_MISC_STATE underbar;
                ///
-               Lat_Pos = 25,
+               FONT_MISC_STATE noun;
                ///
-               Dir_Pos = 28
+               FONT_MISC_STATE number;
        };
-
+private:
        ///
-       enum FONT_MASK {
-               ///
-               Fam_Mask = 0x07,
-               ///
-               Ser_Mask = 0x03,
-               ///
-               Sha_Mask = 0x07,
-               ///
-               Siz_Mask = 0x0f,
-               ///
-               Col_Mask = 0x0f,
-               ///
-               Dir_Mask = 0x07,
-               ///
-               Misc_Mask = 0x07
-       };
-#endif
-
-       
-#ifdef NEW_BITS
+       FontBits bits;
+       ///
+       Language const * lang;
        /// Sane font
        static FontBits sane;
-       
        /// All inherit font
        static FontBits inherit;
        /// All ignore font
        static FontBits ignore;
-
-#else
-       /// Sane font
-       enum {  sane = ui32(ROMAN_FAMILY) << Fam_Pos
-               | ui32(MEDIUM_SERIES) << Ser_Pos
-               | ui32(UP_SHAPE) << Sha_Pos
-               | ui32(SIZE_NORMAL) << Siz_Pos
-               | ui32(LColor::none) << Col_Pos
-               | ui32(OFF) << Emp_Pos
-               | ui32(OFF) << Und_Pos
-               | ui32(OFF) << Nou_Pos
-               | ui32(OFF) << Lat_Pos
-               | ui32(LTR_DIR) << Dir_Pos};
-       
-       /// All inherit font
-       enum{ inherit = ui32(INHERIT_FAMILY) << Fam_Pos
-                     | ui32(INHERIT_SERIES) << Ser_Pos
-                     | ui32(INHERIT_SHAPE) << Sha_Pos
-                     | ui32(INHERIT_SIZE) << Siz_Pos
-                     | ui32(LColor::inherit) << Col_Pos
-                     | ui32(INHERIT) << Emp_Pos
-                     | ui32(INHERIT) << Und_Pos
-                     | ui32(INHERIT) << Nou_Pos
-                     | ui32(INHERIT) << Lat_Pos
-                     | ui32(INHERIT_DIR) << Dir_Pos};
-       /// All ignore font
-       enum{ ignore = ui32(IGNORE_FAMILY) << Fam_Pos
-                     | ui32(IGNORE_SERIES) << Ser_Pos
-                     | ui32(IGNORE_SHAPE) << Sha_Pos
-                     | ui32(IGNORE_SIZE) << Siz_Pos
-                     | ui32(LColor::ignore) << Col_Pos
-                     | ui32(IGNORE) << Emp_Pos
-                     | ui32(IGNORE) << Und_Pos
-                     | ui32(IGNORE) << Nou_Pos
-                     | ui32(IGNORE) << Lat_Pos
-                     | ui32(IGNORE_DIR) << Dir_Pos};
-#endif
        /// Updates a misc setting according to request
        LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
                                         LyXFont::FONT_MISC_STATE org);
+};
 
-       /// Converts logical attributes to concrete shape attribute
-       LyXFont::FONT_SHAPE realShape() const;
 
+/** \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) {}
        ///
-       XFontStruct * getXFontstruct() const;
+       operator LyXFont::FONT_SIZE() const { return val_; }
+private:
+       ///
+       LyXFont::FONT_SIZE val_;
 };
 
-ostream & operator<<(ostream &, LyXFont::FONT_MISC_STATE);
-
-inline LyXFont::LyXFont()
-{
-       bits = sane;
-}
-
-
-inline LyXFont::LyXFont(LyXFont const & x)
-{
-       bits = x.bits;
-}
-
-
-inline LyXFont::LyXFont(LyXFont::FONT_INIT1)
-{
-       bits = inherit;
-}
-
-
-inline LyXFont::LyXFont(LyXFont::FONT_INIT2)
-{
-       bits = ignore;
-}
-
-
-inline LyXFont::LyXFont(LyXFont::FONT_INIT3)
-{
-       bits = sane;
-}
 
 
-inline LyXFont & LyXFont::operator=(LyXFont const & x) 
+inline
+LyXFont::FONT_SHAPE LyXFont::shape() const
 {
-       bits = x.bits;
-       return *this;
+       return bits.shape;
 }
 
 
-#ifdef NEW_BITS
-// You don't have to understand the stuff below :-)
-// It works, and it's bloody fast. (Asger)
-// And impossible to work with. (Lgb)
-
 inline
-LyXFont::FONT_FAMILY LyXFont::family() const 
+LyXFont::FONT_FAMILY LyXFont::family() const
 {
        return bits.family;
 }
@@ -600,13 +392,6 @@ LyXFont::FONT_SERIES LyXFont::series() const
 }
 
 
-inline
-LyXFont::FONT_SHAPE LyXFont::shape() const
-{
-       return bits.shape;
-}
-
-
 inline
 LyXFont::FONT_SIZE LyXFont::size() const
 {
@@ -621,13 +406,6 @@ LyXFont::FONT_MISC_STATE LyXFont::emph() const
 }
 
 
-inline
-LyXFont::FONT_MISC_STATE LyXFont::underbar() const
-{
-       return bits.underbar;
-}
-
-
 inline
 LyXFont::FONT_MISC_STATE LyXFont::noun() const
 {
@@ -636,243 +414,45 @@ LyXFont::FONT_MISC_STATE LyXFont::noun() const
 
 
 inline
-LyXFont::FONT_MISC_STATE LyXFont::latex() const 
-{
-       return bits.latex;
-}
-
-
-inline
-LColor::color LyXFont::color() const 
-{
-       return bits.color;
-}
-
-
-inline
-LyXFont::FONT_DIRECTION LyXFont::direction() const 
-{
-       return bits.direction;
-}
-
-inline
-LyXFont & LyXFont::setFamily(LyXFont::FONT_FAMILY f)
-{
-       bits.family = f;
-       return *this;
-}
-
-
-inline
-LyXFont & LyXFont::setSeries(LyXFont::FONT_SERIES s)
-{
-       bits.series = s;
-       return *this;
-}
-
-
-inline
-LyXFont & LyXFont::setShape(LyXFont::FONT_SHAPE s)
-{
-       bits.shape = s;
-       return *this;
-}
-
-
-inline
-LyXFont & LyXFont::setSize(LyXFont::FONT_SIZE s)
-{
-       bits.size = s;
-       return *this;
-}
-
-
-inline
-LyXFont & LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
-{
-       bits.emph = e;
-       return *this;
-}
-
-
-inline
-LyXFont & LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
-{
-       bits.underbar = u;
-       return *this;
+bool LyXFont::isSymbolFont() const
+{
+       switch (family()) {
+       case LyXFont::SYMBOL_FAMILY:
+       case LyXFont::CMSY_FAMILY:
+       case LyXFont::CMM_FAMILY:
+       case LyXFont::CMEX_FAMILY:
+       case LyXFont::MSA_FAMILY:
+       case LyXFont::MSB_FAMILY:
+       case LyXFont::WASY_FAMILY:
+               return true;
+       default:
+               return false;
+       }
 }
 
+///
+std::ostream & operator<<(std::ostream &, LyXFont::FONT_MISC_STATE);
 
-inline
-LyXFont & LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)
-{
-       bits.noun = n;
-       return *this;
-}
+bool operator==(LyXFont::FontBits const & lhs, LyXFont::FontBits const & rhs);
 
 inline
-LyXFont & LyXFont::setLatex(LyXFont::FONT_MISC_STATE l)
+bool operator!=(LyXFont::FontBits const & lhs, LyXFont::FontBits const & rhs)
 {
-       bits.latex = l;
-       return *this;
+       return !(lhs == rhs);
 }
 
-
+///
 inline
-LyXFont & LyXFont::setColor(LColor::color c)
+bool operator==(LyXFont const & font1, LyXFont const & font2)
 {
-       bits.color = c;
-       return *this;
+       return font1.bits == font2.bits && font1.lang == font2.lang;
 }
 
-
+///
 inline
-LyXFont & LyXFont::setDirection(LyXFont::FONT_DIRECTION d)
-{
-       bits.direction = d;
-       return *this;
-}
-#else
-// You don't have to understand the stuff below :-)
-// It works, and it's bloody fast. (Asger)
-// And impossible to work with. (Lgb)
-
-inline LyXFont::FONT_FAMILY LyXFont::family() const 
-{
-       return LyXFont::FONT_FAMILY((bits >> Fam_Pos) & Fam_Mask);
-}
-
-
-inline LyXFont::FONT_SERIES LyXFont::series() const
-{
-       return LyXFont::FONT_SERIES((bits >> Ser_Pos) & Ser_Mask);
-}
-
-
-inline LyXFont::FONT_SHAPE LyXFont::shape() const
-{
-       return LyXFont::FONT_SHAPE((bits >> Sha_Pos) & Sha_Mask);
-}
-
-
-inline LyXFont::FONT_SIZE LyXFont::size() const
-{
-       return LyXFont::FONT_SIZE((bits >> Siz_Pos) & Siz_Mask);
-}
-
-
-inline LyXFont::FONT_MISC_STATE LyXFont::emph() const
-{
-       return LyXFont::FONT_MISC_STATE((bits >> Emp_Pos) & Misc_Mask);
-}
-
-
-inline LyXFont::FONT_MISC_STATE LyXFont::underbar() const
-{
-       return LyXFont::FONT_MISC_STATE((bits >> Und_Pos) & Misc_Mask);
-}
-
-
-inline LyXFont::FONT_MISC_STATE LyXFont::noun() const
-{
-       return LyXFont::FONT_MISC_STATE((bits >> Nou_Pos) & Misc_Mask);
-}
-
-
-inline LyXFont::FONT_MISC_STATE LyXFont::latex() const 
-{
-       return LyXFont::FONT_MISC_STATE((bits >> Lat_Pos) & Misc_Mask);
-}
-
-
-inline LColor::color LyXFont::color() const 
-{
-       return LColor::color((bits >> Col_Pos) & Col_Mask);
-}
-
-
-inline LyXFont::FONT_DIRECTION LyXFont::direction() const 
-{
-       return LyXFont::FONT_DIRECTION((bits >> Dir_Pos) & Dir_Mask);
-}
-
-inline LyXFont & LyXFont::setFamily(LyXFont::FONT_FAMILY f)
-{
-       bits &= ~(Fam_Mask << Fam_Pos);
-       bits |= ui32(f) << Fam_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setSeries(LyXFont::FONT_SERIES s)
+bool operator!=(LyXFont const & font1, LyXFont const & font2)
 {
-       bits &= ~(Ser_Mask << Ser_Pos);
-       bits |= ui32(s) << Ser_Pos;
-       return *this;
+       return !(font1 == font2);
 }
 
-
-inline LyXFont & LyXFont::setShape(LyXFont::FONT_SHAPE s)
-{
-       bits &= ~(Sha_Mask << Sha_Pos);
-       bits |= ui32(s) << Sha_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setSize(LyXFont::FONT_SIZE s)
-{
-       bits &= ~(Siz_Mask << Siz_Pos);
-       bits |= ui32(s) << Siz_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
-{
-       bits &= ~(Misc_Mask << Emp_Pos);
-       bits |= ui32(e) << Emp_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
-{
-       bits &= ~(Misc_Mask << Und_Pos);
-       bits |= ui32(u) << Und_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)
-{
-       bits &= ~(Misc_Mask << Nou_Pos);
-       bits |= ui32(n) << Nou_Pos;
-       return *this;
-}
-
-inline LyXFont & LyXFont::setLatex(LyXFont::FONT_MISC_STATE l)
-{
-       bits &= ~(Misc_Mask << Lat_Pos);
-       bits |= ui32(l) << Lat_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setColor(LColor::color c)
-{
-       bits &= ~(Col_Mask << Col_Pos);
-       bits |= ui32(c) << Col_Pos;
-       return *this;
-}
-
-
-inline LyXFont & LyXFont::setDirection(LyXFont::FONT_DIRECTION d)
-{
-       bits &= ~(Dir_Mask << Dir_Pos);
-       bits |= ui32(d) << Dir_Pos;
-       return *this;
-}
-#endif
-
 #endif