Hiraku #13: UserPhrases // Optimize the CHS Compatibility Patch.

This commit is contained in:
Hiraku 2022-01-11 22:59:51 +08:00 committed by ShikiSuen
parent ea356d6d67
commit 81cf4b5f25
3 changed files with 58 additions and 126 deletions

View File

@ -42,8 +42,7 @@
#import "frmAboutWindow.h" #import "frmAboutWindow.h"
extern void LTLoadLanguageModel(void); extern void LTLoadLanguageModel(void);
extern void LTLoadUserLanguageModelFileCHT(void); extern void LTLoadUserLanguageModelFile(void);
extern void LTLoadUserLanguageModelFileCHS(void);
static NSString *kCheckUpdateAutomatically = @"CheckUpdateAutomatically"; static NSString *kCheckUpdateAutomatically = @"CheckUpdateAutomatically";
static NSString *kNextUpdateCheckDateKey = @"NextUpdateCheckDate"; static NSString *kNextUpdateCheckDateKey = @"NextUpdateCheckDate";
@ -68,8 +67,7 @@ static const NSTimeInterval kTimeoutInterval = 60.0;
- (void)applicationDidFinishLaunching:(NSNotification *)inNotification - (void)applicationDidFinishLaunching:(NSNotification *)inNotification
{ {
LTLoadLanguageModel(); LTLoadLanguageModel();
LTLoadUserLanguageModelFileCHT(); LTLoadUserLanguageModelFile();
LTLoadUserLanguageModelFileCHS();
if (![[NSUserDefaults standardUserDefaults] objectForKey:kCheckUpdateAutomatically]) { if (![[NSUserDefaults standardUserDefaults] objectForKey:kCheckUpdateAutomatically]) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:kCheckUpdateAutomatically]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kCheckUpdateAutomatically];

View File

@ -89,5 +89,4 @@
// the shared language model object // the shared language model object
extern "C" void LTLoadLanguageModel(); extern "C" void LTLoadLanguageModel();
extern "C" void LTLoadUserLanguageModelFileCHT(); extern "C" void LTLoadUserLanguageModelFile();
extern "C" void LTLoadUserLanguageModelFileCHS();

View File

@ -264,13 +264,7 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
_languageModel = &gLanguageModelCHT; _languageModel = &gLanguageModelCHT;
_userPhrasesModel = &gUserPhraseLanguageModelCHT; _userPhrasesModel = &gUserPhraseLanguageModelCHT;
_builder = new BlockReadingBuilder(_languageModel, _userPhrasesModel); _builder = new BlockReadingBuilder(_languageModel, _userPhrasesModel);
if (_inputMode == kSimpBopomofoModeIdentifier) { _uom = &gUserOverrideModelCHT;
NSLog(@"gUserOverrideModelCHS called");
_uom = &gUserOverrideModelCHS;
} else {
NSLog(@"gUserOverrideModelCHT called");
_uom = &gUserOverrideModelCHT;
}
// each Mandarin syllable is separated by a hyphen // each Mandarin syllable is separated by a hyphen
_builder->setJoinSeparator("-"); _builder->setJoinSeparator("-");
@ -420,83 +414,48 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
Formosa::Gramambular::FastLM *userPhraseModel; Formosa::Gramambular::FastLM *userPhraseModel;
vChewing::UserOverrideModel *newUom; vChewing::UserOverrideModel *newUom;
if ([value isKindOfClass:[NSString class]]) { if ([value isKindOfClass:[NSString class]] && [value isEqual:kSimpBopomofoModeIdentifier]) {
newInputMode = kSimpBopomofoModeIdentifier;
if ([value isEqual:kSimpBopomofoModeIdentifier]) { newLanguageModel = &gLanguageModelCHS;
newUom = &gUserOverrideModelCHS;
newInputMode = kSimpBopomofoModeIdentifier; userPhraseModel = &gUserPhraseLanguageModelCHS;
newLanguageModel = &gLanguageModelCHS; }
newUom = &gUserOverrideModelCHS; else {
userPhraseModel = &gUserPhraseLanguageModelCHS; newInputMode = kBopomofoModeIdentifier;
newLanguageModel = &gLanguageModelCHT;
newUom = &gUserOverrideModelCHT;
userPhraseModel = &gUserPhraseLanguageModelCHT;
}
if (![_inputMode isEqualToString:newInputMode]) { // Only apply the changes if the value is changed
[[NSUserDefaults standardUserDefaults] synchronize]; if (![_inputMode isEqualToString:newInputMode]) {
[[NSUserDefaults standardUserDefaults] synchronize];
// Remember to override the keyboard layout again -- treat this as an activate event // Remember to override the keyboard layout again -- treat this as an activate event
NSString *basisKeyboardLayoutID = [[NSUserDefaults standardUserDefaults] stringForKey:kBasisKeyboardLayoutPreferenceKey]; NSString *basisKeyboardLayoutID = [[NSUserDefaults standardUserDefaults] stringForKey:kBasisKeyboardLayoutPreferenceKey];
if (!basisKeyboardLayoutID) { if (!basisKeyboardLayoutID) {
basisKeyboardLayoutID = @"com.apple.keylayout.US"; basisKeyboardLayoutID = @"com.apple.keylayout.US";
} }
[sender overrideKeyboardWithKeyboardNamed:basisKeyboardLayoutID]; [sender overrideKeyboardWithKeyboardNamed:basisKeyboardLayoutID];
_inputMode = newInputMode; _inputMode = newInputMode;
_languageModel = newLanguageModel; _languageModel = newLanguageModel;
_userPhrasesModel = userPhraseModel; _userPhrasesModel = userPhraseModel;
_uom = newUom;
if (!_bpmfReadingBuffer->isEmpty()) { if (!_bpmfReadingBuffer->isEmpty()) {
_bpmfReadingBuffer->clear(); _bpmfReadingBuffer->clear();
[self updateClientComposingBuffer:sender]; [self updateClientComposingBuffer:sender];
} }
if ([_composingBuffer length] > 0) { if ([_composingBuffer length] > 0) {
[self commitComposition:sender]; [self commitComposition:sender];
} }
if (_builder) { if (_builder) {
delete _builder; delete _builder;
_builder = new BlockReadingBuilder(_languageModel, _userPhrasesModel); _builder = new BlockReadingBuilder(_languageModel, _userPhrasesModel);
_builder->setJoinSeparator("-"); _builder->setJoinSeparator("-");
}
}
_uom = newUom;
} else if ([value isEqual:kBopomofoModeIdentifier]) {
newInputMode = kBopomofoModeIdentifier;
newLanguageModel = &gLanguageModelCHT;
userPhraseModel = &gUserPhraseLanguageModelCHT;
newUom = &gUserOverrideModelCHT;
if (![_inputMode isEqualToString:newInputMode]) {
[[NSUserDefaults standardUserDefaults] synchronize];
// Remember to override the keyboard layout again -- treat this as an activate event
NSString *basisKeyboardLayoutID = [[NSUserDefaults standardUserDefaults] stringForKey:kBasisKeyboardLayoutPreferenceKey];
if (!basisKeyboardLayoutID) {
basisKeyboardLayoutID = @"com.apple.keylayout.US";
}
[sender overrideKeyboardWithKeyboardNamed:basisKeyboardLayoutID];
_inputMode = newInputMode;
_languageModel = newLanguageModel;
_userPhrasesModel = userPhraseModel;
if (!_bpmfReadingBuffer->isEmpty()) {
_bpmfReadingBuffer->clear();
[self updateClientComposingBuffer:sender];
}
if ([_composingBuffer length] > 0) {
[self commitComposition:sender];
}
if (_builder) {
delete _builder;
_builder = new BlockReadingBuilder(_languageModel, _userPhrasesModel);
_builder->setJoinSeparator("-");
}
}
_uom = newUom;
} }
} }
} }
@ -768,31 +727,17 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
currentMarkedPhrase = [currentMarkedPhrase stringByAppendingString:@"\n"]; currentMarkedPhrase = [currentMarkedPhrase stringByAppendingString:@"\n"];
if (_inputMode == kSimpBopomofoModeIdentifier) { NSString *path = _inputMode == kSimpBopomofoModeIdentifier ? LTUserPhrasesDataPathCHS() : LTUserPhrasesDataPathCHT();
NSString *path = LTUserPhrasesDataPathCHS(); NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:path];
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:path]; if (!file) {
if (!file) { return NO;
return NO;
}
[file seekToEndOfFile];
NSData *data = [currentMarkedPhrase dataUsingEncoding:NSUTF8StringEncoding];
[file writeData:data];
[file closeFile];
LTLoadUserLanguageModelFileCHS();
return YES;
} else {
NSString *path = LTUserPhrasesDataPathCHT();
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:path];
if (!file) {
return NO;
}
[file seekToEndOfFile];
NSData *data = [currentMarkedPhrase dataUsingEncoding:NSUTF8StringEncoding];
[file writeData:data];
[file closeFile];
LTLoadUserLanguageModelFileCHT();
return YES;
} }
[file seekToEndOfFile];
NSData *data = [currentMarkedPhrase dataUsingEncoding:NSUTF8StringEncoding];
[file writeData:data];
[file closeFile];
LTLoadUserLanguageModelFile();
return YES;
} }
- (BOOL)handleInputText:(NSString*)inputText key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)client - (BOOL)handleInputText:(NSString*)inputText key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)client
@ -1649,13 +1594,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
- (void)reloadUserPhrases:(id)sender - (void)reloadUserPhrases:(id)sender
{ {
if (_inputMode == kSimpBopomofoModeIdentifier) { LTLoadUserLanguageModelFile();
NSLog(@"reloadUserPhrases CHS called");
LTLoadUserLanguageModelFileCHS();
} else {
NSLog(@"reloadUserPhrases CHT called");
LTLoadUserLanguageModelFileCHT();
}
} }
- (void)showAbout:(id)sender - (void)showAbout:(id)sender
@ -1735,20 +1674,16 @@ void LTLoadLanguageModel()
LTLoadLanguageModelFile(@"data-chs", gLanguageModelCHS); LTLoadLanguageModelFile(@"data-chs", gLanguageModelCHS);
} }
void LTLoadUserLanguageModelFileCHT() void LTLoadUserLanguageModelFile()
{ {
gUserPhraseLanguageModelCHT.close(); gUserPhraseLanguageModelCHT.close();
bool result = gUserPhraseLanguageModelCHT.open([LTUserPhrasesDataPathCHT() UTF8String]);
if (!result) {
NSLog(@"Failed opening language model for CHT user phrases.");
}
}
void LTLoadUserLanguageModelFileCHS()
{
gUserPhraseLanguageModelCHS.close(); gUserPhraseLanguageModelCHS.close();
bool result = gUserPhraseLanguageModelCHS.open([LTUserPhrasesDataPathCHS() UTF8String]); bool resultCHT = gUserPhraseLanguageModelCHT.open([LTUserPhrasesDataPathCHT() UTF8String]);
if (!result) { bool resultCHS = gUserPhraseLanguageModelCHS.open([LTUserPhrasesDataPathCHS() UTF8String]);
if (!resultCHT) {
NSLog(@"Failed opening language model for CHT user phrases."); NSLog(@"Failed opening language model for CHT user phrases.");
} }
if (!resultCHS) {
NSLog(@"Failed opening language model for CHS user phrases.");
}
} }