X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2Fcontext.C;h=12404d9d12711564dbd08203c6a5500425e4223b;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=ee536db4db0bf2830102e5b0b7c8d460031e46d6;hpb=f17505a8fb8b26b1ece59f57aff2f84d90be6438;p=lyx.git diff --git a/src/tex2lyx/context.C b/src/tex2lyx/context.C index ee536db4db..12404d9d12 100644 --- a/src/tex2lyx/context.C +++ b/src/tex2lyx/context.C @@ -15,6 +15,9 @@ #include "support/lstrings.h" #include "context.h" + +namespace lyx { + using std::ostream; using std::endl; using std::string; @@ -22,9 +25,13 @@ using std::string; namespace { -void begin_layout(ostream & os, LyXLayout_ptr layout) +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); } @@ -36,25 +43,54 @@ void end_layout(ostream & os) void begin_deeper(ostream & os) { - os << "\n\\begin_deeper\n"; + os << "\n\\begin_deeper"; } void end_deeper(ostream & os) { - os << "\n\\end_deeper\n"; + os << "\n\\end_deeper"; +} + +} + + +bool operator==(Font const & f1, Font const & f2) +{ + return + f1.size == f2.size && + f1.family == f2.family && + f1.series == f2.series && + f1.shape == f2.shape; } + +void output_font_change(ostream & os, Font const & oldfont, + Font const & newfont) +{ + if (oldfont.family != newfont.family) + os << "\n\\family " << newfont.family << '\n'; + if (oldfont.series != newfont.series) + os << "\n\\series " << newfont.series << '\n'; + if (oldfont.shape != newfont.shape) + os << "\n\\shape " << newfont.shape << '\n'; + if (oldfont.size != newfont.size) + os << "\n\\size " << newfont.size << '\n'; } + +Font Context::normalfont; +bool Context::empty = true; + + Context::Context(bool need_layout_, LyXTextClass const & textclass_, LyXLayout_ptr layout_, LyXLayout_ptr parent_layout_, - Font font_) + Font font_) : need_layout(need_layout_), need_end_layout(false), need_end_deeper(false), has_item(false), deeper_paragraph(false), - textclass(textclass_), + new_layout_allowed(true), textclass(textclass_), layout(layout_), parent_layout(parent_layout_), font(font_) { @@ -65,6 +101,14 @@ Context::Context(bool need_layout_, } +Context::~Context() +{ + if (!extra_stuff.empty()) + std::cerr << "Bug: Ignoring extra stuff '" << extra_stuff + << '\'' << std::endl; +} + + void Context::check_layout(ostream & os) { if (need_layout) { @@ -73,36 +117,38 @@ void Context::check_layout(ostream & os) // are we in a list-like environment? if (layout->isEnvironment() && layout->latextype != LATEX_ENVIRONMENT) { + // A list-like environment if (has_item) { + // a new item. If we had a standard + // paragraph before, we have to end it. if (deeper_paragraph) { end_deeper(os); deeper_paragraph = false; } - begin_layout(os, layout); + begin_layout(os, layout, font, normalfont); has_item = false; - need_layout=false; - need_end_layout = true; } else { // a standard paragraph in an // enumeration. We have to recognize // that this may require a begin_deeper. if (!deeper_paragraph) begin_deeper(os); - begin_layout(os, textclass.defaultLayout()); - need_layout=false; - need_end_layout = true; + begin_layout(os, textclass.defaultLayout(), + font, normalfont); deeper_paragraph = true; } } else { - begin_layout(os, layout); - need_layout=false; - need_end_layout = true; + // No list-like environment + begin_layout(os, layout, font, normalfont); } + need_layout = false; + need_end_layout = true; if (!extra_stuff.empty()) { os << extra_stuff; extra_stuff.erase(); } os << "\n"; + empty = false; } } @@ -119,6 +165,8 @@ void Context::check_end_layout(ostream & os) void Context::check_deeper(ostream & os) { if (parent_layout->isEnvironment()) { + // We start a nested environment. + // We need to increase the depth. if (need_end_deeper) { // no need to have \end_deeper \begin_deeper need_end_deeper = false; @@ -178,8 +226,16 @@ void Context::dump(ostream & os, string const & desc) const os << "has_item "; if (deeper_paragraph) os << "deeper_paragraph "; + if (new_layout_allowed) + os << "new_layout_allowed "; if (!extra_stuff.empty()) os << "extrastuff=[" << extra_stuff << "] "; - os << "layout=" << layout->name(); - os << " parent_layout=" << parent_layout->name() << "]" << endl; + os << "textclass=" << textclass.name() + << " layout=" << layout->name() + << " parent_layout=" << parent_layout->name() << "] font=[" + << font.size << ' ' << font.family << ' ' << font.series << ' ' + << font.shape << ']' << endl; } + + +} // namespace lyx