X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flanguage.C;h=34e08854199483f00fa1aa0e91c99b50a7f7eb12;hb=37d42d45f3f4a5d3e916a080af50b37ae4a9d118;hp=51f5c20eefdf6f60b827fc6ffcae325c7f369730;hpb=014ebb2efe7082ce0c269198c9dfe8da43296baa;p=lyx.git diff --git a/src/language.C b/src/language.C index 51f5c20eef..34e0885419 100644 --- a/src/language.C +++ b/src/language.C @@ -1,75 +1,102 @@ +/** + * \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 #include "language.h" -#include "gettext.h" + +#include "debug.h" +#include "encoding.h" +#include "lyxlex.h" +#include "lyxrc.h" + +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; -class LangInit { -public: - LangInit() { - if (!init) initL(); - init = true; - } -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; + +void Languages::read(string const & filename) +{ + // We need to set the encoding of latex_lang + latex_lang = Language("latex", "latex", "Latex", false, "iso8859-1", + encodings.getEncoding("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::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(); + + Encoding const * encoding = encodings.getEncoding(encoding_str); + if (!encoding) { + encoding = encodings.getEncoding("iso8859-1"); + lyxerr << "Unknown encoding " << encoding_str << endl; + } + + languagelist[lang] = Language(lang, babel, display, rtl, + encoding_str, encoding, code, latex_options); } - void initL() { - 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"]; + + 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; } - static bool init; -}; -static -LangInit langinit; + english_language = getLanguage("english"); + if (!english_language) + english_language = default_language; +} + -bool LangInit::init = false; +Language const * Languages::getLanguage(string const & language) const +{ + const_iterator it = languagelist.find(language); + return it == languagelist.end() ? 0 : &it->second; +}