]> git.lyx.org Git - lyx.git/blobdiff - src/language.C
dont delere recursively, return a value from event_cb
[lyx.git] / src / language.C
index 8ce45c04a47824451783aa6dc349ef68510ee0ae..55c89e8ca7c8fbcf510cd687caccbdc4a883c7eb 100644 (file)
@@ -4,7 +4,7 @@
  *           LyX, The Document Processor
  *        
  *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+ *           Copyright 1995-2001 The LyX Team.
  *
  * ====================================================== */
 
 #include "language.h"
 #include "gettext.h"
 #include "encoding.h"
+#include "lyxrc.h"
+#include "lyxlex.h"
+#include "debug.h"
+
+using std::endl;
 
 Languages languages;
+Language const * english_language;
 Language const * default_language;
-Language ignore_lang("ignore", "Ignore", false, 0);
+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;
+#ifdef INHERIT_LANG
+Language inherit_lang("inherit", "inherit", "Inherit", false, 0, "inherit", "");
+Language const * inherit_language = &inherit_lang;
+#endif
 
-///
-class LangInit {
-public:
-       ///
-       LangInit() {
-               if (!init) initL();
-               init = true;
-       }
-private:
-       ///
-       void initL();
-       ///
-       static bool init;
-};
+void Languages::setDefaults()
+{
+       languagelist["english"] = Language("english", "english", N_("English"),
+                                          false, 
+                                          encodings.getEncoding("iso8859-1"),
+                                          "en", "");
+       english_language = default_language = &languagelist["english"];
+}
 
+void Languages::read(string const & filename)
+{
+       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;
 
-struct lang_item {
-       char const * lang;
-       char const * display;
-       bool rtl;
-       Encoding const * encoding;
-};
+               if (lex.next())
+                       lang = lex.getString();
+               else
+                       break;
+               lyxerr[Debug::INIT] << "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();
 
-void LangInit::initL()
-{
-       // Use this style of initialization to lower compilation times.
-       // Same method is used in LyXAction.C (Lgb)
+               Encoding const * encoding = encodings.getEncoding(encoding_str);
+               if (!encoding) {
+                       encoding = encodings.getEncoding("iso8859-1");
+                       lyxerr << "Unknown encoding " << encoding_str << endl; 
+               }
 
-       lang_item items[] = {
-       { "afrikaans", N_("Afrikaans"), false, &iso8859_1 },
-       { "american", N_("American"), false, &iso8859_1 },
-       { "arabic", N_("Arabic"), true, &iso8859_6 },
-       { "austrian", N_("Austrian"), false, &iso8859_1 },
-       { "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 },
-       { "dutch", N_("Dutch"), false, &iso8859_1 },
-       { "english", N_("English"), false, &iso8859_1 },
-       { "esperanto", N_("Esperanto"), false, &iso8859_3 },
-       { "estonian", N_("Estonian"), false, &iso8859_4 },
-       { "finnish", N_("Finnish"), false, &iso8859_1 },
-       { "francais", N_("Francais"), false, &iso8859_1 },
-       { "french", N_("French"), false, &iso8859_1 },
-       { "frenchb", N_("Frenchb"), false, &iso8859_1 },
-       { "galician", N_("Galician"), false, &iso8859_1 },
-       { "german", N_("German"), false, &iso8859_1 },
-       { "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 },
-       { "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 },
-       { "romanian", N_("Romanian"), false, &iso8859_2 },
-       { "russian", N_("Russian"), false, &koi8 },
-       { "scottish", N_("Scottish"), false, &iso8859_1 },
-       { "spanish", N_("Spanish"), false, &iso8859_1 },
-       { "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 }
-       };
+               languagelist[lang] = Language(lang, babel, display, rtl, 
+                                             encoding, code, latex_options);
+       }
 
-       int i = 0;
-       while (items[i].lang) {
-               languages[items[i].lang] =
-                       Language(items[i].lang, items[i].display, 
-                                items[i].rtl, items[i].encoding);
-               ++i;
+       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;
        }
-       
-       default_language = &languages["american"];
+       english_language = getLanguage("english");
+       if (!english_language)
+               english_language = default_language;
 }
 
-
-static
-LangInit langinit;
-
-bool LangInit::init = false;
+Language const * Languages::getLanguage(string const & language) const
+{
+               const_iterator it = languagelist.find(language);
+       if (it != languagelist.end())
+               return &it->second;
+       else
+               return 0;
+}