Hiraku #13: UserPhrases // Optimize the CHS Compatibility Patch.
This commit is contained in:
parent
ea356d6d67
commit
81cf4b5f25
|
@ -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];
|
||||||
|
|
|
@ -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();
|
|
||||||
|
|
|
@ -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.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue