commit 3335344261baf578872441242affd5375d9e4019
Author: Juergen Spitzmueller <[email protected]>
Date: Thu Jul 9 11:39:43 2020 +0200
Provide option to prevent unnecessary font loading.
If an OSF font is an alternative to a non-OSF one, only load the OSFFont
if osf is requested.
---
lib/latexfonts | 6 ++++++
src/LaTeXFonts.cpp | 32 ++++++++++++++++++++------------
src/LaTeXFonts.h | 9 +++++++--
3 files changed, 33 insertions(+), 14 deletions(-)
diff --git a/lib/latexfonts b/lib/latexfonts
index 784ed33..eaf9e4c 100644
--- a/lib/latexfonts
+++ b/lib/latexfonts
@@ -19,6 +19,7 @@
# OsfOption <option for oldstyle figure support>
# OsfFont <extra font for oldstyle figures>
# OsfDefault <0|1>
+# OsfFontOnly <0|1>
# ScOption <option for true smallcaps support>
# OsfScOption <option for combined osf and true smallcaps support>
# ScaleOption <option for font scaling>
@@ -65,6 +66,9 @@
# tags.
# * OsfFont is a font that is loaded additionally in and that provides
# Old Style Figures for a given font (e.g. eco).
+# * If OsfFontOnly is true, then the OsfFont will replace the non-OsF
+# one (only OsfFont is loaded if osf is true). Otherwise it will
+# complement the non-osf font.
# * OsfScOption overrides any OsfOption and ScOption if both features
# are selected.
# * ScOption and OsfScOption are currently only supported for rm fonts.
@@ -500,6 +504,7 @@ AltFont ppl
GuiName "Palatino"
Family rm
OsfFont pplj
+ OsfFontOnly 1
SwitchDefault 1
EndFont
@@ -600,6 +605,7 @@ AltFont futs
Family rm
SwitchDefault 1
OsfFont futj
+ OsfFontOnly 1
EndFont
AltFont futj
diff --git a/src/LaTeXFonts.cpp b/src/LaTeXFonts.cpp
index 12c0856..e58b55f 100644
--- a/src/LaTeXFonts.cpp
+++ b/src/LaTeXFonts.cpp
@@ -68,7 +68,7 @@ bool LaTeXFont::available(bool ot1, bool nomath)
bool LaTeXFont::providesNoMath(bool ot1, bool complete)
{
- docstring const usedfont = getUsedFont(ot1, complete, false);
+ docstring const usedfont = getUsedFont(ot1, complete, false, false);
if (usedfont.empty())
return false;
@@ -81,7 +81,7 @@ bool LaTeXFont::providesNoMath(bool ot1, bool complete)
bool LaTeXFont::providesOSF(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -98,7 +98,7 @@ bool LaTeXFont::providesOSF(bool ot1, bool complete, bool
nomath)
bool LaTeXFont::providesSC(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -113,7 +113,7 @@ bool LaTeXFont::providesSC(bool ot1, bool complete, bool
nomath)
bool LaTeXFont::hasMonolithicExpertSet(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -126,7 +126,7 @@ bool LaTeXFont::hasMonolithicExpertSet(bool ot1, bool
complete, bool nomath)
bool LaTeXFont::providesScale(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -140,7 +140,7 @@ bool LaTeXFont::providesScale(bool ot1, bool complete, bool
nomath)
bool LaTeXFont::providesMoreOptions(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -154,7 +154,7 @@ bool LaTeXFont::providesMoreOptions(bool ot1, bool
complete, bool nomath)
bool LaTeXFont::provides(std::string const & name, bool ot1, bool complete,
bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return false;
@@ -171,9 +171,11 @@ bool LaTeXFont::provides(std::string const & name, bool
ot1, bool complete, bool
}
-docstring const LaTeXFont::getUsedFont(bool ot1, bool complete, bool nomath)
+docstring const LaTeXFont::getUsedFont(bool ot1, bool complete, bool nomath,
bool osf)
{
- if (nomath && !nomathfont_.empty() && available(ot1, true))
+ if (osf && osfFontOnly())
+ return osffont_;
+ else if (nomath && !nomathfont_.empty() && available(ot1, true))
return nomathfont_;
else if (ot1 && !ot1font_.empty())
return (ot1font_ == "none") ? docstring() : ot1font_;
@@ -201,7 +203,7 @@ docstring const LaTeXFont::getUsedFont(bool ot1, bool
complete, bool nomath)
for (size_t i = 0; i < altfonts_.size(); ++i) {
LaTeXFont altf = altFont(altfonts_[i]);
if (altf.available(ot1, nomath))
- return altf.getUsedFont(ot1, complete, nomath);
+ return altf.getUsedFont(ot1, complete, nomath,
osf);
}
}
@@ -211,7 +213,7 @@ docstring const LaTeXFont::getUsedFont(bool ot1, bool
complete, bool nomath)
docstring const LaTeXFont::getUsedPackage(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, false);
if (usedfont.empty())
return docstring();
return theLaTeXFonts().getLaTeXFont(usedfont).package();
@@ -295,7 +297,7 @@ string const LaTeXFont::getLaTeXCode(bool dryrun, bool ot1,
bool complete, bool
{
ostringstream os;
- docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath, osf);
if (usedfont.empty())
return string();
else if (usedfont != name_)
@@ -357,6 +359,7 @@ bool LaTeXFont::readFont(Lexer & lex)
LF_NOMATHFONT,
LF_OSFDEFAULT,
LF_OSFFONT,
+ LF_OSFFONTONLY,
LF_OSFOPTION,
LF_OSFSCOPTION,
LF_OT1_FONT,
@@ -383,6 +386,7 @@ bool LaTeXFont::readFont(Lexer & lex)
{ "nomathfont", LF_NOMATHFONT },
{ "osfdefault", LF_OSFDEFAULT },
{ "osffont", LF_OSFFONT },
+ { "osffontonly", LF_OSFFONTONLY },
{ "osfoption", LF_OSFOPTION },
{ "osfscoption", LF_OSFSCOPTION },
{ "ot1font", LF_OT1_FONT },
@@ -452,6 +456,9 @@ bool LaTeXFont::readFont(Lexer & lex)
case LF_OSFDEFAULT:
lex >> osfdefault_;
break;
+ case LF_OSFFONTONLY:
+ lex >> osffontonly_;
+ break;
case LF_OSFSCOPTION:
lex >> osfscoption_;
break;
@@ -504,6 +511,7 @@ bool LaTeXFont::read(Lexer & lex)
switchdefault_ = 0;
osfdefault_ = 0;
moreopts_ = 0;
+ osffontonly_ = 0;
if (!lex.next()) {
lex.printError("No name given for LaTeX font: `$$Token'.");
diff --git a/src/LaTeXFonts.h b/src/LaTeXFonts.h
index 79bd34b..a6d875d 100644
--- a/src/LaTeXFonts.h
+++ b/src/LaTeXFonts.h
@@ -27,7 +27,8 @@ class LaTeXFont {
public:
/// TeX font
// FIXME Add fontenc tag to classes which is used if no font is
specified?
- LaTeXFont() : osfdefault_(false), switchdefault_(false),
moreopts_(false) { fontenc_.push_back("T1"); }
+ LaTeXFont() : osfdefault_(false), switchdefault_(false),
moreopts_(false),
+ osffontonly_(false) { fontenc_.push_back("T1"); }
/// The font name
docstring const & name() { return name_; }
/// The name to appear in the document dialog
@@ -67,6 +68,8 @@ public:
bool switchdefault() const { return switchdefault_; }
/// Does the font provide Old Style Figures as default?
bool osfDefault() const { return osfdefault_; }
+ /// Does OSF font replace (rather than complement) the non-OSF one?
+ bool osfFontOnly() const { return osffontonly_; }
/// Is this font available?
bool available(bool ot1, bool nomath);
/// Does this font provide an alternative without math?
@@ -87,7 +90,7 @@ public:
std::string const & extraopts =
std::string(),
int const & scale = 100);
/// Return the actually used font
- docstring const getUsedFont(bool ot1, bool complete, bool nomath);
+ docstring const getUsedFont(bool ot1, bool complete, bool nomath, bool
osf);
/// Return the actually used package
docstring const getUsedPackage(bool ot1, bool complete, bool nomath);
///
@@ -149,6 +152,8 @@ private:
bool switchdefault_;
///
bool moreopts_;
+ ///
+ bool osffontonly_;
};
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs