+using std::string;
+
+
+namespace {
+
+void begin_layout(ostream & os, LyXLayout_ptr layout, Font const & font,
+ Font const & normalfont)
+{
+ os << "\n\\begin_layout " << layout->name() << "\n";
+ // FIXME: This is not enough for things like
+ // \\Huge par1 \\par par2
+ output_font_change(os, normalfont, font);
+}
+
+
+void end_layout(ostream & os)
+{
+ os << "\n\\end_layout\n";
+}
+
+
+void begin_deeper(ostream & os)
+{
+ os << "\n\\begin_deeper";
+}
+
+
+void end_deeper(ostream & os)
+{
+ os << "\n\\end_deeper";
+}
+
+}
+
+
+bool operator==(Font const & f1, Font const & f2)
+{
+ return
+ f1.size == f2.size &&
+ f1.family == f2.family &&
+ f1.series == f2.series &&
+ f1.shape == f2.shape;
+}
+
+
+void output_font_change(ostream & os, Font const & oldfont,
+ Font const & newfont)
+{
+ if (oldfont.family != newfont.family)
+ os << "\n\\family " << newfont.family << '\n';
+ if (oldfont.series != newfont.series)
+ os << "\n\\series " << newfont.series << '\n';
+ if (oldfont.shape != newfont.shape)
+ os << "\n\\shape " << newfont.shape << '\n';
+ if (oldfont.size != newfont.size)
+ os << "\n\\size " << newfont.size << '\n';
+}
+
+
+Font Context::normalfont;
+bool Context::empty = true;
+