]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Next leftover.
[lyx.git] / src / BufferParams.cpp
index d205a35840f1a6c53465a121abe0e352c9025c06..403a2cbbe1fa0d2a46ea3abb3c6f899a58053ab7 100644 (file)
@@ -376,6 +376,7 @@ BufferParams::BufferParams()
        fonts_roman = "default";
        fonts_sans = "default";
        fonts_typewriter = "default";
+       fonts_math = "auto";
        fonts_default_family = "default";
        useNonTeXFonts = false;
        fonts_expert_sc = false;
@@ -663,6 +664,9 @@ string BufferParams::readToken(Lexer & lex, string const & token,
        } else if (token == "\\font_typewriter") {
                lex.eatLine();
                fonts_typewriter = lex.getString();
+       } else if (token == "\\font_math") {
+               lex.eatLine();
+               fonts_math = lex.getString();
        } else if (token == "\\font_default_family") {
                lex >> fonts_default_family;
        } else if (token == "\\use_non_tex_fonts") {
@@ -988,6 +992,7 @@ void BufferParams::writeFile(ostream & os) const
           << "\n\\font_roman " << fonts_roman
           << "\n\\font_sans " << fonts_sans
           << "\n\\font_typewriter " << fonts_typewriter
+          << "\n\\font_math " << fonts_math
           << "\n\\font_default_family " << fonts_default_family
           << "\n\\use_non_tex_fonts " << convert<string>(useNonTeXFonts)
           << "\n\\font_sc " << convert<string>(fonts_expert_sc)
@@ -1158,6 +1163,9 @@ void BufferParams::validate(LaTeXFeatures & features) const
 {
        features.require(documentClass().requires());
 
+       if (columns > 1 && language->rightToLeft())
+               features.require("rtloutputdblcol");
+
        if (outputChanges) {
                bool dvipost    = LaTeXFeatures::isAvailable("dvipost");
                bool xcolorulem = LaTeXFeatures::isAvailable("ulem") &&
@@ -1251,6 +1259,9 @@ void BufferParams::validate(LaTeXFeatures & features) const
                || useNonTeXFonts))
                features.require("polyglossia");
 
+       if (useNonTeXFonts && fonts_math != "auto")
+               features.require("unicode-math");
+
        if (!language->requires().empty())
                features.require(language->requires());
 }
@@ -1411,8 +1422,12 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
        if (useNonTeXFonts && !ams.empty())
                os << from_ascii(ams);
 
-       if (useNonTeXFonts)
+       if (useNonTeXFonts) {
                os << "\\usepackage{fontspec}\n";
+               if (features.mustProvide("unicode-math")
+                   && features.isAvailable("unicode-math"))
+                       os << "\\usepackage{unicode-math}\n";
+       }
 
        // font selection must be done before loading fontenc.sty
        string const fonts = loadFonts(features);
@@ -2112,9 +2127,12 @@ bool BufferParams::isExportable(string const & format) const
 
 
 namespace {
-bool formatSorter(Format const * lhs, Format const * rhs) {
+
+bool formatSorter(Format const * lhs, Format const * rhs)
+{
        return _(lhs->prettyname()) < _(rhs->prettyname());
 }
+
 }
 
 
@@ -2776,10 +2794,9 @@ string const BufferParams::parseFontName(string const & name) const
 
 string const BufferParams::loadFonts(LaTeXFeatures & features) const
 {
-       // TODO: separate math fonts.
-
        if (fonts_roman == "default" && fonts_sans == "default"
-           && fonts_typewriter == "default")
+           && fonts_typewriter == "default"
+           && (fonts_math == "default" || fonts_math == "auto"))
                //nothing to do
                return string();
 
@@ -2843,18 +2860,27 @@ string const BufferParams::loadFonts(LaTeXFeatures & features) const
        bool const ot1 = (font_encoding() == "default" || font_encoding() == "OT1");
        bool const dryrun = features.runparams().dryrun;
        bool const complete = (fonts_sans == "default" && fonts_typewriter == "default");
+       bool const nomath = (fonts_math == "default");
 
        // ROMAN FONTS
        os << theLaTeXFonts().getLaTeXFont(from_ascii(fonts_roman)).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures);
+               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               nomath);
 
        // SANS SERIF
        os << theLaTeXFonts().getLaTeXFont(from_ascii(fonts_sans)).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures, fonts_sans_scale);
+               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               nomath, fonts_sans_scale);
 
        // MONOSPACED/TYPEWRITER
        os << theLaTeXFonts().getLaTeXFont(from_ascii(fonts_typewriter)).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures, fonts_typewriter_scale);
+               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               nomath, fonts_typewriter_scale);
+
+       // MATH
+       os << theLaTeXFonts().getLaTeXFont(from_ascii(fonts_math)).getLaTeXCode(
+               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               nomath);
 
        return os.str();
 }