]> git.lyx.org Git - lyx.git/blobdiff - src/LyXAction.C
fix keys to be unique
[lyx.git] / src / LyXAction.C
index 1163df80818de27501d4671668f5347761a91381..a7a5e794d589a9604496b2de45e1e4e86a0bf872 100644 (file)
@@ -1,12 +1,8 @@
-/* This file is part of
- * ======================================================
- *
- *           LyX, The Document Processor
- *
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2001 The LyX Team.
- *
- * ====================================================== */
+/**
+ * \file LyXAction.C
+ * Copyright 1995-2002 the LyX Team
+ * Read the file COPYING
+ */
 
 #include <config.h>
 
 #endif
 
 #include "LyXAction.h"
+
 #include "debug.h"
 #include "gettext.h"
 #include "support/lstrings.h"
 
 using std::ostream;
 using std::endl;
+using std::pair;
+using std::make_pair;
 
 /*
      NAMING RULES FOR USER-COMMANDS
@@ -37,18 +36,19 @@ using std::endl;
      8) The end of an object is called `end'.
 
      (May 19 1996, 12:04, RvdK)
- */
+*/
 
-// These are globals.
 LyXAction lyxaction;
 
-// Small helper function
-inline
-bool isPseudoAction(int a)
+namespace {
+
+/// return true if the given action is a pseudo-action
+inline bool isPseudoAction(int a)
 {
        return a > int(LFUN_LASTACTION);
 }
 
+}
 
 
 void LyXAction::newFunc(kb_action action, string const & name,
@@ -81,7 +81,7 @@ void LyXAction::init()
                unsigned int attrib;
        };
 
-       ev_item items[] = {
+       ev_item const items[] = {
                { LFUN_ACUTE, "accent-acute", "", Noop },
                { LFUN_BREVE, "accent-breve", "", Noop },
                { LFUN_CARON, "accent-caron", "", Noop },
@@ -196,12 +196,13 @@ void LyXAction::init()
                { LFUN_FILE_INSERT_ASCII, "file-insert-ascii", _("Insert ASCII files as lines"), Noop },
                { LFUN_FILE_INSERT_ASCII_PARA, "file-insert-ascii-para", _("Insert ASCII file as a paragraph"), Noop },
                { LFUN_FILE_NEW, "file-new", "", NoBuffer },
-               { LFUN_FILE_OPEN, "file-open", _("Open a file"), NoBuffer },
+               { LFUN_FILE_OPEN, "file-open", N_("Open a file"), NoBuffer },
                { LFUN_MENUSEARCH, "find-replace", N_("Find & Replace"),
                  ReadOnly },
-               { LFUN_INSET_FLOAT, "float-insert", "Insert a Float", Noop },
+               { LFUN_INSET_FLOAT, "float-insert", N_("Insert a Float"), Noop },
                { LFUN_INSET_WIDE_FLOAT, "float-wide-insert",
-                 "Insert a wide Float", Noop },
+                 N_("Insert a wide Float"), Noop },
+               { LFUN_INSET_WRAP, "wrap-insert", N_("Insert a Wrap"), Noop },
                { LFUN_BOLD, "font-bold", N_("Toggle bold"), Noop },
                { LFUN_CODE, "font-code", N_("Toggle code style"), Noop },
                { LFUN_DEFAULT, "font-default", N_("Default font style"),
@@ -247,6 +248,8 @@ void LyXAction::init()
                  ReadOnly },
                { LFUN_INSERT_LABEL, "label-insert", N_("Insert Label"),
                  Noop },
+               { LFUN_INSET_OPTARG, "optional-insert", N_("Insert Optional Argument"),
+                 Noop },
                { LFUN_LANGUAGE, "language", N_("Change language"), Noop },
                { LFUN_LATEX_LOG, "latex-view-log", N_("View LaTeX log"),
                  ReadOnly },
@@ -274,19 +277,18 @@ void LyXAction::init()
 #endif
                { LFUN_QUIT, "lyx-quit", N_("Exit"), NoBuffer },
                { LFUN_INSET_MARGINAL, "marginalnote-insert",
-                 N_("Insert Marginalnote"), Noop },
+                 N_("Insert margin note"), Noop },
                { LFUN_MARK_OFF, "mark-off", "", ReadOnly },
                { LFUN_MARK_ON, "mark-on", "", ReadOnly },
                { LFUN_SETMARK, "mark-toggle", "", ReadOnly },
-               { LFUN_MATH, "math", "", Noop },
                { LFUN_MATH_DELIM, "math-delim", "", Noop },
                { LFUN_MATH_DISPLAY, "math-display", "", Noop },
                { LFUN_GREEK, "math-greek", N_("Math Greek"), Noop },
                { LFUN_GREEK_TOGGLE, "math-greek-toggle", "", Noop },
                { LFUN_INSERT_MATH, "math-insert",
                  N_("Insert math symbol"), Noop },
