diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp index 031e706ae..a25339174 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp @@ -280,15 +280,6 @@ namespace latinime { return NOT_A_PROBABILITY; } -/* static */ int DicNodeUtils::getWordPos(const uint8_t *const dicRoot, const int *word, - const int wordLength) { - if (!word) { - return NOT_VALID_WORD; - } - return BinaryFormat::getTerminalPosition( - dicRoot, word, wordLength, false /* forceLowerCaseSearch */); -} - /* static */ bool DicNodeUtils::isMatchedNodeCodePoint(const ProximityInfoState *pInfoState, const int pointIndex, const bool exactOnly, const int nodeCodePoint) { if (!pInfoState) { diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.h b/native/jni/src/suggest/core/dicnode/dic_node_utils.h index 15f9730de..2e6361d87 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_utils.h +++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.h @@ -41,7 +41,6 @@ class DicNodeUtils { static void initByCopy(DicNode *srcNode, DicNode *destNode); static void getAllChildDicNodes(DicNode *dicNode, const uint8_t *const dicRoot, DicNodeVector *childDicNodes); - static int getWordPos(const uint8_t *const dicRoot, const int *word, const int prevWordLength); static float getBigramNodeImprobability(const uint8_t *const dicRoot, const DicNode *const node, hash_map_compat *const bigramCacheMap); static bool isDicNodeFilteredOut(const int nodeCodePoint, const ProximityInfo *const pInfo, diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.cpp b/native/jni/src/suggest/core/session/dic_traverse_session.cpp index 3c44db21c..b3d47326d 100644 --- a/native/jni/src/suggest/core/session/dic_traverse_session.cpp +++ b/native/jni/src/suggest/core/session/dic_traverse_session.cpp @@ -69,7 +69,15 @@ void DicTraverseSession::init(const Dictionary *const dictionary, const int *pre mPrevWordPos = NOT_VALID_WORD; return; } - mPrevWordPos = DicNodeUtils::getWordPos(dictionary->getOffsetDict(), prevWord, prevWordLength); + // TODO: merge following similar calls to getTerminalPosition into one case-insensitive call. + mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord, + prevWordLength, false /* forceLowerCaseSearch */); + if (mPrevWordPos == NOT_VALID_WORD) { + // Check bigrams for lower-cased previous word if original was not found. Useful for + // auto-capitalized words like "The [current_word]". + mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord, + prevWordLength, true /* forceLowerCaseSearch */); + } } void DicTraverseSession::setupForGetSuggestions(const ProximityInfo *pInfo,