#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 (!scaleoption_.empty());
}
+
+bool LaTeXFont::providesMoreOptions(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).providesMoreOptions(ot1, complete, nomath);
+ else if (!available(ot1, nomath))
+ return false;
+
+ return (moreopts_);
+}
+
bool LaTeXFont::provides(std::string const & name, bool ot1, bool complete, bool nomath)
{
docstring const usedfont = 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, bool nomath)
+ int scale, string const & extraopts, bool nomath)
{
ostringstream os;
bool const needosfopt = (osf != osfdefault_);
bool const has_osf = providesOSF(ot1, complete, nomath);
bool const has_sc = providesSC(ot1, complete, nomath);
+ bool const moreopts = providesMoreOptions(ot1, complete, nomath);
- if (!packageoption_.empty())
- os << to_ascii(packageoption_);
+ if (!packageoptions_.empty())
+ os << to_ascii(packageoptions_);
if (sc && needosfopt && has_osf && has_sc) {
if (!os.str().empty())
os << subst(to_ascii(scaleoption_), "$$val",
convert<std::string>(float(scale) / 100));
}
+
+ if (moreopts && !extraopts.empty()) {
+ if (!os.str().empty())
+ os << ',';
+ os << extraopts;
+ }
return os.str();
}
string const LaTeXFont::getLaTeXCode(bool dryrun, bool ot1, bool complete, bool sc,
- bool osf, bool nomath, int const & scale)
+ bool osf, bool nomath, string const & extraopts,
+ int const & scale)
{
ostringstream os;
if (usedfont.empty())
return string();
else if (usedfont != name_)
- return altFont(usedfont).getLaTeXCode(dryrun, ot1, complete, sc, osf, nomath, scale);
+ return altFont(usedfont).getLaTeXCode(dryrun, ot1, complete, sc,
+ osf, nomath, extraopts, scale);
if (switchdefault_) {
if (family_.empty()) {
} else {
string const package =
getAvailablePackage(dryrun);
- string const packageopts = getPackageOptions(ot1, complete, sc, osf, scale, nomath);
+ string const packageopts = getPackageOptions(ot1, complete, sc, osf, scale, extraopts, 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, nomath) && !osffont_.empty())
- os << altFont(osffont_).getLaTeXCode(dryrun, ot1, complete, sc, osf, nomath, scale);
+ os << altFont(osffont_).getLaTeXCode(dryrun, ot1, complete, sc, osf,
+ nomath, extraopts, scale);
if (!preamble_.empty())
- os << preamble_;
+ os << to_utf8(preamble_);
return os.str();
}
+bool LaTeXFont::hasFontenc(string const & name) const
+{
+ for (auto const & fe : fontenc_) {
+ if (fe == name)
+ return true;
+ }
+ return false;
+}
+
+
bool LaTeXFont::readFont(Lexer & lex)
{
enum LaTeXFontTags {
LF_COMPLETE_FONT,
LF_END,
LF_FAMILY,
+ LF_FONTENC,
LF_GUINAME,
LF_NOMATHFONT,
LF_OSFDEFAULT,
LF_OSFOPTION,
LF_OSFSCOPTION,
LF_OT1_FONT,
+ LF_MOREOPTS,
LF_PACKAGE,
- LF_PACKAGEOPTION,
+ LF_PACKAGEOPTIONS,
LF_PREAMBLE,
LF_PROVIDES,
LF_REQUIRES,
{ "completefont", LF_COMPLETE_FONT },
{ "endfont", LF_END },
{ "family", LF_FAMILY },
+ { "fontencoding", LF_FONTENC },
{ "guiname", LF_GUINAME },
+ { "moreoptions", LF_MOREOPTS },
{ "nomathfont", LF_NOMATHFONT },
{ "osfdefault", LF_OSFDEFAULT },
{ "osffont", LF_OSFFONT },
{ "osfscoption", LF_OSFSCOPTION },
{ "ot1font", LF_OT1_FONT },
{ "package", LF_PACKAGE },
- { "packageoption", LF_PACKAGEOPTION },
+ { "packageoptions", LF_PACKAGEOPTIONS },
{ "preamble", LF_PREAMBLE },
{ "provides", LF_PROVIDES },
{ "requires", LF_REQUIRES },
error = true;
continue;
- default:
+ default:
break;
}
switch (static_cast<LaTeXFontTags>(le)) {
case LF_GUINAME:
lex >> guiname_;
break;
+ case LF_FONTENC: {
+ lex.eatLine();
+ string fe = lex.getString();
+ fontenc_ = getVectorFromString(fe);
+ break;
+ }
case LF_NOMATHFONT:
lex >> nomathfont_;
break;
case LF_PACKAGE:
lex >> package_;
break;
- case LF_PACKAGEOPTION:
- lex >> packageoption_;
+ case LF_PACKAGEOPTIONS:
+ lex >> packageoptions_;
break;
case LF_PREAMBLE:
- preamble_ = lex.getLongString("EndPreamble");
+ preamble_ = lex.getLongString(from_ascii("EndPreamble"));
break;
case LF_PROVIDES: {
lex.eatLine();
case LF_SCOPTION:
lex >> scoption_;
break;
+ case LF_MOREOPTS:
+ lex >> moreopts_;
+ break;
case LF_SWITCHDEFAULT:
lex >> switchdefault_;
break;
{
switchdefault_ = 0;
osfdefault_ = 0;
+ moreopts_ = 0;
if (!lex.next()) {
lex.printError("No name given for LaTeX font: `$$Token'.");
return false;
}
+ if (fontenc_.empty())
+ fontenc_.push_back("T1");
+
return true;
}