commit da3dc1b61f5de4eee3a38d9bf72a63852fea1332
Author: Juergen Spitzmueller <[email protected]>
Date: Tue Dec 26 13:11:00 2017 +0100
Use TeXOnePar for the inpreamble layouts
This considers paragraph language and spacing (and simplifies the code)
(cherry picked from commit a2f886d52617815e8c80f12ef66198307d3432d6)
---
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 8830efb..52bc993 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1437,9 +1437,7 @@ bool Paragraph::Private::latexSpecialT3(char_type const
c, otexstream & os,
void Paragraph::Private::validate(LaTeXFeatures & features) const
{
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.
@@ -1448,32 +1446,11 @@ void Paragraph::Private::validate(LaTeXFeatures &
features) const
? buf.masterParams() : buf.params();
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
@@ -2428,7 +2405,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;
}
@@ -2468,7 +2445,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 5cac0ad..f8bb151 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 1dd9689..cf37173 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