From a2f886d52617815e8c80f12ef66198307d3432d6 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Tue, 26 Dec 2017 13:11:00 +0100 Subject: [PATCH] Use TeXOnePar for the inpreamble layouts This considers paragraph language and spacing (and simplifies the code) --- src/Paragraph.cpp | 35 ++++++----------------------------- src/output_latex.cpp | 11 ++++++----- src/output_latex.h | 3 ++- 3 files changed, 14 insertions(+), 35 deletions(-) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index c37220effc..abb2768d75 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -1440,40 +1440,17 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const BufferParams const & bp = features.runparams().is_child ? buf.masterParams() : buf.params(); if (layout_->inpreamble && inset_owner_) { - bool const is_command = layout_->latextype == LATEX_COMMAND; - Font f; - // Using a string stream here circumvents the encoding + // FIXME: Using a string stream here circumvents the encoding // switching machinery of odocstream. Therefore the // output is wrong if this paragraph contains content // that needs to switch encoding. otexstringstream os; os << layout_->preamble(); - if (is_command) { - os << '\\' << from_ascii(layout_->latexname()); - // we have to provide all the optional arguments here, even though - // the last one is the only one we care about. - // Separate handling of optional argument inset. - if (!layout_->latexargs().empty()) { - OutputParams rp = features.runparams(); - rp.local_font = &owner_->getFirstFontSettings(bp); - latexArgInsets(*owner_, os, rp, layout_->latexargs()); - } - os << from_ascii(layout_->latexparam()); - } size_t const length = os.length(); - // this will output "{" at the beginning, but not at the end - owner_->latex(bp, f, os, features.runparams(), 0, -1, true); - if (os.length() > length) { - if (is_command) { - os << '}'; - if (!layout_->postcommandargs().empty()) { - OutputParams rp = features.runparams(); - rp.local_font = &owner_->getFirstFontSettings(bp); - latexArgInsets(*owner_, os, rp, layout_->postcommandargs(), "post:"); - } - } + TeXOnePar(buf, buf.text(), buf.getParFromID(owner_->id()).pit(), os, + features.runparams(), string(), 0, -1, true); + if (os.length() > length) features.addPreambleSnippet(os.release(), true); - } } if (features.runparams().flavor == OutputParams::HTML @@ -2426,7 +2403,7 @@ void Paragraph::latex(BufferParams const & bparams, if (empty()) { // For InTitle commands, we have already opened a group // in output_latex::TeXOnePar. - if (style.isCommand() && (!style.intitle || style.inpreamble)) { + if (style.isCommand() && !style.intitle) { os << '{'; ++column; } @@ -2466,7 +2443,7 @@ void Paragraph::latex(BufferParams const & bparams, } // For InTitle commands, we have already opened a group // in output_latex::TeXOnePar. - if (style.isCommand() && (!style.intitle || style.inpreamble)) { + if (style.isCommand() && !style.intitle) { os << '{'; ++column; } diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 5cac0ad89f..f8bb151954 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -683,7 +683,8 @@ void TeXOnePar(Buffer const & buf, otexstream & os, OutputParams const & runparams_in, string const & everypar, - int start_pos, int end_pos) + int start_pos, int end_pos, + bool const force) { BufferParams const & bparams = runparams_in.is_child ? buf.masterParams() : buf.params(); @@ -694,7 +695,7 @@ void TeXOnePar(Buffer const & buf, Layout const & style = text.inset().forcePlainLayout() ? bparams.documentClass().plainLayout() : par.layout(); - if (style.inpreamble) + if (style.inpreamble && !force) return; LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pit << " ptr " << &par << " '" @@ -728,7 +729,7 @@ void TeXOnePar(Buffer const & buf, os << '\n'; } - par.latex(bparams, outerfont, os, runparams, start_pos, end_pos); + par.latex(bparams, outerfont, os, runparams, start_pos, end_pos, force); return; } @@ -739,7 +740,7 @@ void TeXOnePar(Buffer const & buf, Font const outerfont = text.outerFont(pit); parStartCommand(par, os, runparams, style); - par.latex(bparams, outerfont, os, runparams, start_pos, end_pos); + par.latex(bparams, outerfont, os, runparams, start_pos, end_pos, force); // I did not create a parEndCommand for this minuscule // task because in the other user of parStartCommand @@ -1015,7 +1016,7 @@ void TeXOnePar(Buffer const & buf, // FIXME UNICODE os << from_utf8(everypar); - par.latex(bparams, outerfont, os, runparams, start_pos, end_pos); + par.latex(bparams, outerfont, os, runparams, start_pos, end_pos, force); Font const font = par.empty() ? par.getLayoutFont(bparams, outerfont) diff --git a/src/output_latex.h b/src/output_latex.h index 1dd9689851..cf37173604 100644 --- a/src/output_latex.h +++ b/src/output_latex.h @@ -91,7 +91,8 @@ void TeXOnePar(Buffer const & buf, otexstream & os, OutputParams const & runparams, std::string const & everypar = std::string(), - int start_pos = -1, int end_pos = -1); + int start_pos = -1, int end_pos = -1, + bool const force = false); } // namespace lyx -- 2.39.2