]> git.lyx.org Git - lyx.git/blobdiff - src/language.C
Small formatting and comment cleanup.
[lyx.git] / src / language.C
index 8b210dd11918f79b08720c724a0af9f1e0fdd330..e2523b5021210f8fffae6d4d5ba3986f71041e12 100644 (file)
+/**
+ * \file language.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author Dekel Tsur
+ *
+ * Full author contact details are available in file CREDITS.
+ */
 
 #include <config.h>
 
 #include "language.h"
-#include "gettext.h"
+
+#include "debug.h"
+#include "encoding.h"
+#include "lyxlex.h"
+#include "lyxrc.h"
+
+#include "support/filename.h"
+
+
+namespace lyx {
+
+using std::endl;
+using std::string;
+
 
 Languages languages;
+Language const * english_language;
 Language const * default_language;
-Language ignore_lang = {"ignore", "Ignore", false};
+Language ignore_lang("ignore", "ignore", "Ignore", false, "", 0, "ignore", "");
 Language const * ignore_language = &ignore_lang;
+Language latex_lang("latex", "latex", "Latex", false, "", 0, "latex", "");
+Language const * latex_language = &latex_lang;
+
+
+void Languages::read(support::FileName const & filename)
+{
+       // We need to set the encoding of latex_lang
+       latex_lang = Language("latex", "latex", "Latex", false, "iso8859-1",
+                             encodings.getFromLyXName("iso8859-1"),
+                             "latex", "");
+
+       LyXLex lex(0, 0);
+       lex.setFile(filename);
+       while (lex.isOK()) {
+               string lang;
+               string babel;
+               string display;
+               string encoding_str;
+               string code;
+               string latex_options;
+               bool rtl = false;
+
+               if (lex.next())
+                       lang = lex.getString();
+               else
+                       break;
+               lyxerr[Debug::INFO] << "Reading language " << lang << endl;
+
+               if (lex.next())
+                       babel = lex.getString();
+               if (lex.next())
+                       display = lex.getString();
+               if (lex.next())
+                       rtl = lex.getBool();
+               if (lex.next())
+                       encoding_str = lex.getString();
+               if (lex.next())
+                       code = lex.getString();
+               if (lex.next())
+                       latex_options = lex.getString();
 
-///
-class LangInit {
-public:
-       ///
-       LangInit() {
-               if (!init) initL();
-               init = true;
+               Encoding const * encoding = encodings.getFromLyXName(encoding_str);
+               if (!encoding) {
+                       encoding = encodings.getFromLyXName("iso8859-1");
+                       lyxerr << "Unknown encoding " << encoding_str << endl;
+               }
+
+               languagelist[lang] = Language(lang, babel, display, rtl,
+                                             encoding_str, encoding, code, latex_options);
        }
-private:
-       ///
-       void newLang(string const & l, string const & d, bool rtl) {
-               Language lang;
-               lang.lang = l;
-               lang.display = d;
-               lang.RightToLeft = rtl;
-               languages[l] = lang;
+
+       default_language = getLanguage(lyxrc.default_language);
+       if (!default_language) {
+               lyxerr << "Default language \"" << lyxrc.default_language
+                      << "\" not found!" << endl;
+               default_language = getLanguage("english");
+               if (!default_language)
+                       default_language = &(*languagelist.begin()).second;
+               lyxerr << "Using \"" << default_language->lang()
+                      << "\" instead!" << endl;
        }
-       ///
-       void initL();
-       ///
-       static bool init;
-};
+       english_language = getLanguage("english");
+       if (!english_language)
+               english_language = default_language;
+}
 
 
-void LangInit::initL()
+Language const * Languages::getLanguage(string const & language) const
 {
-       newLang("afrikaans", N_("Afrikaans"), false);
-       newLang("american", N_("American"), false);
-       newLang("arabic", N_("Arabic"), true);
-       newLang("austrian", N_("Austrian"), false);
-       newLang("bahasa", N_("Bahasa"), false);
-       newLang("brazil", N_("Brazil"), false);
-       newLang("breton", N_("Breton"), false);
-       newLang("catalan", N_("Catalan"), false);
-       newLang("croatian", N_("Croatian"), false);
-       newLang("czech", N_("Czech"), false);
-       newLang("danish", N_("Danish"), false);
-       newLang("dutch", N_("Dutch"), false);
-       newLang("english", N_("English"), false);
-       newLang("esperanto", N_("Esperanto"), false);
-       newLang("estonian", N_("Estonian"), false);
-       newLang("finnish", N_("Finnish"), false);
-       newLang("francais", N_("Francais"), false);
-       newLang("french", N_("French"), false);
-       newLang("frenchb", N_("Frenchb"), false);
-       newLang("galician", N_("Galician"), false);
-       newLang("german", N_("German"), false);
-       newLang("greek", N_("Greek"), false);
-       newLang("hebrew", N_("Hebrew"), true);
-       newLang("hungarian", N_("Hungarian"), false);
-       newLang("irish", N_("Irish"), false);
-       newLang("italian", N_("Italian"), false);
-       newLang("lsorbian", N_("Lsorbian"), false);
-       newLang("magyar", N_("Magyar"), false);
-       newLang("norsk", N_("Norsk"), false);
-       newLang("polish", N_("Polish"), false);
-       newLang("portuges", N_("Portuges"), false);
-       newLang("romanian", N_("Romanian"), false);
-       newLang("russian", N_("Russian"), false);
-       newLang("scottish", N_("Scottish"), false);
-       newLang("spanish", N_("Spanish"), false);
-       newLang("slovak", N_("Slovak"), false);
-       newLang("slovene", N_("Slovene"), false);
-       newLang("swedish", N_("Swedish"), false);
-       newLang("turkish", N_("Turkish"), false);
-       newLang("usorbian", N_("Usorbian"), false);
-       newLang("welsh", N_("Welsh"), false);
-       default_language = &languages["american"];
+       const_iterator it = languagelist.find(language);
+       return it == languagelist.end() ? 0 : &it->second;
 }
 
 
-static
-LangInit langinit;
-
-bool LangInit::init = false;
+} // namespace lyx