X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FKeyMap.cpp;h=a5e83b356bed7e497f19011a28ccef8e6ddd4cc6;hb=ad91dd139c4d6665704b11d9bd34770c3b769543;hp=5f90aa3042d7044cd3c6c91f7c201e560f694b5d;hpb=c08309a9e284026a207f428afb4c4b4b5f0fbb9a;p=lyx.git diff --git a/src/KeyMap.cpp b/src/KeyMap.cpp index 5f90aa3042..a5e83b356b 100644 --- a/src/KeyMap.cpp +++ b/src/KeyMap.cpp @@ -15,29 +15,24 @@ #include "KeyMap.h" -#include "debug.h" #include "KeySequence.h" #include "LyXAction.h" #include "Lexer.h" +#include "support/debug.h" #include "support/docstream.h" +#include "support/FileName.h" #include "support/filetools.h" #include #include #include -using std::endl; -using std::ios; -using std::ofstream; -using std::string; - +using namespace std; +using namespace lyx::support; namespace lyx { -using support::FileName; -using support::i18nLibFileSearch; - string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod) { @@ -59,9 +54,8 @@ string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod) size_t KeyMap::bind(string const & seq, FuncRequest const & func) { - LYXERR(Debug::KBMAP) << "BIND: Sequence `" - << seq << "' Action `" - << func.action << '\'' << endl; + LYXERR(Debug::KBMAP, "BIND: Sequence `" << seq << "' Action `" + << func.action << '\''); KeySequence k(0, 0); @@ -69,9 +63,8 @@ size_t KeyMap::bind(string const & seq, FuncRequest const & func) if (res == string::npos) { bind(&k, func); } else { - LYXERR(Debug::KBMAP) << "Parse error at position " << res - << " in key sequence '" << seq << "'." - << endl; + LYXERR(Debug::KBMAP, "Parse error at position " << res + << " in key sequence '" << seq << "'."); } return res == string::npos ? 0 : res; @@ -86,9 +79,8 @@ size_t KeyMap::unbind(string const & seq, FuncRequest const & func) if (res == string::npos) unbind(&k, func); else - LYXERR(Debug::KBMAP) << "Parse error at position " << res - << " in key sequence '" << seq << "'." - << endl; + LYXERR(Debug::KBMAP, "Parse error at position " << res + << " in key sequence '" << seq << "'."); return res == string::npos ? 0 : res; } @@ -125,74 +117,63 @@ void KeyMap::clear() } -namespace { - -enum BindTags { - BN_BIND, - BN_BINDFILE, - BN_UNBIND, -}; - -keyword_item bindTags[] = { - { "\\bind", BN_BIND }, - { "\\bind_file", BN_BINDFILE }, - { "\\unbind", BN_UNBIND }, -}; - -} - - bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) { - const int bindCount = sizeof(bindTags) / sizeof(keyword_item); - - Lexer lexrc(bindTags, bindCount); + enum { + BN_BIND, + BN_BINDFILE, + BN_UNBIND, + }; + + LexerKeyword bindTags[] = { + { "\\bind", BN_BIND }, + { "\\bind_file", BN_BINDFILE }, + { "\\unbind", BN_UNBIND }, + }; + + Lexer lexrc(bindTags); if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); - FileName const tmp(i18nLibFileSearch("bind", bind_file, "bind")); + FileName const tmp = i18nLibFileSearch("bind", bind_file, "bind"); lexrc.setFile(tmp); if (!lexrc.isOK()) { - lyxerr << "KeyMap::read: cannot open bind file:" - << tmp << endl; + LYXERR0("KeyMap::read: cannot open bind file:" << tmp); return false; } - LYXERR(Debug::KBMAP) << "Reading bind file:" << tmp << endl; + LYXERR(Debug::KBMAP, "Reading bind file:" << tmp); bool error = false; while (lexrc.isOK()) { switch (lexrc.lex()) { + case Lexer::LEX_UNDEF: lexrc.printError("Unknown tag `$$Token'"); error = true; continue; + case Lexer::LEX_FEOF: continue; - case BN_BIND: - { - string seq, cmd; - if (lexrc.next()) { - seq = lexrc.getString(); - } else { + case BN_BIND: { + if (!lexrc.next()) { lexrc.printError("BN_BIND: Missing key sequence"); error = true; break; } + string seq = lexrc.getString(); - if (lexrc.next(true)) { - cmd = lexrc.getString(); - } else { + if (!lexrc.next(true)) { lexrc.printError("BN_BIND: missing command"); error = true; break; } + string cmd = lexrc.getString(); FuncRequest func = lyxaction.lookupFunc(cmd); - if (func. action == LFUN_UNKNOWN_ACTION) { - lexrc.printError("BN_BIND: Unknown LyX" - " function `$$Token'"); + if (func.action == LFUN_UNKNOWN_ACTION) { + lexrc.printError("BN_BIND: Unknown LyX function `$$Token'"); error = true; break; } @@ -200,28 +181,24 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) bind(seq, func); break; } - case BN_UNBIND: - { - string seq, cmd; - if (lexrc.next()) { - seq = lexrc.getString(); - } else { + case BN_UNBIND: { + if (!lexrc.next()) { lexrc.printError("BN_UNBIND: Missing key sequence"); error = true; break; } + string seq = lexrc.getString(); - if (lexrc.next(true)) { - cmd = lexrc.getString(); - } else { + if (!lexrc.next(true)) { lexrc.printError("BN_UNBIND: missing command"); error = true; break; } + string cmd = lexrc.getString(); FuncRequest func = lyxaction.lookupFunc(cmd); - if (func. action == LFUN_UNKNOWN_ACTION) { + if (func.action == LFUN_UNKNOWN_ACTION) { lexrc.printError("BN_UNBIND: Unknown LyX" " function `$$Token'"); error = true; @@ -234,23 +211,21 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) unbind(seq, func); break; } + case BN_BINDFILE: - if (lexrc.next()) { - string const tmp(lexrc.getString()); - error |= !read(tmp, unbind_map); - } else { + if (!lexrc.next()) { lexrc.printError("BN_BINDFILE: Missing file name"); error = true; break; - } + string const tmp = lexrc.getString(); + error |= !read(tmp, unbind_map); break; } } if (error) - lyxerr << "KeyMap::read: error while reading bind file:" - << tmp << endl; + LYXERR0("KeyMap::read: error while reading bind file:" << tmp); return !error; } @@ -258,7 +233,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) void KeyMap::write(string const & bind_file, bool append, bool unbind) const { ofstream os(bind_file.c_str(), - append ? (ios::app | ios:: out): ios::out); + append ? (ios::app | ios::out) : ios::out); if (!append) os << "## This file is automatically generated by lyx\n" @@ -269,7 +244,7 @@ void KeyMap::write(string const & bind_file, bool append, bool unbind) const BindingList::const_iterator it = list.begin(); BindingList::const_iterator it_end = list.end(); for (; it != it_end; ++it) { - kb_action action = it->request.action; + FuncCode action = it->request.action; string arg = to_utf8(it->request.argument()); os << tag << " \"" @@ -353,11 +328,9 @@ void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r) && mod2 == it->mod.second) { // overwrite binding if (r + 1 == seq->length()) { - LYXERR(Debug::KBMAP) - << "Warning: New binding for '" + LYXERR(Debug::KBMAP, "Warning: New binding for '" << to_utf8(seq->print(KeySequence::Portable)) - << "' is overriding old binding..." - << endl; + << "' is overriding old binding..."); if (it->table.get()) { it->table.reset(); } @@ -413,7 +386,7 @@ void KeyMap::unbind(KeySequence * seq, FuncRequest const & func, unsigned int r) remove = it; if (it->table.get()) it->table.reset(); - } + } } else if (it->table.get()) { it->table->unbind(seq, func, r + 1); if (it->table->empty()) @@ -422,10 +395,8 @@ void KeyMap::unbind(KeySequence * seq, FuncRequest const & func, unsigned int r) } } } - if (remove != end) { + if (remove != end) table.erase(remove); - return; - } } @@ -486,7 +457,7 @@ KeyMap::BindingList KeyMap::listBindings(bool unbound, int tag) const LyXAction::const_func_iterator fit = lyxaction.func_begin(); LyXAction::const_func_iterator fit_end = lyxaction.func_end(); for (; fit != fit_end; ++fit) { - kb_action action = fit->second; + FuncCode action = fit->second; bool has_action = false; BindingList::const_iterator it = list.begin(); BindingList::const_iterator it_end = list.end();