]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
* src/LaTeXFeatures.cpp: simplify greektext definition. Patch by G. Milde (bug #6458)
[lyx.git] / src / BufferParams.cpp
index 37fba33142e96898a0021c1cc9bc0463028287b2..6ca616ae38bec104a259532f6ccd68554fbb1b6d 100644 (file)
@@ -367,9 +367,16 @@ BufferParams::BufferParams()
        listings_params = string();
        pagestyle = "default";
        suppress_date = false;
-       // white is equal to no background color
+       // no color is the default (white)
        backgroundcolor = lyx::rgbFromHexName("#ffffff");
-       compressed = false;
+       isbackgroundcolor = false;
+       // no color is the default (black)
+       fontcolor = lyx::rgbFromHexName("#000000");
+       isfontcolor = false;
+       // light gray is the default font color for greyed-out notes
+       notefontcolor = lyx::rgbFromHexName("#cccccc");
+       boxbgcolor = lyx::rgbFromHexName("#ff0000");
+       compressed = lyxrc.save_compressed;
        for (int iter = 0; iter < 4; ++iter) {
                user_defined_bullet(iter) = ITEMIZE_DEFAULTS[iter];
                temp_bullet(iter) = ITEMIZE_DEFAULTS[iter];
@@ -519,16 +526,22 @@ string BufferParams::readToken(Lexer & lex, string const & token,
                // We assume that a tex class exists for local or unknown layouts so this warning
                // will only be given for system layouts.
                if (!baseClass()->isTeXClassAvailable()) {
+                       docstring desc = 
+                               translateIfPossible(from_utf8(baseClass()->description()));
                        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));
+                               bformat(_("The document class requested\n"
+                                                "\t%1$s\n"
+                                                "requires external files that are not available.\n"
+                                                "The document class can still be used, but LyX\n"
+                                                "will not be able to produce output until the\n"
+                                                "following prerequisites are installed:\n"
+                                                "\t%2$s\n"
+                                                "See section 3.1.2.2 of the User's Guide for\n"
+                                                "more information."), 
+                                                desc, from_utf8(baseClass()->prerequisites()));
                        frontend::Alert::warning(_("Document class not available"),
-                                      msg + _("LyX will not be able to produce output."));
-               } 
+                                      msg);
+               }
        } else if (token == "\\begin_preamble") {
                readPreamble(lex);
        } else if (token == "\\begin_local_layout") {
@@ -715,6 +728,23 @@ string BufferParams::readToken(Lexer & lex, string const & token,
        } else if (token == "\\backgroundcolor") {
                lex.eatLine();
                backgroundcolor = lyx::rgbFromHexName(lex.getString());
+               isbackgroundcolor = true;
+       } else if (token == "\\fontcolor") {
+               lex.eatLine();
+               fontcolor = lyx::rgbFromHexName(lex.getString());
+               isfontcolor = true;
+       } else if (token == "\\notefontcolor") {
+               lex.eatLine();
+               string color = lex.getString();
+               notefontcolor = lyx::rgbFromHexName(color);
+               // set the font color within LyX
+               lcolor.setColor(Color_greyedouttext, color);
+       } else if (token == "\\boxbgcolor") {
+               lex.eatLine();
+               string color = lex.getString();
+               boxbgcolor = lyx::rgbFromHexName(color);
+               // set the font color within LyX
+               lcolor.setColor(Color_shadedbg, color);
        } else if (token == "\\paperwidth") {
                lex >> paperwidth;
        } else if (token == "\\paperheight") {
@@ -905,8 +935,14 @@ void BufferParams::writeFile(ostream & os) const
           << "\n\\paperorientation " << string_orientation[orientation]
           << "\n\\suppress_date " << convert<string>(suppress_date)
           << '\n';
-          if (backgroundcolor != lyx::rgbFromHexName("#ffffff"))
+       if (isbackgroundcolor == true)
                os << "\\backgroundcolor " << lyx::X11hexname(backgroundcolor) << '\n';
+       if (isfontcolor == true)
+               os << "\\fontcolor " << lyx::X11hexname(fontcolor) << '\n';
+       if (notefontcolor != lyx::rgbFromHexName("#cccccc"))
+               os << "\\notefontcolor " << lyx::X11hexname(notefontcolor) << '\n';
+       if (boxbgcolor != lyx::rgbFromHexName("#ff0000"))
+               os << "\\boxbgcolor " << lyx::X11hexname(boxbgcolor) << '\n';
 
        BranchList::const_iterator it = branchlist().begin();
        BranchList::const_iterator end = branchlist().end();
@@ -1194,10 +1230,12 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                // viet = string::npos when not found
                // the same is for all other languages that are not directly supported by
                // babel, but where LaTeX-packages add babel support.
-               // this is currently the case for Latvian, Lithuanian, and Mongolian
+               // this is currently the case for Latvian, Lithuanian, Mongolian
+               // and Turkmen
                size_t latvian = language_options.str().find("latvian");
                size_t lithu = language_options.str().find("lithuanian");
                size_t mongo = language_options.str().find("mongolian");
+               size_t turkmen = language_options.str().find("turkmen");
                // if Japanese is used, babel must directly be loaded
                // with language options, not in the class options, see
                // http://www.lyx.org/trac/ticket/4597#c4
@@ -1205,7 +1243,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                if (lyxrc.language_global_options && !language_options.str().empty()
                        && viet == string::npos && japan == string::npos
                        && latvian == string::npos && lithu == string::npos
-                       && mongo == string::npos)
+                       && mongo == string::npos && turkmen == string::npos)
                        clsoptions << language_options.str() << ',';
        }
 
