]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
* do not ignore "requires" field in MathMacro
[lyx.git] / src / BufferParams.cpp
index fa3f02a8e30af6ba8c5e849b42bab7083cde42c7..052da14fd4c14d8604f18c89f46acc8502c76acf 100644 (file)
 #include "gettext.h"
 #include "Language.h"
 #include "LaTeXFeatures.h"
-#include "LColor.h"
-#include "LyXFont.h"
-#include "LyXLex.h"
+#include "Messages.h"
+#include "Color.h"
+#include "Font.h"
+#include "Lexer.h"
 #include "LyXRC.h"
-#include "LyXTextClassList.h"
+#include "TextClassList.h"
 #include "OutputParams.h"
-#include "tex-strings.h"
 #include "Spacing.h"
 #include "TexRow.h"
 #include "VSpace.h"
 
-#include "frontends/Alert.h"
+#include "frontends/alert.h"
 
 #include "support/lyxalgo.h" // for lyx::count
 #include "support/convert.h"
 
 #include <sstream>
 
-
-namespace lyx {
-
-using support::bformat;
-using support::rtrim;
-using support::tokenPos;
-
 using std::endl;
 using std::string;
 using std::istringstream;
@@ -60,9 +53,45 @@ using std::ostream;
 using std::ostringstream;
 using std::pair;
 
-namespace Alert = lyx::frontend::Alert;
+using lyx::support::bformat;
+using lyx::support::rtrim;
+using lyx::support::tokenPos;
+
+
+static char const * const string_paragraph_separation[] = {
+       "indent", "skip", ""
+};
+
+
+static char const * const string_quotes_language[] = {
+       "english", "swedish", "german", "polish", "french", "danish", ""
+};
+
+
+static char const * const string_papersize[] = {
+       "default", "custom", "letterpaper", "executivepaper", "legalpaper",
+       "a3paper", "a4paper", "a5paper", "b3paper", "b4paper", "b5paper", ""
+};
+
+
+static char const * const string_orientation[] = {
+       "portrait", "landscape", ""
+};
 
 
+static char const * const string_footnotekinds[] = {
+       "footnote", "margin", "fig", "tab", "alg", "wide-fig", "wide-tab", ""
+};
+
+
+static char const * const tex_graphics[] = {
+       "default", "dvips", "dvitops", "emtex",
+       "ln", "oztex", "textures", "none", ""
+};
+
+
+namespace lyx {
+
 // Local translators
 namespace {
 
@@ -156,13 +185,13 @@ PaperOrientationTranslator const & paperorientationtranslator()
 
 
 // Page sides
-typedef Translator<int, LyXTextClass::PageSides> SidesTranslator;
+typedef Translator<int, TextClass::PageSides> SidesTranslator;
 
 
 SidesTranslator const init_sidestranslator()
 {
-       SidesTranslator translator(1, LyXTextClass::OneSide);
-       translator.addPair(2, LyXTextClass::TwoSides);
+       SidesTranslator translator(1, TextClass::OneSide);
+       translator.addPair(2, TextClass::TwoSides);
        return translator;
 }
 
@@ -320,7 +349,7 @@ BufferParams::BufferParams()
        fontsTypewriterScale = 100;
        inputenc = "auto";
        graphicsDriver = "default";
-       sides = LyXTextClass::OneSide;
+       sides = TextClass::OneSide;
        columns = 1;
        pagestyle = "default";
        compressed = false;
@@ -335,6 +364,13 @@ BufferParams::~BufferParams()
 {}
 
 
+docstring const BufferParams::B_(string const & l10n) const
+{
+       BOOST_ASSERT(language);
+       return getMessages(language->code()).get(l10n);
+}
+
+
 AuthorList & BufferParams::authors()
 {
        return pimpl_->authorlist;
@@ -411,7 +447,7 @@ void BufferParams::setDefSkip(VSpace const & vs)
 }
 
 
-string const BufferParams::readToken(LyXLex & lex, string const & token)
+string const BufferParams::readToken(Lexer & lex, string const & token)
 {
        if (token == "\\textclass") {
                lex.next();
@@ -433,7 +469,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                // FIXME: isTeXClassAvailable will try to load the layout file, but will
                // fail because of the lack of path info. Warnings will be given although
                // the layout file will be correctly loaded later.
-               if (!getLyXTextClass().isTeXClassAvailable()) {
+               if (!getTextClass().isTeXClassAvailable()) {
                        docstring const msg =
                                bformat(_("The layout file requested by this document,\n"
                                                 "%1$s.layout,\n"
@@ -441,7 +477,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                                                 "class or style file required by it is not\n"
                                                 "available. See the Customization documentation\n"
                                                 "for more information.\n"), from_utf8(classname));
-                       Alert::warning(_("Document class not available"),
+                       frontend::Alert::warning(_("Document class not available"),
                                       msg + _("LyX will not be able to produce output."));
                }
        } else if (token == "\\begin_preamble") {
@@ -527,9 +563,9 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                                string color = lex.getString();
                                if (branch_ptr)
                                        branch_ptr->setColor(color);
-                               // Update also the LColor table:
+                               // Update also the Color table:
                                if (color == "none")
-                                       color = lcolor.getX11Name(LColor::background);
+                                       color = lcolor.getX11Name(Color::background);
                                // FIXME UNICODE
                                lcolor.setColor(to_utf8(branch), color);
 
@@ -731,7 +767,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
 {
        os << "\\documentclass";
 
-       LyXTextClass const & tclass = getLyXTextClass();
+       TextClass const & tclass = getTextClass();
 
        ostringstream clsoptions; // the document class options.
 
@@ -779,10 +815,10 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
        // if needed
        if (sides != tclass.sides()) {
                switch (sides) {
-               case LyXTextClass::OneSide:
+               case TextClass::OneSide:
                        clsoptions << "oneside,";
                        break;
-               case LyXTextClass::TwoSides:
+               case TextClass::TwoSides:
                        clsoptions << "twoside,";
                        break;
                }
@@ -862,7 +898,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                // thailatex does not use the inputenc package, but sets up
                // babel directly for tis620-0 encoding, therefore we must
                // not request inputenc for tis620-0 encoding
-               if (!encodings.empty() || doc_encoding != "tis620-0") {
+               if (!encodings.empty() && doc_encoding != "tis620-0") {
                        os << "\\usepackage[";
                        std::set<string>::const_iterator it = encodings.begin();
                        std::set<string>::const_iterator const end = encodings.end();
@@ -880,13 +916,21 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                        os << "]{inputenc}\n";
                        texrow.newline();
                }
+       // utf8-plain is for XeTeX users (inputenc not desired)
        } else if (inputenc != "default" && inputenc != "tis620-0" &&
-                  inputenc != "ascii") {
+                  inputenc != "ascii" &&  inputenc != "utf8-plain") {
                os << "\\usepackage[" << from_ascii(inputenc)
                   << "]{inputenc}\n";
                texrow.newline();
        }
 
+       // The encoding "armscii8" is only available when the package "armtex" is loaded.
+       // armscii8 is used for Armenian.
+       if (language->encoding()->latexName() == "armscii8" || inputenc == "armscii8") {
+               os << "\\usepackage{armtex}\n";
+               texrow.newline();
+       }
+
        if (use_geometry || nonstandard_papersize) {
                os << "\\usepackage{geometry}\n";
                texrow.newline();
@@ -961,19 +1005,19 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
                        }
                }
                if (!topmargin.empty())
-                       os << ",tmargin=" << from_ascii(LyXLength(topmargin).asLatexString());
+                       os << ",tmargin=" << from_ascii(Length(topmargin).asLatexString());
                if (!bottommargin.empty())
-                       os << ",bmargin=" << from_ascii(LyXLength(bottommargin).asLatexString());
+                       os << ",bmargin=" << from_ascii(Length(bottommargin).asLatexString());
                if (!leftmargin.empty())
-                       os << ",lmargin=" << from_ascii(LyXLength(leftmargin).asLatexString());
+                       os << ",lmargin=" << from_ascii(Length(leftmargin).asLatexString());
                if (!rightmargin.empty())
-                       os << ",rmargin=" << from_ascii(LyXLength(rightmargin).asLatexString());
+                       os << ",rmargin=" << from_ascii(Length(rightmargin).asLatexString());
                if (!headheight.empty())
-                       os << ",headheight=" << from_ascii(LyXLength(headheight).asLatexString());
+                       os << ",headheight=" << from_ascii(Length(headheight).asLatexString());
                if (!headsep.empty())
-                       os << ",headsep=" << from_ascii(LyXLength(headsep).asLatexString());
+                       os << ",headsep=" << from_ascii(Length(headsep).asLatexString());
                if (!footskip.empty())
-                       os << ",footskip=" << from_ascii(LyXLength(footskip).asLatexString());
+                       os << ",footskip=" << from_ascii(Length(footskip).asLatexString());
                os << "}\n";
                texrow.newline();
        }
@@ -1140,7 +1184,7 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
 
 void BufferParams::useClassDefaults()
 {
-       LyXTextClass const & tclass = textclasslist[textclass];
+       TextClass const & tclass = textclasslist[textclass];
 
        sides = tclass.sides();
        columns = tclass.columns();
@@ -1156,7 +1200,7 @@ void BufferParams::useClassDefaults()
 
 bool BufferParams::hasClassDefaults() const
 {
-       LyXTextClass const & tclass = textclasslist[textclass];
+       TextClass const & tclass = textclasslist[textclass];
 
        return (sides == tclass.sides()
                && columns == tclass.columns()
@@ -1167,27 +1211,27 @@ bool BufferParams::hasClassDefaults() const
 }
 
 
-LyXTextClass const & BufferParams::getLyXTextClass() const
+TextClass const & BufferParams::getTextClass() const
 {
        return textclasslist[textclass];
 }
 
 
-LyXFont const BufferParams::getFont() const
+Font const BufferParams::getFont() const
 {
-       LyXFont f = getLyXTextClass().defaultfont();
+       Font f = getTextClass().defaultfont();
        f.setLanguage(language);
        if (fontsDefaultFamily == "rmdefault")
-               f.setFamily(LyXFont::ROMAN_FAMILY);
+               f.setFamily(Font::ROMAN_FAMILY);
        else if (fontsDefaultFamily == "sfdefault")
-               f.setFamily(LyXFont::SANS_FAMILY);
+               f.setFamily(Font::SANS_FAMILY);
        else if (fontsDefaultFamily == "ttdefault")
-               f.setFamily(LyXFont::TYPEWRITER_FAMILY);
+               f.setFamily(Font::TYPEWRITER_FAMILY);
        return f;
 }
 
 
-void BufferParams::readPreamble(LyXLex & lex)
+void BufferParams::readPreamble(Lexer & lex)
 {
        if (lex.getString() != "\\begin_preamble")
                lyxerr << "Error (BufferParams::readPreamble):"
@@ -1197,7 +1241,7 @@ void BufferParams::readPreamble(LyXLex & lex)
 }
 
 
-void BufferParams::readLanguage(LyXLex & lex)
+void BufferParams::readLanguage(Lexer & lex)
 {
        if (!lex.next()) return;
 
@@ -1215,7 +1259,7 @@ void BufferParams::readLanguage(LyXLex & lex)
 }
 
 
-void BufferParams::readGraphicsDriver(LyXLex & lex)
+void BufferParams::readGraphicsDriver(Lexer & lex)
 {
        if (!lex.next()) return;
 
@@ -1239,7 +1283,7 @@ void BufferParams::readGraphicsDriver(LyXLex & lex)
 }
 
 
-void BufferParams::readBullets(LyXLex & lex)
+void BufferParams::readBullets(Lexer & lex)
 {
        if (!lex.next()) return;
 
@@ -1257,7 +1301,7 @@ void BufferParams::readBullets(LyXLex & lex)
 }
 
 
-void BufferParams::readBulletsLaTeX(LyXLex & lex)
+void BufferParams::readBulletsLaTeX(Lexer & lex)
 {
        // The bullet class should be able to read this.
        if (!lex.next()) return;
@@ -1491,7 +1535,7 @@ biblio::CiteEngine BufferParams::getEngine() const
 {
        // FIXME the class should provide the numerical/
        // authoryear choice
-       if (getLyXTextClass().provides("natbib")
+       if (getTextClass().provides("natbib")
            && cite_engine_ != biblio::ENGINE_NATBIB_NUMERICAL)
                return biblio::ENGINE_NATBIB_AUTHORYEAR;
        return cite_engine_;