X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.C;h=bca30a65471e4667b3a210f1e9e705108d590a23;hb=414a11684e77aee713135ae65ec7438cfc4b162f;hp=f1fcc38d9671adc251650d3f156d881fe4858856;hpb=21f14a3a3e7d9d776577c4f0e34968aac08b3d03;p=lyx.git diff --git a/src/output_latex.C b/src/output_latex.C index f1fcc38d96..bca30a6547 100644 --- a/src/output_latex.C +++ b/src/output_latex.C @@ -18,27 +18,24 @@ #include "encoding.h" #include "language.h" #include "lyxrc.h" +#include "outputparams.h" #include "paragraph.h" #include "paragraph_funcs.h" #include "ParagraphParameters.h" #include "texrow.h" #include "vspace.h" +#include "insets/insetbibitem.h" #include "insets/insetoptarg.h" #include "support/lstrings.h" -#ifdef HAVE_LOCALE -#endif - using lyx::support::subst; using std::endl; using std::ostream; using std::string; -extern string bibitemWidest(Buffer const &); - namespace { @@ -78,7 +75,7 @@ TeXDeeper(Buffer const & buf, os, texrow, runparams); } } - lyxerr[Debug::LATEX] << "TeXDeeper...done " << &*par << endl; + lyxerr[Debug::LATEX] << "TeXDeeper...done " << endl; return par; } @@ -189,23 +186,28 @@ TeXEnvironment(Buffer const & buf, texrow.newline(); } - lyxerr[Debug::LATEX] << "TeXEnvironment...done " << &*par << endl; - return par; // ale970302 + if (par != paragraphs.end() && lyxerr.debugging(Debug::LATEX)) + lyxerr << "TeXEnvironment...done " << &*par << endl; + return par; } -InsetOptArg * optArgInset(Paragraph const & par) +int latexOptArgInsets(Buffer const & buf, Paragraph const & par, + ostream & os, OutputParams const & runparams, int number) { - // Find the entry. + int lines = 0; + InsetList::const_iterator it = par.insetlist.begin(); InsetList::const_iterator end = par.insetlist.end(); - for (; it != end; ++it) { - InsetBase * ins = it->inset; - if (ins->lyxCode() == InsetBase::OPTARG_CODE) { - return static_cast(ins); + for (; it != end && number > 0 ; ++it) { + if (it->inset->lyxCode() == InsetBase::OPTARG_CODE) { + InsetOptArg * ins = + static_cast(it->inset); + lines += ins->latexOptional(buf, os, runparams); + --number; } } - return 0; + return lines; } @@ -214,7 +216,7 @@ TeXOnePar(Buffer const & buf, ParagraphList const & paragraphs, ParagraphList::const_iterator pit, ostream & os, TexRow & texrow, - OutputParams const & runparams, + OutputParams const & runparams_in, string const & everypar) { lyxerr[Debug::LATEX] << "TeXOnePar... " << &*pit << " '" @@ -225,11 +227,14 @@ TeXOnePar(Buffer const & buf, // In an an inset with unlimited length (all in one row), // force layout to default - if (!pit->forceDefaultParagraphs()) + if (!pit->forceDefaultParagraphs()) style = pit->layout(); else style = bparams.getLyXTextClass().defaultLayout(); + OutputParams runparams = runparams_in; + runparams.moving_arg |= style->needprotect; + Language const * language = pit->getParLanguage(bparams); Language const * doc_language = bparams.language; Language const * previous_language = @@ -297,17 +302,20 @@ TeXOnePar(Buffer const & buf, os << '\n'; texrow.newline(); } - } + } switch (style->latextype) { case LATEX_COMMAND: os << '\\' << style->latexname(); // Separate handling of optional argument inset. - if (style->optionalargs == 1) { - InsetOptArg * it = optArgInset(*pit); - if (it) - it->latexOptional(buf, os, runparams); + if (style->optionalargs > 0) { + int ret = latexOptArgInsets(buf, *pit, os, runparams, + style->optionalargs); + while (ret > 0) { + texrow.newline(); + --ret; + } } else os << style->latexparam(); @@ -405,7 +413,7 @@ paragraphs); } } - if (boost::next(pit) == const_cast(paragraphs).end() + if (boost::next(pit) == paragraphs.end() && language->babel() != doc_language->babel()) { // Since \selectlanguage write the language to the aux file, // we need to reset the language at the end of footnote or @@ -432,7 +440,9 @@ paragraphs); texrow.newline(); } - lyxerr[Debug::LATEX] << "TeXOnePar...done " << &*boost::next(pit) << endl; + if (boost::next(pit) != paragraphs.end() && + lyxerr.debugging(Debug::LATEX)) + lyxerr << "TeXOnePar...done " << &*boost::next(pit) << endl; return ++pit; }