]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Do not use \&@#^_~$ as lstinline delimiter, as suggested by Herbert
[lyx.git] / src / BufferParams.cpp
index 18ce49e191f13b5c11ed6f34bdd73e2af4846881..c958a2dc5854933468b0fd2dc1d149a525f1ee6c 100644 (file)
@@ -37,6 +37,7 @@
 #include "VSpace.h"
 
 #include "frontends/alert.h"
+#include "insets/InsetListingsParams.h"
 
 #include "support/lyxalgo.h" // for lyx::count
 #include "support/convert.h"
@@ -351,6 +352,7 @@ BufferParams::BufferParams()
        graphicsDriver = "default";
        sides = TextClass::OneSide;
        columns = 1;
+       listings_params = string();
        pagestyle = "default";
        compressed = false;
        for (int iter = 0; iter < 4; ++iter) {
@@ -603,6 +605,17 @@ string const BufferParams::readToken(Lexer & lex, string const & token)
                lex >> fontsize;
        } else if (token == "\\papercolumns") {
                lex >> columns;
+       } else if (token == "\\listings_params") {
+               string par;
+               lex >> par;
+               // validate par and produce a valid listings parameter string
+               try {
+                       listings_params = InsetListingsParams(par).params();
+               } catch (invalidParam & e) {
+                       lyxerr << "Invalid parameter string " << par << endl;
+                       lyxerr << e.what() << endl;
+                       listings_params = string();
+               }
        } else if (token == "\\papersides") {
                int psides;
                lex >> psides;
@@ -734,6 +747,9 @@ void BufferParams::writeFile(ostream & os) const
           << "\n\\papercolumns " << columns
           << "\n\\papersides " << sides
           << "\n\\paperpagestyle " << pagestyle << '\n';
+       if (!listings_params.empty())
+               os << "\\listings_params \"" << 
+                       InsetListingsParams(listings_params).encodedString() << "\"\n";
        for (int i = 0; i < 4; ++i) {
                if (user_defined_bullet(i) != ITEMIZE_DEFAULTS[i]) {
                        if (user_defined_bullet(i).getFont() != -1) {
@@ -851,7 +867,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                                language_options << ',';
                        language_options << language->babel();
                }
-               if (lyxrc.language_global_options)
+               if (lyxrc.language_global_options && !language_options.str().empty())
                        clsoptions << language_options.str() << ',';
        }
 
@@ -946,6 +962,20 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                texrow.newline();
        }
 
+       if (!listings_params.empty()) {
+               os << "\\usepackage{listings}\n";
+               texrow.newline();
+               os << "\\lstset{";
+               // do not test validity because listings_params is supposed to be valid
+               string par = InsetListingsParams(listings_params).separatedParams(true);
+               os << from_ascii(par);
+               // count the number of newlines
+               for (size_t i = 0; i < par.size(); ++i)
+                       if (par[i] == '\n')
+                               texrow.newline();
+               os << "}\n";
+               texrow.newline();
+       }
        if (use_geometry || nonstandard_papersize) {
                os << "\\usepackage{geometry}\n";
                texrow.newline();
@@ -1176,16 +1206,6 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
 
        lyxpreamble += "\\makeatother\n";
 
-       // dvipost settings come after everything else
-       if (features.isAvailable("dvipost") && outputChanges) {
-               lyxpreamble +=
-                       "\\dvipostlayout\n"
-                       "\\dvipost{osstart color push Red}\n"
-                       "\\dvipost{osend color pop}\n"
-                       "\\dvipost{cbstart color push Blue}\n"
-                       "\\dvipost{cbend color pop}\n";
-       }
-
        int const nlines =
                int(lyx::count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
        for (int j = 0; j != nlines; ++j) {
@@ -1388,10 +1408,17 @@ string const BufferParams::dvips_options() const
 
 string const BufferParams::babelCall(string const & lang_opts) const
 {
-       string tmp = lyxrc.language_package;
-       if (!lyxrc.language_global_options && tmp == "\\usepackage{babel}")
-               tmp = string("\\usepackage[") + lang_opts + "]{babel}";
-       return tmp;
+       string lang_pack = lyxrc.language_package;
+       if (lang_pack != "\\usepackage{babel}")
+               return lang_pack;
+       // suppress the babel call when there is no babel language defined
+       // for the document language in the lib/languages file and if no
+       // other languages are used (lang_opts is then empty)
+       if (lang_opts.empty())
+               return string();
+       if (!lyxrc.language_global_options)
+               return "\\usepackage[" + lang_opts + "]{babel}";
+       return lang_pack;
 }