X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyX.cpp;h=8c9fdbcb02b8433ded8909e5329bb3139bf11997;hb=b436a03b3468dd15b27ee1c35e09d79b49192996;hp=6b46066e084b91aa687d6b0748f29122fcd05990;hpb=fa438c1699ae0e4eec669b039162f7d56114ccda;p=lyx.git diff --git a/src/LyX.cpp b/src/LyX.cpp index 6b46066e08..8c9fdbcb02 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -34,6 +34,7 @@ #include "HunspellChecker.h" #include "KeyMap.h" #include "Language.h" +#include "LaTeXFonts.h" #include "LayoutFile.h" #include "Lexer.h" #include "LyX.h" @@ -137,18 +138,14 @@ void reconfigureUserLyXDir() } // namespace anon /// The main application class private implementation. -struct LyX::Impl -{ - Impl() : spell_checker_(0), apple_spell_checker_(0), aspell_checker_(0), enchant_checker_(0), hunspell_checker_(0) - { - // Set the default User Interface language as soon as possible. - // The language used will be derived from the environment - // variables. - messages_["GUI"] = Messages(); - } +struct LyX::Impl { + Impl() + : latexfonts_(0), spell_checker_(0), apple_spell_checker_(0), aspell_checker_(0), enchant_checker_(0), hunspell_checker_(0) + {} ~Impl() { + delete latexfonts_; delete apple_spell_checker_; delete aspell_checker_; delete enchant_checker_; @@ -191,6 +188,9 @@ struct LyX::Impl bool first_start; /// the parsed command line batch command if any vector batch_commands; + + /// + LaTeXFonts * latexfonts_; /// SpellChecker * spell_checker_; @@ -204,6 +204,7 @@ struct LyX::Impl SpellChecker * hunspell_checker_; }; + /// frontend::Application * theApp() { @@ -265,25 +266,6 @@ Messages & LyX::messages(string const & language) } -void setRcGuiLanguage() -{ - LASSERT(singleton_, /**/); - if (lyxrc.gui_language == "auto") - return; - Language const * language = languages.getLanguage(lyxrc.gui_language); - if (language) { - LYXERR(Debug::LOCALE, "Setting LANGUAGE to " << language->code()); - if (!setEnv("LANGUAGE", language->code())) - LYXERR(Debug::LOCALE, "\t... failed!"); - } - LYXERR(Debug::LOCALE, "Setting LC_ALL to en_US"); - if (!setEnv("LC_ALL", "en_US")) - LYXERR(Debug::LOCALE, "\t... failed!"); - Messages::init(); - singleton_->pimpl_->messages_["GUI"] = Messages(); -} - - int LyX::exec(int & argc, char * argv[]) { // Minimal setting of locale before parsing command line @@ -340,7 +322,7 @@ int LyX::exec(int & argc, char * argv[]) vector::const_iterator bcit = pimpl_->batch_commands.begin(); vector::const_iterator bcend = pimpl_->batch_commands.end(); DispatchResult dr; - for (; bcit != bcend; bcit++) { + for (; bcit != bcend; ++bcit) { LYXERR(Debug::ACTION, "Buffer::dispatch: cmd: " << *bcit); buf->dispatch(*bcit, dr); final_success |= !dr.error(); @@ -587,7 +569,7 @@ void LyX::execCommands() vector::const_iterator bcit = pimpl_->batch_commands.begin(); vector::const_iterator bcend = pimpl_->batch_commands.end(); - for (; bcit != bcend; bcit++) { + for (; bcit != bcend; ++bcit) { LYXERR(Debug::INIT, "About to handle -x '" << *bcit << '\''); lyx::dispatch(lyxaction.lookupFunc(*bcit)); } @@ -753,9 +735,6 @@ bool LyX::init() if (!readRcFile("lyxrc.dist")) return false; - // Set the language defined by the distributor. - setRcGuiLanguage(); - // Set the PATH correctly. #if !defined (USE_POSIX_PACKAGING) // Add the directory containing the LyX executable to the path @@ -796,9 +775,6 @@ bool LyX::init() // Read lyxrc.dist again to be able to override viewer auto-detection. readRcFile("lyxrc.dist"); - // Set again the language defined by the distributor. - setRcGuiLanguage(); - system_lyxrc = lyxrc; system_formats = formats; pimpl_->system_converters_ = pimpl_->converters_; @@ -814,9 +790,6 @@ bool LyX::init() if (!readLanguagesFile("languages")) return false; - // Set the language defined by the user. - setRcGuiLanguage(); - LYXERR(Debug::INIT, "Reading layouts..."); // Load the layouts LayoutFileList::get().read(); @@ -898,7 +871,7 @@ void emergencyCleanup() static bool needsUpdate(string const & file) { // We cannot initialize configure_script directly because the package - // is not initialized yet when static objects are constructed. + // is not initialized yet when static objects are constructed. static FileName configure_script; static bool firstrun = true; if (firstrun) { @@ -1024,8 +997,8 @@ typedef boost::function cmd_helpe int parse_dbg(string const & arg, string const &, string &) { if (arg.empty()) { - lyxerr << to_utf8(_("List of supported debug flags:")) << endl; - Debug::showTags(lyxerr); + cout << to_utf8(_("List of supported debug flags:")) << endl; + Debug::showTags(cout); exit(0); } lyxerr << to_utf8(bformat(_("Setting debug level to %1$s"), from_utf8(arg))) << endl; @@ -1038,7 +1011,7 @@ int parse_dbg(string const & arg, string const &, string &) int parse_help(string const &, string const &, string &) { - lyxerr << + cout << to_utf8(_("Usage: lyx [ command line switches ] [ name.lyx ... ]\n" "Command line switches (case sensitive):\n" "\t-help summarize LyX usage\n" @@ -1051,8 +1024,8 @@ int parse_help(string const &, string const &, string &) "\t-x [--execute] command\n" " where command is a lyx command.\n" "\t-e [--export] fmt\n" - " where fmt is the export format of choice.\n" - " Look on Tools->Preferences->File formats->Format\n" + " where fmt is the export format of choice. Look in\n" + " Tools->Preferences->File Handling->File Formats->Short Name\n" " to get an idea which parameters should be passed.\n" " Note that the order of -e and -x switches matters.\n" "\t-E [--export-to] fmt filename\n" @@ -1081,11 +1054,11 @@ int parse_help(string const &, string const &, string &) int parse_version(string const &, string const &, string &) { - lyxerr << "LyX " << lyx_version + cout << "LyX " << lyx_version << " (" << lyx_release_date << ")" << endl; - lyxerr << "Built on " << __DATE__ << ", " << __TIME__ << endl; + cout << "Built on " << __DATE__ << ", " << __TIME__ << endl; - lyxerr << lyx_version_info << endl; + cout << lyx_version_info << endl; exit(0); return 0; } @@ -1396,7 +1369,19 @@ Messages const & getMessages(string const & language) Messages const & getGuiMessages() { LASSERT(singleton_, /**/); - return singleton_->pimpl_->messages_["GUI"]; + // A cache to translate full language name to language code + static string last_language = "auto"; + static string code; + if (lyxrc.gui_language != last_language) { + if (lyxrc.gui_language == "auto") + code.clear(); + else { + Language const * l = languages.getLanguage(lyxrc.gui_language); + code = l ? l->code() : string(); + } + last_language = lyxrc.gui_language; + } + return singleton_->messages(code); } @@ -1407,6 +1392,15 @@ Session & theSession() } +LaTeXFonts & theLaTeXFonts() +{ + LASSERT(singleton_, /**/); + if (!singleton_->pimpl_->latexfonts_) + singleton_->pimpl_->latexfonts_ = new LaTeXFonts; + return *singleton_->pimpl_->latexfonts_; +} + + CmdDef & theTopLevelCmdDef() { LASSERT(singleton_, /**/); @@ -1430,7 +1424,7 @@ void setSpellChecker() if (lyxrc.spellchecker == "native") { #if defined(USE_MACOSX_PACKAGING) if (!singleton_->pimpl_->apple_spell_checker_) - singleton_->pimpl_->apple_spell_checker_ = new AppleSpellChecker(); + singleton_->pimpl_->apple_spell_checker_ = new AppleSpellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->apple_spell_checker_; #else singleton_->pimpl_->spell_checker_ = 0; @@ -1438,7 +1432,7 @@ void setSpellChecker() } else if (lyxrc.spellchecker == "aspell") { #if defined(USE_ASPELL) if (!singleton_->pimpl_->aspell_checker_) - singleton_->pimpl_->aspell_checker_ = new AspellChecker(); + singleton_->pimpl_->aspell_checker_ = new AspellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->aspell_checker_; #else singleton_->pimpl_->spell_checker_ = 0; @@ -1446,7 +1440,7 @@ void setSpellChecker() } else if (lyxrc.spellchecker == "enchant") { #if defined(USE_ENCHANT) if (!singleton_->pimpl_->enchant_checker_) - singleton_->pimpl_->enchant_checker_ = new EnchantChecker(); + singleton_->pimpl_->enchant_checker_ = new EnchantChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->enchant_checker_; #else singleton_->pimpl_->spell_checker_ = 0; @@ -1454,7 +1448,7 @@ void setSpellChecker() } else if (lyxrc.spellchecker == "hunspell") { #if defined(USE_HUNSPELL) if (!singleton_->pimpl_->hunspell_checker_) - singleton_->pimpl_->hunspell_checker_ = new HunspellChecker(); + singleton_->pimpl_->hunspell_checker_ = new HunspellChecker; singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->hunspell_checker_; #else singleton_->pimpl_->spell_checker_ = 0;