X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2Fcontext.C;h=12404d9d12711564dbd08203c6a5500425e4223b;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=882637d4800b5584b98072023b66de76254c6f1c;hpb=6383254672eb1ebd9aae99fc1534f85ffed2d217;p=lyx.git diff --git a/src/tex2lyx/context.C b/src/tex2lyx/context.C index 882637d480..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); } @@ -47,6 +54,35 @@ void end_deeper(ostream & os) } + +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_, @@ -54,7 +90,7 @@ Context::Context(bool need_layout_, : 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) { @@ -81,32 +125,30 @@ void Context::check_layout(ostream & os) 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 { // No list-like environment - begin_layout(os, layout); - need_layout=false; - need_end_layout = true; + 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; } } @@ -184,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