// MAY BE REMOVED LATER _S2 #include "keymapWC.h" #include #include #include #include #include "keymap.h" // run with ./keymapWC -d in.kmx bla.dll 0407 out.kmx int dummytest_keymapWC(){ std::cout<< " dummytest_keymapWC is available\t"; return 0; } bool write_US_ToVectorWC( v_WC_3D &vec,std::string language, const char* text) { //std::cout << " in write_US_ToVector \n"; std::string FullPathName = "/usr/share/X11/xkb/symbols/" + language; const char* path = FullPathName.c_str(); //std::cout << " in path"<" and the next xkb_symbol // and then copy all rows starting with "key <" to a v1D-Vector std::cout << " in CreateCompleteRow_USWC "<<" \n"; int buffer_size = 512; char buffer[buffer_size]; char16_t buf16[buffer_size]; bool print_OK = false; const char* key = "key <"; std::string str_txt(text); std::string xbk_mark = "xkb_symbol"; // TODO define folder to store File in std::ofstream KeyboardFile("File_" + language + ".txt"); printf("Keyboard %s\n", text); KeyboardFile << "Keyboard" << text << " "; if (fp) { while (fgets(buffer, buffer_size, fp) != NULL) { std::string str_buf(buffer); //std::cout << " str_buf"< from the shiftstates // 3: push Names/Shiftstates to shift_states and then shiftstates to All_US, our 3D-Vector holding all Elements std::vector delim{' ', '[', ']', '}', ';', '\t', '\n'}; char split_bracel = '{'; char split_char_komma = ','; std::string empty = "--"; // '-' only !!! v_str_1D tokens; v_str_2D shift_states; // go through the whole vector for (int k = 0; k < (int)completeList.size() - 1; k++) { // remove all unwanted char for (int i = 0; i < (int) delim.size(); i++) { completeList[k].erase(remove(completeList[k].begin(), completeList[k].end(), delim[i]), completeList[k].end()); } // only lines with ("key<.. are of interest if (completeList[k].find("key<") != std::string::npos) { //split off the key names std::istringstream split1(completeList[k]); for (std::string each; std::getline(split1, each, split_bracel); tokens.push_back(each)); // replace keys names with number ( with 29,...) int Keycde = replace_PosKey_with_Keycode(tokens[0]); tokens[0] = std::to_string(Keycde); // we use characters a-z, A_Z only at the moment if (foundCharacterInListWC(tokens[0])) { // seperate rest of the vector to its elements and push to 'tokens' std::istringstream split(tokens[1]); tokens.pop_back(); for (std::string each; std::getline(split, each, split_char_komma); tokens.push_back(each)); //printf("### 5 Split_US_To_3D_Vector: tokens: size:%li...tokens[0]-[4]:-name:%s\tShiftstates:%s--%s--%s--%s---.\n", tokens.size(),tokens[0].c_str(),tokens[1].c_str(),tokens[2].c_str(),tokens[3].c_str(),tokens[4].c_str()); // at the moment we only use the first 2 shiftstates (non-shift+shift) so get rid of all others int surplus = tokens.size() - shift_state_count -1; for( int j=0; j < surplus;j++) { tokens.pop_back(); } // now push result to shift_states shift_states.push_back(tokens); } tokens.clear(); } } all_US.push_back(shift_states); if ( all_US.size() ==0) { printf("ERROR: Can't split US to 3D-Vector\n"); return 1; } //printf("### 6 Split_US_To_3D_clearVector %li..%li..%li\n", all_US.size(), all_US[0].size(),all_US[0][0].size()); */ return 0; } /*bool foundCharacterInListWC(std::string tok) { //TOASK Do we need more and which? //US keys: Q W E R T Y U I O P A S D F G H J K L : Z X C V B N M v_str_1D Keysyms { "24","25","26","27","28","29","30","31","32","33","38","39","40","41","42","43","44","45","46","47","52","53","54","55","56","57","58"}; for ( int i =0; i< (int) Keysyms.size();i++) { std::cout << "foundCharacterInList" << i <<"\n"; if( tok == Keysyms[i]) { return true; } } return false; }*/ /*int replace_PosKey_with_KeycodeWC(std::string in) { int out=0; if ( in == "key") out = 49; // TOASK correct ??? else if ( in == "key") out = 10; else if ( in == "key") out = 11; else if ( in == "key") out = 12; else if ( in == "key") out = 13; else if ( in == "key") out = 14; else if ( in == "key") out = 15; else if ( in == "key") out = 16; else if ( in == "key") out = 17; else if ( in == "key") out = 18; else if ( in == "key") out = 19; else if ( in == "key") out = 20; else if ( in == "key") out = 21; else if ( in == "key") out = 24; else if ( in == "key") out = 25; else if ( in == "key") out = 26; else if ( in == "key") out = 27; else if ( in == "key") out = 28; else if ( in == "key") out = 29; else if ( in == "key") out = 30; else if ( in == "key") out = 31; else if ( in == "key") out = 32; else if ( in == "key") out = 33; else if ( in == "key") out = 34; else if ( in == "key") out = 35; else if ( in == "key") out = 38; else if ( in == "key") out = 39; else if ( in == "key") out = 40; else if ( in == "key") out = 41; else if ( in == "key") out = 42; else if ( in == "key") out = 43; else if ( in == "key") out = 44; else if ( in == "key") out = 45; else if ( in == "key") out = 46; else if ( in == "key") out = 47; else if ( in == "key") out = 48; else if ( in == "key") out = 49; else if ( in == "key") out = 52; else if ( in == "key") out = 53; else if ( in == "key") out = 54; else if ( in == "key") out = 55; else if ( in == "key") out = 56; else if ( in == "key") out = 57; else if ( in == "key") out = 58; else if ( in == "key") out = 59; else if ( in == "key") out = 60; else if ( in == "key") out = 61; else if ( in == "key") out = 62; //TOASK correct ??? else if ( in == "key") out = 51; //TOASK correct ??? return out; }*/ bool append_other_ToVectorWC(v_WC_3D &All_Vector,GdkKeymap * keymap) { /*b // create a 2D vector all filled with "--" and push to 3D-Vector v_str_2D Other_Vector2D = create_empty_2D(All_Vector[0].size(),All_Vector[0][0].size()); if (Other_Vector2D.size()==0) { printf("ERROR: create empty 2D-Vector failed"); return 1; } All_Vector.push_back(Other_Vector2D); printf("+++++++ dimensions of Vector after append_other_ToVector\t %li..%li..%li\n", All_Vector.size(), All_Vector[0].size(),All_Vector[0][0].size()); if (All_Vector.size()==0) { printf("ERROR: creation of 3D-Vector failed"); return 1; } 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] All_Vector[1][i][0] = All_Vector[0][i][0]; // write this value to 3D- Vector All_Vector[1][i][0+1] = GetKeyvalsFromKeymap(keymap,stoi(All_Vector[1][i][0]),0); //shift state: unshifted:0 All_Vector[1][i][1+1] = GetKeyvalsFromKeymap(keymap,stoi(All_Vector[1][i][0]),1); //shift state: shifted:1 printf(" Keycodes US->Other: %d(US): %s %s ---- (other):%s, \n",stoi(All_Vector[1][i][0]),All_Vector[0][i][1].c_str(),All_Vector[0][i][2].c_str(),All_Vector[1][i][1].c_str()); } */ return 0; } v_WC_2D create_empty_2DWC( int dim_rows,int dim_shifts) { char16_t empty = u'-'; v_WC_1D shifts; v_WC_2D all; for ( int i=0; i< dim_rows;i++) { for ( int j=0; j< dim_shifts;j++) { shifts.push_back(empty); } all.push_back(shifts); shifts.clear(); } return all; } int GetKeyvalsFromKeymapWC(GdkKeymap *keymap, guint keycode, int shift_state_pos) { GdkKeymapKey *maps; guint *keyvals; gint count; int out; 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; if (!(shift_state_pos < count)) return 0; out = keyvals[shift_state_pos]; g_free(keyvals); g_free(maps); return out; } bool extract_differenceWC( v_WC_3D &All_Vector) { /* // TODO define which Folder; find better name std::ofstream Map_File("Map_US.txt"); std::string diff =" "; printf("-----------------------------------------------------------------------------------------------------------------------------------------------\n"); std::cout << "Nr of \n" ; std::cout << "Key: " << "\t Character US (no shift) " << " Character US (shift) "<< "\t\tCharacter other (no shift)" << "\tCharacter other (shift) difference \n" ; printf("-----------------------------------------------------------------------------------------------------------------------------------------------\n"); Map_File <<"--------------------------------------------------------------------------------------------------------------------------------------------\n"; Map_File << "Nr of \n" ; Map_File << "Key: " << "\t Character US (no shift) " << " Character US (shift) "<< "\t\tCharacter other (no shift)" << "\tCharacter other (shift) difference \n" ; Map_File <<"--------------------------------------------------------------------------------------------------------------------------------------------\n"; for ( int k=0; k<(int)All_Vector[0].size(); k++) { if (All_Vector[0][k][1] == All_Vector[1][k][1]) diff =" "; else diff =" *** "; std::cout << All_Vector[0][k][0] << "\t " <<+(*(All_Vector[0][k][1].c_str()))<< "\t("<< All_Vector[0][k][1] <<")"< Other: "; // find correct row of char in US for( int i=0; i< (int) All_Vector[0].size();i++) { for( int j=1; j< (int)All_Vector[0][0].size();j++) { //std::cout << "see and compare: "<< "All_Vector[0]["< Other: "; //std::cout << "US -> Other: "<< std::setw(5)< Other: (" << in << ": no match)\n"; return u'-';*/ } char16_t get_US_Char_FromOtherWC(char16_t in , v_WC_3D &All_Vector) { /*char16_t diff; // find correct row of char in other for( int i=0; i< (int)All_Vector[1].size();i++) { for( int j=1; j< (int)All_Vector[1][0].size();j++) { if ( All_Vector[1][i][j] == in ) { if ( All_Vector[0][i][j] != All_Vector[1][i][j]) diff = u'*'; std::wcout << "Other -> US: "<< std::setw(5)< US: (" << in << ": no match)\n"; return u'-';*/ } char16_t getKeyNrOf_USCharWC(char16_t in , v_WC_3D &All_Vector) { /*// find correct row of char in US for( int i=0; i< (int)All_Vector[0].size();i++) { for( int j=1; j< (int)All_Vector[0][0].size();j++) { if ( All_Vector[0][i][j] == in ) { std::wcout << u"KeyNr of US char: \t"<< All_Vector[0][i][j] << u" -> " << All_Vector[0][i][0] << u"\n"; return All_Vector[0][i][0] ; } } } return u'-';*/ } char16_t getKeyNrOf_OtherCharWC(char16_t in , v_str_3D &All_Vector) { /* // find correct row of char in US for( int i=0; i< (int)All_Vector[1].size();i++) { for( int j=1; j< (int)All_Vector[1][0].size();j++) { if ( All_Vector[1][i][j] == in ) { std::wcout << u"KeyNr of Other char : \t"<< All_Vector[1][i][j] << u" -> " << All_Vector[1][i][0] <1) std::wcout << " row 1 (Other).."<< V[1][k][0]<< ".." << V[1][k][1]<< ".."<< "..\n" ; } printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); return true; } void test_in_outWC(v_WC_3D &All_Vector) { /*std::string diff; printf("-----------------------------------------------------------------------------------------------------------------------------------------------\n"); //checks mapping between US and other std::string a = get_Other_Char_FromUS( "z", All_Vector); std::string aa = get_Other_Char_FromUS( "Z", All_Vector); std::string aaa = get_Other_Char_FromUS( "y", All_Vector); std::string aaaa = get_Other_Char_FromUS( "Y", All_Vector); std::string b = get_US_Char_FromOther( "z", All_Vector); std::string bb = get_US_Char_FromOther( "Z", All_Vector); std::string bbb = get_US_Char_FromOther( "y", All_Vector); std::string bbbb = get_US_Char_FromOther( "Y", All_Vector); std::string c = getKeyNrOf_OtherChar( "z", All_Vector); std::string cc = getKeyNrOf_OtherChar( "Z", All_Vector); std::string ccc = getKeyNrOf_OtherChar( "y", All_Vector); std::string cccc = getKeyNrOf_OtherChar( "Y", All_Vector); std::string d = getKeyNrOf_USChar( "z", All_Vector); std::string dd = getKeyNrOf_USChar( "Z", All_Vector); std::string ddd = getKeyNrOf_USChar( "y", All_Vector); std::string dddd = getKeyNrOf_USChar( "Y", All_Vector); std::cout << "get_Other_Char_FromUS z-Z-y-Y: " << ".." << a<< ".." <