CNS // Phase 8: Bind functions to conditions.

This commit is contained in:
ShikiSuen 2022-01-24 13:56:45 +08:00
parent 2320c2657b
commit 02003c07f4
5 changed files with 23 additions and 28 deletions

View File

@ -146,6 +146,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NonModalAlertWindowControlle
func applicationDidFinishLaunching(_ notification: Notification) {
LanguageModelManager.loadDataModels()
LanguageModelManager.loadCNSData()
LanguageModelManager.loadUserPhrases()
LanguageModelManager.loadUserPhraseReplacement()

View File

@ -93,7 +93,7 @@ const vector<Unigram> vChewingLM::unigramsForKey(const string& key)
allUnigrams = filterAndTransformUnigrams(rawGlobalUnigrams, excludedValues, insertedValues);
}
if (m_cnsModel.hasUnigramsForKey(key)) {
if (m_cnsModel.hasUnigramsForKey(key) && m_CNSEnabled) {
vector<Unigram> rawCNSUnigrams = m_cnsModel.unigramsForKey(key);
cnsUnigrams = filterAndTransformUnigrams(rawCNSUnigrams, excludedValues, insertedValues);
}

View File

@ -112,6 +112,7 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
// create the lattice builder
_languageModel = [LanguageModelManager languageModelCoreCHT];
_languageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
_languageModel->setCNSEnabled(Preferences.cns11643Enabled);
_userOverrideModel = [LanguageModelManager userOverrideModelCHT];
_builder = new BlockReadingBuilder(_languageModel);
@ -139,7 +140,11 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
NSMenuItem *useWinNT351BPMFMenuItem = [menu addItemWithTitle:NSLocalizedString(@"NT351 BPMF EMU", @"") action:@selector(toggleWinNT351BPMFMode:) keyEquivalent:@"P"];
useWinNT351BPMFMenuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagControl;
useWinNT351BPMFMenuItem.state = Preferences.useWinNT351BPMF ? NSControlStateValueOn : NSControlStateValueOff;
NSMenuItem *useCNS11643SupportMenuItem = [menu addItemWithTitle:NSLocalizedString(@"CNS11643 Mode", @"") action:@selector(toggleCNS11643Enabled:) keyEquivalent:@"L"];
useCNS11643SupportMenuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagControl;
useCNS11643SupportMenuItem.state = Preferences.cns11643Enabled ? NSControlStateValueOn : NSControlStateValueOff;
NSMenuItem *chineseConversionMenuItem = [menu addItemWithTitle:NSLocalizedString(@"Force KangXi Writing", @"") action:@selector(toggleChineseConverter:) keyEquivalent:@"K"];
chineseConversionMenuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagControl;
chineseConversionMenuItem.state = Preferences.chineseConversionEnabled ? NSControlStateValueOn : NSControlStateValueOff;
@ -169,8 +174,6 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
[menu addItemWithTitle:NSLocalizedString(@"About vChewing…", @"") action:@selector(showAbout:) keyEquivalent:@""];
if (optionKeyPressed) {
[menu addItemWithTitle:NSLocalizedString(@"Reboot vChewing…", @"") action:@selector(selfTerminate:) keyEquivalent:@""];
[menu addItemWithTitle:NSLocalizedString(@"Deploy CNS Data…", @"") action:@selector(cnsDeploy:) keyEquivalent:@""];
[menu addItemWithTitle:NSLocalizedString(@"Load CNS Data…", @"") action:@selector(loadCNSData:) keyEquivalent:@""];
}
return menu;
}
@ -264,6 +267,9 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
// 自 Preferences 模組讀入自訂語彙置換功能開關狀態。
newLanguageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
// 自 Preferences 模組讀取全字庫模式開關狀態。
newLanguageModel->setCNSEnabled(Preferences.cns11643Enabled);
// Only apply the changes if the value is changed
if (![_inputMode isEqualToString:newInputMode]) {
[[NSUserDefaults standardUserDefaults] synchronize];
@ -1530,6 +1536,13 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
}
}
- (void)toggleCNS11643Enabled:(id)sender
{
_languageModel->setCNSEnabled([Preferences toggleCNS11643Enabled]);
// 注意上面這一行已經動過開關了,所以接下來就不要 toggle。
[NotifierController notifyWithMessage:[NSString stringWithFormat:@"%@%@%@", NSLocalizedString(@"CNS11643 Mode", @""), @"\n", [Preferences cns11643Enabled] ? NSLocalizedString(@"NotificationSwitchON", @"") : NSLocalizedString(@"NotificationSwitchOFF", @"")] stay:NO];
}
- (void)selfTerminate:(id)sender
{
NSLog(@"vChewing App self-terminated on request.");
@ -1552,21 +1565,6 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
return YES;
}
- (BOOL)_checkCNSFile
{
if (![LanguageModelManager checkIfCNSDataExistAndHashMatched]) {
[self beep];
NSLog(@"_checkCNSFile failed in the InputMethodController.");
return NO;
}
return YES;
}
- (void)cnsDeploy:(id)sender
{
[LanguageModelManager deployZipDataFile:@"UNICHARS"];
}
- (void)_openUserFile:(NSString *)path
{
if (![self _checkUserFiles]) {
@ -1597,15 +1595,6 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
[LanguageModelManager loadUserPhraseReplacement];
}
- (void)loadCNSData:(id)sender
{
if (!self._checkCNSFile) {
[self beep];
} else {
[LanguageModelManager loadCNSData];
}
}
- (void)showAbout:(id)sender
{
// show the About window, and also make the IME app itself the focus

View File

@ -59,6 +59,10 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
+ (void)loadCNSData
{
if (!self.checkIfCNSDataExistAndHashMatched) {
[self deployZipDataFile:@"UNICHARS"];
}
glanguageModelCoreCHT.loadCNSData([[self cnsDataPath] UTF8String]);
glanguageModelCoreCHS.loadCNSData([[self cnsDataPath] UTF8String]);
}

View File

@ -14,6 +14,7 @@
#import "SSZipArchive.h" // Zip Archive Support;
@interface LanguageModelManager : NSObject
+ (void)loadDataModels;
+ (void)loadCNSData;
+ (void)loadUserPhrases;
+ (void)loadUserPhraseReplacement;
@end