namespace lyx {
-class Lexer;
+namespace support { class Lexer; }
/// LaTeX Font definition
class LaTeXFont {
public:
/// TeX font
- LaTeXFont() : switchdefault_(false) {}
+ // FIXME Add fontenc tag to classes which is used if no font is specified?
+ LaTeXFont() : osfdefault_(false), switchdefault_(false), moreopts_(false),
+ osffontonly_(false) { fontenc_.push_back("T1"); }
/// The font name
- docstring const & name() { return name_; }
+ docstring const & name() const { return name_; }
/// The name to appear in the document dialog
- docstring const & guiname() { return guiname_; }
+ docstring const & guiname() const { return guiname_; }
/// Font family (rm, sf, tt)
- docstring const & family() { return family_; }
+ docstring const & family() const { return family_; }
/// The package that provides this font
- docstring const & package() { return package_; }
- /// Alternative packages if package() is not available
- std::vector<docstring> const & altpackages() { return altpackages_; }
- /// A package that provides all families
- docstring const & completepackage() { return completepackage_; }
- /// A package specifically needed for OT1 font encoding
- docstring const & ot1package() { return ot1package_; }
- /// A package that provides Old Style Figures for this font
- docstring const & osfpackage() { return osfpackage_; }
- /// A package option needed to load this font
- docstring const & packageoption() { return packageoption_; }
+ docstring const & package() const { return package_; }
+ /// Does this provide a specific font encoding?
+ bool hasFontenc(std::string const &) const;
+ /// The font encoding(s)
+ std::vector<std::string> const & fontencs() const { return fontenc_; }
+ /// Alternative font if package() is not available
+ std::vector<docstring> const & altfonts() const { return altfonts_; }
+ /// A font that provides all families
+ docstring const & completefont() const { return completefont_; }
+ /// A font specifically needed for OT1 font encoding
+ docstring const & ot1font() const { return ot1font_; }
+ /// A font that provides Old Style Figures for this type face
+ docstring const & osffont() const { return osffont_; }
/// A package option for Old Style Figures
- docstring const & osfoption() { return osfoption_; }
+ docstring const & osfoption() const { return osfoption_; }
/// A package option for true SmallCaps
- docstring const & scoption() { return scoption_; }
+ docstring const & scoption() const { return scoption_; }
/// A package option for both Old Style Figures and SmallCaps
- docstring const & osfscoption() { return osfscoption_; }
+ docstring const & osfscoption() const { return osfscoption_; }
/// A package option for font scaling
- docstring const & scaleoption() { return scaleoption_; }
+ docstring const & scaleoption() const { return scaleoption_; }
+ /// A macro for font scaling
+ docstring const & scalecmd() const { return scalecmd_; }
+ /// Does this provide additional options?
+ bool providesMoreOptions(bool ot1, bool complete, bool nomath) const;
/// Alternative requirement to test for
- docstring const & requires() { return requires_; }
+ docstring const & required() const { return required_; }
/// Does this font provide a given \p feature
- bool provides(std::string const & name) const;
+ bool provides(std::string const & name, bool ot1,
+ bool complete, bool nomath) const;
/// Issue the familydefault switch
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 = false) const;
+ bool available(bool ot1, bool nomath) const;
+ /// Does this font provide an alternative without math?
+ bool providesNoMath(bool ot1, bool complete) const;
/// Does this font provide Old Style Figures?
- bool providesOSF(bool ot1 = false) const;
+ bool providesOSF(bool ot1, bool complete, bool nomath) const;
/// Does this font provide optional true SmallCaps?
- bool providesSC(bool ot1 = false) const;
+ bool providesSC(bool ot1, bool complete, bool nomath) const;
+ /** does this font provide OSF and Small Caps only via
+ * a single, undifferentiated expert option?
+ */
+ bool hasMonolithicExpertSet(bool ot1, bool complete, bool nomath) const;
/// Does this font provide scaling?
- bool providesScale(bool ot1 = false) const;
+ bool providesScale(bool ot1, bool complete, bool nomath) const;
/// Return the LaTeX Code
std::string const getLaTeXCode(bool dryrun, bool ot1, bool complete,
- bool sc, bool osf,
- int const & scale = 100);
+ bool sc, bool osf, bool nomath,
+ std::string const & extraopts = std::string(),
+ int scale = 100) const;
+ /// Return the actually used font
+ docstring const getUsedFont(bool ot1, bool complete, bool nomath, bool osf) const;
+ /// Return the actually used package
+ docstring const getUsedPackage(bool ot1, bool complete, bool nomath) const;
///
- bool read(Lexer & lex);
+ bool read(support::Lexer & lex);
///
- bool readFont(Lexer & lex);
+ bool readFont(support::Lexer & lex);
private:
- /// Return the preferred available package
- std::string const getAvailablePackage(bool dryrun,
- bool ot1,
- bool complete,
- bool & alt);
+ /// Return the preferred available package
+ std::string const getAvailablePackage(bool dryrun) const;
/// Return the package options
std::string const getPackageOptions(bool ot1,
+ bool complete,
bool sc,
bool osf,
- int scale);
+ int scale,
+ std::string const & extraopts,
+ bool nomath) const;
+ /// Return an alternative font
+ LaTeXFont altFont(docstring const & name) const;
///
docstring name_;
///
///
docstring package_;
///
- std::vector<docstring> altpackages_;
+ std::vector<std::string> fontenc_;
///
- docstring completepackage_;
+ std::vector<docstring> altfonts_;
///
- docstring ot1package_;
+ docstring completefont_;
///
- docstring osfpackage_;
+ docstring nomathfont_;
///
- docstring packageoption_;
+ docstring ot1font_;
+ ///
+ docstring osffont_;
+ ///
+ docstring packageoptions_;
///
docstring osfoption_;
///
///
docstring scaleoption_;
///
+ docstring scalecmd_;
+ ///
std::vector<std::string> provides_;
///
- docstring requires_;
+ docstring required_;
+ ///
+ docstring preamble_;
///
bool osfdefault_;
///
bool switchdefault_;
///
- bool available_;
+ bool moreopts_;
///
- bool available_ot1_;
+ bool osffontonly_;
};
-
-
+
+
/** The list of available LaTeX fonts
*/
class LaTeXFonts {
TexFontMap getLaTeXFonts();
/// Get a specific LaTeXFont \p name
LaTeXFont getLaTeXFont(docstring const & name);
+ /// Get a specific AltFont \p name
+ LaTeXFont getAltFont(docstring const & name);
private:
///
void readLaTeXFonts();
///
TexFontMap texfontmap_;
+ ///
+ TexFontMap texaltfontmap_;
};
/// Implementation is in LyX.cpp