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

Reply via email to