-// === kb_sequence methods ================================================
-
-/* ---F+------------------------------------------------------------------ *\
- Function : kb_sequence::addkey
- Called by : [user]
- Purpose : add a key to the sequence, look up in map and return action
- Parameters: key - keysym of key
- mod - modifier mask
- nmod - modifier veto mask (unused now)
- Returns : action or -1 if error (no map defined or key not found)
-\* ---F------------------------------------------------------------------- */
-
-int kb_sequence::addkey(unsigned long 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;
- }
-
- modifiers[length] = mod + (nmod << 16);
- sequence[length++] = key;
-
- if(curmap)
- return curmap->lookup(key, mod, this);
-
- return -1;
-}
-
-
-/* ---F+------------------------------------------------------------------ *\
- Function : kb_sequence::parse
- Called by : [user]
- Purpose : parse a string that holds a key sequence and add the keys
- Parameters: s - string holding the key sequence
- Returns : 0 - if ok, error pos if error
- Note : Keys must be separated with whitespace;
- Use the keysym names used by XStringToKeysym
- Prefixes are S-, C-, M- for shift, control, meta
-\* ---F------------------------------------------------------------------- */
-
-int kb_sequence::parse(char const * s)
-{
- if(!s[0]) return 1;
-
- int i = 0;
- unsigned int mod = 0, nmod = 0;
- while(s[i]) {
- if(s[i] && (s[i]) <= ' ') ++i;
- if(!s[i]) break;
-
- if(s[i + 1] == '-') { // is implicit that s[i] == true
- switch(s[i]) {
- case 's': case 'S':
- mod |= ShiftMask;
- i += 2;
- continue;
- case 'c': case 'C':
- mod |= ControlMask;
- i += 2;
- continue;
- case 'm': case 'M':
- mod |= Mod1Mask;
- i += 2;
- continue;
- default:
- return i + 1;
- }
- } else if(s[i] == '~' && s[i + 1] && s[i + 2] == '-') {
- switch(s[i + 1]) {
- case 's': case 'S':
- nmod |= ShiftMask;
- i += 3;
- continue;
- case 'c': case 'C':
- nmod |= ControlMask;
- i += 3;
- continue;
- case 'm': case 'M':
- nmod |= Mod1Mask;
- i += 3;
- continue;
- default:
- return i + 2;
- }
- } else {
- string tbuf;
- int j = i;
- for(; s[j] && s[j] > ' '; ++j)
- tbuf += s[j]; // (!!!check bounds :-)
-
- KeySym key = XStringToKeysym(tbuf.c_str());
- if(key == NoSymbol) {
- lyxerr[Debug::KBMAP]
- << "kbmap.C: No such keysym: "
- << tbuf << endl;
- return j;
- }
- i = j;
-
- addkey(key, mod, nmod);
- mod = 0;
- nmod = 0;
- }
- }
- return 0;
-}
-
-
-/* ---F+------------------------------------------------------------------ *\
- Function : kb_sequence::print
- 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