mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-06 14:07:32 +00:00
feat(linux): res. conf mcompile-dk rename more functions
This commit is contained in:
parent
80e044e106
commit
cdeeec9e63
6 changed files with 67 additions and 174 deletions
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -1,16 +1,17 @@
|
|||
#include "keymap.h"
|
||||
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
// 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<std::wstring, KMX_DWORD > 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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue