]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Streamlining CollapseStatus stuff
[lyx.git] / src / BufferParams.cpp
index 916756e147630b6536a7eb189cfdf6cd05525f0b..57932680f5bdb2e33fc016e6f287df4f9d463aef 100644 (file)
 #include "frontends/alert.h"
 #include "insets/InsetListingsParams.h"
 
-#include "support/lyxalgo.h" // for lyx::count
 #include "support/convert.h"
 #include "support/Translator.h"
 
 #include <boost/array.hpp>
 
+#include <algorithm>
 #include <sstream>
 
+using std::count;
 using std::endl;
 using std::string;
 using std::istringstream;
@@ -474,11 +475,11 @@ string const BufferParams::readToken(Lexer & lex, string const & token)
                if (!getTextClass().isTeXClassAvailable()) {
                        docstring const msg =
                                bformat(_("The layout file requested by this document,\n"
-                                                "%1$s.layout,\n"
-                                                "is not usable. This is probably because a LaTeX\n"
-                                                "class or style file required by it is not\n"
-                                                "available. See the Customization documentation\n"
-                                                "for more information.\n"), from_utf8(classname));
+                                                "%1$s.layout,\n"
+                                                "is not usable. This is probably because a LaTeX\n"
+                                                "class or style file required by it is not\n"
+                                                "available. See the Customization documentation\n"
+                                                "for more information.\n"), from_utf8(classname));
                        frontend::Alert::warning(_("Document class not available"),
                                       msg + _("LyX will not be able to produce output."));
                }
@@ -608,14 +609,7 @@ string const BufferParams::readToken(Lexer & lex, string const & token)
        } 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();
-               }
+               listings_params = InsetListingsParams(par).params();
        } else if (token == "\\papersides") {
                int psides;
                lex >> psides;
@@ -748,7 +742,7 @@ void BufferParams::writeFile(ostream & os) const
           << "\n\\papersides " << sides
           << "\n\\paperpagestyle " << pagestyle << '\n';
        if (!listings_params.empty())
-               os << "\\listings_params \"" << 
+               os << "\\listings_params \"" <<
                        InsetListingsParams(listings_params).encodedString() << "\"\n";
        for (int i = 0; i < 4; ++i) {
                if (user_defined_bullet(i) != ITEMIZE_DEFAULTS[i]) {
@@ -773,7 +767,10 @@ void BufferParams::writeFile(ostream & os) const
        AuthorList::Authors::const_iterator a_it = pimpl_->authorlist.begin();
        AuthorList::Authors::const_iterator a_end = pimpl_->authorlist.end();
        for (; a_it != a_end; ++a_it) {
-               os << "\\author " << a_it->second << "\n";
+               if (a_it->second.used())
+                       os << "\\author " << a_it->second << "\n";
+               else
+                       os << "\\author " << Author() << "\n";
        }
 }
 
@@ -794,7 +791,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
        }
 
        // custom, A3, B3 and B4 paper sizes need geometry
-       bool nonstandard_papersize = papersize == PAPER_B3 
+       bool nonstandard_papersize = papersize == PAPER_B3
                || papersize == PAPER_B4
                || papersize == PAPER_A3
                || papersize == PAPER_CUSTOM;
@@ -899,15 +896,24 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
        if (fontsDefaultFamily != "default")
                os << "\\renewcommand{\\familydefault}{\\"
                   << from_ascii(fontsDefaultFamily) << "}\n";
+
+       // set font encoding
        // this one is not per buffer
+       // for arabic_arabi and farsi we also need to load the LAE and LFE encoding
        if (lyxrc.fontenc != "default") {
-               os << "\\usepackage[" << from_ascii(lyxrc.fontenc)
-                  << "]{fontenc}\n";
-               texrow.newline();
+               if (language->lang() == "arabic_arabi" || language->lang() == "farsi") {
+                       os << "\\usepackage[" << from_ascii(lyxrc.fontenc)
+                          << ",LFE,LAE]{fontenc}\n";
+                       texrow.newline();
+               } else {
+                       os << "\\usepackage[" << from_ascii(lyxrc.fontenc)
+                          << "]{fontenc}\n";
+                       texrow.newline();
+               }
        }
 
        // handle inputenc etc.
-       os << writeEncodingPreamble(features, texrow);
+       writeEncodingPreamble(os, features, texrow);
 
        if (!listings_params.empty()) {
                os << "\\usepackage{listings}\n";
@@ -1151,10 +1157,10 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                lyxpreamble += from_utf8(features.getBabelOptions());
        }
 
-       lyxpreamble += "\\makeatother\n";
+       lyxpreamble += "\\makeatother\n\n";
 
        int const nlines =
-               int(lyx::count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
+               int(count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
        for (int j = 0; j != nlines; ++j) {
                texrow.newline();
        }
@@ -1369,11 +1375,9 @@ string const BufferParams::babelCall(string const & lang_opts) const
 }
 
 
-docstring const BufferParams::writeEncodingPreamble(LaTeXFeatures & features,
-                             TexRow & texrow) const
+void BufferParams::writeEncodingPreamble(odocstream & os,
+               LaTeXFeatures & features, TexRow & texrow) const
 {
-       odocstringstream os;
-
        if (inputenc == "auto") {
                string const doc_encoding =
                        language->encoding()->latexName();
@@ -1408,7 +1412,7 @@ docstring const BufferParams::writeEncodingPreamble(LaTeXFeatures & features,
                        texrow.newline();
                }
        } else if (inputenc != "default") {
-               switch (language->encoding()->package()) {
+               switch (encoding().package()) {
                case Encoding::none:
                        break;
                case Encoding::inputenc:
@@ -1429,8 +1433,6 @@ docstring const BufferParams::writeEncodingPreamble(LaTeXFeatures & features,
                os << "\\usepackage{armtex}\n";
                texrow.newline();
        }
-
-       return os.str();
 }