X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2FContext.cpp;h=2f49a071f5f663dd5df3b3a108cafaefe0e5225c;hb=237193f8a888777192981136469a5d4febb8e9d8;hp=d7baa2822aca54140d944c4297624a3beb7364fa;hpb=6add1994c75c0f3e0db50ab6c94ac3b73deb1561;p=lyx.git diff --git a/src/tex2lyx/Context.cpp b/src/tex2lyx/Context.cpp index d7baa2822a..2f49a071f5 100644 --- a/src/tex2lyx/Context.cpp +++ b/src/tex2lyx/Context.cpp @@ -10,31 +10,20 @@ #include -#include - -#include "support/lstrings.h" #include "Context.h" +#include "Layout.h" +#include "support/lstrings.h" -namespace lyx { +#include -using std::ostream; -using std::endl; -using std::string; +using namespace std; +using namespace lyx::support; +namespace lyx { namespace { -void begin_layout(ostream & os, Layout_ptr layout, TeXFont const & font, - TeXFont 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"; @@ -61,7 +50,8 @@ bool operator==(TeXFont const & f1, TeXFont const & f2) f1.size == f2.size && f1.family == f2.family && f1.series == f2.series && - f1.shape == f2.shape; + f1.shape == f2.shape && + f1.language == f2.language; } @@ -76,6 +66,8 @@ void output_font_change(ostream & os, TeXFont const & oldfont, 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'; } @@ -84,28 +76,48 @@ bool Context::empty = true; Context::Context(bool need_layout_, - TextClass const & textclass_, - Layout_ptr layout_, Layout_ptr 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); } @@ -125,7 +137,7 @@ void Context::check_layout(ostream & os) 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 @@ -133,21 +145,15 @@ void Context::check_layout(ostream & os) // 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; } } @@ -206,13 +212,20 @@ void Context::new_paragraph(ostream & os) } -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 <<" ["; @@ -228,11 +241,15 @@ void Context::dump(ostream & os, string const & desc) const 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=" << 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; }