From c2f2ba57f1275cdf37e38da7e45ce5bb9ee124b9 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Mon, 20 Dec 2021 12:09:12 +0100 Subject: [PATCH] Do not repeatedly call main_font_encoding() This method impacts on performance and we store the value anyway in the output params. --- src/BufferParams.cpp | 18 +++++++++++------- src/LaTeXFeatures.cpp | 14 +++++++------- src/Paragraph.cpp | 4 ++-- src/insets/InsetQuotes.cpp | 13 +++++-------- src/insets/InsetQuotes.h | 2 -- 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index a41a570751..fc559a4848 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -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 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 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 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 fencs = getVectorFromString(language->fontenc(*this)); + vector 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"); diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 0344202c91..f321799103 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -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'; } diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 2408261665..6b960cd0c0 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -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(), '=')) { diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp index d503e8bf9a..dc6dbba68b 100644 --- a/src/insets/InsetQuotes.cpp +++ b/src/insets/InsetQuotes.cpp @@ -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; } diff --git a/src/insets/InsetQuotes.h b/src/insets/InsetQuotes.h index d1f23e4fec..c4b525ce8c 100644 --- a/src/insets/InsetQuotes.h +++ b/src/insets/InsetQuotes.h @@ -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?