Use TeXOnePar for the inpreamble layouts

This considers paragraph language and spacing (and simplifies the code)
This commit is contained in:
Juergen Spitzmueller 2017-12-26 13:11:00 +01:00
parent 994176e55b
commit a2f886d526
3 changed files with 14 additions and 35 deletions

View File

@ -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;
}

View File

@ -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)

View File

@ -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