Loading native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object, ProximityInfo *proximityInfo = new ProximityInfo( localeStr, maxProximityCharsSize, displayWidth, displayHeight, gridWidth, gridHeight, mostCommonkeyWidth, (const uint32_t*)proximityChars, (const int32_t*)proximityChars, keyCount, (const int32_t*)keyXCoordinates, (const int32_t*)keyYCoordinates, (const int32_t*)keyWidths, (const int32_t*)keyHeights, (const int32_t*)keyCharCodes, (const float*)sweetSpotCenterXs, (const float*)sweetSpotCenterYs, Loading native/src/additional_proximity_chars.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -19,23 +19,23 @@ namespace latinime { const std::string AdditionalProximityChars::LOCALE_EN_US("en"); const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { 'e', 'i', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { 'a', 'i', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { 'a', 'e', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { 'a', 'e', 'i', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { 'a', 'e', 'i', 'o' }; } native/src/additional_proximity_chars.h +12 −10 Original line number Diff line number Diff line Loading @@ -20,29 +20,31 @@ #include <stdint.h> #include <string> #include "defines.h" namespace latinime { class AdditionalProximityChars { private: static const std::string LOCALE_EN_US; static const int EN_US_ADDITIONAL_A_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_A[]; static const int32_t EN_US_ADDITIONAL_A[]; static const int EN_US_ADDITIONAL_E_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_E[]; static const int32_t EN_US_ADDITIONAL_E[]; static const int EN_US_ADDITIONAL_I_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_I[]; static const int32_t EN_US_ADDITIONAL_I[]; static const int EN_US_ADDITIONAL_O_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_O[]; static const int32_t EN_US_ADDITIONAL_O[]; static const int EN_US_ADDITIONAL_U_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_U[]; static const int32_t EN_US_ADDITIONAL_U[]; static bool isEnLocale(const std::string *locale_str) { return locale_str && locale_str->size() >= LOCALE_EN_US.size() && locale_str->compare(0, LOCALE_EN_US.size(), LOCALE_EN_US); && LOCALE_EN_US.compare(0, LOCALE_EN_US.size(), *locale_str); } public: static int getAdditionalCharsSize(const std::string* locale_str, const uint16_t c) { static int getAdditionalCharsSize(const std::string* locale_str, const int32_t c) { if (!isEnLocale(locale_str)) { return 0; } Loading @@ -62,7 +64,7 @@ class AdditionalProximityChars { } } static const uint32_t* getAdditionalChars(const std::string* locale_str, const uint32_t c) { static const int32_t* getAdditionalChars(const std::string *locale_str, const int32_t c) { if (!isEnLocale(locale_str)) { return 0; } Loading @@ -82,7 +84,7 @@ class AdditionalProximityChars { } } static bool hasAdditionalChars(const std::string* locale_str, const uint32_t c) { static bool hasAdditionalChars(const std::string *locale_str, const int32_t c) { return getAdditionalCharsSize(locale_str, c) > 0; } }; Loading native/src/defines.h +2 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ static inline void prof_out(void) { #define DEBUG_NODE DEBUG_DICT_FULL #define DEBUG_TRACE DEBUG_DICT_FULL #define DEBUG_PROXIMITY_INFO false #define DEBUG_PROXIMITY_CHARS false #define DEBUG_CORRECTION false #define DEBUG_CORRECTION_FREQ false #define DEBUG_WORDS_PRIORITY_QUEUE false Loading @@ -128,6 +129,7 @@ static inline void prof_out(void) { #define DEBUG_NODE false #define DEBUG_TRACE false #define DEBUG_PROXIMITY_INFO false #define DEBUG_PROXIMITY_CHARS false #define DEBUG_CORRECTION false #define DEBUG_CORRECTION_FREQ false #define DEBUG_WORDS_PRIORITY_QUEUE false Loading native/src/proximity_info.cpp +60 −20 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ inline void copyOrFillZero(void *to, const void *from, size_t size) { ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximityCharsSize, const int keyboardWidth, const int keyboardHeight, const int gridWidth, const int gridHeight, const int mostCommonKeyWidth, const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates, const int32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates, const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights, const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs, const float *sweetSpotRadii) Loading @@ -54,7 +54,7 @@ ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximity mInputXCoordinates(0), mInputYCoordinates(0), mTouchPositionCorrectionEnabled(false) { const int proximityGridLength = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE; mProximityCharsArray = new uint32_t[proximityGridLength]; mProximityCharsArray = new int32_t[proximityGridLength]; if (DEBUG_PROXIMITY_INFO) { AKLOGI("Create proximity info array %d", proximityGridLength); } Loading Loading @@ -148,35 +148,43 @@ int ProximityInfo::squaredDistanceToEdge(const int keyId, const int x, const int } void ProximityInfo::calculateNearbyKeyCodes( const int x, const int y, const uint32_t primaryKey, int *inputCodes) { const int x, const int y, const int32_t primaryKey, int *inputCodes) { int insertPos = 0; inputCodes[insertPos++] = primaryKey; const int startIndex = getStartIndexFromCoordinates(x, y); for (int i = 0; i < MAX_PROXIMITY_CHARS_SIZE; ++i) { const uint32_t c = mProximityCharsArray[startIndex + i]; const int32_t c = mProximityCharsArray[startIndex + i]; if (c < KEYCODE_SPACE || c == primaryKey) { continue; } for (int j = 0; j < KEY_COUNT; ++j) { const bool onKey = isOnKey(j, x, y); const int distance = squaredDistanceToEdge(j, x, y); int keyIndex = getKeyIndex(c); const bool onKey = isOnKey(keyIndex, x, y); const int distance = squaredDistanceToEdge(keyIndex, x, y); if (onKey || distance < MOST_COMMON_KEY_WIDTH_SQUARE) { inputCodes[insertPos++] = c; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } } const int existingProximitySize = insertPos; for (int i = 0; i < existingProximitySize; ++i) { const uint32_t c = inputCodes[i]; const int additionalProximitySize = AdditionalProximityChars::hasAdditionalChars(&mLocaleStr, c); if (additionalProximitySize <= 0) { continue; } const uint32_t* additionalProximityChars = AdditionalProximityChars::getAdditionalChars(&mLocaleStr, c); inputCodes[insertPos++] = ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } const int additionalProximitySize = AdditionalProximityChars::getAdditionalCharsSize(&mLocaleStr, primaryKey); if (additionalProximitySize > 0) { const int32_t* additionalProximityChars = AdditionalProximityChars::getAdditionalChars(&mLocaleStr, primaryKey); for (int j = 0; j < additionalProximitySize; ++j) { const uint32_t ac = additionalProximityChars[j]; const int32_t ac = additionalProximityChars[j]; int k = 0; for (; k < insertPos; ++k) { if ((int)ac == inputCodes[k]) { Loading @@ -187,9 +195,16 @@ void ProximityInfo::calculateNearbyKeyCodes( continue; } inputCodes[insertPos++] = ac; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } } // TODO: calculate additional chars } // Add a delimiter for the proximity characters inputCodes[insertPos] = 0; } // TODO: Calculate nearby codes here. Loading @@ -205,8 +220,30 @@ void ProximityInfo::setInputParams(const int* inputCodes, const int inputLength, mPrimaryInputWord[i] = getPrimaryCharAt(i); } mPrimaryInputWord[inputLength] = 0; if (DEBUG_PROXIMITY_CHARS) { AKLOGI("--- setInputParams"); } for (int i = 0; i < mInputLength; ++i) { const int *proximityChars = getProximityCharsAt(i); const int primaryKey = proximityChars[0]; const int x = xCoordinates[i]; const int y = yCoordinates[i]; if (DEBUG_PROXIMITY_CHARS) { int a = x + y + primaryKey; a += 0; AKLOGI("--- Primary = %c, x = %d, y = %d", primaryKey, x, y); // Keep debug code just in case //int proximities[50]; //for (int m = 0; m < 50; ++m) { //proximities[m] = 0; //} //calculateNearbyKeyCodes(x, y, primaryKey, proximities); //for (int l = 0; l < 50 && proximities[l] > 0; ++l) { //if (DEBUG_PROXIMITY_CHARS) { //AKLOGI("--- native Proximity (%d) = %c", l, proximities[l]); //} //} } for (int j = 0; j < MAX_PROXIMITY_CHARS_SIZE && proximityChars[j] > 0; ++j) { const int currentChar = proximityChars[j]; const int keyIndex = getKeyIndex(currentChar); Loading @@ -219,6 +256,9 @@ void ProximityInfo::setInputParams(const int* inputCodes, const int inputLength, ? EQUIVALENT_CHAR_WITHOUT_DISTANCE_INFO : PROXIMITY_CHAR_WITHOUT_DISTANCE_INFO; } if (DEBUG_PROXIMITY_CHARS) { AKLOGI("--- Proximity (%d) = %c", j, currentChar); } } } } Loading Loading
native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object, ProximityInfo *proximityInfo = new ProximityInfo( localeStr, maxProximityCharsSize, displayWidth, displayHeight, gridWidth, gridHeight, mostCommonkeyWidth, (const uint32_t*)proximityChars, (const int32_t*)proximityChars, keyCount, (const int32_t*)keyXCoordinates, (const int32_t*)keyYCoordinates, (const int32_t*)keyWidths, (const int32_t*)keyHeights, (const int32_t*)keyCharCodes, (const float*)sweetSpotCenterXs, (const float*)sweetSpotCenterYs, Loading
native/src/additional_proximity_chars.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -19,23 +19,23 @@ namespace latinime { const std::string AdditionalProximityChars::LOCALE_EN_US("en"); const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { 'e', 'i', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { 'a', 'i', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { 'a', 'e', 'o', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { 'a', 'e', 'i', 'u' }; const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { const int32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { 'a', 'e', 'i', 'o' }; }
native/src/additional_proximity_chars.h +12 −10 Original line number Diff line number Diff line Loading @@ -20,29 +20,31 @@ #include <stdint.h> #include <string> #include "defines.h" namespace latinime { class AdditionalProximityChars { private: static const std::string LOCALE_EN_US; static const int EN_US_ADDITIONAL_A_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_A[]; static const int32_t EN_US_ADDITIONAL_A[]; static const int EN_US_ADDITIONAL_E_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_E[]; static const int32_t EN_US_ADDITIONAL_E[]; static const int EN_US_ADDITIONAL_I_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_I[]; static const int32_t EN_US_ADDITIONAL_I[]; static const int EN_US_ADDITIONAL_O_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_O[]; static const int32_t EN_US_ADDITIONAL_O[]; static const int EN_US_ADDITIONAL_U_SIZE = 4; static const uint32_t EN_US_ADDITIONAL_U[]; static const int32_t EN_US_ADDITIONAL_U[]; static bool isEnLocale(const std::string *locale_str) { return locale_str && locale_str->size() >= LOCALE_EN_US.size() && locale_str->compare(0, LOCALE_EN_US.size(), LOCALE_EN_US); && LOCALE_EN_US.compare(0, LOCALE_EN_US.size(), *locale_str); } public: static int getAdditionalCharsSize(const std::string* locale_str, const uint16_t c) { static int getAdditionalCharsSize(const std::string* locale_str, const int32_t c) { if (!isEnLocale(locale_str)) { return 0; } Loading @@ -62,7 +64,7 @@ class AdditionalProximityChars { } } static const uint32_t* getAdditionalChars(const std::string* locale_str, const uint32_t c) { static const int32_t* getAdditionalChars(const std::string *locale_str, const int32_t c) { if (!isEnLocale(locale_str)) { return 0; } Loading @@ -82,7 +84,7 @@ class AdditionalProximityChars { } } static bool hasAdditionalChars(const std::string* locale_str, const uint32_t c) { static bool hasAdditionalChars(const std::string *locale_str, const int32_t c) { return getAdditionalCharsSize(locale_str, c) > 0; } }; Loading
native/src/defines.h +2 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ static inline void prof_out(void) { #define DEBUG_NODE DEBUG_DICT_FULL #define DEBUG_TRACE DEBUG_DICT_FULL #define DEBUG_PROXIMITY_INFO false #define DEBUG_PROXIMITY_CHARS false #define DEBUG_CORRECTION false #define DEBUG_CORRECTION_FREQ false #define DEBUG_WORDS_PRIORITY_QUEUE false Loading @@ -128,6 +129,7 @@ static inline void prof_out(void) { #define DEBUG_NODE false #define DEBUG_TRACE false #define DEBUG_PROXIMITY_INFO false #define DEBUG_PROXIMITY_CHARS false #define DEBUG_CORRECTION false #define DEBUG_CORRECTION_FREQ false #define DEBUG_WORDS_PRIORITY_QUEUE false Loading
native/src/proximity_info.cpp +60 −20 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ inline void copyOrFillZero(void *to, const void *from, size_t size) { ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximityCharsSize, const int keyboardWidth, const int keyboardHeight, const int gridWidth, const int gridHeight, const int mostCommonKeyWidth, const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates, const int32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates, const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights, const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs, const float *sweetSpotRadii) Loading @@ -54,7 +54,7 @@ ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximity mInputXCoordinates(0), mInputYCoordinates(0), mTouchPositionCorrectionEnabled(false) { const int proximityGridLength = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE; mProximityCharsArray = new uint32_t[proximityGridLength]; mProximityCharsArray = new int32_t[proximityGridLength]; if (DEBUG_PROXIMITY_INFO) { AKLOGI("Create proximity info array %d", proximityGridLength); } Loading Loading @@ -148,35 +148,43 @@ int ProximityInfo::squaredDistanceToEdge(const int keyId, const int x, const int } void ProximityInfo::calculateNearbyKeyCodes( const int x, const int y, const uint32_t primaryKey, int *inputCodes) { const int x, const int y, const int32_t primaryKey, int *inputCodes) { int insertPos = 0; inputCodes[insertPos++] = primaryKey; const int startIndex = getStartIndexFromCoordinates(x, y); for (int i = 0; i < MAX_PROXIMITY_CHARS_SIZE; ++i) { const uint32_t c = mProximityCharsArray[startIndex + i]; const int32_t c = mProximityCharsArray[startIndex + i]; if (c < KEYCODE_SPACE || c == primaryKey) { continue; } for (int j = 0; j < KEY_COUNT; ++j) { const bool onKey = isOnKey(j, x, y); const int distance = squaredDistanceToEdge(j, x, y); int keyIndex = getKeyIndex(c); const bool onKey = isOnKey(keyIndex, x, y); const int distance = squaredDistanceToEdge(keyIndex, x, y); if (onKey || distance < MOST_COMMON_KEY_WIDTH_SQUARE) { inputCodes[insertPos++] = c; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } } const int existingProximitySize = insertPos; for (int i = 0; i < existingProximitySize; ++i) { const uint32_t c = inputCodes[i]; const int additionalProximitySize = AdditionalProximityChars::hasAdditionalChars(&mLocaleStr, c); if (additionalProximitySize <= 0) { continue; } const uint32_t* additionalProximityChars = AdditionalProximityChars::getAdditionalChars(&mLocaleStr, c); inputCodes[insertPos++] = ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } const int additionalProximitySize = AdditionalProximityChars::getAdditionalCharsSize(&mLocaleStr, primaryKey); if (additionalProximitySize > 0) { const int32_t* additionalProximityChars = AdditionalProximityChars::getAdditionalChars(&mLocaleStr, primaryKey); for (int j = 0; j < additionalProximitySize; ++j) { const uint32_t ac = additionalProximityChars[j]; const int32_t ac = additionalProximityChars[j]; int k = 0; for (; k < insertPos; ++k) { if ((int)ac == inputCodes[k]) { Loading @@ -187,9 +195,16 @@ void ProximityInfo::calculateNearbyKeyCodes( continue; } inputCodes[insertPos++] = ac; if (insertPos >= MAX_PROXIMITY_CHARS_SIZE) { if (DEBUG_DICT) { assert(false); } return; } } // TODO: calculate additional chars } // Add a delimiter for the proximity characters inputCodes[insertPos] = 0; } // TODO: Calculate nearby codes here. Loading @@ -205,8 +220,30 @@ void ProximityInfo::setInputParams(const int* inputCodes, const int inputLength, mPrimaryInputWord[i] = getPrimaryCharAt(i); } mPrimaryInputWord[inputLength] = 0; if (DEBUG_PROXIMITY_CHARS) { AKLOGI("--- setInputParams"); } for (int i = 0; i < mInputLength; ++i) { const int *proximityChars = getProximityCharsAt(i); const int primaryKey = proximityChars[0]; const int x = xCoordinates[i]; const int y = yCoordinates[i]; if (DEBUG_PROXIMITY_CHARS) { int a = x + y + primaryKey; a += 0; AKLOGI("--- Primary = %c, x = %d, y = %d", primaryKey, x, y); // Keep debug code just in case //int proximities[50]; //for (int m = 0; m < 50; ++m) { //proximities[m] = 0; //} //calculateNearbyKeyCodes(x, y, primaryKey, proximities); //for (int l = 0; l < 50 && proximities[l] > 0; ++l) { //if (DEBUG_PROXIMITY_CHARS) { //AKLOGI("--- native Proximity (%d) = %c", l, proximities[l]); //} //} } for (int j = 0; j < MAX_PROXIMITY_CHARS_SIZE && proximityChars[j] > 0; ++j) { const int currentChar = proximityChars[j]; const int keyIndex = getKeyIndex(currentChar); Loading @@ -219,6 +256,9 @@ void ProximityInfo::setInputParams(const int* inputCodes, const int inputLength, ? EQUIVALENT_CHAR_WITHOUT_DISTANCE_INFO : PROXIMITY_CHAR_WITHOUT_DISTANCE_INFO; } if (DEBUG_PROXIMITY_CHARS) { AKLOGI("--- Proximity (%d) = %c", j, currentChar); } } } } Loading