]> git.lyx.org Git - lyx.git/blobdiff - src/LyX.cpp
Revert "XHTML: remove DOCTYPE, as the document is then understood as HTML4/XHTML1...
[lyx.git] / src / LyX.cpp
index bb88f82dbbb08fd8930125fdd8ac213c2dd99c04..9b637570d5f9adb4d5071b822ee92bd129b14ed7 100644 (file)
@@ -141,7 +141,7 @@ string cl_user_support;
 
 string geometryArg;
 
-LyX * singleton_ = 0;
+LyX * singleton_ = nullptr;
 
 void showFileError(string const & error)
 {
@@ -150,12 +150,14 @@ void showFileError(string const & error)
                           "Please check your installation."), from_utf8(error)));
 }
 
-} // namespace anon
+} // namespace
 
 /// The main application class private implementation.
 struct LyX::Impl {
        Impl()
-               : latexfonts_(0), spell_checker_(0), apple_spell_checker_(0), aspell_checker_(0), enchant_checker_(0), hunspell_checker_(0)
+               : latexfonts_(nullptr), spell_checker_(nullptr),
+                 apple_spell_checker_(nullptr), aspell_checker_(nullptr),
+                 enchant_checker_(nullptr), hunspell_checker_(nullptr)
        {}
 
        ~Impl()
@@ -250,14 +252,14 @@ frontend::Application * theApp()
        if (singleton_)
                return singleton_->pimpl_->application_.get();
        else
-               return 0;
+               return nullptr;
 }
 
 
 LyX::~LyX()
 {
        delete pimpl_;
-       singleton_ = 0;
+       singleton_ = nullptr;
 }
 
 
@@ -397,11 +399,9 @@ int LyX::exec(int & argc, char * argv[])
        if (!pimpl_->lyx_server_->deferredLoadingToOtherInstance())
                exit_status = pimpl_->application_->exec();
        else if (!pimpl_->files_to_load_.empty()) {
-               vector<string>::const_iterator it = pimpl_->files_to_load_.begin();
-               vector<string>::const_iterator end = pimpl_->files_to_load_.end();
                lyxerr << _("The following files could not be loaded:") << endl;
-               for (; it != end; ++it)
-                       lyxerr << *it << endl;
+               for (auto const & f : pimpl_->files_to_load_)
+                       lyxerr << f << endl;
        }
 
        prepareExit();
@@ -419,8 +419,12 @@ void LyX::prepareExit()
        // Write the index file of the converter cache
        ConverterCache::get().writeIndex();
 
-       // close buffers first
-       pimpl_->buffer_list_.closeAll();
+       // closing buffer may throw exceptions, but we ignore them since we
+       // are quitting.
+       try {
+               // close buffers first
+               pimpl_->buffer_list_.closeAll();
+       } catch (ExceptionMessage const &) {}
 
        // register session changes and shutdown server and socket
        if (use_gui) {
@@ -434,17 +438,16 @@ void LyX::prepareExit()
        // do any other cleanup procedures now
        if (package().temp_dir() != package().system_temp_dir()) {
                string const abs_tmpdir = package().temp_dir().absFileName();
-               if (!contains(package().temp_dir().absFileName(), "lyx_tmpdir")) {
+               if (!contains(abs_tmpdir, "lyx_tmpdir")) {
                        docstring const msg =
                                bformat(_("%1$s does not appear like a LyX created temporary directory."),
                                from_utf8(abs_tmpdir));
                        Alert::warning(_("Cannot remove temporary directory"), msg);
                } else {
-                       LYXERR(Debug::INFO, "Deleting tmp dir "
-                               << package().temp_dir().absFileName());
+                       LYXERR(Debug::INFO, "Deleting tmp dir " << abs_tmpdir);
                        if (!package().temp_dir().destroyDirectory()) {
                                LYXERR0(bformat(_("Unable to remove the temporary directory %1$s"),
-                                       from_utf8(package().temp_dir().absFileName())));
+                                       from_utf8(abs_tmpdir)));
                        }
                }
        }