-               { LFUN_SUBSCRIPT, "math-subscript", "", Noop },
-               { LFUN_SUPERSCRIPT, "math-superscript", "", Noop },
+               { LFUN_SUBSCRIPT, "math-subscript", N_("Add subscript"), Noop },
+               { LFUN_SUPERSCRIPT, "math-superscript", N_("Add superscript"), Noop },
                { LFUN_MATH_LIMITS, "math-limits", "", Noop },
                { LFUN_MATH_MACRO, "math-macro", "", Noop },
                { LFUN_MATH_MUTATE, "math-mutate", "", Noop },
@@ -297,12 +299,6 @@ void LyXAction::init()
                { LFUN_MATH_NONUMBER, "math-nonumber", "", Noop },
                { LFUN_MATH_NUMBER, "math-number", "", Noop },
                { LFUN_MATH_EXTERN, "math-extern", "", Noop },
-               { LFUN_MATH_VALIGN, "math-valign", "", Noop },
-               { LFUN_MATH_HALIGN, "math-halign", "", Noop },
-               { LFUN_MATH_ROW_INSERT, "math-row-insert", "", Noop },
-               { LFUN_MATH_ROW_DELETE, "math-row-delete", "", Noop },
-               { LFUN_MATH_COLUMN_INSERT, "math-column-insert", "", Noop },
-               { LFUN_MATH_COLUMN_DELETE, "math-column-delete", "", Noop },
                { LFUN_MATH_PANEL, "math-panel", "", Noop },
                { LFUN_MATH_SIZE, "math-size", "", Noop },
                { LFUN_MENU_OPEN_BY_NAME, "menu-open", "", NoBuffer },
@@ -402,6 +398,7 @@ void LyXAction::init()
                { LFUN_WORDRIGHT, "word-forward", "", ReadOnly },
                { LFUN_WORDRIGHTSEL, "word-forward-select", "", ReadOnly },
                { LFUN_LOWCASE_WORD, "word-lowcase", "", Noop },
+               { LFUN_WORDSEL, "word-select", "", ReadOnly },
                { LFUN_UPCASE_WORD, "word-upcase", "", Noop },
                { LFUN_MESSAGE, "message",
                  N_("Show message in minibuffer"), NoBuffer },
@@ -420,13 +417,9 @@ void LyXAction::init()
                { LFUN_NOACTION, "", "", Noop }
        };
 
-       int i = 0;
-       while (items[i].action != LFUN_NOACTION) {
-               newFunc(items[i].action,
-                       items[i].name,
-                       _(items[i].helpText),
-                       items[i].attrib);
-               ++i;
+       for (int i = 0; items[i].action != LFUN_NOACTION; ++i) {
+               newFunc(items[i].action, items[i].name,
+                       _(items[i].helpText), items[i].attrib);
        }
 
        init = true;
@@ -439,14 +432,11 @@ LyXAction::LyXAction()
 }
 
 
-// Search for an existent pseudoaction, return LFUN_UNKNOWN_ACTION
-// if it doesn't exist.
 int LyXAction::searchActionArg(kb_action action, string const & arg) const
 {
        arg_map::const_iterator pit = lyx_arg_map.find(action);
 
        if (pit == lyx_arg_map.end()) {
-               // the action does not have any pseudoactions
                lyxerr[Debug::ACTION] << "Action " << action
                                      << " does not have any pseudo actions."
                                      << endl;
@@ -456,7 +446,6 @@ int LyXAction::searchActionArg(kb_action action, string const & arg) const
        arg_item::const_iterator aci = pit->second.find(arg);
 
        if (aci == pit->second.end()) {
-               // the action does not have any pseudoactions with this arg
                lyxerr[Debug::ACTION]
                        << "Action " << action
                        << "does not have any pseudoactions with arg "
@@ -464,8 +453,7 @@ int LyXAction::searchActionArg(kb_action action, string const & arg) const
                return LFUN_UNKNOWN_ACTION;
        }
 
-       // pseudo action exist
-       lyxerr[Debug::ACTION] << "Pseudoaction exist["
+       lyxerr[Debug::ACTION] << "Pseudoaction exists["
                              << action << '|'
                              << arg << "] = " << aci->second << endl;
 
@@ -473,8 +461,7 @@ int LyXAction::searchActionArg(kb_action action, string const & arg) const
 }
 
 
-// Returns a pseudo-action given an action and its argument.
-int LyXAction::getPseudoAction(kb_action action, string const & arg) const
+int LyXAction::getPseudoAction(kb_action action, string const & arg)
 {
        int const psdaction = searchActionArg(action, arg);
 
@@ -483,7 +470,7 @@ int LyXAction::getPseudoAction(kb_action action, string const & arg) const
        static unsigned int pseudo_counter = LFUN_LASTACTION;
 
        // Create new pseudo action.
-       lyx_pseudo_map[++pseudo_counter] = FuncRequest(action, arg);
+       lyx_pseudo_map[++pseudo_counter] = FuncRequest(0, action, arg);
 
        // First ensure that the action is in lyx_arg_map;
        lyx_arg_map[action];
@@ -500,14 +487,10 @@ int LyXAction::getPseudoAction(kb_action action, string const & arg) const
 }
 
 
-// Retrieves the real action and its argument.
-// perhaps a pair<kb_action, string> should be returned?
-kb_action LyXAction::retrieveActionArg(int pseudo, string & arg) const
+FuncRequest LyXAction::retrieveActionArg(int pseudo) const
 {
-       arg.erase(); // clear it to be sure.
-
        if (!isPseudoAction(pseudo))
-               return static_cast<kb_action>(pseudo);
+               return FuncRequest(static_cast<kb_action>(pseudo));
 
        pseudo_map::const_iterator pit = lyx_pseudo_map.find(pseudo);
 
@@ -515,18 +498,17 @@ kb_action LyXAction::retrieveActionArg(int pseudo, string & arg) const
                lyxerr[Debug::ACTION] << "Found the pseudoaction: ["
                                      << pit->second.action << '|'
                                      << pit->second.argument << "]\n";
-               arg = pit->second.argument;
-               return pit->second.action;
+               return pit->second;
        } else {
                lyxerr << "Lyx Error: Unrecognized pseudo-action "
                        << pseudo << endl;
-               return LFUN_UNKNOWN_ACTION;
+               return FuncRequest(LFUN_UNKNOWN_ACTION);
        }
 }
 
 
 // Returns an action tag from a string.
