X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2FContext.cpp;h=f214f770ee466a39c5803c2ad278f61caa6d8724;hb=2e72ed3e2c12a32f482a6d5a14a39a5636092525;hp=94bb4668fc5ff6f2677967efec58eedcd55a61d0;hpb=4a53fa6e018c2809a3e829c7d8d90590e420a2e3;p=lyx.git diff --git a/src/tex2lyx/Context.cpp b/src/tex2lyx/Context.cpp index 94bb4668fc..f214f770ee 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 " << 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"; @@ -52,7 +41,7 @@ void end_deeper(ostream & os) os << "\n\\end_deeper"; } -} +} // namespace bool operator==(TeXFont const & f1, TeXFont const & f2) @@ -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_, - TeXFont font_) + TeX2LyXDocClass const & textclass_, + Layout const * layout_, Layout const * parent_layout_, + 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.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,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; } } @@ -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,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=["