@@ -496,7 +499,7 @@ int LyX::init(int & argc, char * argv[])
 
        if (first_start) {
                pimpl_->files_to_load_.push_back(
-                       i18nLibFileSearch("examples", "splash.lyx").absFileName());
+                       i18nLibFileSearch("examples", "Welcome.lyx").absFileName());
        }
 
        return EXIT_SUCCESS;
@@ -771,7 +774,7 @@ namespace {
                        return std::string(line, nameLen);
                }
        }
-}
+} // namespace
 
 void cleanDuplicateEnvVars()
 {
@@ -906,6 +909,25 @@ bool LyX::init()
        if (package().build_support().empty())
                prependEnvPath("PATH", package().binary_dir().absFileName());
 #endif
+       {
+               // Add the directory containing the dt2dv and dv2dt executables to the path
+               FileName dtldir;
+               if (!package().build_support().empty()) {
+                       // dtl executables should be in the same dir ar tex2lyx
+                       dtldir = package().binary_dir();
+               }
+               else {
+                       dtldir = FileName(addName(package().system_support().absFileName(), "extratools"));
+               }
+#if defined(_WIN32)
+               string dtlexe = "dt2dv.exe";
+#else
+               string dtlexe = "dt2dv";
+#endif
+               FileName const dt2dv = FileName(addName(dtldir.absFileName(), dtlexe));
+               if (dt2dv.exists())
+                       prependEnvPath("PATH", dtldir.absFileName());
+       }
        if (!lyxrc.path_prefix.empty())
                prependEnvPath("PATH", replaceEnvironmentPath(lyxrc.path_prefix));
 
@@ -986,7 +1008,7 @@ bool LyX::init()
        pimpl_->toplevel_keymap_.read("site");
        pimpl_->toplevel_keymap_.read(lyxrc.bind_file);
        // load user bind file user.bind
-       pimpl_->toplevel_keymap_.read("user", 0, KeyMap::MissingOK);
+       pimpl_->toplevel_keymap_.read("user", nullptr, KeyMap::MissingOK);
 
        if (lyxerr.debugging(Debug::LYXRC))
                lyxrc.print();
@@ -1380,7 +1402,7 @@ int parse_force(string const & arg, string const &, string &)
 }
 
 
-} // namespace anon
+} // namespace
 
 
 void LyX::easyParse(int & argc, char * argv[])
@@ -1617,7 +1639,7 @@ void setSpellChecker()
                        singleton_->pimpl_->apple_spell_checker_ = new AppleSpellChecker;
                singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->apple_spell_checker_;
 #else
-               singleton_->pimpl_->spell_checker_ = 0;
+               singleton_->pimpl_->spell_checker_ = nullptr;
 #endif
        } else if (lyxrc.spellchecker == "aspell") {
 #if defined(USE_ASPELL)
@@ -1625,7 +1647,7 @@ void setSpellChecker()
                        singleton_->pimpl_->aspell_checker_ = new AspellChecker;
                singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->aspell_checker_;
 #else
-               singleton_->pimpl_->spell_checker_ = 0;
+               singleton_->pimpl_->spell_checker_ = nullptr;
 #endif
        } else if (lyxrc.spellchecker == "enchant") {
 #if defined(USE_ENCHANT)
@@ -1633,7 +1655,7 @@ void setSpellChecker()
                        singleton_->pimpl_->enchant_checker_ = new EnchantChecker;
                singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->enchant_checker_;
 #else
-               singleton_->pimpl_->spell_checker_ = 0;
+               singleton_->pimpl_->spell_checker_ = nullptr;
 #endif
        } else if (lyxrc.spellchecker == "hunspell") {
 #if defined(USE_HUNSPELL)
@@ -1641,10 +1663,10 @@ void setSpellChecker()
                        singleton_->pimpl_->hunspell_checker_ = new HunspellChecker;
                singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->hunspell_checker_;
 #else
-               singleton_->pimpl_->spell_checker_ = 0;
+               singleton_->pimpl_->spell_checker_ = nullptr;
 #endif
        } else {
-               singleton_->pimpl_->spell_checker_ = 0;
+               singleton_->pimpl_->spell_checker_ = nullptr;
        }
        if (singleton_->pimpl_->spell_checker_) {
                singleton_->pimpl_->spell_checker_->changeNumber(speller_change_number);