]> git.lyx.org Git - lyx.git/blobdiff - src/LyX.cpp
Add comment.
[lyx.git] / src / LyX.cpp
index 2096be7a771d28256a275cea6bd272551c1e5929..99ce873b61c0394db4ea9517df9b6eb55e655a3b 100644 (file)
@@ -33,7 +33,6 @@
 #include "FuncStatus.h"
 #include "HunspellChecker.h"
 #include "KeyMap.h"
-#include "Language.h"
 #include "LaTeXFonts.h"
 #include "LayoutFile.h"
 #include "Lexer.h"
@@ -188,7 +187,7 @@ struct LyX::Impl {
        bool first_start;
        /// the parsed command line batch command if any
        vector<string> batch_commands;
-       
+
        ///
        LaTeXFonts * latexfonts_;
 
@@ -261,7 +260,7 @@ Messages & LyX::messages(string const & language)
        pair<map<string, Messages>::iterator, bool> result =
                        pimpl_->messages_.insert(make_pair(language, Messages(language)));
 
-       LASSERT(result.second, /**/);
+       LATTEST(result.second);
        return result.first->second;
 }
 
@@ -272,7 +271,7 @@ int LyX::exec(int & argc, char * argv[])
        try {
                init_package(os::utf8_argv(0), string(), string());
                // we do not get to this point when init_package throws an exception
-               locale_init();
+               setLocale();
        } catch (ExceptionMessage const & message) {
                LYXERR(Debug::LOCALE, message.title_ + ", " + message.details_);
        }
@@ -294,7 +293,7 @@ int LyX::exec(int & argc, char * argv[])
 
        // Reinit the messages machinery in case package() knows
        // something interesting about the locale directory.
