mgrLM // Make the phrase duplication check compatible with CHS mode.

This commit is contained in:
ShikiSuen 2022-02-16 17:40:20 +08:00
parent d8fab57402
commit fb38beabd9
4 changed files with 14 additions and 5 deletions

View File

@ -182,7 +182,7 @@ class InputState: NSObject {
let (exactEnd, _) = (composingBuffer as NSString).characterIndex(from: markedRange.location + markedRange.length) let (exactEnd, _) = (composingBuffer as NSString).characterIndex(from: markedRange.location + markedRange.length)
let selectedReadings = readings[exactBegin..<exactEnd] let selectedReadings = readings[exactBegin..<exactEnd]
let joined = selectedReadings.joined(separator: "-") let joined = selectedReadings.joined(separator: "-")
let exist = mgrLangModel.checkIfExist(userPhrase: text, key: joined) let exist = mgrLangModel.checkIfUserPhraseExist(userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined)
if exist { if exist {
return String(format: NSLocalizedString("\"%@\" already exists.", comment: ""), text) return String(format: NSLocalizedString("\"%@\" already exists.", comment: ""), text)
} }
@ -255,7 +255,7 @@ class InputState: NSObject {
let (exactEnd, _) = (composingBuffer as NSString).characterIndex(from: markedRange.location + markedRange.length) let (exactEnd, _) = (composingBuffer as NSString).characterIndex(from: markedRange.location + markedRange.length)
let selectedReadings = readings[exactBegin..<exactEnd] let selectedReadings = readings[exactBegin..<exactEnd]
let joined = selectedReadings.joined(separator: "-") let joined = selectedReadings.joined(separator: "-")
return mgrLangModel.checkIfExist(userPhrase: text, key: joined) == true return mgrLangModel.checkIfUserPhraseExist(userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined) == true
} }
@objc var userPhrase: String { @objc var userPhrase: String {

View File

@ -47,6 +47,13 @@ class ctlInputMethod: IMKInputController {
private var keyHandler: KeyHandler = KeyHandler() private var keyHandler: KeyHandler = KeyHandler()
private var state: InputState = InputState.Empty() private var state: InputState = InputState.Empty()
// keyHandler 調 keyHandler
// InputState ctlInputMethod
// keyHandler keyHandlerInput
// currentKeyHandler keyHandler
// currentKeyHandler
static var currentKeyHandler: KeyHandler = KeyHandler()
// MARK: - IMKInputController methods // MARK: - IMKInputController methods
override init!(server: IMKServer!, delegate: Any!, client inputClient: Any!) { override init!(server: IMKServer!, delegate: Any!, client inputClient: Any!) {
@ -157,6 +164,8 @@ class ctlInputMethod: IMKInputController {
keyHandler.inputMode = newInputMode keyHandler.inputMode = newInputMode
self.handle(state: .Empty(), client: client) self.handle(state: .Empty(), client: client)
} }
//
ctlInputMethod.currentKeyHandler.inputMode = keyHandler.inputMode
} }
// MARK: - IMKServerInput protocol methods // MARK: - IMKServerInput protocol methods

View File

@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (BOOL)checkIfUserLanguageModelFilesExist; + (BOOL)checkIfUserLanguageModelFilesExist;
+ (BOOL)checkIfUserDataFolderExists; + (BOOL)checkIfUserDataFolderExists;
+ (BOOL)checkIfUserPhraseExist:(NSString *)userPhrase key:(NSString *)key NS_SWIFT_NAME(checkIfExist(userPhrase:key:)); + (BOOL)checkIfUserPhraseExist:(NSString *)userPhrase inputMode:(InputMode)mode key:(NSString *)key NS_SWIFT_NAME(checkIfUserPhraseExist(userPhrase:mode:key:));
+ (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating; + (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating;
+ (void)setPhraseReplacementEnabled:(BOOL)phraseReplacementEnabled; + (void)setPhraseReplacementEnabled:(BOOL)phraseReplacementEnabled;
+ (void)setCNSEnabled:(BOOL)cnsEnabled; + (void)setCNSEnabled:(BOOL)cnsEnabled;

View File

@ -207,10 +207,10 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
return YES; return YES;
} }
+ (BOOL)checkIfUserPhraseExist:(NSString *)userPhrase key:(NSString *)key NS_SWIFT_NAME(checkIfExist(userPhrase:key:)) + (BOOL)checkIfUserPhraseExist:(NSString *)userPhrase inputMode:(InputMode)mode key:(NSString *)key NS_SWIFT_NAME(checkIfUserPhraseExist(userPhrase:mode:key:))
{ {
string unigramKey = string(key.UTF8String); string unigramKey = string(key.UTF8String);
vector<Unigram> unigrams = gLangModelCHT.unigramsForKey(unigramKey); vector<Unigram> unigrams = [mode isEqualToString:imeModeCHT] ? gLangModelCHT.unigramsForKey(unigramKey): gLangModelCHS.unigramsForKey(unigramKey);
string userPhraseString = string(userPhrase.UTF8String); string userPhraseString = string(userPhrase.UTF8String);
for (auto unigram: unigrams) { for (auto unigram: unigrams) {
if (unigram.keyValue.value == userPhraseString) { if (unigram.keyValue.value == userPhraseString) {