[LyX/master] Properly close and reopen font before insets with inheritFont() false
Juergen Spitzmueller
spitz at lyx.org
Wed Aug 12 08:39:32 UTC 2020
commit 1af67974ff170f875d1f0c9e8befe749b1dc9309
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Wed Aug 12 11:04:17 2020 +0200
Properly close and reopen font before insets with inheritFont() false
---
src/Font.cpp | 23 ++++++++++-------------
src/Font.h | 3 +--
src/Paragraph.cpp | 43 ++++++++++++++++++++++++++-----------------
3 files changed, 37 insertions(+), 32 deletions(-)
diff --git a/src/Font.cpp b/src/Font.cpp
index 7ec589d..74ff2de 100644
--- a/src/Font.cpp
+++ b/src/Font.cpp
@@ -450,8 +450,7 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
Font const & base,
Font const & next,
bool & needPar,
- bool const & closeLanguage,
- bool const & non_inherit_inset) const
+ bool const & closeLanguage) const
{
int count = 0;
@@ -461,15 +460,15 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
FontInfo f = bits_;
f.reduce(base.bits_);
- if (f.family() != INHERIT_FAMILY && !non_inherit_inset) {
+ if (f.family() != INHERIT_FAMILY) {
os << '}';
++count;
}
- if (f.series() != INHERIT_SERIES && !non_inherit_inset) {
+ if (f.series() != INHERIT_SERIES) {
os << '}';
++count;
}
- if (f.shape() != INHERIT_SHAPE && !non_inherit_inset) {
+ if (f.shape() != INHERIT_SHAPE) {
os << '}';
++count;
}
@@ -489,15 +488,13 @@ int Font::latexWriteEndChanges(otexstream & os, BufferParams const & bparams,
// We do not close size group in front of
// insets with InheritFont() false (as opposed
// to all other font properties) (#8384)
- if (!non_inherit_inset) {
- if (needPar && !closeLanguage) {
- os << "\\par";
- count += 4;
- needPar = false;
- }
- os << '}';
- ++count;
+ if (needPar && !closeLanguage) {
+ os << "\\par";
+ count += 4;
+ needPar = false;
}
+ os << '}';
+ ++count;
}
if (f.underbar() == FONT_ON) {
os << '}';
diff --git a/src/Font.h b/src/Font.h
index f623a48..5d8998a 100644
--- a/src/Font.h
+++ b/src/Font.h
@@ -87,8 +87,7 @@ public:
Font const & base,
Font const & next,
bool & needPar,
- bool const & closeLanguage = true,
- bool const & non_inherit_inset = false) const;
+ bool const & closeLanguage = true) const;
/// Build GUI description of font state
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 133ddd1..e4b774d 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1040,14 +1040,11 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
bool arabtex = basefont.language()->lang() == "arabic_arabtex"
|| running_font.language()->lang() == "arabic_arabtex";
if (open_font && !inset->inheritFont()) {
- bool needPar = false;
bool closeLanguage = arabtex
|| basefont.isRightToLeft() == running_font.isRightToLeft();
- // We pass non_inherit_inset = true here since size switches
- // ought not to be terminated here (#8384).
- unsigned int count = running_font.latexWriteEndChanges(os,
- bparams, runparams, basefont, basefont,
- needPar, closeLanguage, true);
+ unsigned int count = running_font.latexWriteStartChanges(os, bparams,
+ runparams, basefont,
+ basefont, true);
column += count;
// if any font properties were closed, update the running_font,
// making sure, however, to leave the language as it was
@@ -1063,11 +1060,6 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
basefont.fontInfo().setSize(copy_font.fontInfo().size());
basefont.fontInfo().setFamily(copy_font.fontInfo().family());
basefont.fontInfo().setSeries(copy_font.fontInfo().series());
- // leave font open if language or any of the switches is still open
- open_font = (running_font.language() == basefont.language()
- || running_font.fontInfo().size() == basefont.fontInfo().size()
- || running_font.fontInfo().family() == basefont.fontInfo().family()
- || running_font.fontInfo().series() == basefont.fontInfo().series());
if (closeLanguage)
runparams.local_font = &basefont;
}
@@ -2560,17 +2552,26 @@ void Paragraph::latex(BufferParams const & bparams,
// Fully instantiated font
Font const current_font = getFont(bparams, i, outerfont);
+ // Previous font
+ Font const prev_font = (i > 0) ?
+ getFont(bparams, i - 1, outerfont)
+ : current_font;
Font const last_font = running_font;
bool const in_ct_deletion = (bparams.output_changes
&& runningChange == change
&& change.type == Change::DELETED
&& !os.afterParbreak());
+ bool const non_inherit_inset =
+ (c == META_INSET && getInset(i) && !getInset(i)->inheritFont());
// Do we need to close the previous font?
if (open_font &&
- (current_font != running_font ||
- current_font.language() != running_font.language()))
+ ((current_font != running_font
+ || current_font.language() != running_font.language())
+ || (non_inherit_inset
+ && (current_font == prev_font
+ || current_font.language() == prev_font.language()))))
{
// ensure there is no open script-wrapper
if (!alien_script.empty()) {
@@ -2656,10 +2657,10 @@ void Paragraph::latex(BufferParams const & bparams,
column += 1;
}
otexstringstream ots;
- bool const non_inherit_inset = (c == META_INSET && getInset(i) && !getInset(i)->inheritFont());
- column += current_font.latexWriteStartChanges(ots, bparams,
- runparams, basefont,
- last_font, non_inherit_inset);
+ if (!non_inherit_inset) {
+ column += current_font.latexWriteStartChanges(ots, bparams,
+ runparams, basefont, last_font);
+ }
// Check again for display math in ulem commands as a
// font change may also occur just before a math inset.
if (runparams.inDisplayMath && !deleted_display_math
@@ -2750,9 +2751,17 @@ void Paragraph::latex(BufferParams const & bparams,
incremented = true;
}
}
+ // We need to restore these after insets with
+ // inheritFont() false
+ Font const save_running_font = running_font;
+ Font const save_basefont = basefont;
d->latexInset(bparams, os, rp, running_font,
basefont, real_outerfont, open_font,
runningChange, style, i, column);
+ if (non_inherit_inset) {
+ running_font = save_running_font;
+ basefont = save_basefont;
+ }
if (incremented)
--parInline;
More information about the lyx-cvs
mailing list