Do not repeatedly call main_font_encoding()

This method impacts on performance and we store the value anyway in
the output params.
This commit is contained in:
Juergen Spitzmueller 2021-12-20 12:09:12 +01:00
parent 61b8afd893
commit c2f2ba57f1
5 changed files with 25 additions and 26 deletions

View File

@ -1847,7 +1847,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
// if we use fontspec or newtxmath, we have to load the AMS packages here
string const ams = features.loadAMSPackages();
bool const ot1 = (main_font_encoding() == "default" || main_font_encoding() == "OT1");
string const main_font_enc = features.runparams().main_fontenc;
bool const ot1 = (main_font_enc == "default" || main_font_enc == "OT1");
bool const use_newtxmath =
theLaTeXFonts().getLaTeXFont(from_ascii(fontsMath())).getUsedPackage(
ot1, false, false) == "newtxmath";
@ -1887,7 +1888,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
// set font encoding
// non-TeX fonts use font encoding TU (set by fontspec)
if (!useNonTeXFonts && !features.isProvided("fontenc")
&& main_font_encoding() != "default") {
&& main_font_enc != "default") {
// get main font encodings
vector<string> fontencs = font_encodings();
// get font encodings of secondary languages
@ -3235,12 +3236,13 @@ string const BufferParams::dvips_options() const
string const BufferParams::main_font_encoding() const
{
if (font_encodings().empty()) {
vector<string> const fencs = font_encodings();
if (fencs.empty()) {
if (ascii_lowercase(language->fontenc(*this)) == "none")
return "none";
return "default";
}
return font_encodings().back();
return fencs.back();
}
@ -3255,9 +3257,10 @@ vector<string> const BufferParams::font_encodings() const
if (!doc_fontenc.empty())
// If we have a custom setting, we use only that!
return getVectorFromString(doc_fontenc);
if (!language->fontenc(*this).empty()
string const lfe = language->fontenc(*this);
if (!lfe.empty()
&& ascii_lowercase(language->fontenc(*this)) != "none") {
vector<string> fencs = getVectorFromString(language->fontenc(*this));
vector<string> fencs = getVectorFromString(lfe);
for (auto & fe : fencs) {
if (find(fontencs.begin(), fontencs.end(), fe) == fontencs.end())
fontencs.push_back(fe);
@ -3509,7 +3512,8 @@ string const BufferParams::loadFonts(LaTeXFeatures & features) const
}
// Tex Fonts
bool const ot1 = (main_font_encoding() == "default" || main_font_encoding() == "OT1");
bool const ot1 = (features.runparams().main_fontenc == "default"
|| features.runparams().main_fontenc == "OT1");
bool const dryrun = features.runparams().dryrun;
bool const complete = (fontsSans() == "default" && fontsTypewriter() == "default");
bool const nomath = (fontsMath() != "auto");

View File

@ -783,8 +783,8 @@ bool LaTeXFeatures::isProvided(string const & name) const
if (params_.useNonTeXFonts)
return params_.documentClass().provides(name);
bool const ot1 = (params_.main_font_encoding() == "default"
|| params_.main_font_encoding() == "OT1");
bool const ot1 = (runparams().main_fontenc == "default"
|| runparams().main_fontenc == "OT1");
bool const complete = (params_.fontsSans() == "default"
&& params_.fontsTypewriter() == "default");
bool const nomath = (params_.fontsMath() == "default");
@ -1315,8 +1315,8 @@ string const LaTeXFeatures::getPackages() const
// if fontspec or newtxmath is used, AMS packages have to be loaded
// before fontspec (in BufferParams)
string const amsPackages = loadAMSPackages();
bool const ot1 = (params_.main_font_encoding() == "default"
|| params_.main_font_encoding() == "OT1");
bool const ot1 = (runparams().main_fontenc == "default"
|| runparams().main_fontenc == "OT1");
bool const use_newtxmath =
theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage(
ot1, false, false) == "newtxmath";
@ -1584,15 +1584,15 @@ TexString LaTeXFeatures::getMacros() const
macros << lyxZWSP_def << '\n';
if (!usePolyglossia() && mustProvide("textgreek")) {
// ensure LGR font encoding is defined also if fontenc is not loaded by LyX
if (params_.main_font_encoding() == "default")
// ensure LGR font encoding is defined also if fontenc is not loaded by LyX
if (runparams().main_fontenc == "default")
macros << textgreek_LGR_def;
macros << textgreek_def << '\n';
}
if (!usePolyglossia() && mustProvide("textcyrillic")) {
// ensure T2A font encoding is set up also if fontenc is not loaded by LyX
if (params_.main_font_encoding() == "default")
if (runparams().main_fontenc == "default")
macros << textcyr_T2A_def;
macros << textcyr_def << '\n';
}

View File

@ -1240,7 +1240,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
// non-standard font encoding. If we are using such a language,
// we do not output special T1 chars.
if (!runparams.inIPA && !running_font.language()->internalFontEncoding()
&& !runparams.isFullUnicode() && bparams.main_font_encoding() == "T1"
&& !runparams.isFullUnicode() && runparams.main_fontenc == "T1"
&& latexSpecialT1(c, os, i, column))
return;
// NOTE: "fontspec" (non-TeX fonts) sets the font encoding to "TU" (untill 2017 "EU1" or "EU2")
@ -1532,7 +1532,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const
if (c == 0x0022) {
if (features.runparams().isFullUnicode() && bp.useNonTeXFonts)
features.require("textquotedblp");
else if (bp.main_font_encoding() != "T1"
else if (features.runparams().main_fontenc != "T1"
|| ((&owner_->getFontSettings(bp, i))->language()->internalFontEncoding()))
features.require("textquotedbl");
} else if (ci.textfeature() && contains(ci.textpreamble(), '=')) {

View File

@ -639,11 +639,8 @@ InsetQuotes::InsetQuotes(Buffer * buf, char_type c, QuoteLevel level,
bool dynamic = false;
if (buf) {
global_style_ = buf->masterBuffer()->params().quotes_style;
fontenc_ = buf->masterBuffer()->params().main_font_encoding();
dynamic = buf->masterBuffer()->params().dynamic_quotes;
fontspec_ = buf->masterBuffer()->params().useNonTeXFonts;
} else {
fontenc_ = "OT1";
}
if (style.empty())
style_ = dynamic ? QuoteStyle::Dynamic : global_style_;
@ -891,7 +888,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
// Use internal commands in headings with hyperref
// (ligatures not featured in PDF strings)
qstr = quoteparams.getLaTeXQuote(quotechar, "int", rtl_);
} else if (fontenc_ == "T1"
} else if (runparams.main_fontenc == "T1"
&& !runparams.local_font->language()->internalFontEncoding()) {
// Quotation marks for T1 font encoding
// (using ligatures)
@ -905,7 +902,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & runparams) const
#else
} else if ((!runparams.use_babel
#endif
|| (fontenc_ != "T1" && fontenc_ != "OT1"))
|| (runparams.main_fontenc != "T1" && runparams.main_fontenc != "OT1"))
|| runparams.isFullUnicode()) {
// Standard quotation mark macros
// These are also used by babel
@ -1008,7 +1005,6 @@ void InsetQuotes::updateBuffer(ParIterator const & it, UpdateType /* utype*/, bo
pass_thru_ = it.paragraph().isPassThru();
context_lang_ = font.language()->code();
internal_fontenc_ = font.language()->internalFontEncoding();
fontenc_ = bp.main_font_encoding();
global_style_ = bp.quotes_style;
fontspec_ = bp.useNonTeXFonts;
rtl_ = font.isRightToLeft();
@ -1028,7 +1024,8 @@ void InsetQuotes::validate(LaTeXFeatures & features) const
#else
if (!features.useBabel()
#endif
&& !features.runparams().isFullUnicode() && fontenc_ != "T1") {
&& !features.runparams().isFullUnicode()
&& features.runparams().main_fontenc != "T1") {
switch (type) {
case 0x201a:
features.require("quotesinglbase");
@ -1065,7 +1062,7 @@ void InsetQuotes::validate(LaTeXFeatures & features) const
case 0x0022: {
if (features.runparams().isFullUnicode() && fontspec_)
features.require("textquotedblp");
else if (fontenc_ != "T1" || internal_fontenc_)
else if (features.runparams().main_fontenc != "T1" || internal_fontenc_)
features.require("textquotedbl");
break;
}

View File

@ -200,8 +200,6 @@ private:
QuoteLevel level_ = QuoteLevel::Primary;
///
QuoteStyle global_style_ = QuoteStyle::English;
/// Current font encoding
std::string fontenc_;
/// Code of the contextual language
std::string context_lang_;
/// Is this in a pass-thru context?