mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
Factor out duplicated code
This commit is contained in:
parent
924f71c792
commit
a9ad5c3337
@ -2785,17 +2785,7 @@ string const BufferParams::loadFonts(string const & rm,
|
||||
bool const & use_systemfonts,
|
||||
LaTeXFeatures & features) const
|
||||
{
|
||||
/* The LaTeX font world is in a flux. In the PSNFSS font interface,
|
||||
several packages have been replaced by others, that might not
|
||||
be installed on every system. We have to take care for that
|
||||
(see psnfss.pdf). We try to support all psnfss fonts as well
|
||||
as the fonts that have become de facto standard in the LaTeX
|
||||
world (e.g. Latin Modern). We do not support obsolete fonts
|
||||
(like PSLatex). In general, it should be possible to mix any
|
||||
rm font with any sf or tt font, respectively. (JSpitzm)
|
||||
TODO:
|
||||
-- separate math fonts.
|
||||
*/
|
||||
// TODO: separate math fonts.
|
||||
|
||||
if (rm == "default" && sf == "default" && tt == "default")
|
||||
//nothing to do
|
||||
@ -2860,67 +2850,16 @@ string const BufferParams::loadFonts(string const & rm,
|
||||
// Tex Fonts
|
||||
bool const ot1 = (font_encoding() == "default" || font_encoding() == "OT1");
|
||||
bool const dryrun = features.runparams().dryrun;
|
||||
bool const complete = (sf == "default" && tt == "default");
|
||||
|
||||
// ROMAN FONTS
|
||||
LaTeXFont roman = theLaTeXFonts().getLaTeXFont(from_ascii(rm));
|
||||
if (roman.switchdefault()) {
|
||||
if (roman.available(ot1) || dryrun)
|
||||
os << "\\renewcommand{\\rmdefault}{" << to_ascii(roman.name()) << "}\n";
|
||||
else
|
||||
frontend::Alert::warning(_("Font not available"),
|
||||
bformat(_("The LaTeX package `%1$s' needed for the font `%2$s'\n"
|
||||
"is not available on your system. LyX will fall back to the default font."),
|
||||
roman.requires(), roman.guiname()), true);
|
||||
} else {
|
||||
bool const complete = (sf == "default" && tt == "default");
|
||||
string const package =
|
||||
roman.getAvailablePackage(dryrun, ot1, complete);
|
||||
string const packageopts = roman.getPackageOptions(ot1, sc, osf);
|
||||
if (packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage{" << package << "}\n";
|
||||
else if (!packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage[" << packageopts << "]{" << package << "}\n";
|
||||
}
|
||||
if (osf && roman.providesOSF(ot1) && !roman.osfpackage().empty())
|
||||
os << "\\usepackage{" << to_ascii(roman.osfpackage()) << "}\n";
|
||||
os << theLaTeXFonts().getLaTeXFont(from_ascii(rm)).getLaTeXCode(dryrun, ot1, complete, sc, osf);
|
||||
|
||||
// SANS SERIF
|
||||
LaTeXFont sans = theLaTeXFonts().getLaTeXFont(from_ascii(sf));
|
||||
if (sans.switchdefault()) {
|
||||
if (sans.available(ot1) || dryrun)
|
||||
os << "\\renewcommand{\\sfdefault}{" << to_ascii(sans.name()) << "}\n";
|
||||
else
|
||||
frontend::Alert::warning(_("Font not available"),
|
||||
bformat(_("The LaTeX package `%1$s' needed for the font `%2$s'\n"
|
||||
"is not available on your system. LyX will fall back to the default font."),
|
||||
sans.requires(), sans.guiname()), true);
|
||||
} else {
|
||||
string const package = sans.getAvailablePackage(dryrun, ot1);
|
||||
string const packageopts = sans.getPackageOptions(ot1, sc, osf, sfscale);
|
||||
if (packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage{" << package << "}\n";
|
||||
else if (!packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage[" << packageopts << "]{" << package << "}\n";
|
||||
}
|
||||
os << theLaTeXFonts().getLaTeXFont(from_ascii(sf)).getLaTeXCode(dryrun, ot1, complete, sc, osf, sfscale);
|
||||
|
||||
// MONOSPACED/TYPEWRITER
|
||||
LaTeXFont mono = theLaTeXFonts().getLaTeXFont(from_ascii(tt));
|
||||
if (mono.switchdefault()) {
|
||||
if (mono.available(ot1) || dryrun)
|
||||
os << "\\renewcommand{\\ttdefault}{" << to_ascii(mono.name()) << "}\n";
|
||||
else
|
||||
frontend::Alert::warning(_("Font not available"),
|
||||
bformat(_("The LaTeX package `%1$s' needed for the font `%2$s'\n"
|
||||
"is not available on your system. LyX will fall back to the default font."),
|
||||
mono.requires(), mono.guiname()), true);
|
||||
} else {
|
||||
string const package = mono.getAvailablePackage(dryrun, ot1);
|
||||
string const packageopts = mono.getPackageOptions(ot1, sc, osf, ttscale);
|
||||
if (packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage{" << package << "}\n";
|
||||
else if (!packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage[" << packageopts << "]{" << package << "}\n";
|
||||
}
|
||||
os << theLaTeXFonts().getLaTeXFont(from_ascii(tt)).getLaTeXCode(dryrun, ot1, complete, sc, osf, ttscale);
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ string const LaTeXFont::getAvailablePackage(bool dryrun, bool ot1, bool complete
|
||||
ot1package_, guiname_), true);
|
||||
return string();
|
||||
}
|
||||
if (complete && !completepackage_.empty()) {
|
||||
if (family_ == "rm" && complete && !completepackage_.empty()) {
|
||||
if (LaTeXFeatures::isAvailable(to_ascii(completepackage_)) || dryrun)
|
||||
return to_ascii(completepackage_);
|
||||
}
|
||||
@ -120,8 +120,7 @@ string const LaTeXFont::getAvailablePackage(bool dryrun, bool ot1, bool complete
|
||||
}
|
||||
|
||||
|
||||
string const LaTeXFont::getPackageOptions(bool const & ot1, bool const & sc,
|
||||
bool const & osf, int const & scale)
|
||||
string const LaTeXFont::getPackageOptions(bool ot1, bool sc, bool osf, int scale)
|
||||
{
|
||||
if (ot1 && !ot1package_.empty())
|
||||
return string();
|
||||
@ -146,6 +145,40 @@ string const LaTeXFont::getPackageOptions(bool const & ot1, bool const & sc,
|
||||
}
|
||||
|
||||
|
||||
string const LaTeXFont::getLaTeXCode(bool dryrun, bool ot1, bool complete, bool sc,
|
||||
bool osf, int const & scale)
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
if (switchdefault_) {
|
||||
if (family_.empty()) {
|
||||
LYXERR0("Error: Font `" << name_ << "' has no family defined!");
|
||||
return string();
|
||||
}
|
||||
if (available(ot1) || dryrun)
|
||||
os << "\\renewcommand{\\" << to_ascii(family_) << "default}{"
|
||||
<< to_ascii(name_) << "}\n";
|
||||
else
|
||||
frontend::Alert::warning(_("Font not available"),
|
||||
bformat(_("The LaTeX package `%1$s' needed for the font `%2$s'\n"
|
||||
"is not available on your system. LyX will fall back to the default font."),
|
||||
requires_, guiname_), true);
|
||||
} else {
|
||||
string const package =
|
||||
getAvailablePackage(dryrun, ot1, complete);
|
||||
string const packageopts = getPackageOptions(ot1, sc, osf, scale);
|
||||
if (packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage{" << package << "}\n";
|
||||
else if (!packageopts.empty() && !package.empty())
|
||||
os << "\\usepackage[" << packageopts << "]{" << package << "}\n";
|
||||
}
|
||||
if (osf && providesOSF(ot1) && !osfpackage_.empty())
|
||||
os << "\\usepackage{" << to_ascii(osfpackage_) << "}\n";
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
|
||||
bool LaTeXFont::readFont(Lexer & lex)
|
||||
{
|
||||
enum LaTeXFontTags {
|
||||
|
@ -63,20 +63,24 @@ public:
|
||||
bool providesSC(bool ot1 = false) const;
|
||||
/// Does this font provide scaling?
|
||||
bool providesScale(bool ot1 = false) const;
|
||||
/// Return the preferred available package
|
||||
std::string const getAvailablePackage(bool dryrun = false,
|
||||
bool ot1 = false,
|
||||
bool complete = false);
|
||||
/// Return the package options
|
||||
std::string const getPackageOptions(bool const & ot1,
|
||||
bool const & sc,
|
||||
bool const & osf,
|
||||
int const & scale = 100);
|
||||
/// Return the LaTeX Code
|
||||
std::string const getLaTeXCode(bool dryrun, bool ot1, bool complete,
|
||||
bool sc, bool osf,
|
||||
int const & scale = 100);
|
||||
///
|
||||
bool read(Lexer & lex);
|
||||
///
|
||||
bool readFont(Lexer & lex);
|
||||
private:
|
||||
/// Return the preferred available package
|
||||
std::string const getAvailablePackage(bool dryrun,
|
||||
bool ot1,
|
||||
bool complete);
|
||||
/// Return the package options
|
||||
std::string const getPackageOptions(bool ot1,
|
||||
bool sc,
|
||||
bool osf,
|
||||
int scale);
|
||||
///
|
||||
docstring name_;
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user