]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Amend 6c3447c8: FindAdv: sometimes a space is added on some math symbols
[lyx.git] / src / BufferParams.cpp
index 8a8422a7ff206441b5cf5c5309468695f4681964..1324aaac9e1d55d030cc3019764a4639c60894cb 100644 (file)
@@ -33,7 +33,6 @@
 #include "LaTeXFeatures.h"
 #include "LaTeXFonts.h"
 #include "Font.h"
-#include "Lexer.h"
 #include "LyXRC.h"
 #include "OutputParams.h"
 #include "Spacing.h"
@@ -53,6 +52,7 @@
 #include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/Length.h"
+#include "support/Lexer.h"
 #include "support/Messages.h"
 #include "support/mutex.h"
 #include "support/Package.h"
@@ -1593,7 +1593,8 @@ void BufferParams::validate(LaTeXFeatures & features) const
 {
        features.require(documentClass().required());
 
-       if (columns > 1 && language->rightToLeft())
+       if (columns > 1 && language->rightToLeft()
+           && !features.runparams().isFullUnicode())
                features.require("rtloutputdblcol");
 
        if (output_changes) {
@@ -2152,6 +2153,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
        if (paragraph_separation) {
                // when skip separation
                string psopt;
+               bool default_skip = false;
                switch (getDefSkip().kind()) {
                case VSpace::SMALLSKIP:
                        psopt = "\\smallskipamount";
@@ -2164,6 +2166,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                        break;
                case VSpace::HALFLINE:
                        // default (no option)
+                       default_skip = true;
                        break;
                case VSpace::FULLLINE:
                        psopt = "\\baselineskip";
@@ -2174,12 +2177,30 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                default:
                        break;
                }
-               if (!features.isProvided("parskip")) {
+               if (features.isProvided("parskip")) {
+                       // package already loaded (with arbitrary options)
+                       // change parskip value only
                        if (!psopt.empty())
-                               psopt = "[skip=" + psopt + "]";
-                       os << "\\usepackage" + psopt + "{parskip}\n";
+                               os << "\\setlength{\\parskip}{" + psopt + "}\n";
+                       else if (default_skip)
+                               // explicitly reset default (might have been changed
+                               // in a class or package)
+                               os << "\\parskip=.5\\baselineskip plus 2pt\\relax\n";
                } else {
-                       os << "\\setlength{\\parskip}{" + psopt + "}\n";
+                       // load parskip package with required options
+                       string psopts;
+                       if (!psopt.empty())
+                               psopts = "skip=" + psopt;
+                       string const xpsopts = getPackageOptions("parskip");
+                       if (!xpsopts.empty()) {
+                               if (!psopts.empty())
+                                       psopts += ",";
+                               psopts += xpsopts;
+                       }
+                       os << "\\usepackage";
+                       if (!psopts.empty())
+                               os << "[" << psopts << "]";
+                       os << "{parskip}\n";
                }
        } else {
                // when separation by indentation
@@ -2960,6 +2981,15 @@ bool BufferParams::hasPackageOption(string const package, string const opt) cons
 }
 
 
+string BufferParams::getPackageOptions(string const package) const
+{
+       for (auto const & p : documentClass().packageOptions())
+               if (package == p.first)
+                       return p.second;
+       return string();
+}
+
+
 bool BufferParams::useBidiPackage(OutputParams const & rp) const
 {
        return (rp.use_polyglossia