]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.cpp
InsetInfo: enable inset dissolve
[lyx.git] / src / LaTeXFeatures.cpp
index d3b8a50844a82c4985578db8ba8d1a3783ba928a..c78e73573001bfbf36e48b33a808733e0e17e2a4 100644 (file)
@@ -65,6 +65,10 @@ namespace lyx {
 static docstring const lyx_def = from_ascii(
        "\\providecommand{\\LyX}{L\\kern-.1667em\\lower.25em\\hbox{Y}\\kern-.125emX\\@}");
 
+static docstring const lyx_rtl_def = from_ascii(
+       "\\let\\@@LyX\\LyX\n"
+       "\\def\\LyX{\\@ensure@LTR{\\@@LyX}}");
+
 static docstring const lyx_hyperref_def = from_ascii(
        "\\providecommand{\\LyX}{\\texorpdfstring%\n"
        "  {L\\kern-.1667em\\lower.25em\\hbox{Y}\\kern-.125emX\\@}\n"
@@ -904,15 +908,25 @@ void LaTeXFeatures::getFontEncodings(vector<string> & encs, bool const onlylangs
                        encs.insert(encs.begin(), "T2A");
        }
 
-       for (auto const & lang : UsedLanguages_)
-               if (!lang->fontenc().empty()
-                   && ascii_lowercase(lang->fontenc()) != "none") {
-                       vector<string> extraencs = getVectorFromString(lang->fontenc());
-                       for (auto const & extra : extraencs) {
-                               if (find(encs.begin(), encs.end(), extra) == encs.end())
-                                       encs.insert(encs.begin(), extra);
-                       }
+       for (auto const & lang : UsedLanguages_) {
+               vector<string> extraencs =
+                       getVectorFromString(lang->fontenc(buffer().masterParams()));
+               for (auto const & extra : extraencs) {
+                       if (extra != "none" && find(encs.begin(), encs.end(), extra) == encs.end())
+                               encs.insert(encs.begin(), extra);
                }
+       }
+}
+
+
+bool LaTeXFeatures::hasRTLLanguage() const
+{
+       if (params_.language->rightToLeft())
+               return true;
+       for (auto const & lang : UsedLanguages_)
+               if (lang->rightToLeft())
+                       return true;
+       return false;
 }
 
 namespace {
@@ -982,9 +996,10 @@ char const * simplefeatures[] = {
        "todonotes",
        "forest",
        "varwidth",
-       "footnote",
        "tablefootnote",
        "afterpage",
+       "tabularx",
+       "xltabular"
 };
 
 char const * bibliofeatures[] = {
@@ -1107,6 +1122,13 @@ string const LaTeXFeatures::getPackages() const
        // The rest of these packages are somewhat more complicated
        // than those above.
 
+       if (mustProvide("footnote")) {
+               if (isRequired("hyperref"))
+                       packages << "\\usepackage{footnotehyper}\n";
+               else
+                       packages << "\\usepackage{footnote}\n";
+       }
+
        // [pdf]lscape is used to rotate longtables
        if (mustProvide("lscape")) {
                if (runparams_.flavor == OutputParams::LATEX
@@ -1362,6 +1384,8 @@ TexString LaTeXFeatures::getMacros() const
                        macros << lyx_hyperref_def << '\n';
                else
                        macros << lyx_def << '\n';
+               if (runparams_.use_polyglossia && hasRTLLanguage())
+                       macros << lyx_rtl_def << '\n';
        }
 
        if (mustProvide("noun"))
@@ -1389,19 +1413,19 @@ TexString LaTeXFeatures::getMacros() const
 
        // non-standard text accents:
        if (mustProvide("textcommaabove") || mustProvide("textcommaaboveright") ||
-           mustProvide("textcommabelow") || mustProvide("textbalticdefs"))
+           mustProvide("textcommabelow") || mustProvide("textbaltic"))
                macros << lyxaccent_def;
 
-       if (mustProvide("textcommabelow") || mustProvide("textbalticdefs"))
+       if (mustProvide("textcommabelow") || mustProvide("textbaltic"))
                macros << textcommabelow_def << '\n';
 
-       if (mustProvide("textcommaabove") || mustProvide("textbalticdefs"))
+       if (mustProvide("textcommaabove") || mustProvide("textbaltic"))
                macros << textcommaabove_def << '\n';
 
        if (mustProvide("textcommaaboveright"))
                macros << textcommaaboveright_def << '\n';
 
-       if (mustProvide("textbalticdefs"))
+       if (mustProvide("textbaltic"))
                macros << textbaltic_def << '\n';
 
        // split-level fractions