aboutsummaryrefslogtreecommitdiffstats
path: root/native/src/proximity_info.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/proximity_info.cpp')
-rw-r--r--native/src/proximity_info.cpp34
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
}