X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbsequence.C;h=9289bf60a208497db25abf468eafb1a3f509694b;hb=c90c5e6386ce69c34c99b3594d6fa452e6a13161;hp=ee4682cfd58d5ca312bd0737a2cab3392981670b;hpb=9ce32d63e5ff1dbf4c04e3d8263b2649ef3ac595;p=lyx.git diff --git a/src/kbsequence.C b/src/kbsequence.C index ee4682cfd5..9289bf60a2 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -22,6 +22,8 @@ #include "kbmap.h" #include "debug.h" +using std::endl; + // The only modifiers that we handle. We want to throw away things // like NumLock. enum { ModsMask = ShiftMask | ControlMask | Mod1Mask }; @@ -59,24 +61,21 @@ void printKeysym(unsigned int key, unsigned int mod, string & buf); int kb_sequence::addkey(unsigned int key, unsigned int mod, unsigned int nmod /*= 0*/) { - if(length < 0) length = 0; - - if(length + 1 >= size) { - unsigned int * nseq = new unsigned int[size + KB_PREALLOC]; - size += KB_PREALLOC; - memcpy(nseq, sequence, length * sizeof(unsigned int)); - if(sequence != staticseq) delete sequence; - sequence = nseq; - nseq = new unsigned int[size]; - memcpy(nseq, modifiers, length * sizeof(unsigned int)); - if(modifiers != staticmod) delete modifiers; - modifiers = nseq; + //lyxerr << "kb_sequence::addkey: length is [" << length << "]\n" + // << "kb_sequence::addkey::key == [" << key << "]\n" + // << "kb_sequence::addkey::mod == [" << mod << "]" << endl; + + if (length <= 0) { + length = 0; + sequence.clear(); + modifiers.clear(); } - modifiers[length] = mod + (nmod << 16); - sequence[length++] = key; - - if(curmap) + modifiers.push_back(mod + (nmod << 16)); + sequence.push_back(key); + ++length; + + if (curmap) return curmap->lookup(key, mod, this); return -1; @@ -94,18 +93,18 @@ int kb_sequence::addkey(unsigned int key, Prefixes are S-, C-, M- for shift, control, meta \* ---F------------------------------------------------------------------- */ -int kb_sequence::parse(char const * s) +int kb_sequence::parse(string const & s) { - if(!s[0]) return 1; + if (s.empty()) return 1; - int i = 0; + string::size_type i = 0; unsigned int mod = 0, nmod = 0; - while(s[i]) { - if(s[i] && (s[i]) <= ' ') ++i; - if(!s[i]) break; + while (i < s.length()) { + if (s[i] && (s[i]) <= ' ') ++i; + if (i >= s.length()) break; - if(s[i + 1] == '-') { // is implicit that s[i] == true - switch(s[i]) { + if (s[i + 1] == '-') { // is implicit that s[i] == true + switch (s[i]) { case 's': case 'S': mod |= ShiftMask; i += 2; @@ -121,8 +120,8 @@ int kb_sequence::parse(char const * s) default: return i + 1; } - } else if(s[i] == '~' && s[i + 1] && s[i + 2] == '-') { - switch(s[i + 1]) { + } else if (s[i] == '~' && s[i + 1] && s[i + 2] == '-') { + switch (s[i + 1]) { case 's': case 'S': nmod |= ShiftMask; i += 3; @@ -140,12 +139,12 @@ int kb_sequence::parse(char const * s) } } else { string tbuf; - int j = i; - for(; s[j] && s[j] > ' '; ++j) + string::size_type j = i; + for (; j < s.length() && s[j] > ' '; ++j) tbuf += s[j]; // (!!!check bounds :-) KeySym key = XStringToKeysym(tbuf.c_str()); - if(key == NoSymbol) { + if (key == NoSymbol) { lyxerr[Debug::KBMAP] << "kbmap.C: No such keysym: " << tbuf << endl; @@ -167,25 +166,29 @@ int kb_sequence::parse(char const * s) Called by : [user] Purpose : print the currently defined sequence into a string Parameters: buf - string where the result goes - maxlen - length of string (including '\0') when_defined - only print when sequence is real: length > 0. Returns : 0, if ok, -1 if string too long \* ---F------------------------------------------------------------------- */ int kb_sequence::print(string & buf, bool when_defined) const { + //lyxerr << "kb_sequence::print: length is [" << length << "]" << endl; + KeySym key; unsigned int mod; int l = length; - if ( l < 0 && !when_defined ) l = -l; + if (l < 0 && !when_defined ) l = -l; - for(int i = 0; i < l; ++i) { + for (int i = 0; i < l; ++i) { key = sequence[i]; mod = modifiers[i] & 0xffff; + //lyxerr << "kb_sequence::sequence[" << i << "] == [" << key << "]\n" + // << "kb_sequence::modifiers[" << i << "] == [" << mod << "]" + // << endl; printKeysym(key, mod, buf); // RVDK_PATCH_5 - if(i + 1 < l) { // append a blank + if (i + 1 < l) { // append a blank buf += ' '; } } @@ -241,8 +244,8 @@ void kb_sequence::delseq() unsigned int kb_sequence::getsym() const { int l = length; - if(l == 0) return NoSymbol; - if(l < 0) l = -l; + if (l == 0) return NoSymbol; + if (l < 0) l = -l; return sequence[l - 1]; } @@ -257,9 +260,9 @@ unsigned int kb_sequence::getsym() const char kb_sequence::getiso() const { - int c = getsym(); + int const c = getsym(); - if(c > 0xff) + if (c > 0xff) return '\0'; return c; }