#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 <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
/// 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
/// lyx session, containing lastfiles, lastfilepos, and lastopened
boost::scoped_ptr<Session> session_;
- ///
- IconvProcessor iconv;
-
/// Files to load at start.
vector<FileName> files_to_load_;
{
singleton_ = this;
pimpl_.reset(new Singletons);
- geometryArg.clear();
}
}
-IconvProcessor & LyX::iconvProcessor()
-{
- return pimpl_->iconv;
-}
-
-
kb_keymap const & LyX::topLevelKeymap() const
{
BOOST_ASSERT(pimpl_->toplevel_keymap_.get());
// 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
// 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_,
- os::internal_path(package().temp_dir() + "/lyxsocket")));
+ FileName(package().temp_dir().absFilename() + "/lyxsocket")));
// Start the real execution loop.
exit_status = pimpl_->application_->exec();
// do any other cleanup procedures now
if (package().temp_dir() != package().system_temp_dir()) {
- lyxerr[Debug::INFO] << "Deleting tmp dir "
- << package().temp_dir() << endl;
+ LYXERR(Debug::INFO) << "Deleting tmp dir "
+ << package().temp_dir().absFilename() << endl;
- if (!destroyDir(FileName(package().temp_dir()))) {
+ if (!destroyDir(package().temp_dir())) {
docstring const msg =
bformat(_("Unable to remove the temporary directory %1$s"),
- from_utf8(package().temp_dir()));
+ from_utf8(package().temp_dir().absFilename()));
Alert::warning(_("Unable to remove temporary directory"), msg);
}
}
}
// Initialization of LyX (reads lyxrc and more)
- lyxerr[Debug::INIT] << "Initializing LyX::init..." << endl;
+ LYXERR(Debug::INIT) << "Initializing LyX::init..." << endl;
bool success = init();
- lyxerr[Debug::INIT] << "Initializing LyX::init...done" << endl;
+ LYXERR(Debug::INIT) << "Initializing LyX::init...done" << endl;
if (!success)
return EXIT_FAILURE;
if (batch_command.empty())
return;
- lyxerr[Debug::INIT] << "About to handle -x '"
+ LYXERR(Debug::INIT) << "About to handle -x '"
<< batch_command << '\'' << endl;
pimpl_->lyxfunc_.dispatch(lyxaction.lookupFunc(batch_command));
unsigned int height = 510;
// default icon size, will be overwritten by stored session value
unsigned int iconSizeXY = 0;
- bool maximize = false;
+ int maximized = LyXView::NotMaximized;
// first try lyxrc
if (lyxrc.geometry_width != 0 && lyxrc.geometry_height != 0 ) {
width = lyxrc.geometry_width;
val = session().sessionInfo().load("WindowHeight");
if (!val.empty())
height = convert<unsigned int>(val);
- if (session().sessionInfo().load("WindowIsMaximized") == "yes")
- maximize = true;
+ val = session().sessionInfo().load("WindowMaximized");
+ if (!val.empty())
+ maximized = convert<int>(val);
val = session().sessionInfo().load("IconSizeXY");
if (!val.empty())
iconSizeXY = convert<unsigned int>(val);
}
// create the main window
- LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY, geometryArg);
+ LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximized, iconSizeXY, geometryArg);
return view;
}
signal(SIGTERM, error_handler);
// SIGPIPE can be safely ignored.
- lyxrc.tempdir_path = package().temp_dir();
- lyxrc.document_path = package().document_dir();
+ lyxrc.tempdir_path = package().temp_dir().absFilename();
+ lyxrc.document_path = package().document_dir().absFilename();
if (lyxrc.template_path.empty()) {
- lyxrc.template_path = addPath(package().system_support(),
+ lyxrc.template_path = addPath(package().system_support().absFilename(),
"templates");
}
// Add the directory containing the LyX executable to the path
// so that LyX can find things like tex2lyx.
if (package().build_support().empty())
- prependEnvPath("PATH", package().binary_dir());
+ prependEnvPath("PATH", package().binary_dir().absFilename());
#endif
if (!lyxrc.path_prefix.empty())
prependEnvPath("PATH", lyxrc.path_prefix);
if (!readRcFile("preferences"))
return false;
- if (!readEncodingsFile("encodings"))
+ if (!readEncodingsFile("encodings", "unicodesymbols"))
return false;
if (!readLanguagesFile("languages"))
return false;
// Load the layouts
- lyxerr[Debug::INIT] << "Reading layouts..." << endl;
+ LYXERR(Debug::INIT) << "Reading layouts..." << endl;
if (!LyXSetStyle())
return false;
FileName const document_path(lyxrc.document_path);
if (fs::exists(document_path.toFilesystemEncoding()) &&
fs::is_directory(document_path.toFilesystemEncoding()))
- package().document_dir() = lyxrc.document_path;
+ package().document_dir() = document_path;
- package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path)).absFilename();
+ package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path));
if (package().temp_dir().empty()) {
Alert::error(_("Could not create temporary directory"),
bformat(_("Could not create a temporary directory in\n"
return false;
}
- if (lyxerr.debugging(Debug::INIT)) {
- lyxerr << "LyX tmp dir: `" << package().temp_dir() << '\'' << endl;
- }
+ LYXERR(Debug::INIT) << "LyX tmp dir: `"
+ << package().temp_dir().absFilename()
+ << '\'' << endl;
- lyxerr[Debug::INIT] << "Reading session information '.lyx/session'..." << endl;
+ LYXERR(Debug::INIT) << "Reading session information '.lyx/session'..." << endl;
pimpl_->session_.reset(new Session(lyxrc.num_lastfiles));
// This must happen after package initialization and after lyxrc is
static bool firstrun = true;
if (firstrun) {
configure_script = FileName(addName(
- package().system_support(),
+ package().system_support().absFilename(),
"configure.py")).toFilesystemEncoding();
firstrun = false;
}
string const absfile = FileName(addName(
- package().user_support(), file)).toFilesystemEncoding();
+ package().user_support().absFilename(), file)).toFilesystemEncoding();
return (! fs::exists(absfile))
|| (fs::last_write_time(configure_script)
> fs::last_write_time(absfile));
{
// Does user directory exist?
string const user_support =
- FileName(package().user_support()).toFilesystemEncoding();
+ package().user_support().toFilesystemEncoding();
if (fs::exists(user_support) && fs::is_directory(user_support)) {
first_start = false;
bformat(_("You have specified a non-existent user "
"LyX directory, %1$s.\n"
"It is needed to keep your own configuration."),
- from_utf8(package().user_support())),
+ from_utf8(package().user_support().absFilename())),
1, 0,
_("&Create directory"),
_("&Exit LyX"))) {
}
lyxerr << to_utf8(bformat(_("LyX: Creating directory %1$s"),
- from_utf8(package().user_support())))
+ from_utf8(package().user_support().absFilename())))
<< endl;
if (!createDirectory(package().user_support(), 0755)) {
bool LyX::readRcFile(string const & name)
{
- lyxerr[Debug::INIT] << "About to read " << name << "... ";
+ LYXERR(Debug::INIT) << "About to read " << name << "... ";
FileName const lyxrc_path = libFileSearch(string(), name);
if (!lyxrc_path.empty()) {
- lyxerr[Debug::INIT] << "Found in " << lyxrc_path << endl;
+ LYXERR(Debug::INIT) << "Found in " << lyxrc_path << endl;
if (lyxrc.read(lyxrc_path) < 0) {
showFileError(name);
return false;
}
} else
- lyxerr[Debug::INIT] << "Not found." << lyxrc_path << endl;
+ LYXERR(Debug::INIT) << "Not found." << lyxrc_path << endl;
return true;
}
std::list<string>::const_iterator end = uifiles.end();
it = std::find(it, end, name);
if (it != end) {
- lyxerr[Debug::INIT] << "UI file '" << name
+ LYXERR(Debug::INIT) << "UI file '" << name
<< "' has been read already. "
<< "Is this an include loop?"
<< endl;
return false;
}
- lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
+ LYXERR(Debug::INIT) << "About to read " << name << "..." << endl;
FileName ui_path;
ui_path = libFileSearch("ui", name, "ui");
if (ui_path.empty()) {
- lyxerr[Debug::INIT] << "Could not find " << name << endl;
+ LYXERR(Debug::INIT) << "Could not find " << name << endl;
showFileError(name);
return false;
}
uifiles.push_back(name);
- lyxerr[Debug::INIT] << "Found " << name
+ LYXERR(Debug::INIT) << "Found " << name
<< " in " << ui_path << endl;
LyXLex lex(uitags, ui_last - 1);
lex.setFile(ui_path);
// Read the languages file `name'
bool LyX::readLanguagesFile(string const & name)
{
- lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
+ LYXERR(Debug::INIT) << "About to read " << name << "..." << endl;
FileName const lang_path = libFileSearch(string(), name);
if (lang_path.empty()) {
// 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;
}
}
-IconvProcessor & utf8ToUcs4()
-{
- return LyX::ref().iconvProcessor();
-}
-
-
Messages & getMessages(std::string const & language)
{
return LyX::ref().getMessages(language);