diff options
Diffstat (limited to 'native/src/proximity_info.cpp')
-rw-r--r-- | native/src/proximity_info.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp index ad19f58b5..e590740d2 100644 --- a/native/src/proximity_info.cpp +++ b/native/src/proximity_info.cpp @@ -16,10 +16,11 @@ #include <assert.h> #include <stdio.h> -#include <string.h> +#include <string> #define LOG_TAG "LatinIME: proximity_info.cpp" +#include "additional_proximity_chars.h" #include "dictionary.h" #include "proximity_info.h" @@ -33,9 +34,9 @@ inline void copyOrFillZero(void *to, const void *from, size_t size) { } } -ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth, - const int keyboardHeight, const int gridWidth, const int gridHeight, - const int mostCommonKeyWidth, +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 *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights, const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs, @@ -49,6 +50,7 @@ ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboard HAS_TOUCH_POSITION_CORRECTION_DATA(keyCount > 0 && keyXCoordinates && keyYCoordinates && keyWidths && keyHeights && keyCharCodes && sweetSpotCenterXs && sweetSpotCenterYs && sweetSpotRadii), + mLocaleStr(localeStr), mInputXCoordinates(0), mInputYCoordinates(0), mTouchPositionCorrectionEnabled(false) { const int proximityGridLength = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE; @@ -163,6 +165,30 @@ void ProximityInfo::calculateNearbyKeyCodes( } } } + 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); + for (int j = 0; j < additionalProximitySize; ++j) { + const uint32_t ac = additionalProximityChars[j]; + int k = 0; + for (; k < insertPos; ++k) { + if ((int)ac == inputCodes[k]) { + break; + } + } + if (k < insertPos) { + continue; + } + inputCodes[insertPos++] = ac; + } + } // TODO: calculate additional chars } |