Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(418)

Unified Diff: third_party/android_prediction/suggest/core/layout/proximity_info.h

Issue 1247903003: Add spellcheck and word suggestion to the prediction service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: format README and CHROMIUM.diff Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/android_prediction/suggest/core/layout/proximity_info.h
diff --git a/third_party/android_prediction/suggest/core/layout/proximity_info.h b/third_party/android_prediction/suggest/core/layout/proximity_info.h
new file mode 100644
index 0000000000000000000000000000000000000000..0d3aba442a85abd1dbbdcbd7d516deb2a2708594
--- /dev/null
+++ b/third_party/android_prediction/suggest/core/layout/proximity_info.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LATINIME_PROXIMITY_INFO_H
+#define LATINIME_PROXIMITY_INFO_H
+
+#include <string>
+#include <unordered_map>
+
+#include "third_party/android_prediction/defines.h"
+#include "third_party/android_prediction/suggest/core/layout/proximity_info_utils.h"
+
+namespace latinime {
+
+class ProximityInfo {
+ public:
+ ProximityInfo(const std::string localeJStr,
+ const int keyboardWidth, const int keyboardHeight, const int gridWidth,
+ const int gridHeight, const int mostCommonKeyWidth, const int mostCommonKeyHeight,
+ int *proximityChars, int proximitySize, const int keyCount, const int *keyXCoordinates,
+ const int *keyYCoordinates, const int *keyWidths, const int *keyHeights,
+ const int *keyCharCodes, const float *sweetSpotCenterXs,
+ const float *sweetSpotCenterYs, const float *sweetSpotRadii);
+ ~ProximityInfo();
+ bool hasSpaceProximity(const int x, const int y) const;
+ float getNormalizedSquaredDistanceFromCenterFloatG(
+ const int keyId, const int x, const int y, const bool isGeometric) const;
+ int getCodePointOf(const int keyIndex) const;
+ int getOriginalCodePointOf(const int keyIndex) const;
+ bool hasSweetSpotData(const int keyIndex) const {
+ // When there are no calibration data for a key,
+ // the radius of the key is assigned to zero.
+ return mSweetSpotRadii[keyIndex] > 0.0f;
+ }
+ float getSweetSpotRadiiAt(int keyIndex) const { return mSweetSpotRadii[keyIndex]; }
+ float getSweetSpotCenterXAt(int keyIndex) const { return mSweetSpotCenterXs[keyIndex]; }
+ float getSweetSpotCenterYAt(int keyIndex) const { return mSweetSpotCenterYs[keyIndex]; }
+ bool hasTouchPositionCorrectionData() const { return HAS_TOUCH_POSITION_CORRECTION_DATA; }
+ int getMostCommonKeyWidth() const { return MOST_COMMON_KEY_WIDTH; }
+ int getMostCommonKeyWidthSquare() const { return MOST_COMMON_KEY_WIDTH_SQUARE; }
+ float getNormalizedSquaredMostCommonKeyHypotenuse() const {
+ return NORMALIZED_SQUARED_MOST_COMMON_KEY_HYPOTENUSE;
+ }
+ int getKeyCount() const { return KEY_COUNT; }
+ int getCellHeight() const { return CELL_HEIGHT; }
+ int getCellWidth() const { return CELL_WIDTH; }
+ int getGridWidth() const { return GRID_WIDTH; }
+ int getGridHeight() const { return GRID_HEIGHT; }
+ int getKeyboardWidth() const { return KEYBOARD_WIDTH; }
+ int getKeyboardHeight() const { return KEYBOARD_HEIGHT; }
+ float getKeyboardHypotenuse() const { return KEYBOARD_HYPOTENUSE; }
+
+ int getKeyCenterXOfKeyIdG(
+ const int keyId, const int referencePointX, const bool isGeometric) const;
+ int getKeyCenterYOfKeyIdG(
+ const int keyId, const int referencePointY, const bool isGeometric) const;
+ int getKeyKeyDistanceG(int keyId0, int keyId1) const;
+
+ AK_FORCE_INLINE void initializeProximities(const int *const inputCodes,
+ const int *const inputXCoordinates, const int *const inputYCoordinates,
+ const int inputSize, int *allInputCodes) const {
+ ProximityInfoUtils::initializeProximities(inputCodes, inputXCoordinates, inputYCoordinates,
+ inputSize, mKeyXCoordinates, mKeyYCoordinates, mKeyWidths, mKeyHeights,
+ mProximityCharsArray, CELL_HEIGHT, CELL_WIDTH, GRID_WIDTH, MOST_COMMON_KEY_WIDTH,
+ KEY_COUNT, mLocaleStr, &mLowerCodePointToKeyMap, allInputCodes);
+ }
+
+ AK_FORCE_INLINE int getKeyIndexOf(const int c) const {
+ return ProximityInfoUtils::getKeyIndexOf(KEY_COUNT, c, &mLowerCodePointToKeyMap);
+ }
+
+ AK_FORCE_INLINE bool isCodePointOnKeyboard(const int codePoint) const {
+ return getKeyIndexOf(codePoint) != NOT_AN_INDEX;
+ }
+
+ private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfo);
+
+ void initializeG();
+
+ const int GRID_WIDTH;
+ const int GRID_HEIGHT;
+ const int MOST_COMMON_KEY_WIDTH;
+ const int MOST_COMMON_KEY_WIDTH_SQUARE;
+ const float NORMALIZED_SQUARED_MOST_COMMON_KEY_HYPOTENUSE;
+ const int CELL_WIDTH;
+ const int CELL_HEIGHT;
+ const int KEY_COUNT;
+ const int KEYBOARD_WIDTH;
+ const int KEYBOARD_HEIGHT;
+ const float KEYBOARD_HYPOTENUSE;
+ const bool HAS_TOUCH_POSITION_CORRECTION_DATA;
+ // Assuming locale strings such as en_US, sr-Latn etc.
+ static const int MAX_LOCALE_STRING_LENGTH = 10;
+ char mLocaleStr[MAX_LOCALE_STRING_LENGTH];
+ int *mProximityCharsArray;
+ int mKeyXCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyYCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyWidths[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyHeights[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyCodePoints[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ float mSweetSpotCenterXs[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ float mSweetSpotCenterYs[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ // Sweet spots for geometric input. Note that we have extra sweet spots only for Y coordinates.
+ float mSweetSpotCenterYsG[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ float mSweetSpotRadii[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ std::unordered_map<int, int> mLowerCodePointToKeyMap;
+ int mKeyIndexToOriginalCodePoint[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyIndexToLowerCodePointG[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mCenterXsG[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mCenterYsG[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyKeyDistancesG[MAX_KEY_COUNT_IN_A_KEYBOARD][MAX_KEY_COUNT_IN_A_KEYBOARD];
+};
+} // namespace latinime
+#endif // LATINIME_PROXIMITY_INFO_H

Powered by Google App Engine
This is Rietveld 408576698