X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbsequence.C;h=304b7edf28080550495a084e8717f14c4c983af8;hb=4e4ebe5d4d675348bbd7f75b9ca6424b6727a253;hp=066cd6049ffc374622541c289886deebae3fb6f7;hpb=5349afd7b40fd67b071a31c0b91877484ee6c6f6;p=lyx.git diff --git a/src/kbsequence.C b/src/kbsequence.C index 066cd6049f..304b7edf28 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -4,12 +4,12 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ #include -#include +//#include #include #include "gettext.h" @@ -61,7 +61,11 @@ 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) { + //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(); @@ -99,7 +103,7 @@ int kb_sequence::parse(string const & s) if (s[i] && (s[i]) <= ' ') ++i; if (i >= s.length()) break; - if (s[i + 1] == '-') { // is implicit that s[i] == true + if (i + 1 < s.length() && s[i + 1] == '-') { switch (s[i]) { case 's': case 'S': mod |= ShiftMask; @@ -116,7 +120,8 @@ int kb_sequence::parse(string const & s) default: return i + 1; } - } else if (s[i] == '~' && s[i + 1] && s[i + 2] == '-') { + } else if (i + 2 < s.length() && s[i] == '~' + && s[i + 2] == '-') { switch (s[i + 1]) { case 's': case 'S': nmod |= ShiftMask; @@ -162,13 +167,14 @@ int kb_sequence::parse(string 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; @@ -177,6 +183,9 @@ int kb_sequence::print(string & buf, bool when_defined) const 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 @@ -252,11 +261,36 @@ unsigned int kb_sequence::getsym() const char kb_sequence::getiso() const { - int c = getsym(); + unsigned int const c = getsym(); + + lyxerr[Debug::KBMAP] << "Raw keysym: " + << std::hex << c << std::dec << endl; + lyxerr[Debug::KBMAP] << "byte 3: " + << std::hex << (c & 0x0000FF00) << std::dec + << endl; - if (c > 0xff) + switch (c & 0x0000FF00) { + // latin 1 byte 3 = 0 + case 0x00000000: + return c; + // latin 2 byte 3 = 1 + case 0x00000100: + // latin 3 byte 3 = 2 + case 0x00000200: + // latin 4 byte 3 = 3 + case 0x00000300: + // latin 8 byte 3 = 18 (0x12) + case 0x00001200: + // latin 9 byte 3 = 19 (0x13) + case 0x00001300: + return c & 0x000000FF; + default: return '\0'; - return c; + } + + // not a latin char we know of + // Yes but this is already handled above (JMarc) + //return '\0'; }