X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLanguage.cpp;h=1ff2cf71892a8e010177c0c33b757495c5be6559;hb=35058f35a9864f8adf9ae225d0747cd19d84122c;hp=59f49b36431a6df5b9bb8558233874b583816785;hpb=e1ce2f92db49d50c688414a32944be8e718faa2e;p=lyx.git diff --git a/src/Language.cpp b/src/Language.cpp index 59f49b3643..1ff2cf7189 100644 --- a/src/Language.cpp +++ b/src/Language.cpp @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author Dekel Tsur * @@ -14,96 +14,102 @@ #include "Language.h" -#include "debug.h" #include "Encoding.h" #include "Lexer.h" #include "LyXRC.h" +#include "support/debug.h" #include "support/FileName.h" +#include "support/lstrings.h" -using std::endl; -using std::string; +using namespace std; +using namespace lyx::support; namespace lyx { - Languages languages; -Language const * english_language; +Language ignore_lang; +Language latex_lang; Language const * default_language; -Language ignore_lang("ignore", "ignore", "Ignore", false, "", 0, "ignore", ""); Language const * ignore_language = &ignore_lang; -Language latex_lang("latex", "", "Latex", false, "", 0, "latex", ""); Language const * latex_language = &latex_lang; +Language const * reset_language = 0; + +bool Language::read(Lexer & lex) +{ + encoding_ = 0; + lex >> lang_; + lex >> babel_; + lex >> display_; + lex >> rightToLeft_; + lex >> encodingStr_; + lex >> codeStr_; + lex >> latex_options_; + if (!lex) + return false; + + variety_ = split(codeStr_, code_, '-'); + + encoding_ = encodings.fromLyXName(encodingStr_); + if (!encoding_ && !encodingStr_.empty()) { + encoding_ = encodings.fromLyXName("iso8859-1"); + LYXERR0("Unknown encoding " << encodingStr_); + } + return true; +} -void Languages::read(support::FileName const & filename) +bool Language::internalFontEncoding() const { - // We need to set the encoding of latex_lang - latex_lang = Language("latex", "", "Latex", false, "iso8859-1", - encodings.getFromLyXName("iso8859-1"), - "latex", ""); + // FIXME: list incomplete + // FIXME: instead of hardcoding, this + // should go to the languages file + return lang_ == "hebrew" + || lang_ == "greek" + || lang_ == "polutonikogreek"; +} + - Lexer lex(0, 0); +void Languages::read(FileName const & filename) +{ + Lexer lex; 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 + lex.setContext("Languages::read"); + while (1) { + Language l; + l.read(lex); + if (!lex) break; - LYXERR(Debug::INFO, "Reading language " << lang); - - 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); + LYXERR(Debug::INFO, "Reading language " << l.lang()); + if (l.lang() == "latex") + latex_lang = l; + else if (l.lang() == "ignore") + ignore_lang = l; + else + languagelist[l.lang()] = l; } default_language = getLanguage(lyxrc.default_language); if (!default_language) { - lyxerr << "Default language \"" << lyxrc.default_language - << "\" not found!" << endl; + LYXERR0("Default language \"" << lyxrc.default_language + << "\" not found!"); default_language = getLanguage("english"); if (!default_language) default_language = &(*languagelist.begin()).second; - lyxerr << "Using \"" << default_language->lang() - << "\" instead!" << endl; + LYXERR0("Using \"" << default_language->lang() << "\" instead!"); } - english_language = getLanguage("english"); - if (!english_language) - english_language = default_language; } Language const * Languages::getLanguage(string const & language) const { + if (language == "reset") + return reset_language; + if (language == "ignore") + return ignore_language; const_iterator it = languagelist.find(language); - return it == languagelist.end() ? 0 : &it->second; + return it == languagelist.end() ? reset_language : &it->second; }