-int LyXAction::LookupFunc(string const & func) const
+int LyXAction::LookupFunc(string const & func)
 {
        string const func2 = trim(func);
        if (func2.empty()) return LFUN_NOACTION;
@@ -548,83 +530,30 @@ int LyXAction::LookupFunc(string const & func) const
 }
 
 
-//#ifdef WITH_WARNINGS
-//#warning Not working as it should.
-//#endif
-// I have no clue what is wrong with it... (Lgb)
-int LyXAction::getApproxFunc(string const & func) const
-       // This func should perhaps also be able to return a list of all
-       // actions that has func as a prefix. That should actually be quite
-       // easy, just let it return a vector<int> or something.
-{
-       int action = LookupFunc(func);
-       if (action == LFUN_UNKNOWN_ACTION) {
-               // func is not an action, but perhaps it is
-               // part of one...check if it is prefix if one of the
-               // actions.
-               // Checking for prefix is not so simple, but
-               // using a simple bounding function gives
-               // a similar result.  [ale 19981103]
-               func_map::const_iterator fit =
-                       lyx_func_map.lower_bound(func);
-
-               if (fit != lyx_func_map.end()) {
-                       action =  fit->second;
-               }
-       } else {  // Go get the next function
-               func_map::const_iterator fit =
-                       lyx_func_map.upper_bound(func);
-
-               if (fit != lyx_func_map.end()) {
-                       action =  fit->second;
-               }
-       }
-
-       return action;
-}
-
-
-string const LyXAction::getApproxFuncName(string const & func) const
-{
-       int const f = getApproxFunc(func);
-       // This will return empty string if f isn't an action.
-       return getActionName(f);
-}
-
-
 string const LyXAction::getActionName(int action) const
 {
-       kb_action ac;
-       string arg;
+       FuncRequest ev = retrieveActionArg(action);
+       if (!ev.argument.empty())
+               ev.argument.insert(0, " ");
 
-       ac = retrieveActionArg(action, arg);
-       if (!arg.empty())
-               arg.insert(0, " ");
+       info_map::const_iterator const it = lyx_info_map.find(ev.action);
 
-       info_map::const_iterator iit = lyx_info_map.find(ac);
-
-       if (iit != lyx_info_map.end()) {
-               string ret(iit->second.name);
-               ret += arg;
-               return ret;
-       } else
-               return string();
+       if (it != lyx_info_map.end())
+               return it->second.name + ev.argument;
+       return string();
 }
 
 
-// Returns one line help associated with a (pseudo)action, i.e. appends
-// the argument of the action if necessary
 string const LyXAction::helpText(int pseudoaction) const
 {
-       string help, arg;
-       kb_action action;
-
-       action = retrieveActionArg(pseudoaction, arg);
+       FuncRequest ev = retrieveActionArg(pseudoaction);
 
-       info_map::const_iterator ici = lyx_info_map.find(action);
+       string help;
+       info_map::const_iterator ici = lyx_info_map.find(ev.action);
        if (ici != lyx_info_map.end()) {
                if (lyxerr.debugging(Debug::ACTION)) {
-                       lyxerr << "Action: " << action << '\n';
+                       lyxerr << "Action: " << ev.action << '\n';
                        lyxerr << "   name: "
                               << ici->second.name << '\n';
                        lyxerr << " attrib: "
@@ -639,9 +568,9 @@ string const LyXAction::helpText(int pseudoaction) const
 
        if (help.empty()) {
                help = _("No description available!");
-       } else if (!arg.empty()) {
+       } else if (!ev.argument.empty()) {
                help += ' ';
-               help += arg;
+               help += ev.argument;
        }
 
        return help;