X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flanguage.C;h=e2523b5021210f8fffae6d4d5ba3986f71041e12;hb=024275f0690b41634e26dabe8758e3dc6cd31ee2;hp=bd23912ec3a73d1f6bc449d50658e21dbf0069b8;hpb=63f7e47a6286685b6999496fae405c346d58cb8e;p=lyx.git diff --git a/src/language.C b/src/language.C index bd23912ec3..e2523b5021 100644 --- a/src/language.C +++ b/src/language.C @@ -1,121 +1,110 @@ -/* 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 -#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 , - "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