+bool operator==(LyXFont::FontBits const & lhs,
+ LyXFont::FontBits const & rhs)
+{
+ 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;
+}
+
+
+LyXFont::LyXFont()
+ : bits(sane), lang(default_language)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT1)
+ : bits(inherit), lang(default_language)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT2)
+ : bits(ignore), lang(ignore_language)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT3)
+ : bits(sane), lang(default_language)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT1, Language const * l)
+ : bits(inherit), lang(l)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT2, Language const * l)
+ : bits(ignore), lang(l)
+{}
+
+
+LyXFont::LyXFont(LyXFont::FONT_INIT3, Language const * l)
+ : bits(sane), lang(l)
+{}
+
+
+LyXFont::FONT_MISC_STATE LyXFont::underbar() const
+{
+ return bits.underbar;
+}
+
+
+LColor_color LyXFont::color() const
+{
+ return LColor::color(bits.color);
+}
+
+
+Language const * LyXFont::language() const
+{
+ return lang;
+}
+
+
+LyXFont::FONT_MISC_STATE LyXFont::number() const
+{
+ return bits.number;
+}
+
+
+bool LyXFont::isRightToLeft() const
+{
+ return lang->RightToLeft();
+}
+
+
+bool LyXFont::isVisibleRightToLeft() const
+{
+ return (lang->RightToLeft() &&
+ number() != ON);
+}
+
+
+void LyXFont::setFamily(LyXFont::FONT_FAMILY f)
+{
+ bits.family = f;
+}
+
+
+void LyXFont::setSeries(LyXFont::FONT_SERIES s)
+{
+ bits.series = s;
+}
+
+
+void LyXFont::setShape(LyXFont::FONT_SHAPE s)