X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2FContext.cpp;h=f214f770ee466a39c5803c2ad278f61caa6d8724;hb=7f24e3ad4f04ba541d6d06066685a4dbdacfc7c7;hp=1e05984bcfb7a4371ce1b8ee8517e0a35e23dea7;hpb=835d051ae3e6b6486f95b0871cfe3b662b5ee1db;p=lyx.git diff --git a/src/tex2lyx/Context.cpp b/src/tex2lyx/Context.cpp index 1e05984bcf..f214f770ee 100644 --- a/src/tex2lyx/Context.cpp +++ b/src/tex2lyx/Context.cpp @@ -24,16 +24,6 @@ namespace lyx { namespace { -void begin_layout(ostream & os, Layout const * const & 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"; @@ -51,7 +41,7 @@ void end_deeper(ostream & os) os << "\n\\end_deeper"; } -} +} // namespace bool operator==(TeXFont const & f1, TeXFont const & f2) @@ -60,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; } @@ -75,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'; } @@ -85,13 +78,14 @@ bool Context::empty = true; Context::Context(bool need_layout_, TeX2LyXDocClass const & textclass_, Layout const * layout_, Layout const * parent_layout_, - TeXFont font_) + TeXFont const & 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_), + has_item(false), in_list_preamble(false), deeper_paragraph(false), + new_layout_allowed(true), merging_hyphens_allowed(true), + textclass(textclass_), layout(layout_), parent_layout(parent_layout_), - font(font_) + font(font_), tablerotation(0) { if (!layout) layout = &textclass.defaultLayout(); @@ -102,9 +96,28 @@ Context::Context(bool need_layout_, Context::~Context() { - if (!extra_stuff.empty()) - cerr << "Bug: Ignoring extra stuff '" << extra_stuff - << '\'' << 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); } @@ -124,29 +137,23 @@ 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 - // enumeration. We have to recognize - // that this may require a begin_deeper. + // A standard paragraph in a list. + // We have to recognize 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; } } @@ -212,6 +219,13 @@ void Context::add_extra_stuff(string const & 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 <<" ["; @@ -227,8 +241,14 @@ 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 << "] "; + if (!list_extra_stuff.empty()) + os << "listextrastuff=[" << list_extra_stuff << "] "; os << "textclass=" << textclass.name() << " layout=" << to_utf8(layout->name()) << " parent_layout=" << to_utf8(parent_layout->name()) << "] font=["