#include <config.h>
-#include <iostream>
-
-#include "support/lstrings.h"
#include "Context.h"
+#include "Layout.h"
+#include "support/lstrings.h"
-namespace lyx {
+#include <iostream>
-using std::ostream;
-using std::endl;
-using std::string;
+using namespace std;
+using namespace lyx::support;
+namespace lyx {
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";
}
-bool operator==(Font const & f1, Font const & f2)
+bool operator==(TeXFont const & f1, TeXFont const & f2)
{
return
f1.size == f2.size &&
}
-void output_font_change(ostream & os, Font const & oldfont,
- Font const & newfont)
+void output_font_change(ostream & os, TeXFont const & oldfont,
+ TeXFont const & newfont)
{
if (oldfont.family != newfont.family)
os << "\n\\family " << newfont.family << '\n';
}
-Font Context::normalfont;
+TeXFont Context::normalfont;
bool Context::empty = true;
Context::Context(bool need_layout_,
- LyXTextClass const & textclass_,
- LyXLayout_ptr layout_, LyXLayout_ptr parent_layout_,
- Font font_)
+ TeX2LyXDocClass const & textclass_,
+ Layout const * layout_, Layout const * parent_layout_,
+ TeXFont font_)
: need_layout(need_layout_),
need_end_layout(false), need_end_deeper(false),
has_item(false), deeper_paragraph(false),
layout(layout_), parent_layout(parent_layout_),
font(font_)
{
- if (!layout.get())
- layout = textclass.defaultLayout();
- if (!parent_layout.get())
- parent_layout = textclass.defaultLayout();
+ if (!layout)
+ layout = &textclass.defaultLayout();
+ if (!parent_layout)
+ parent_layout = &textclass.defaultLayout();
}
Context::~Context()
{
- if (!extra_stuff.empty())
- std::cerr << "Bug: Ignoring extra stuff '" << extra_stuff
- << '\'' << std::endl;
+ if (!par_extra_stuff.empty())
+ cerr << "Bug: Ignoring par-level extra stuff '"
+ << par_extra_stuff << '\'' << endl;
+}
+
+
+void Context::begin_layout(ostream & os, Layout const * const & l)
+{
+ os << "\n\\begin_layout " << to_utf8(l->name()) << "\n";
+ if (!extra_stuff.empty()) {
+ os << extra_stuff;
+ }
+ if (!par_extra_stuff.empty()) {
+ os << par_extra_stuff;
+ par_extra_stuff.erase();
+ }
+ // FIXME: This is not enough for things like
+ // \\Huge par1 \\par par2
+ output_font_change(os, normalfont, font);
}
end_deeper(os);
deeper_paragraph = false;
}
- begin_layout(os, layout, font, normalfont);
+ begin_layout(os, layout);
has_item = false;
} else {
// a standard paragraph in an
// that this may require a begin_deeper.
if (!deeper_paragraph)
begin_deeper(os);
- begin_layout(os, textclass.defaultLayout(),
- font, normalfont);
+ begin_layout(os, &textclass.defaultLayout());
deeper_paragraph = true;
}
} else {
// No list-like environment
- begin_layout(os, layout, font, normalfont);
+ begin_layout(os, layout);
}
need_layout = false;
need_end_layout = true;
- if (!extra_stuff.empty()) {
- os << extra_stuff;
- extra_stuff.erase();
- }
os << "\n";
empty = false;
}
}
-void Context::add_extra_stuff(std::string const & stuff)
+void Context::add_extra_stuff(string const & stuff)
{
- if (!lyx::support::contains(extra_stuff, stuff))
+ if (!contains(extra_stuff, stuff))
extra_stuff += stuff;
}
+void Context::add_par_extra_stuff(string const & stuff)
+{
+ if (!contains(par_extra_stuff, stuff))
+ par_extra_stuff += stuff;
+}
+
+
void Context::dump(ostream & os, string const & desc) const
{
os << "\n" << desc <<" [";
os << "new_layout_allowed ";
if (!extra_stuff.empty())
os << "extrastuff=[" << extra_stuff << "] ";
+ if (!par_extra_stuff.empty())
+ os << "parextrastuff=[" << par_extra_stuff << "] ";
os << "textclass=" << textclass.name()
- << " layout=" << layout->name()
- << " parent_layout=" << parent_layout->name() << "] font=["
+ << " layout=" << to_utf8(layout->name())
+ << " parent_layout=" << to_utf8(parent_layout->name()) << "] font=["
<< font.size << ' ' << font.family << ' ' << font.series << ' '
<< font.shape << ']' << endl;
}