+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)
+{}
+
+
+
+LColor_color LyXFont::color() const
+{
+ return LColor::color(bits.color);
+}
+
+
+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)
+{
+ bits.shape = s;
+}
+
+
+void LyXFont::setSize(LyXFont::FONT_SIZE s)
+{
+ bits.size = s;
+}
+
+
+void LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
+{
+ bits.emph = e;
+}
+
+
+void LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
+{
+ bits.underbar = u;
+}
+
+
+void LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)