#include "support/convert.h"
#include "support/debug.h"
+#include "support/docstream.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h"
return altFont(usedfont).providesOSF(ot1, complete, nomath);
else if (!osffont_.empty())
return altFont(osffont_).available(ot1, nomath);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
+ else if (!available(ot1, nomath))
return false;
return (!osfoption_.empty() || !osfscoption_.empty());
return false;
else if (usedfont != name_)
return altFont(usedfont).providesSC(ot1, complete, nomath);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
+ else if (!available(ot1, nomath))
return false;
return (!scoption_.empty() || !osfscoption_.empty());
}
+bool LaTeXFont::hasMonolithicExpertSet(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).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);
return false;
else if (usedfont != name_)
return altFont(usedfont).providesScale(ot1, complete, nomath);
- else if (!package_.empty() && !LaTeXFeatures::isAvailable(to_ascii(package_)))
+ else if (!available(ot1, nomath))
return false;
-
return (!scaleoption_.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]);
}
+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())
if (osf && providesOSF(ot1, complete, nomath) && !osffont_.empty())
os << altFont(osffont_).getLaTeXCode(dryrun, ot1, complete, sc, osf, nomath, scale);
+ if (!preamble_.empty())
+ os << to_utf8(preamble_);
+
return os.str();
}
LF_OT1_FONT,
LF_PACKAGE,
LF_PACKAGEOPTION,
+ LF_PREAMBLE,
LF_PROVIDES,
LF_REQUIRES,
LF_SCALEOPTION,
{ "ot1font", LF_OT1_FONT },
{ "package", LF_PACKAGE },
{ "packageoption", LF_PACKAGEOPTION },
+ { "preamble", LF_PREAMBLE },
{ "provides", LF_PROVIDES },
{ "requires", LF_REQUIRES },
{ "scaleoption", LF_SCALEOPTION },
case LF_PACKAGEOPTION:
lex >> packageoption_;
break;
+ case LF_PREAMBLE:
+ preamble_ = lex.getLongString(from_ascii("EndPreamble"));
+ break;
case LF_PROVIDES: {
lex.eatLine();
string features = lex.getString();