#include "lyx_main.h"
+#include "ConverterCache.h"
#include "buffer.h"
#include "buffer_funcs.h"
#include "bufferlist.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>
string cl_system_support;
string cl_user_support;
+LyX * singleton_ = 0;
void showFileError(string const & error)
{
/// The main application class private implementation.
struct LyX::Singletons
{
+ Singletons(): iconv(ucs4_codeset, "UTF-8")
+ {
+ }
/// our function handler
LyXFunc lyxfunc_;
///
boost::scoped_ptr<frontend::Application> application_;
/// lyx session, containing lastfiles, lastfilepos, and lastopened
boost::scoped_ptr<Session> session_;
-};
-
-boost::scoped_ptr<LyX> LyX::singleton_;
+ ///
+ IconvProcessor iconv;
+};
-int LyX::exec(int & argc, char * argv[])
+LyX::~LyX()
{
- BOOST_ASSERT(!singleton_.get());
- // We must return from this before launching the gui so that
- // other parts of the code can access singleton_ through
- // LyX::ref and LyX::cref.
- singleton_.reset(new LyX);
- // Start the real execution loop.
- return singleton_->priv_exec(argc, argv);
+ // Static data are not treated in the same way at all on the Mac (and
+ // the LyX singleton has static methods). This is the reason why the
+ // exit command on the Mac bypasses our dispatch machinery altogether.
+ // On Linux and Windows we won't pass a second time through quit()
+ // because quitting will already be set to true.
+ if (!quitting)
+ quit();
}
LyX & LyX::ref()
{
- BOOST_ASSERT(singleton_.get());
- return *singleton_.get();
+ BOOST_ASSERT(singleton_);
+ return *singleton_;
}
LyX const & LyX::cref()
{
- BOOST_ASSERT(singleton_.get());
- return *singleton_.get();
+ BOOST_ASSERT(singleton_);
+ return *singleton_;
}
LyX::LyX()
: first_start(false), geometryOption_(false)
{
+ singleton_ = this;
pimpl_.reset(new Singletons);
}
}
+IconvProcessor & LyX::iconvProcessor()
+{
+ return pimpl_->iconv;
+}
+
+
kb_keymap const & LyX::topLevelKeymap() const
{
BOOST_ASSERT(pimpl_->toplevel_keymap_.get());
}
-int LyX::priv_exec(int & argc, char * argv[])
+int LyX::exec(int & argc, char * argv[])
{
// Here we need to parse the command line. At least
// we need to parse for "-dbg" and "-help"
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
+ // read, therefore it can't be done by a static object.
+ ConverterCache::init();
+
return true;
}
return LyX::ref().topLevelKeymap();
}
-} // namespace lyx
-
-namespace boost {
-
-void assertion_failed(char const* a, char const* b, char const* c, long d)
+IconvProcessor & utf8ToUcs4()
{
- lyx::lyxerr << "Assertion failed: " << a << ' ' << b << ' ' << c << ' '
- << d << '\n';
+ return LyX::ref().iconvProcessor();
}
-} // boost
-
+} // namespace lyx