aboutsummaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
Diffstat (limited to 'native')
-rw-r--r--native/jni/src/dictionary.h5
-rw-r--r--native/jni/src/suggest/core/suggest.cpp18
2 files changed, 15 insertions, 8 deletions
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index 0653d3ca9..2ad5b6c0b 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -31,6 +31,7 @@ class UnigramDictionary;
class Dictionary {
public:
// Taken from SuggestedWords.java
+ static const int KIND_MASK_KIND = 0xFF; // Mask to get only the kind
static const int KIND_TYPED = 0; // What user typed
static const int KIND_CORRECTION = 1; // Simple correction/suggestion
static const int KIND_COMPLETION = 2; // Completion (suggestion with appended chars)
@@ -41,6 +42,10 @@ class Dictionary {
static const int KIND_SHORTCUT = 7; // A shortcut
static const int KIND_PREDICTION = 8; // A prediction (== a suggestion with no input)
+ static const int KIND_MASK_FLAGS = 0xFFFFFF00; // Mask to get the flags
+ static const int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
+ static const int KIND_FLAG_EXACT_MATCH = 0x40000000;
+
Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust);
int getSuggestions(ProximityInfo *proximityInfo, void *traverseSession, int *xcoordinates,
diff --git a/native/jni/src/suggest/core/suggest.cpp b/native/jni/src/suggest/core/suggest.cpp
index 0cf4e4a68..b1a5ff24e 100644
--- a/native/jni/src/suggest/core/suggest.cpp
+++ b/native/jni/src/suggest/core/suggest.cpp
@@ -161,12 +161,15 @@ int Suggest::outputSuggestions(DicTraverseSession *traverseSession, int *frequen
+ doubleLetterCost;
const TerminalAttributes terminalAttributes(traverseSession->getOffsetDict(),
terminalDicNode->getFlags(), terminalDicNode->getAttributesPos());
- const int originalTerminalProbability = terminalDicNode->getProbability();
+ const bool isPossiblyOffensiveWord = terminalDicNode->getProbability() <= 0;
+ const bool isExactMatch = terminalDicNode->isExactMatch();
+ const int outputTypeFlags =
+ isPossiblyOffensiveWord ? Dictionary::KIND_FLAG_POSSIBLY_OFFENSIVE : 0
+ | isExactMatch ? Dictionary::KIND_FLAG_EXACT_MATCH : 0;
+
+ // Entries that are blacklisted or do not represent a word should not be output.
+ const bool isValidWord = !terminalAttributes.isBlacklistedOrNotAWord();
- // Do not suggest words with a 0 probability, or entries that are blacklisted or do not
- // represent a word. However, we should still submit their shortcuts if any.
- const bool isValidWord =
- originalTerminalProbability > 0 && !terminalAttributes.isBlacklistedOrNotAWord();
// Increase output score of top typing suggestion to ensure autocorrection.
// TODO: Better integration with java side autocorrection logic.
// Force autocorrection for obvious long multi-word suggestions.
@@ -188,10 +191,9 @@ int Suggest::outputSuggestions(DicTraverseSession *traverseSession, int *frequen
}
}
- // Do not suggest words with a 0 probability, or entries that are blacklisted or do not
- // represent a word. However, we should still submit their shortcuts if any.
+ // Don't output invalid words. However, we still need to submit their shortcuts if any.
if (isValidWord) {
- outputTypes[outputWordIndex] = Dictionary::KIND_CORRECTION;
+ outputTypes[outputWordIndex] = Dictionary::KIND_CORRECTION | outputTypeFlags;
frequencies[outputWordIndex] = finalScore;
// Populate the outputChars array with the suggested word.
const int startIndex = outputWordIndex * MAX_WORD_LENGTH;