[LyX/master] Do not repeatedly call main_font_encoding()

Juergen Spitzmueller spitz at lyx.org
Mon Dec 20 10:47:19 UTC 2021


commit c2f2ba57f1275cdf37e38da7e45ce5bb9ee124b9
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Mon Dec 20 12:09:12 2021 +0100

    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 a41a570..fc559a4 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<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");
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 0344202..f321799 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 2408261..6b960cd 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 d503e8b..dc6dbba 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 d1f23e4..c4b525c 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?


More information about the lyx-cvs mailing list