]> git.lyx.org Git - lyx.git/blobdiff - src/Language.cpp
Remember navigate back bookmark through sessions
[lyx.git] / src / Language.cpp
index 59f49b36431a6df5b9bb8558233874b583816785..1ff2cf71892a8e010177c0c33b757495c5be6559 100644 (file)
@@ -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
  *
 
 #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;
 }