}
-bool LaTeXFont::available(bool ot1)
+bool LaTeXFont::available(bool ot1, bool nomath)
{
- if (ot1 && !ot1font_.empty())
+ if (nomath && !nomathfont_.empty())
+ return altFont(nomathfont_).available(ot1, nomath);
+ else if (ot1 && !ot1font_.empty())
return (ot1font_ == "none") ?
- true : altFont(ot1font_).available(ot1);
+ true : altFont(ot1font_).available(ot1, nomath);
else if (requires_.empty() && package_.empty())
return true;
else if (!requires_.empty()
&& LaTeXFeatures::isAvailable(to_ascii(requires_)))
return true;
- else if (!package_.empty()
+ else if (requires_.empty() && !package_.empty()
&& LaTeXFeatures::isAvailable(to_ascii(package_)))
return true;
else if (!altfonts_.empty()) {
for (size_t i = 0; i < altfonts_.size(); ++i) {
- if (altFont(altfonts_[i]).available(ot1))
+ if (altFont(altfonts_[i]).available(ot1, nomath))
return true;
}
}
}
-bool LaTeXFont::providesOSF(bool ot1, bool complete)
+bool LaTeXFont::providesNoMath(bool ot1, bool complete)
{
- docstring const usedfont = getUsedFont(ot1, complete);
+ docstring const usedfont = getUsedFont(ot1, complete, false);
if (usedfont.empty())
return false;
else if (usedfont != name_)
- return altFont(usedfont).providesOSF(ot1, complete);
+ return altFont(usedfont).providesNoMath(ot1, complete);
+
+ return (!nomathfont_.empty() && available(ot1, true));
+}
+
+
+bool LaTeXFont::providesOSF(bool ot1, bool complete, bool nomath)
+{
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
+
+ if (usedfont.empty())
+ return false;
+ else if (usedfont != name_)
+ return altFont(usedfont).providesOSF(ot1, complete, nomath);
else if (!osffont_.empty())
- return altFont(osffont_).available(ot1);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
+ return altFont(osffont_).available(ot1, nomath);
+ else if (!available(ot1, nomath))
return false;
return (!osfoption_.empty() || !osfscoption_.empty());
}
-bool LaTeXFont::providesSC(bool ot1, bool complete)
+bool LaTeXFont::providesSC(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
if (usedfont.empty())
return false;
else if (usedfont != name_)
- return altFont(usedfont).providesSC(ot1, complete);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
+ return altFont(usedfont).providesSC(ot1, complete, nomath);
+ else if (!available(ot1, nomath))
return false;
return (!scoption_.empty() || !osfscoption_.empty());
}
-bool LaTeXFont::providesScale(bool ot1, bool complete)
+bool LaTeXFont::hasMonolithicExpertSet(bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
if (usedfont.empty())
return false;
else if (usedfont != name_)
- return altFont(usedfont).providesScale(ot1, complete);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
- return false;
+ return altFont(usedfont).hasMonolithicExpertSet(ot1, complete, nomath);
+ return (!osfoption_.empty() && !scoption_.empty() && osfoption_ == scoption_)
+ || (osfoption_.empty() && scoption_.empty() && !osfscoption_.empty());
+}
+
+
+bool LaTeXFont::providesScale(bool ot1, bool complete, bool nomath)
+{
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ if (usedfont.empty())
+ return false;
+ else if (usedfont != name_)
+ return altFont(usedfont).providesScale(ot1, complete, nomath);
+ else if (!available(ot1, nomath))
+ return false;
return (!scaleoption_.empty());
}
-bool LaTeXFont::provides(std::string const & name, bool ot1, bool complete)
+bool LaTeXFont::provides(std::string const & name, bool ot1, bool complete, bool nomath)
{
- docstring const usedfont = getUsedFont(ot1, complete);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
if (usedfont.empty())
return false;
else if (usedfont != name_)
- return altFont(usedfont).provides(name, ot1, complete);
+ return altFont(usedfont).provides(name, ot1, complete, nomath);
else if (provides_.empty())
return false;
}
-docstring const LaTeXFont::getUsedFont(bool ot1, bool complete)
+docstring const LaTeXFont::getUsedFont(bool ot1, bool complete, bool nomath)
{
- if (ot1 && !ot1font_.empty())
+ if (nomath && !nomathfont_.empty() && available(ot1, true))
+ return nomathfont_;
+ else if (ot1 && !ot1font_.empty())
return (ot1font_ == "none") ? docstring() : ot1font_;
else if (family_ == "rm" && complete && !completefont_.empty()
- && altFont(completefont_).available(ot1))
+ && altFont(completefont_).available(ot1, nomath))
return completefont_;
else if (switchdefault_) {
if (requires_.empty()
else if (!package_.empty()
&& LaTeXFeatures::isAvailable(to_ascii(package_)))
return name_;
+ else if (!preamble_.empty() && package_.empty()
+ && requires_.empty() && !switchdefault_
+ && altfonts_.empty()) {
+ return name_;
+ }
else if (!altfonts_.empty()) {
for (size_t i = 0; i < altfonts_.size(); ++i) {
LaTeXFont altf = altFont(altfonts_[i]);
- if (altf.available(ot1))
- return altf.getUsedFont(ot1, complete);
+ if (altf.available(ot1, nomath))
+ return altf.getUsedFont(ot1, complete, nomath);
}
}
}
+docstring const LaTeXFont::getUsedPackage(bool ot1, bool complete, bool nomath)
+{
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
+ if (usedfont.empty())
+ return docstring();
+ return theLaTeXFonts().getLaTeXFont(usedfont).package();
+}
+
+
string const LaTeXFont::getAvailablePackage(bool dryrun)
{
if (package_.empty())
}
-string const LaTeXFont::getPackageOptions(bool ot1, bool complete, bool sc, bool osf, int scale)
+string const LaTeXFont::getPackageOptions(bool ot1, bool complete, bool sc, bool osf,
+ int scale, bool nomath)
{
ostringstream os;
bool const needosfopt = (osf != osfdefault_);
- bool const has_osf = providesOSF(ot1, complete);
- bool const has_sc = providesSC(ot1, complete);
+ bool const has_osf = providesOSF(ot1, complete, nomath);
+ bool const has_sc = providesSC(ot1, complete, nomath);
if (!packageoption_.empty())
os << to_ascii(packageoption_);
}
if (scale != 100 && !scaleoption_.empty()
- && providesScale(ot1, complete)) {
+ && providesScale(ot1, complete, nomath)) {
if (!os.str().empty())
os << ',';
os << subst(to_ascii(scaleoption_), "$$val",
string const LaTeXFont::getLaTeXCode(bool dryrun, bool ot1, bool complete, bool sc,
- bool osf, int const & scale)
+ bool osf, bool nomath, int const & scale)
{
ostringstream os;
- docstring const usedfont = getUsedFont(ot1, complete);
+ docstring const usedfont = getUsedFont(ot1, complete, nomath);
if (usedfont.empty())
return string();
else if (usedfont != name_)
- return altFont(usedfont).getLaTeXCode(dryrun, ot1, complete, sc, osf, scale);
+ return altFont(usedfont).getLaTeXCode(dryrun, ot1, complete, sc, osf, nomath, scale);
if (switchdefault_) {
if (family_.empty()) {
LYXERR0("Error: Font `" << name_ << "' has no family defined!");
return string();
}
- if (available(ot1) || dryrun)
+ if (available(ot1, nomath) || dryrun)
os << "\\renewcommand{\\" << to_ascii(family_) << "default}{"
<< to_ascii(name_) << "}\n";
else
} else {
string const package =
getAvailablePackage(dryrun);
- string const packageopts = getPackageOptions(ot1, complete, sc, osf, scale);
+ string const packageopts = getPackageOptions(ot1, complete, sc, osf, scale, nomath);
if (packageopts.empty() && !package.empty())
os << "\\usepackage{" << package << "}\n";
else if (!packageopts.empty() && !package.empty())
os << "\\usepackage[" << packageopts << "]{" << package << "}\n";
}
- if (osf && providesOSF(ot1, complete) && !osffont_.empty())
- os << altFont(osffont_).getLaTeXCode(dryrun, ot1, complete, sc, osf, scale);
+ if (osf && providesOSF(ot1, complete, nomath) && !osffont_.empty())
+ os << altFont(osffont_).getLaTeXCode(dryrun, ot1, complete, sc, osf, nomath, scale);
+
+ if (!preamble_.empty())
+ os << preamble_;
return os.str();
}
LF_END,
LF_FAMILY,
LF_GUINAME,
+ LF_NOMATHFONT,
LF_OSFDEFAULT,
LF_OSFFONT,
LF_OSFOPTION,
LF_OT1_FONT,
LF_PACKAGE,
LF_PACKAGEOPTION,
+ LF_PREAMBLE,
LF_PROVIDES,
LF_REQUIRES,
LF_SCALEOPTION,
{ "endfont", LF_END },
{ "family", LF_FAMILY },
{ "guiname", LF_GUINAME },
+ { "nomathfont", LF_NOMATHFONT },
{ "osfdefault", LF_OSFDEFAULT },
{ "osffont", LF_OSFFONT },
{ "osfoption", LF_OSFOPTION },
{ "ot1font", LF_OT1_FONT },
{ "package", LF_PACKAGE },
{ "packageoption", LF_PACKAGEOPTION },
+ { "preamble", LF_PREAMBLE },
{ "provides", LF_PROVIDES },
{ "requires", LF_REQUIRES },
{ "scaleoption", LF_SCALEOPTION },
case LF_GUINAME:
lex >> guiname_;
break;
+ case LF_NOMATHFONT:
+ lex >> nomathfont_;
+ break;
case LF_OSFOPTION:
lex >> osfoption_;
break;
case LF_PACKAGEOPTION:
lex >> packageoption_;
break;
+ case LF_PREAMBLE:
+ preamble_ = lex.getLongString("EndPreamble");
+ break;
case LF_PROVIDES: {
lex.eatLine();
string features = lex.getString();
LaTeXFont LaTeXFonts::getLaTeXFont(docstring const & name)
{
- if (name == "default")
+ if (name == "default" || name == "auto")
return LaTeXFont();
if (texfontmap_.empty())
readLaTeXFonts();
LaTeXFont LaTeXFonts::getAltFont(docstring const & name)
{
- if (name == "default")
+ if (name == "default" || name == "auto")
return LaTeXFont();
if (texaltfontmap_.empty())
readLaTeXFonts();