@@ -1427,8 +1465,8 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                texrow.newline();
        }
 
-       // only output when the background color is not white
-       if (backgroundcolor != lyx::rgbFromHexName("#ffffff")) {
+       // only output when the background color is not default
+       if (isbackgroundcolor == true) {
                // only require color here, the background color will be defined
                // in LaTeXFeatures.cpp to avoid interferences with the LaTeX
                // package pdfpages 
@@ -1436,6 +1474,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                features.require("pagecolor");
        }
 
+       // only output when the font color is not default
+       if (isfontcolor == true) {
+               // only require color here, the font color will be defined
+               // in LaTeXFeatures.cpp to avoid interferences with the LaTeX
+               // package pdfpages 
+               features.require("color");
+               features.require("fontcolor");
+       }
+
        // Only if class has a ToC hierarchy
        if (tclass.hasTocLevels()) {
                if (secnumdepth != tclass.secnumdepth()) {
@@ -1725,10 +1772,11 @@ bool BufferParams::setBaseClass(string const & classname)
        LayoutFileList & bcl = LayoutFileList::get();
        if (!bcl.haveClass(classname)) {
                docstring s = 
-                       bformat(_("The document class %1$s could not be found. "
-                               "A default textclass with default layouts will be used. "
-                               "LyX might not be able to produce output unless a correct "
-                               "textclass is selected from the document settings dialog."),
+                       bformat(_("The layout file:\n"
+                               "%1$s\n"
+                               "could not be found. A default textclass with default\n"
+                               "layouts will be used. LyX will not be able to produce\n"
+                               "correct output."),
                        from_utf8(classname));
                frontend::Alert::error(_("Document class not found"), s);
                bcl.addEmptyClass(classname);
@@ -1737,10 +1785,14 @@ bool BufferParams::setBaseClass(string const & classname)
        bool const success = bcl[classname].load();
        if (!success) {
                docstring s = 
-                       bformat(_("The document class %1$s could not be loaded."),
+                       bformat(_("Due to some error in it, the layout file:\n"
+                               "%1$s\n"
+                               "could not be loaded. A default textclass with default\n"
+                               "layouts will be used. LyX will not be able to produce\n"
+                               "correct output."),
                        from_utf8(classname));
                frontend::Alert::error(_("Could not load class"), s);
-               return false;
+               bcl.addEmptyClass(classname);
        }
 
        pimpl_->baseClass_ = classname;
@@ -1779,6 +1831,7 @@ void BufferParams::makeDocumentClass()
        }
 }
 
+
 bool BufferParams::moduleCanBeAdded(string const & modName) const
 {
        return layoutModules_.moduleCanBeAdded(modName, baseClass());
@@ -2087,17 +2140,20 @@ string BufferParams::babelCall(string const & lang_opts) const
        // viet = string::npos when not found
        // the same is for all other languages that are not directly supported by
        // babel, but where LaTeX-packages add babel support.
-       // this is currently the case for Latvian, Lithuanian, and Mongolian
+       // this is currently the case for Latvian, Lithuanian, Mongolian
+       // and Turkmen
        size_t latvian = lang_opts.find("latvian");
        size_t lithu = lang_opts.find("lithuanian");
        size_t mongo = lang_opts.find("mongolian");
+       size_t turkmen = lang_opts.find("turkmen");
        // If Japanese is used, babel must directly be loaded with the
        // language options, see
        // http://www.lyx.org/trac/ticket/4597#c4
        size_t japan = lang_opts.find("japanese");
        if (!lyxrc.language_global_options || viet != string::npos
                || japan != string::npos || latvian != string::npos
-               || lithu != string::npos || mongo != string::npos)
+               || lithu != string::npos || mongo != string::npos
+               || turkmen != string::npos)
                return "\\usepackage[" + lang_opts + "]{babel}";
        return lang_pack;
 }