X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyx_main.C;h=b881f3d78f55f3c383c1ffbaa09bfe24008f2650;hb=ba62665f966508db5a4de6864f4aa7374c5a5356;hp=95b1a857723c7c8e979af4f2e652596d5f9a3e7e;hpb=74f3ca32464641e84e67016cf664ec4316b4234e;p=lyx.git diff --git a/src/lyx_main.C b/src/lyx_main.C index 95b1a85772..b881f3d78f 100644 --- a/src/lyx_main.C +++ b/src/lyx_main.C @@ -53,11 +53,11 @@ #include "support/filetools.h" #include "support/lyxlib.h" #include "support/convert.h" +#include "support/ExceptionMessage.h" #include "support/os.h" #include "support/package.h" #include "support/path.h" #include "support/systemcall.h" -#include "support/unicode.h" #include #include @@ -74,6 +74,7 @@ namespace lyx { using support::addName; using support::addPath; using support::bformat; +using support::changeExtension; using support::createDirectory; using support::createLyXTmpDir; using support::destroyDir; @@ -148,7 +149,7 @@ void reconfigureUserLyXDir() /// The main application class private implementation. struct LyX::Singletons { - Singletons(): iconv(ucs4_codeset, "UTF-8") + Singletons() { // Set the default User Interface language as soon as possible. // The language used will be derived from the environment @@ -170,9 +171,6 @@ struct LyX::Singletons /// lyx session, containing lastfiles, lastfilepos, and lastopened boost::scoped_ptr session_; - /// - IconvProcessor iconv; - /// Files to load at start. vector files_to_load_; @@ -184,13 +182,19 @@ struct LyX::Singletons // The system converters copy after reading lyxrc.defaults. Converters system_converters_; + + /// + Movers movers_; + + /// + Movers system_movers_; }; /// frontend::Application * theApp() { if (singleton_) - return &singleton_->application(); + return singleton_->pimpl_->application_.get(); else return 0; } @@ -323,12 +327,6 @@ Converters & LyX::systemConverters() } -IconvProcessor & LyX::iconvProcessor() -{ - return pimpl_->iconv; -} - - kb_keymap const & LyX::topLevelKeymap() const { BOOST_ASSERT(pimpl_->toplevel_keymap_.get()); @@ -388,9 +386,17 @@ int LyX::exec(int & argc, char * argv[]) // we need to parse for "-dbg" and "-help" easyParse(argc, argv); - support::init_package(to_utf8(from_local8bit(argv[0])), + try { support::init_package(to_utf8(from_local8bit(argv[0])), cl_system_support, cl_user_support, support::top_build_dir_is_one_level_up); + } catch (support::ExceptionMessage const & message) { + if (message.type_ == support::ErrorException) { + Alert::error(message.title_, message.details_); + exit(1); + } else if (message.type_ == support::WarningException) { + Alert::warning(message.title_, message.details_); + } + } if (!use_gui) { // FIXME: create a ConsoleApplication @@ -451,7 +457,7 @@ int LyX::exec(int & argc, char * argv[]) // such that package().temp_dir() is properly initialized. pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes)); pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_, - support::os::internal_path(package().temp_dir() + "/lyxsocket"))); + os::internal_path(package().temp_dir() + "/lyxsocket"))); // Start the real execution loop. exit_status = pimpl_->application_->exec(); @@ -857,14 +863,14 @@ bool LyX::init() system_lyxrc = lyxrc; system_formats = formats; pimpl_->system_converters_ = pimpl_->converters_; - system_movers = movers; + pimpl_->system_movers_ = pimpl_->movers_; system_lcolor = lcolor; // This one is edited through the preferences dialog. if (!readRcFile("preferences")) return false; - if (!readEncodingsFile("encodings")) + if (!readEncodingsFile("encodings", "unicodesymbols")) return false; if (!readLanguagesFile("languages")) return false; @@ -1120,7 +1126,7 @@ bool LyX::readRcFile(string const & name) // Read the ui file `name' -bool LyX::readUIFile(string const & name) +bool LyX::readUIFile(string const & name, bool include) { enum Uitags { ui_menuset = 1, @@ -1152,13 +1158,23 @@ bool LyX::readUIFile(string const & name) lyxerr[Debug::INIT] << "About to read " << name << "..." << endl; - FileName const ui_path = libFileSearch("ui", name, "ui"); - + + FileName ui_path; + if (include) { + ui_path = libFileSearch("ui", name, "inc"); + if (ui_path.empty()) + ui_path = libFileSearch("ui", + changeExtension(name, "inc")); + } + else + ui_path = libFileSearch("ui", name, "ui"); + if (ui_path.empty()) { lyxerr[Debug::INIT] << "Could not find " << name << endl; showFileError(name); return false; } + uifiles.push_back(name); lyxerr[Debug::INIT] << "Found " << name @@ -1178,7 +1194,7 @@ bool LyX::readUIFile(string const & name) case ui_include: { lex.next(true); string const file = lex.getString(); - if (!readUIFile(file)) + if (!readUIFile(file, true)) return false; break; } @@ -1221,16 +1237,24 @@ bool LyX::readLanguagesFile(string const & name) // Read the encodings file `name' -bool LyX::readEncodingsFile(string const & name) +bool LyX::readEncodingsFile(string const & enc_name, + string const & symbols_name) { - lyxerr[Debug::INIT] << "About to read " << name << "..." << endl; + lyxerr[Debug::INIT] << "About to read " << enc_name << " and " + << symbols_name << "..." << endl; - FileName const enc_path = libFileSearch(string(), name); + FileName const symbols_path = libFileSearch(string(), symbols_name); + if (symbols_path.empty()) { + showFileError(symbols_name); + return false; + } + + FileName const enc_path = libFileSearch(string(), enc_name); if (enc_path.empty()) { - showFileError(name); + showFileError(enc_name); return false; } - encodings.read(enc_path); + encodings.read(enc_path, symbols_path); return true; } @@ -1296,7 +1320,8 @@ int parse_version(string const &, string const &) int parse_sysdir(string const & arg, string const &) { if (arg.empty()) { - lyxerr << to_utf8(_("Missing directory for -sysdir switch")) << endl; + Alert::error(_("No system directory"), + _("Missing directory for -sysdir switch")); exit(1); } cl_system_support = arg; @@ -1306,7 +1331,8 @@ int parse_sysdir(string const & arg, string const &) int parse_userdir(string const & arg, string const &) { if (arg.empty()) { - lyxerr << to_utf8(_("Missing directory for -userdir switch")) << endl; + Alert::error(_("No user directory"), + _("Missing directory for -userdir switch")); exit(1); } cl_user_support = arg; @@ -1316,7 +1342,8 @@ int parse_userdir(string const & arg, string const &) int parse_execute(string const & arg, string const &) { if (arg.empty()) { - lyxerr << to_utf8(_("Missing command string after --execute switch")) << endl; + Alert::error(_("Incomplete command"), + _("Missing command string after --execute switch")); exit(1); } batch = arg; @@ -1472,9 +1499,27 @@ Converters & theSystemConverters() } -IconvProcessor & utf8ToUcs4() +Movers & theMovers() +{ + return LyX::ref().pimpl_->movers_; +} + + +Mover const & getMover(std::string const & fmt) +{ + return LyX::ref().pimpl_->movers_(fmt); +} + + +void setMover(std::string const & fmt, std::string const & command) +{ + LyX::ref().pimpl_->movers_.set(fmt, command); +} + + +Movers & theSystemMovers() { - return LyX::ref().iconvProcessor(); + return LyX::ref().pimpl_->system_movers_; }