#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, LayoutPtr layout, TeXFont const & font,
- TeXFont const & normalfont)
-{
- os << "\n\\begin_layout " << to_utf8(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";
f1.size == f2.size &&
f1.family == f2.family &&
f1.series == f2.series &&
- f1.shape == f2.shape;
+ f1.shape == f2.shape &&
+ f1.language == f2.language;
}
os << "\n\\shape " << newfont.shape << '\n';
if (oldfont.size != newfont.size)
os << "\n\\size " << newfont.size << '\n';
+ if (oldfont.language != newfont.language)
+ os << "\n\\lang " << newfont.language << '\n';
}
Context::Context(bool need_layout_,
- TextClass const & textclass_,
- LayoutPtr layout_, LayoutPtr parent_layout_,
+ 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),
- new_layout_allowed(true), textclass(textclass_),
+ new_layout_allowed(true), merging_hyphens_allowed(true),
+ textclass(textclass_),
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
+ // FIXME: If the document language is not english this outputs a
+ // superflous language change. Fortunately this is only file format
+ // bloat and does not change the TeX export of LyX.
+ 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 << "deeper_paragraph ";
if (new_layout_allowed)
os << "new_layout_allowed ";
+ if (merging_hyphens_allowed)
+ os << "merging_hyphens_allowed ";
if (!extra_stuff.empty())
os << "extrastuff=[" << extra_stuff << "] ";
+ if (!par_extra_stuff.empty())
+ os << "parextrastuff=[" << par_extra_stuff << "] ";
os << "textclass=" << textclass.name()
<< " layout=" << to_utf8(layout->name())
<< " parent_layout=" << to_utf8(parent_layout->name()) << "] font=["