#endif
#include <config.h>
+#include <memory>
#include "support/LAssert.h"
#include "MenuBackend.h"
#include "lyxlex.h"
case Separator:
case Documents:
case Lastfiles:
+ case Toc:
+ case References:
+ case ViewFormats:
+ case UpdateFormats:
+ case ExportFormats:
break;
case Command:
action_ = lyxaction.LookupFunc(command);
}
-void Menu::read(LyXLex & lex)
+Menu & Menu::read(LyXLex & lex)
{
enum Menutags {
md_item = 1,
md_documents,
md_endmenu,
+ md_exportformats,
md_lastfiles,
md_optitem,
- md_submenu,
+ md_references,
md_separator,
+ md_submenu,
+ md_toc,
+ md_updateformats,
+ md_viewformats,
md_last
};
struct keyword_item menutags[md_last-1] = {
{ "documents", md_documents },
{ "end", md_endmenu },
+ { "exportformats", md_exportformats },
{ "item", md_item },
{ "lastfiles", md_lastfiles },
{ "optitem", md_optitem },
+ { "references", md_references },
{ "separator", md_separator },
- { "submenu", md_submenu }
+ { "submenu", md_submenu },
+ { "toc", md_toc },
+ { "updateformats", md_updateformats },
+ { "viewformats", md_viewformats }
};
lex.pushTable(menutags, md_last - 1);
// fallback to md_item
case md_item: {
lex.next();
- string name = _(lex.GetString().c_str());
+ char * tmp = strdup(lex.GetString().c_str());
+ string name = _(tmp);
+ free(tmp);
lex.next();
string command = lex.GetString();
add(MenuItem(MenuItem::Command, name,
optional = false;
break;
}
+
case md_separator:
add(MenuItem(MenuItem::Separator));
break;
+
case md_lastfiles:
add(MenuItem(MenuItem::Lastfiles));
break;
+
case md_documents:
add(MenuItem(MenuItem::Documents));
break;
+
+ case md_toc:
+ add(MenuItem(MenuItem::Toc));
+ break;
+
+ case md_references:
+ add(MenuItem(MenuItem::References));
+ break;
+
+ case md_viewformats:
+ add(MenuItem(MenuItem::ViewFormats));
+ break;
+
+ case md_updateformats:
+ add(MenuItem(MenuItem::UpdateFormats));
+ break;
+
+ case md_exportformats:
+ add(MenuItem(MenuItem::ExportFormats));
+ break;
+
case md_submenu: {
lex.next();
- string mlabel = _(lex.GetString().c_str());
+ char * tmp = strdup(lex.GetString().c_str());
+ string mlabel = _(tmp);
+ free(tmp);
lex.next();
string mname = lex.GetString();
add(MenuItem(MenuItem::Submenu, mlabel, mname));
break;
}
+
case md_endmenu:
quit = true;
break;
+
default:
lex.printError("menubar::read: "
"Unknown menu tag: `$$Token'");
}
}
lex.popTable();
+ return *this;
}
lex.printTable(lyxerr);
bool quit = false;
+ bool menubar = false;
while (lex.IsOK() && !quit) {
switch(lex.lex()) {
+ case md_menubar:
+ menubar = true;
+ // fallback to md_menu
case md_menu: {
lex.next();
string name = lex.GetString();
- Menu menu(name, false);
- menu.read(lex);
- add(menu);
- break;
- }
- case md_menubar: {
- lex.next();
- string name = lex.GetString();
- Menu menubar(name, true);
- menubar.read(lex);
- add(menubar);
+ if (hasMenu(name)) {
+ if (getMenu(name).menubar() == menubar) {
+ getMenu(name).read(lex);
+ } else {
+ lex.printError("Cannot append to menu `$$Token' unless it is of the same type");
+ return;
+ }
+ } else {
+ Menu menu(name, menubar);
+ menu.read(lex);
+ add(menu);
+ }
+ menubar = false;
break;
}
case md_endmenuset:
Menu file("file");
file
- .add(MenuItem(MenuItem::Command, N_("New...|N"), "buffer-new"))
- .add(MenuItem(MenuItem::Command, N_("Open...|O"), "buffer-open"))
- .add(MenuItem(MenuItem::Submenu, N_("Import|I"), "import"))
- .add(MenuItem(MenuItem::Command, N_("Quit|Q"), "lyx-quit"))
+ .add(MenuItem(MenuItem::Command, _("New...|N"), "buffer-new"))
+ .add(MenuItem(MenuItem::Command, _("Open...|O"), "buffer-open"))
+ .add(MenuItem(MenuItem::Submenu, _("Import|I"), "import"))
+ .add(MenuItem(MenuItem::Command, _("Quit|Q"), "lyx-quit"))
.add(MenuItem(MenuItem::Separator))
.add(MenuItem(MenuItem::Lastfiles));
add(file);
Menu import("import");
import
.add(MenuItem(MenuItem::Command,
- N_("LaTeX...|L"), "buffer-import latex"))
+ _("LaTeX...|L"), "buffer-import latex"))
.add(MenuItem(MenuItem::Command,
- N_("LinuxDoc...|L"), "buffer-import linuxdoc"));
+ _("LinuxDoc...|L"), "buffer-import linuxdoc"));
add(import);
Menu edit("edit");
edit
- .add(MenuItem(MenuItem::Command, N_("Cut"), "cut"))
- .add(MenuItem(MenuItem::Command, N_("Copy"), "copy"))
- .add(MenuItem(MenuItem::Command, N_("Paste"), "paste"))
- .add(MenuItem(MenuItem::Command, N_("Emphasize"), "font-emph"));
+ .add(MenuItem(MenuItem::Command, _("Cut"), "cut"))
+ .add(MenuItem(MenuItem::Command, _("Copy"), "copy"))
+ .add(MenuItem(MenuItem::Command, _("Paste"), "paste"))
+ .add(MenuItem(MenuItem::Command, _("Emphasize"), "font-emph"));
add(edit);
Menu documents("documents");
Menu main("main", true);
main
- .add(MenuItem(MenuItem::Submenu, N_("File|F"), "file"))
- .add(MenuItem(MenuItem::Submenu, N_("Edit|E"), "edit"))
+ .add(MenuItem(MenuItem::Submenu, _("File|F"), "file"))
+ .add(MenuItem(MenuItem::Submenu, _("Edit|E"), "edit"))
.add(MenuItem(MenuItem::Submenu,
- N_("Documents|D"), "documents"));
+ _("Documents|D"), "documents"));
add(main);
Menu main_nobuffer("main_nobuffer", true);
- main_nobuffer.add(MenuItem(MenuItem::Submenu, N_("File|F"), "file"));
+ main_nobuffer.add(MenuItem(MenuItem::Submenu, _("File|F"), "file"));
add(main_nobuffer);
if (lyxerr.debugging(Debug::GUI)) {
bool MenuBackend::hasMenu(string const & name) const
{
- for (const_iterator cit = begin(); cit != end(); ++cit) {
+ const_iterator mend = end();
+ for (const_iterator cit = begin(); cit != mend; ++cit) {
if ((*cit).name() == name)
return true;
}
Menu const & MenuBackend::getMenu(string const & name) const
{
- for (const_iterator cit = begin(); cit != end(); ++cit) {
+ const_iterator mend = end();
+ for (const_iterator cit = begin(); cit != mend; ++cit) {
+ if ((*cit).name() == name)
+ return (*cit);
+ }
+ Assert(false); // we actually require the name to exist.
+ return menulist_.front();
+}
+
+
+Menu & MenuBackend::getMenu(string const & name)
+{
+ MenuList::iterator end = menulist_.end();
+ for (MenuList::iterator cit = menulist_.begin();
+ cit != end; ++cit) {
if ((*cit).name() == name)
return (*cit);
}
Assert(false); // we actually require the name to exist.
return menulist_.front();
}
+