#include <cstdlib>
#include <csignal>
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
#include "version.h"
#include "lyx_main.h"
#include "lyx_gui.h"
#include "layout.h"
#include "gettext.h"
#include "kbmap.h"
+#include "MenuBackend.h"
+#include "ToolbarDefaults.h"
+#include "lyxlex.h"
using std::endl;
extern void LoadLyXFile(string const &);
+extern void QuitLyX();
string system_lyxdir;
string build_lyxdir;
}
}
-
-
// Initialization of LyX (reads lyxrc and more)
lyxerr[Debug::INIT] << "Initializing LyX::init..." << endl;
init(argc, argv, gui);
// Execute batch commands if available
if (!batch_command.empty()) {
- lyxerr << "About to handle -x '" << batch_command << "'" << endl;
+ lyxerr << "About to handle -x '"
+ << batch_command << "'" << endl;
// no buffer loaded, create one
if (!last_loaded)
// Maybe we could do something more clever than aborting...
if (dispatched) {
lyxerr << "We are done!" << endl;
+ QuitLyX();
return;
}
//
ReadRcFile("lyxrc.defaults");
- ReadRcFile("lyxrc");
+// system_lyxrc = lyxrc;
+ // If there is a preferences file we read that instead
+ // of the old lyxrc file.
+ if (!ReadRcFile("preferences"))
+ ReadRcFile("lyxrc");
// Ensure that we have really read a bind file, so that LyX is
// usable.
if (!lyxrc.hasBindFile)
lyxrc.ReadBindFile();
+ // Read menus
+ ReadUIFile(lyxrc.ui_file);
// Bind the X dead keys to the corresponding LyX functions if
// necessary.
// Run configure in user lyx directory
Path p(user_lyxdir);
- system(AddName(system_lyxdir, "configure").c_str());
+ ::system(AddName(system_lyxdir, "configure").c_str());
lyxerr << "LyX: " << _("Done!") << endl;
}
// Read the rc file `name'
-void LyX::ReadRcFile(string const & name)
+bool LyX::ReadRcFile(string const & name)
{
lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
WriteAlert(_("LyX Warning!"),
_("Error while reading ")+lyxrc_path+".",
_("Using built-in defaults."));
+ return false;
}
+ return true;
} else
lyxerr[Debug::INIT] << "Could not find " << name << endl;
+ return false;
+}
+
+
+// Read the ui file `name'
+void LyX::ReadUIFile(string const & name)
+{
+ enum Uitags {
+ ui_menuset = 1,
+ ui_toolbar,
+ ui_last
+ };
+
+ struct keyword_item uitags[ui_last-1] = {
+ { "menuset", ui_menuset },
+ { "toolbar", ui_toolbar }
+ };
+
+ lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
+
+ string ui_path = LibFileSearch("ui", name, "ui");
+
+ if (ui_path.empty()) {
+ lyxerr[Debug::INIT] << "Could not find " << name << endl;
+ return;
+ }
+
+ lyxerr[Debug::INIT] << "Found " << name
+ << " in " << ui_path << endl;
+ LyXLex lex(uitags, ui_last - 1);
+ lex.setFile(ui_path);
+ if (!lex.IsOK()) {
+ lyxerr << "Unable to set LyXLeX for ui file: " << ui_path
+ << endl;
+ }
+
+ if (lyxerr.debugging(Debug::PARSER))
+ lex.printTable(lyxerr);
+
+ while (lex.IsOK()) {
+ switch(lex.lex()) {
+ case ui_menuset:
+ menubackend.read(lex);
+ break;
+
+ case ui_toolbar:
+ toolbardefaults.read(lex);
+ break;
+
+ default:
+ lex.printError("LyX::ReadUFile: "
+ "Unknown menu tag: `$$Token'");
+ break;
+ }
+ }
}
if (i + 1 < *argc) {
string type(argv[i+1]);
removeargs = 2;
-
- if (type == "tex")
- type = "latex";
- else if (type == "ps")
- type = "postscript";
- else if (type == "text" || type == "txt")
- type = "ascii";
-
- if (type == "latex" || type == "postscript"
- || type == "linuxdoc" || type == "docbook"
- || type == "ascii" || type == "html")
- batch_command = "buffer-export " + type;
- else
- lyxerr << _("Unknown file type '")
- << type << _("' after ")
- << arg << _(" switch!") << endl;
+ batch_command = "buffer-export " + type;
+ gui = false;
} else
lyxerr << _("Missing file type [eg latex, "
"ps...] after ")