| Index: third_party/android_prediction/suggest/policyimpl/typing/typing_weighting.cpp
|
| diff --git a/third_party/android_prediction/suggest/policyimpl/typing/typing_weighting.cpp b/third_party/android_prediction/suggest/policyimpl/typing/typing_weighting.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b865134e427eb84879761d4e1a0d4ec938944878
|
| --- /dev/null
|
| +++ b/third_party/android_prediction/suggest/policyimpl/typing/typing_weighting.cpp
|
| @@ -0,0 +1,86 @@
|
| +/*
|
| + * Copyright (C) 2012 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.
|
| + */
|
| +
|
| +#include "third_party/android_prediction/suggest/policyimpl/typing/typing_weighting.h"
|
| +
|
| +#include "third_party/android_prediction/suggest/core/dicnode/dic_node.h"
|
| +#include "third_party/android_prediction/suggest/policyimpl/typing/scoring_params.h"
|
| +
|
| +namespace latinime {
|
| +
|
| +const TypingWeighting TypingWeighting::sInstance;
|
| +
|
| +ErrorTypeUtils::ErrorType TypingWeighting::getErrorType(const CorrectionType correctionType,
|
| + const DicTraverseSession *const traverseSession, const DicNode *const parentDicNode,
|
| + const DicNode *const dicNode) const {
|
| + switch (correctionType) {
|
| + case CT_MATCH:
|
| + if (isProximityDicNode(traverseSession, dicNode)) {
|
| + return ErrorTypeUtils::PROXIMITY_CORRECTION;
|
| + } else if (dicNode->isInDigraph()) {
|
| + return ErrorTypeUtils::MATCH_WITH_DIGRAPH;
|
| + } else {
|
| + // Compare the node code point with original primary code point on the keyboard.
|
| + const ProximityInfoState *const pInfoState =
|
| + traverseSession->getProximityInfoState(0);
|
| + const int primaryOriginalCodePoint = pInfoState->getPrimaryOriginalCodePointAt(
|
| + dicNode->getInputIndex(0));
|
| + const int nodeCodePoint = dicNode->getNodeCodePoint();
|
| + if (primaryOriginalCodePoint == nodeCodePoint) {
|
| + // Node code point is same as original code point on the keyboard.
|
| + return ErrorTypeUtils::NOT_AN_ERROR;
|
| + } else if (CharUtils::toLowerCase(primaryOriginalCodePoint) ==
|
| + CharUtils::toLowerCase(nodeCodePoint)) {
|
| + // Only cases of the code points are different.
|
| + return ErrorTypeUtils::MATCH_WITH_CASE_ERROR;
|
| + } else if (CharUtils::toBaseCodePoint(primaryOriginalCodePoint) ==
|
| + CharUtils::toBaseCodePoint(nodeCodePoint)) {
|
| + // Node code point is a variant of original code point.
|
| + return ErrorTypeUtils::MATCH_WITH_ACCENT_ERROR;
|
| + } else {
|
| + // Node code point is a variant of original code point and the cases are also
|
| + // different.
|
| + return ErrorTypeUtils::MATCH_WITH_ACCENT_ERROR
|
| + | ErrorTypeUtils::MATCH_WITH_CASE_ERROR;
|
| + }
|
| + }
|
| + break;
|
| + case CT_ADDITIONAL_PROXIMITY:
|
| + return ErrorTypeUtils::PROXIMITY_CORRECTION;
|
| + case CT_OMISSION:
|
| + if (parentDicNode->canBeIntentionalOmission()) {
|
| + return ErrorTypeUtils::INTENTIONAL_OMISSION;
|
| + } else {
|
| + return ErrorTypeUtils::EDIT_CORRECTION;
|
| + }
|
| + break;
|
| + case CT_SUBSTITUTION:
|
| + case CT_INSERTION:
|
| + case CT_TERMINAL_INSERTION:
|
| + case CT_TRANSPOSITION:
|
| + return ErrorTypeUtils::EDIT_CORRECTION;
|
| + case CT_NEW_WORD_SPACE_OMISSION:
|
| + case CT_NEW_WORD_SPACE_SUBSTITUTION:
|
| + return ErrorTypeUtils::NEW_WORD;
|
| + case CT_TERMINAL:
|
| + return ErrorTypeUtils::NOT_AN_ERROR;
|
| + case CT_COMPLETION:
|
| + return ErrorTypeUtils::COMPLETION;
|
| + default:
|
| + return ErrorTypeUtils::NOT_AN_ERROR;
|
| + }
|
| +}
|
| +} // namespace latinime
|
|
|