]> git.lyx.org Git - lyx.git/blobdiff - src/language.C
Small formatting and comment cleanup.
[lyx.git] / src / language.C
index bd23912ec3a73d1f6bc449d50658e21dbf0069b8..e2523b5021210f8fffae6d4d5ba3986f71041e12 100644 (file)
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor
- *        
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+/**
+ * \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>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #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, 0, "ignore");
+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;
 
-///
-class LangInit {
-public:
-       ///
-       LangInit() {
-               if (!init) initL();
-               init = true;
-       }
-private:
-       ///
-       void initL();
-       ///
-       static bool init;
-};
 
+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", "");
 
-struct lang_item {
-       char const * lang;
-       char const * display;
-       bool rtl;
-       Encoding const * encoding;
-       char const * code;
-};
+       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;
 
-void LangInit::initL()
-{
-       // Use this style of initialization to lower compilation times.
-       // Same method is used in LyXAction.C (Lgb)
-
-       lang_item items[] = {
-       { "afrikaans", N_("Afrikaans"), false, &iso8859_1, "" },
-       { "american", N_("American"), false, &iso8859_1, "en_US" },
-       { "arabic", N_("Arabic"), true, &iso8859_6, "" },
-       { "austrian", N_("Austrian"), false, &iso8859_1, "de_AU" },
-       { "bahasa", N_("Bahasa"), false, &iso8859_1, "" },
-       { "brazil", N_("Brazil"), false, &iso8859_1, "" },
-       { "breton", N_("Breton"), false, &iso8859_1, "" },
-       { "catalan", N_("Catalan"), false, &iso8859_1, "" },
-       { "croatian", N_("Croatian"), false, &iso8859_2, "" },
-       { "czech", N_("Czech"), false, &iso8859_2, "" },
-       { "danish", N_("Danish"), false, &iso8859_1, "" },
-       { "default", N_("Document wide language"), false, &iso8859_1, "" },
-       { "dutch", N_("Dutch"), false, &iso8859_1, "" },
-       { "english", N_("English"), false, &iso8859_1, "en_EN" },
-       { "esperanto", N_("Esperanto"), false, &iso8859_3, "" },
-       { "estonian", N_("Estonian"), false, &iso8859_4, "" },
-       { "finnish", N_("Finnish"), false, &iso8859_1, "" },
-       { "frenchb", N_("French"), false, &iso8859_1, "fr_FR" },
-       { "french", N_("French (GUTenberg)"), false, &iso8859_1, "fr_FR" },
-       { "galician", N_("Galician"), false, &iso8859_1, "" },
-       { "german", N_("German"), false, &iso8859_1, "de_DE" },
-       { "greek", N_("Greek"), false, &iso8859_7, "" },
-       { "hebrew", N_("Hebrew"), true, &cp1255, "" },
-       /* According to Zrubecz Laszlo <zrubi@k2.jozsef.kando.hu>,
-          "magyar" is better. I kept it here in case we want
-          to  provide aliasing of languages. (JMarc) 
-       */
-       //{ "hungarian", N_("Hungarian"), false, &iso8859_2, "" },
-       { "irish", N_("Irish"), false, &iso8859_1, "" },
-       { "italian", N_("Italian"), false, &iso8859_1, "it_IT" },
-       { "lsorbian", N_("Lsorbian"), false, &iso8859_2, "" },
-       { "magyar", N_("Magyar"), false, &iso8859_2, "" },
-       { "norsk", N_("Norsk"), false, &iso8859_1, "" },
-       { "polish", N_("Polish"), false, &iso8859_2, "" },
-       { "portuges", N_("Portuges"), false, &iso8859_1, "pt_PT" },
-       { "romanian", N_("Romanian"), false, &iso8859_2, "" },
-       { "russian", N_("Russian"), false, &koi8, "" },
-       { "scottish", N_("Scottish"), false, &iso8859_1, "" },
-       { "spanish", N_("Spanish"), false, &iso8859_1, "es_ES" },
-       { "slovak", N_("Slovak"), false, &iso8859_2, "" },
-       { "slovene", N_("Slovene"), false, &iso8859_2, "" },
-       { "swedish", N_("Swedish"), false, &iso8859_1, "" },
-       { "turkish", N_("Turkish"), false, &iso8859_9, "" },
-       { "usorbian", N_("Usorbian"), false, &iso8859_2, "" },
-       { "welsh", N_("Welsh"), false, &iso8859_1, "" },
-       { 0, 0, false, 0, 0 }
-       };
-
-       int i = 0;
-       while (items[i].lang) {
-               languages[items[i].lang] =
-                       Language(items[i].lang, items[i].display, 
-                                items[i].rtl, items[i].encoding,
-                                items[i].code);
-               ++i;
+               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();
+
+               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);
        }
-       
-       default_language = &languages["default"];
+
+       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;
+       }
+       english_language = getLanguage("english");
+       if (!english_language)
+               english_language = default_language;
 }
 
 
-static
-LangInit langinit;
+Language const * Languages::getLanguage(string const & language) const
+{
+       const_iterator it = languagelist.find(language);
+       return it == languagelist.end() ? 0 : &it->second;
+}
+
 
-bool LangInit::init = false;
+} // namespace lyx