diff --git a/linux/mcompile/keymap/deadkey.cpp b/linux/mcompile/keymap/deadkey.cpp index 0164919a4a..3fd95103ff 100755 --- a/linux/mcompile/keymap/deadkey.cpp +++ b/linux/mcompile/keymap/deadkey.cpp @@ -3,9 +3,9 @@ v_dw_1D createLine(std::wstring first, std::wstring second, KMX_DWORD number, std::wstring nameresult) { v_dw_1D line; - line.push_back(convertNamesToIntegerValue(first)); - line.push_back(convertNamesToIntegerValue(second)); - //line.push_back(convertNamesToIntegerValue(nameresult)); + line.push_back(convertNamesToDWORDValue(first)); + line.push_back(convertNamesToDWORDValue(second)); + //line.push_back(convertNamesToDWORDValue(nameresult)); line.push_back(number); return line; } @@ -414,8 +414,12 @@ void create_DKTable(v_dw_2D & dk_ComposeTable) { line = createLine(L"dead_circumflex", L"space", 0x005E, L"CIRCUMFLEX_ACCENT"); dk_ComposeTable.push_back(line); line.clear(); + line = createLine(L"dead_acute", L"space", 0x0027, L"APOSTROPHE"); dk_ComposeTable.push_back(line); line.clear(); + /*line = createLine(L"dead_acute", L"space", 0x00B4, L"ACUTE_ACCENT"); + dk_ComposeTable.push_back(line); line.clear();*/ + line = createLine(L"dead_grave", L"space", 0x0060, L"GRAVE_ACCENT"); dk_ComposeTable.push_back(line); line.clear(); line = createLine(L"dead_breve", L"space", 0x02D8, L"BREVE"); diff --git a/linux/mcompile/keymap/keymap.cpp b/linux/mcompile/keymap/keymap.cpp index 8689682efe..88d1f0ec67 100755 --- a/linux/mcompile/keymap/keymap.cpp +++ b/linux/mcompile/keymap/keymap.cpp @@ -1,16 +1,17 @@ #include "keymap.h" #include +// unmodified, shift, RALT, shift+RALT -int map_VKShiftState_to_Lin(int VKShiftState) { +int map_VKShiftState_to_LinModifier(int VKShiftState) { if (VKShiftState == 0 ) return 0; /* 0000 0000 */ else if (VKShiftState == 16) return 1; /* 0001 0000 */ else if (VKShiftState == 9 ) return 2; /* 0000 1001 */ else if (VKShiftState == 25) return 3; /* 0001 1001 */ - else return VKShiftState; + else return VKShiftState; } -KMX_DWORD convertNamesToIntegerValue(std::wstring tok_wstr) { +KMX_DWORD convertNamesToDWORDValue(std::wstring tok_wstr) { // more on https://manpages.ubuntu.com/manpages/jammy/man3/keysyms.3tk.html std::map first; @@ -93,8 +94,8 @@ int createOneVectorFromBothKeyboards(v_dw_3D &All_Vector,GdkKeymap *keymap) { } // add contents of other keyboard to All_Vector - if( append_other_ToVector(All_Vector,keymap)) { - wprintf(L"ERROR: can't append Other ToVector \n"); + if( append_underlying_ToVector(All_Vector,keymap)) { + wprintf(L"ERROR: can't append underlying ToVector \n"); return 2; } return 0; @@ -271,7 +272,7 @@ int split_US_To_3D_Vector(v_dw_3D &all_US,v_str_1D completeList) { for ( int i = 1; i< (int) tokens.size();i++) { // replace a name with a single character ( a -> a ; equal -> = ) - tokens_int = convertNamesToIntegerValue( wstring_from_string(tokens[i])); + tokens_int = convertNamesToDWORDValue( wstring_from_string(tokens[i])); tokens_dw.push_back(tokens_int); } @@ -304,16 +305,16 @@ v_dw_2D create_empty_2D_Vector( int dim_rows,int dim_ss) { return Vector_2D; } -int append_other_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) { +int append_underlying_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) { // create a 2D vector all filled with " " and push to 3D-Vector - v_dw_2D Other_Vector2D = create_empty_2D_Vector(All_Vector[0].size(),All_Vector[0][0].size()); + v_dw_2D underlying_Vector2D = create_empty_2D_Vector(All_Vector[0].size(),All_Vector[0][0].size()); - if (Other_Vector2D.size() == 0) { + if (underlying_Vector2D.size() == 0) { wprintf(L"ERROR: can't create empty 2D-Vector\n"); return 1; } - All_Vector.push_back(Other_Vector2D); + All_Vector.push_back(underlying_Vector2D); if (All_Vector.size() < 2) { wprintf(L"ERROR: creation of 3D-Vector failed\n"); @@ -322,10 +323,10 @@ int append_other_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) { for(int i =0; i< (int) All_Vector[1].size();i++) { - // get key name US stored in [0][i][0] and copy to name in "other"-block[1][i][0] + // get key name US stored in [0][i][0] and copy to name in "underlying"-block[1][i][0] All_Vector[1][i][0] = All_Vector[0][i][0]; - // get Keyvals of this key and copy to unshifted/shifted in "other"-block[1][i][1] / block[1][i][2] + // get Keyvals of this key and copy to unshifted/shifted in "underlying"-block[1][i][1] / block[1][i][2] All_Vector[1][i][0+1] = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,All_Vector[0][i][0],0); //shift state: unshifted:0 All_Vector[1][i][1+1] = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,All_Vector[0][i][0],1); //shift state: shifted:1 } @@ -362,8 +363,7 @@ bool IsKeymanUsedChar(int KV) { } - -std::wstring convert_DeadkeyValues_ToChar(int in) { +std::wstring convert_DeadkeyValues_ToWstr(int in) { KMX_DWORD lname; @@ -381,7 +381,7 @@ std::wstring convert_DeadkeyValues_ToChar(int in) { return std::wstring(1, in); } - lname = convertNamesToIntegerValue( wstring_from_string(long_name)); // 65106 => "dead_circumflex " => 94 => "^" + lname = convertNamesToDWORDValue( wstring_from_string(long_name)); // 65106 => "dead_circumflex " => 94 => "^" if (lname != returnIfCharInvalid) { return std::wstring(1, lname ); @@ -389,8 +389,7 @@ std::wstring convert_DeadkeyValues_ToChar(int in) { else return L"\0"; } -//_S2 REview and change?? -//_S2 REview and change?? +//_S2 ToDo REview and change?? std::u16string convert_DeadkeyValues_To_U16str(int in) { KMX_DWORD lname; @@ -409,7 +408,7 @@ std::u16string convert_DeadkeyValues_To_U16str(int in) { return CodePointToString_16(in-0x1000000); // it's a descriptive name like "dead_circumflex" - lname = convertNamesToIntegerValue( wstring_from_string(long_name)); // "dead_circumflex" => 94 => "^" + lname = convertNamesToDWORDValue( wstring_from_string(long_name)); // "dead_circumflex" => 94 => "^" if (lname != returnIfCharInvalid) { return std::u16string(1, lname ); @@ -420,6 +419,7 @@ std::u16string convert_DeadkeyValues_To_U16str(int in) { return u"\0"; } +// base function to get keyvals int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps) { GdkModifierType consumed; @@ -507,7 +507,6 @@ int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss return (int) *keyvals; } -// _S2 TODO KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky) { GdkKeymapKey *maps; guint *keyvals; @@ -523,44 +522,8 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap if (!(shift_state_pos <= count)) return 0; -// _S2 94 as variable/const - if (!(keycode <= 94)) - return 0; - // _S2 TODO take caps to this function - // _S2 TODO take caps to this function - // here I get all kvals: normal char , my Deadkeys, allothr DK - KMX_DWORD All_Keyvals = KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), 0); - if(( (All_Keyvals >= deadkey_min) && (All_Keyvals <= deadkey_max))) - deadkey = All_Keyvals; - - dky = (PKMX_WCHAR) (convert_DeadkeyValues_To_U16str((int) deadkey)).c_str(); - out = KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0); - - g_free(keyvals); - g_free(maps); - - return out; -} - -// _S2 TODO -KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky) { - GdkKeymapKey *maps; - guint *keyvals; - gint count; - KMX_DWORD out; - KMX_DWORD deadkey=0; - - - if (!gdk_keymap_get_entries_for_keycode(keymap, keycode, &maps, &keyvals, &count)) - return 0; - //if(!gdk_wayland_keymap_get_entries_for_keycode(keymap, keycode, &maps, &keyvals, &count)) - // return 0; https://codebrowser.dev/gtk/gtk/gdk/wayland/gdkkeys-wayland.c.html - - if (!(shift_state_pos <= count)) - return 0; -// _S2 94 as variable/const - if (!(keycode <= 94)) + if (!(keycode <= keycode_max)) return 0; // _S2 TODO take caps to this function @@ -568,23 +531,8 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(GdkKeymap *ke KMX_DWORD All_Keyvals = KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), 0); if(( (All_Keyvals >= deadkey_min) && (All_Keyvals <= deadkey_max))) deadkey = All_Keyvals; - // _S2 check if naming is correct: does get_char... return a char or a string or a DWORD;...? + // _S2 TODO check if naming is correct: does get_char... return a char or a string or a DWORD;...? dky = (PKMX_WCHAR) (convert_DeadkeyValues_To_U16str((int) deadkey)).c_str(); -/* -// _S2 ToDo -KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ - - KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps); - - // _S2 AHA output for dk4-12 at the top after dk... from here - if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys - return 0xFFFF; - else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range - return 0xFFFE; - else // usable char - return keyvals_dw; -} -*/ g_free(keyvals); g_free(maps); @@ -596,15 +544,6 @@ KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(Gdk return 0xFFFE; else // usable char return All_Keyvals; - - - - - - - //out = KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0); - - } KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos) { @@ -619,10 +558,10 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap if (!(shift_state_pos <= count)) return 0; - if (!(keycode <= 94)) + if (!(keycode <= keycode_max)) return 0; - out = KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0); + out = KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0); g_free(keyvals); g_free(maps); @@ -630,54 +569,34 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap return out; } -// _S2 ToDo -KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ - - KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps); +// _S2 same as KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK ?? +KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_underlying, PKMX_WCHAR DeadKey) { - // _S2 AHA output for dk4-12 at the top after dk... from here - if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys - if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys - return 0xFFFF; - else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range - return 0xFFFE; - else // usable char - return keyvals_dw; -} -// _S2 remove term _other and use underlying instead -KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey) { - //takes keymap, shift, scanCode - //fills ref deadkey - //returns character(KMX_DWORD) -PKMX_WCHAR dd; - KMX_DWORD keyvals_dw = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(keymap, SC_OTHER, map_VKShiftState_to_Lin(VKShiftState), dd); + PKMX_WCHAR dky; + KMX_DWORD keyvals_dw = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap, SC_underlying, map_VKShiftState_to_LinModifier(VKShiftState), dky); - - - -// _S2 rename dd - if((keyvals_dw >= deadkey_min) && (keyvals_dw >= deadkey_max)) { - *DeadKey = *dd; + if(keyvals_dw >= deadkey_min) { + *DeadKey = *dky; return 0xFFFF; } else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range return 0xFFFE; else // usable char return keyvals_dw; - } -KMX_DWORD KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ +// _S2 why dio I need this function after all?? +KMX_DWORD KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ return (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps); } -std::wstring KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ +std::wstring KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){ // _S2 QUESTION skip ss 2+3 remove?? int keyvals_int= KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps); - return convert_DeadkeyValues_ToChar(keyvals_int); + return convert_DeadkeyValues_ToWstr(keyvals_int); } // _S2 ToDo // _use gdk_keymap_translate_keyboard_state of other function @@ -728,7 +647,7 @@ KMX_DWORD KMX_get_KeyCodeUnderlying_From_VKUS( KMX_DWORD VK_US) { KMX_DWORD KMX_get_KeyCodeUnderlying_From_KeycodeUS_GDK(GdkKeymap *keymap, v_dw_3D &All_Vector,KMX_DWORD KC_US, ShiftState ss, int caps) { KMX_DWORD Character; - std::wstring ws = KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, KC_US, ss, caps); + std::wstring ws = KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, KC_US, ss, caps); Character = *ws.c_str(); //Find underlying SC of character diff --git a/linux/mcompile/keymap/keymap.h b/linux/mcompile/keymap/keymap.h index 50455c0ddc..0a2c12f976 100755 --- a/linux/mcompile/keymap/keymap.h +++ b/linux/mcompile/keymap/keymap.h @@ -65,14 +65,15 @@ const KMX_DWORD KMX_VKMap[] = { }; static KMX_DWORD returnIfCharInvalid = 0; +static KMX_DWORD keycode_max =94; static KMX_DWORD deadkey_min = 0xfe50; static KMX_DWORD deadkey_max = 0xfe93; -int map_VKShiftState_to_Lin(int VKShiftState); +int map_VKShiftState_to_LinModifier(int VKShiftState); // takes a std::wstring (=contents of line symbols-file ) and returns the (int) value of the character -KMX_DWORD convertNamesToIntegerValue(std::wstring tok_wstr); +KMX_DWORD convertNamesToDWORDValue(std::wstring tok_wstr); // create a Vector with all entries of both keymaps+ keymap int createOneVectorFromBothKeyboards(v_dw_3D &All_Vector,GdkKeymap *keymap); @@ -93,8 +94,8 @@ int split_US_To_3D_Vector(v_dw_3D &all_US, v_str_1D completeList); // create an empty 2D vector containing "--" in all fields v_dw_2D create_empty_2D_Vector(int dim_rows, int dim_shifts); -// append characters using GDK to 3D-Vector (Data for Other Language on [1][ ][ ] ) -int append_other_ToVector(v_dw_3D &All_Vector, GdkKeymap *keymap); +// append characters using GDK to 3D-Vector (Data for underlying Language on [1][ ][ ] ) +int append_underlying_ToVector(v_dw_3D &All_Vector, GdkKeymap *keymap); // initialize GDK bool InitializeGDK(GdkKeymap **keymap,int argc, gchar *argv[]); @@ -503,34 +504,27 @@ const UINT ScanCodeToUSVirtualKey[128] = { bool IsKeymanUsedChar(int KV); // take deadkey-value (e.g.65106) and return wstring (e.g. '^' ) -std::wstring convert_DeadkeyValues_ToChar(int in); +std::wstring convert_DeadkeyValues_ToWstr(int in); std::u16string convert_DeadkeyValues_To_U16str(int in); - - // uses gdk_keymap_translate_keyboard_state to get keyval int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps); -KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky); KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos); // returns KeySyms for a given key (for unshifted: finds the Keysym according to Shiftstate e.g. a;A or 1;! ) -std::wstring KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint VK, ShiftState ss, int caps); -KMX_DWORD KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps); +std::wstring KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint VK, ShiftState ss, int caps); +KMX_DWORD KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps); -// _S2 TODO returns char or FFFF / FFFE ???? -KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps); -KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey); +KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_underlying, PKMX_WCHAR DeadKey); - - -// return the VirtualKey of the Other Keyboard for given Scancode using GDK +// return the VirtualKey of the underlying Keyboard for given Scancode using GDK KMX_DWORD KMX_get_VKUS_From_KeyCodeUnderlying_GDK( GdkKeymap *keymap, KMX_DWORD scanCode); -// return the Keycode of the Other Keyboard for given VK_US +// return the Keycode of the underlying Keyboard for given VK_US KMX_DWORD KMX_get_KeyCodeUnderlying_From_VKUS( KMX_DWORD VK_US); -// return the Keycode of the Other Keyboard for given VK_US using GDK +// return the Keycode of the underlying Keyboard for given VK_US using GDK KMX_DWORD KMX_get_KeyCodeUnderlying_From_KeycodeUS_GDK(GdkKeymap *keymap, v_dw_3D &All_Vector,KMX_DWORD KC_US, ShiftState ss, int caps); // converts codePoint to wstring diff --git a/linux/mcompile/keymap/mc_import_rules.cpp b/linux/mcompile/keymap/mc_import_rules.cpp index 6c588f0def..f0675ff31e 100755 --- a/linux/mcompile/keymap/mc_import_rules.cpp +++ b/linux/mcompile/keymap/mc_import_rules.cpp @@ -75,11 +75,11 @@ int KMX_ToUnicodeEx(guint keycode, const BYTE *lpKeyState, PKMX_WCHAR pwszBuff, if (!(shift_state_pos <= count)) return 0; - if (!(keycode <= 94)) + if (!(keycode <= keycode_max)) return 0; - std::wstring character= KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, keycode, ShiftState(shift_state_pos), caps); - pwszBuff[0]= * (PKMX_WCHAR) u16string_from_wstring(character).c_str(); + std::wstring str= KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, keycode, ShiftState(shift_state_pos), caps); + pwszBuff[0]= * (PKMX_WCHAR) u16string_from_wstring(str).c_str(); KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), caps); @@ -561,7 +561,7 @@ bool KMX_ImportRules(LPKMX_KEYBOARD kp,v_dw_3D &All_Vector, GdkKeymap **keymap, continue; } sbBuffer[rc] = 0; - //rgKey[iKey]->KMX_SetShiftState(ss, KeyVal_Other, false, (caps==0)); + //rgKey[iKey]->KMX_SetShiftState(ss, sbBuffer, false, (caps==0)); rgKey[iKey]->KMX_SetShiftState(ss, sbBuffer, false, (caps)); //_S2 INFO } } diff --git a/linux/mcompile/keymap/mcompile.cpp b/linux/mcompile/keymap/mcompile.cpp index c3ea5678b2..a4b36557bd 100755 --- a/linux/mcompile/keymap/mcompile.cpp +++ b/linux/mcompile/keymap/mcompile.cpp @@ -226,7 +226,7 @@ void KMX_ReportUnconvertedKeyboardRules(LPKMX_KEYBOARD kbd) { } void KMX_TranslateDeadkeyKey(LPKMX_KEY key, KMX_WCHAR deadkey, KMX_WORD vk, UINT shift, KMX_WORD ch) { -// _S2 INFO this produces a different output due to different layouts for Lin<-> win ( foe the same language!!) +// _S2 INFO this produces a different output due to different layouts for Lin<-> win ( for the same language!!) if((key->ShiftFlags == 0 || key->ShiftFlags & VIRTUALCHARKEY) && key->Key == ch) { @@ -394,7 +394,7 @@ void KMX_ConvertDeadkey(LPKMX_KEYBOARD kbd, KMX_WORD vk, UINT shift, KMX_WCHAR d pd_S2=pdk; //pdd_S2=pdk; // Look up the ch - UINT vkUnderlying = KMX_get_VKUS_From_VKUnderlying_VEC(All_Vector, *pdk); + UINT vkUnderlying = KMX_get_CharUS_From_VKUnderlying_VEC(All_Vector, *pdk); KMX_TranslateDeadkeyKeyboard(kbd, dkid, vkUnderlying, *(pdk+1), *(pdk+2)); pdk+=3; @@ -425,7 +425,7 @@ KMX_BOOL KMX_SetKeyboardToPositional(LPKMX_KEYBOARD kbd) { KMX_BOOL KMX_DoConvert(LPKMX_KEYBOARD kbd, KMX_BOOL bDeadkeyConversion, gint argc, gchar *argv[]) { - KMX_WCHAR DeadKey; + KMX_WCHAR DeadKey=0; if(!KMX_SetKeyboardToPositional(kbd)) return FALSE; @@ -460,16 +460,8 @@ KMX_BOOL KMX_DoConvert(LPKMX_KEYBOARD kbd, KMX_BOOL bDeadkeyConversion, gint arg // win goes via VK, Lin goes via SC - KMX_WCHAR DeadKey1=0; - DeadKey=0; UINT scUnderlying = KMX_get_SCUnderlying_From_VKUS(KMX_VKMap[i]); KMX_WCHAR ch = KMX_get_CharUnderlying_From_SCUnderlying_GDK(keymap, VKShiftState[j], scUnderlying, &DeadKey); - KMX_WCHAR ch1 = KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(keymap, VKShiftState[j], scUnderlying, &DeadKey1); - - if( ch!=ch1) - wprintf(L"IS DIFFERENT!!!! %i <--> %i\n", ch,ch1); - if( DeadKey!=DeadKey1) - wprintf(L"DDDDKKKK IS DIFFERENT!!!! %i <--> %i\n", DeadKey,DeadKey1); //wprintf(L"--- VK_%d -> SC_ [%c] dk=%d ( ss %i) \n", VKMap[i], ch == 0 ? 32 : ch, DeadKey, VKShiftState[j]); @@ -509,38 +501,25 @@ void KMX_LogError(const KMX_WCHART* m1,int m2, LPKMX_KEY key) { } */ -// takes VK of US keyboard and returns SC of OTHER keyboard +// _S2 why are those not in keymap.cpp/h +// takes VK of US keyboard and returns SC of underlying keyboard UINT KMX_get_SCUnderlying_From_VKUS(KMX_DWORD VirtualKeyUS) { UINT SC_US = 8 + USVirtualKeyToScanCode[VirtualKeyUS]; - UINT SC_OTHER = SC_US; // not neccessary but to understand what we do - return SC_OTHER; + UINT SC_underlying = SC_US; // not neccessary but to understand what we do + return SC_underlying; } -KMX_WCHAR KMX_get_VKUS_From_VKUnderlying_VEC(v_dw_3D All_Vector, KMX_DWORD VK_OTHER) { +KMX_WCHAR KMX_get_CharUS_From_VKUnderlying_VEC(v_dw_3D All_Vector, KMX_DWORD VK_underlying) { KMX_DWORD VK_US; for( int i=0; i< (int)All_Vector[0].size()-1 ;i++) { for( int j=1; j< (int)All_Vector[0][0].size();j++) { - if ( ( All_Vector[0][i][j] == VK_OTHER ) ) { + if ( ( All_Vector[0][i][j] == VK_underlying ) ) { VK_US = All_Vector[1][i][j];; return VK_US; } } } - return VK_OTHER; -} - -// takes SC of underlying keyboard and returns character of underlying keyboard with shiftstate VKShiftState[j] or deadkey -KMX_WCHAR KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey) { - - PKMX_WCHAR dky; - int VKShiftState_lin = map_VKShiftState_to_Lin(VKShiftState); - KMX_DWORD KeyvalOther = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,SC_OTHER, VKShiftState_lin, dky); -// _S2 < or > - if ((KeyvalOther >= deadkey_min) && (KeyvalOther >= deadkey_max)){ - *DeadKey = *dky; - return 0xFFFF; - } - return (KMX_WCHAR) KeyvalOther; + return VK_underlying; } int KMX_GetDeadkeys(v_dw_2D & dk_Table, KMX_WORD DeadKey, KMX_WORD *OutputPairs, GdkKeymap* keymap) { diff --git a/linux/mcompile/keymap/mcompile.h b/linux/mcompile/keymap/mcompile.h index 9da0aa92a4..f7b631993b 100755 --- a/linux/mcompile/keymap/mcompile.h +++ b/linux/mcompile/keymap/mcompile.h @@ -42,10 +42,7 @@ PKMX_WCHAR KMX_incxstr(PKMX_WCHAR p); UINT KMX_get_SCUnderlying_From_VKUS(KMX_DWORD VirtualKeyUS); -// _S2 why is this function not in keymap.cpp/h -KMX_WCHAR KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey); - -KMX_WCHAR KMX_get_VKUS_From_VKUnderlying_VEC(v_dw_3D All_Vector,KMX_DWORD SC_US); +KMX_WCHAR KMX_get_CharUS_From_VKUnderlying_VEC(v_dw_3D All_Vector,KMX_DWORD SC_US); int KMX_GetDeadkeys(v_dw_2D & dk_Table, KMX_WORD DeadKey, KMX_WORD *OutputPairs, GdkKeymap* keymap);