-       Messages::init();
+       setLocale();
 
        if (!use_gui) {
                // FIXME: create a ConsoleApplication
@@ -337,7 +336,7 @@ int LyX::exec(int & argc, char * argv[])
 
        // Reestablish our defaults, as Qt overwrites them
        // after createApplication()
-       locale_init();
+       setLocale();//???
 
        // Parse and remove all known arguments in the LyX singleton
        // Give an error for all remaining ones.
@@ -436,7 +435,7 @@ void LyX::prepareExit()
 
 void LyX::earlyExit(int status)
 {
-       LASSERT(pimpl_->application_.get(), /**/);
+       LATTEST(pimpl_->application_.get());
        // LyX::pimpl_::application_ is not initialised at this
        // point so it's safe to just exit after some cleanup.
        prepareExit();
@@ -468,6 +467,11 @@ int LyX::init(int & argc, char * argv[])
        for (int argi = 1; argi < argc; ++argi)
                pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
 
+       if (!use_gui && pimpl_->files_to_load_.empty()) {
+               lyxerr << to_utf8(_("Missing filename for this operation.")) << endl;
+               return EXIT_FAILURE;
+       }
+
        if (first_start) {
                pimpl_->files_to_load_.push_back(
                        i18nLibFileSearch("examples", "splash.lyx").absFileName());
@@ -479,7 +483,7 @@ int LyX::init(int & argc, char * argv[])
 
 bool LyX::loadFiles()
 {
-       LASSERT(!use_gui, /**/);
+       LATTEST(!use_gui);
        bool success = true;
        vector<string>::const_iterator it = pimpl_->files_to_load_.begin();
        vector<string>::const_iterator end = pimpl_->files_to_load_.end();
@@ -515,7 +519,7 @@ bool LyX::loadFiles()
 
 void execBatchCommands()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        singleton_->execCommands();
 }
 
@@ -559,8 +563,10 @@ void LyX::execCommands()
                // if some files were specified at command-line we assume that the
                // user wants to edit *these* files and not to restore the session.
                for (size_t i = 0; i != pimpl_->files_to_load_.size(); ++i) {
+                       FileName const abs_path = 
+                               support::makeAbsPath(pimpl_->files_to_load_[i]);
                        lyx::dispatch(
-                               FuncRequest(LFUN_FILE_OPEN, pimpl_->files_to_load_[i]));
+                               FuncRequest(LFUN_FILE_OPEN, abs_path.absoluteFilePath()));
                }
                // clear this list to save a few bytes of RAM
                pimpl_->files_to_load_.clear();
@@ -731,6 +737,18 @@ bool LyX::init()
        if (!setEnv("LyXDir", lyx_dir))
                LYXERR(Debug::INIT, "\t... failed!");
 
+       if (package().explicit_user_support() && getEnv(LYX_USERDIR_VER).empty()) {
+               // -userdir was given on the command line.
+               // Make it available to child processes, otherwise tex2lyx
+               // would not find all layout files, and other converters might
+               // use it as well.
+               string const user_dir = package().user_support().absFileName();
+               LYXERR(Debug::INIT, "Setting " LYX_USERDIR_VER "... to \""
+                                   << user_dir << '"');
+               if (!setEnv(LYX_USERDIR_VER, user_dir))
+                       LYXERR(Debug::INIT, "\t... failed!");
+       }
+
        //
        // Read configuration files
        //
@@ -750,8 +768,15 @@ bool LyX::init()
                prependEnvPath("PATH", replaceEnvironmentPath(lyxrc.path_prefix));
 
        // Check that user LyX directory is ok.
-       if (queryUserLyXDir(package().explicit_user_support()))
-               reconfigureUserLyXDir();
+       {
+               string const lock_file = package().user_support().absFileName() + ".lyx_configure_lock";
+               int fd = fileLock(lock_file.c_str());
+
+               if (queryUserLyXDir(package().explicit_user_support())) {
+                       reconfigureUserLyXDir();
+               }
+               fileUnlock(fd, lock_file.c_str());
+       }
 
        if (!use_gui) {
                // No need for a splash when there is no GUI
@@ -789,6 +814,9 @@ bool LyX::init()
        if (!readRcFile("preferences", true))
                return false;
 
+       // The language may have been set to someting useful through prefs
+       setLocale();
+
        if (!readEncodingsFile("encodings", "unicodesymbols"))
                return false;
        if (!readLanguagesFile("languages"))
@@ -1061,7 +1089,8 @@ int parse_version(string const &, string const &, string &)
 {
        cout << "LyX " << lyx_version
               << " (" << lyx_release_date << ")" << endl;
-       cout << "Built on " << __DATE__ << ", " << __TIME__ << endl;
+       cout << to_utf8(bformat(_("Built on %1$s[[date]], %2$s[[time]]"),
+               from_ascii(__DATE__), from_ascii(__TIME__))) << endl;
 
        cout << lyx_version_info << endl;
        exit(0);
@@ -1263,35 +1292,35 @@ void LyX::easyParse(int & argc, char * argv[])
 
 FuncStatus getStatus(FuncRequest const & action)
 {
-       LASSERT(theApp(), /**/);
+       LAPPERR(theApp());
        return theApp()->getStatus(action);
 }
 
 
 void dispatch(FuncRequest const & action)
 {
-       LASSERT(theApp(), /**/);
+       LAPPERR(theApp());
        return theApp()->dispatch(action);
 }
 
 
 void dispatch(FuncRequest const & action, DispatchResult & dr)
 {
-       LASSERT(theApp(), /**/);
+       LAPPERR(theApp());
        return theApp()->dispatch(action, dr);
 }
 
 
 vector<string> & theFilesToLoad()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->files_to_load_;
 }
 
 
 BufferList & theBufferList()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->buffer_list_;
 }
 
@@ -1299,8 +1328,8 @@ BufferList & theBufferList()
 Server & theServer()
 {
        // FIXME: this should not be use_gui dependent
-       LASSERT(use_gui, /**/);
-       LASSERT(singleton_, /**/);
+       LWARNIF(use_gui);
+       LAPPERR(singleton_);
        return *singleton_->pimpl_->lyx_server_.get();
 }
 
@@ -1308,97 +1337,85 @@ Server & theServer()
 ServerSocket & theServerSocket()
 {
        // FIXME: this should not be use_gui dependent
-       LASSERT(use_gui, /**/);
-       LASSERT(singleton_, /**/);
+       LWARNIF(use_gui);
+       LAPPERR(singleton_);
        return *singleton_->pimpl_->lyx_socket_.get();
 }
 
 
 KeyMap & theTopLevelKeymap()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->toplevel_keymap_;
 }
 
 
 Converters & theConverters()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return  singleton_->pimpl_->converters_;
 }
 
 
 Converters & theSystemConverters()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return  singleton_->pimpl_->system_converters_;
 }
 
 
 Movers & theMovers()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->movers_;
 }
 
 
 Mover const & getMover(string  const & fmt)
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->movers_(fmt);
 }
 
 
 void setMover(string const & fmt, string const & command)
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        singleton_->pimpl_->movers_.set(fmt, command);
 }
 
 
 Movers & theSystemMovers()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->system_movers_;
 }
 
 
 Messages const & getMessages(string const & language)
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->messages(language);
 }
 
 
 Messages const & getGuiMessages()
 {
-       LASSERT(singleton_, /**/);
-       // 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);
+       LAPPERR(singleton_);
+       return singleton_->messages(Messages::guiLanguage());
 }
 
 
 Session & theSession()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return *singleton_->pimpl_->session_.get();
 }
 
 
 LaTeXFonts & theLaTeXFonts()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        if (!singleton_->pimpl_->latexfonts_)
                singleton_->pimpl_->latexfonts_ = new LaTeXFonts;
        return *singleton_->pimpl_->latexfonts_;
@@ -1407,7 +1424,7 @@ LaTeXFonts & theLaTeXFonts()
 
 CmdDef & theTopLevelCmdDef()
 {
-       LASSERT(singleton_, /**/);
+       LAPPERR(singleton_);
        return singleton_->pimpl_->toplevel_cmddef_;
 }