diff --git a/Source/Data b/Source/Data index 58fa2581..fd7208e3 160000 --- a/Source/Data +++ b/Source/Data @@ -1 +1 @@ -Subproject commit 58fa2581c5b6819b3c2d029a11537b81442f1afc +Subproject commit fd7208e3ece1bf0ba6c128160dfdcac79e3451bd diff --git a/Source/Modules/AppDelegate.swift b/Source/Modules/AppDelegate.swift index 47bb231b..a46a9332 100644 --- a/Source/Modules/AppDelegate.swift +++ b/Source/Modules/AppDelegate.swift @@ -176,7 +176,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, ctlNonModalAlertWindowDelega } func applicationDidFinishLaunching(_ notification: Notification) { - mgrLangModel.setupDataModelValueConverter() mgrLangModel.loadDataModels() // 這句還是不要砍了。 mgrLangModel.loadUserPhrases() mgrLangModel.loadUserPhraseReplacement() diff --git a/Source/Modules/ControllerModules/KeyHandler.mm b/Source/Modules/ControllerModules/KeyHandler.mm index 5414dd3c..56dd029c 100644 --- a/Source/Modules/ControllerModules/KeyHandler.mm +++ b/Source/Modules/ControllerModules/KeyHandler.mm @@ -231,8 +231,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; } [self _walk]; - if (mgrPrefs.selectPhraseAfterCursorAsCandidate && - mgrPrefs.moveCursorAfterSelectingCandidate) { + if (mgrPrefs.moveCursorAfterSelectingCandidate) { size_t nextPosition = 0; for (auto node: _walkedNodes) { if (nextPosition >= cursorIndex) { diff --git a/Source/Modules/IME.swift b/Source/Modules/IME.swift index 5f898e26..8c56f79c 100644 --- a/Source/Modules/IME.swift +++ b/Source/Modules/IME.swift @@ -19,15 +19,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH import Cocoa @objc public class IME: NSObject { - // 直接在 AppleKeyboardConverter 內使用 KeyParser 判定修飾鍵狀態的話,會出現蛇吞自己尾巴的現象。 - // 所以就藉由 ctlInputMethod 的這幾個常態變數來判斷。 - // 這裡不會列出全部的 modifier flags,只會列出可能會影響符號輸入的 flags、主要用於 AppleKeyboardConverter。 - @objc static var isOptionPressed: Bool = false - @objc static var isShiftPressed: Bool = false - @objc static var isCapsLockOn: Bool = false - @objc static var isCommandPressed: Bool = false - @objc static var isNumericPad: Bool = false - @objc static var isFunction: Bool = false // MARK: - Functions diff --git a/Source/Modules/IMEModules/ctlInputMethod.swift b/Source/Modules/IMEModules/ctlInputMethod.swift index fbb4d106..e2c953fe 100644 --- a/Source/Modules/IMEModules/ctlInputMethod.swift +++ b/Source/Modules/IMEModules/ctlInputMethod.swift @@ -63,33 +63,9 @@ class ctlInputMethod: IMKInputController { // MARK: - Keyboard Layout Specifier - func getKeyLayoutFlagsCondition(_ event: NSEvent!) -> Bool { - event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(NSEvent.ModifierFlags(rawValue: ~(NSEvent.ModifierFlags.shift.rawValue))) || - (event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.shift) && mgrPrefs.functionKeyKeyboardLayoutOverrideIncludeShiftKey) - } - - @objc func setKeyLayout(isfunctionKeyboardLayout: Bool = false) { + @objc func setKeyLayout() { let client = client().self as IMKTextInput - client.overrideKeyboard(withKeyboardNamed: isfunctionKeyboardLayout ? mgrPrefs.functionKeyboardLayout : mgrPrefs.basisKeyboardLayout) - } - - func updateModifierFlags(_ event: NSEvent!) { - // 這裡不會列出全部的 modifier flags,只會列出可能會影響符號輸入的 flags、主要用於 AppleKeyboardConverter。 - IME.isShiftPressed = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.shift) - IME.isOptionPressed = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.option) - IME.isCapsLockOn = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock) - IME.isCommandPressed = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.command) - IME.isNumericPad = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.numericPad) - IME.isFunction = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.function) - } - - func resetModifierFlags() { - IME.isShiftPressed = false - IME.isOptionPressed = false - IME.isCapsLockOn = false - IME.isCommandPressed = false - IME.isNumericPad = false - IME.isFunction = false + client.overrideKeyboard(withKeyboardNamed: mgrPrefs.basisKeyboardLayout) } // MARK: - IMKInputController methods @@ -166,7 +142,7 @@ class ctlInputMethod: IMKInputController { } // NSMenu 會阻止任何 modified key 相關的訊號傳回輸入法,所以咱們在此重設鍵盤佈局 - setKeyLayout(isfunctionKeyboardLayout: false) + setKeyLayout() return menu } @@ -176,7 +152,7 @@ class ctlInputMethod: IMKInputController { UserDefaults.standard.synchronize() // Override the keyboard layout to the basic one. - setKeyLayout(isfunctionKeyboardLayout: false) + setKeyLayout() // reset the state currentCandidateClient = nil @@ -205,7 +181,7 @@ class ctlInputMethod: IMKInputController { mgrLangModel.loadDataModel(newInputMode) // Remember to override the keyboard layout again -- treat this as an activate event. - setKeyLayout(isfunctionKeyboardLayout: false) + setKeyLayout() if keyHandler.inputMode != newInputMode { UserDefaults.standard.synchronize() @@ -226,19 +202,13 @@ class ctlInputMethod: IMKInputController { } override func handle(_ event: NSEvent!, client: Any!) -> Bool { - //重設且更新全局共用狀態開關的參數。 - resetModifierFlags() - updateModifierFlags(event) - if mgrPrefs.functionKeyboardLayout != mgrPrefs.basisKeyboardLayout { - // 這裡仍舊需要判斷 flags。之前使輸入法狀態卡住無法敲漢字的問題已在 KeyHandler 內修復。 - // 這裡不判斷 flags 的話,用方向鍵前後定位光標之後,再次試圖觸發組字區時、反而會在首次按鍵時失敗。 - // 同時注意:必須在 event.type == .flagsChanged 結尾插入 return false, - // 否則,每次處理這種判斷時都會觸發 NSInternalInconsistencyException。 - if event.type == .flagsChanged { - setKeyLayout(isfunctionKeyboardLayout: getKeyLayoutFlagsCondition(event)) - return false - } + // 這裡仍舊需要判斷 flags。之前使輸入法狀態卡住無法敲漢字的問題已在 KeyHandler 內修復。 + // 這裡不判斷 flags 的話,用方向鍵前後定位光標之後,再次試圖觸發組字區時、反而會在首次按鍵時失敗。 + // 同時注意:必須在 event.type == .flagsChanged 結尾插入 return false, + // 否則,每次處理這種判斷時都會觸發 NSInternalInconsistencyException。 + if event.type == .flagsChanged { + return false } // 準備修飾鍵,用來判定是否需要利用就地新增語彙時的 Enter 鍵來砍詞。 @@ -680,7 +650,7 @@ extension ctlInputMethod: KeyHandlerDelegate { if !state.validToWrite { return false } - let InputModeReversed: InputMode = (ctlInputMethod.currentKeyHandler.inputMode == InputMode.imeModeCHT) ? InputMode.imeModeCHS : InputMode.imeModeCHT + let InputModeReversed: InputMode = (keyHandler.inputMode == InputMode.imeModeCHT) ? InputMode.imeModeCHS : InputMode.imeModeCHT mgrLangModel.writeUserPhrase(state.userPhrase, inputMode: keyHandler.inputMode, areWeDuplicating: state.chkIfUserPhraseExists, areWeDeleting: ctlInputMethod.areWeDeleting) mgrLangModel.writeUserPhrase(state.userPhraseConverted, inputMode: InputModeReversed, areWeDuplicating: false, areWeDeleting: ctlInputMethod.areWeDeleting) return true diff --git a/Source/Modules/IMEModules/mgrPrefs.swift b/Source/Modules/IMEModules/mgrPrefs.swift index 817f7815..b2ab0c00 100644 --- a/Source/Modules/IMEModules/mgrPrefs.swift +++ b/Source/Modules/IMEModules/mgrPrefs.swift @@ -23,8 +23,6 @@ private let kIsDebugModeEnabled = "_DebugMode" private let kCheckUpdateAutomatically = "CheckUpdateAutomatically" private let kKeyboardLayoutPreference = "KeyboardLayout" private let kBasisKeyboardLayoutPreference = "BasisKeyboardLayout" -private let kFunctionKeyKeyboardLayoutPreference = "FunctionKeyKeyboardLayout" -private let kFunctionKeyKeyboardLayoutOverrideIncludeShift = "FunctionKeyKeyboardLayoutOverrideIncludeShift" private let kShowPageButtonsInCandidateWindow = "ShowPageButtonsInCandidateWindow" private let kCandidateListTextSize = "CandidateListTextSize" private let kAppleLanguagesPreferences = "AppleLanguages" @@ -50,8 +48,6 @@ private let kCandidateTextFontName = "CandidateTextFontName" private let kCandidateKeyLabelFontName = "CandidateKeyLabelFontName" private let kCandidateKeys = "CandidateKeys" -private let kChineseConversionEngine = "ChineseConversionEngine" -private let kChineseConversionStyle = "ChineseConversionStyle" private let kAssociatedPhrasesEnabled = "AssociatedPhrasesEnabled" private let kPhraseReplacementEnabled = "PhraseReplacementEnabled" @@ -183,42 +179,12 @@ struct ComposingBufferSize { } } -@objc enum ChineseConversionEngine: Int { - case openCC - case vxHanConvert - - var name: String { - switch (self) { - case .openCC: - return "OpenCC" - case .vxHanConvert: - return "VXHanConvert" - } - } -} - -@objc enum ChineseConversionStyle: Int { - case output - case model - - var name: String { - switch (self) { - case .output: - return "output" - case .model: - return "model" - } - } -} - // MARK: - @objc public class mgrPrefs: NSObject { static var allKeys:[String] { [kIsDebugModeEnabled, kKeyboardLayoutPreference, kBasisKeyboardLayoutPreference, - kFunctionKeyKeyboardLayoutPreference, - kFunctionKeyKeyboardLayoutOverrideIncludeShift, kShowPageButtonsInCandidateWindow, kCandidateListTextSize, kAppleLanguagesPreferences, @@ -243,8 +209,6 @@ struct ComposingBufferSize { kUseSCPCTypingMode, kMaxCandidateLength, kShouldNotFartInLieuOfBeep, - kChineseConversionEngine, - kChineseConversionStyle, kAssociatedPhrasesEnabled] } @@ -365,12 +329,6 @@ struct ComposingBufferSize { @UserDefault(key: kBasisKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.ZhuyinBopomofo") @objc static var basisKeyboardLayout: String - @UserDefault(key: kFunctionKeyKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.ABC") - @objc static var functionKeyboardLayout: String - - @UserDefault(key: kFunctionKeyKeyboardLayoutOverrideIncludeShift, defaultValue: false) - @objc static var functionKeyKeyboardLayoutOverrideIncludeShiftKey: Bool - @UserDefault(key: kShowPageButtonsInCandidateWindow, defaultValue: true) @objc static var showPageButtonsInCandidateWindow: Bool diff --git a/Source/Modules/LangModelRelated/LMInstantiator.h b/Source/Modules/LangModelRelated/LMInstantiator.h index c8b0c504..cefb72fb 100644 --- a/Source/Modules/LangModelRelated/LMInstantiator.h +++ b/Source/Modules/LangModelRelated/LMInstantiator.h @@ -125,13 +125,6 @@ public: /// If CNS11643 input is enabled or not. bool cnsEnabled(); - /// Enables or disables the external converter. - void setExternalConverterEnabled(bool enabled); - /// If the external converted is enabled or not. - bool externalConverterEnabled(); - /// Sets a lambda to let the values of unigrams could be converted by it. - void setExternalConverter(std::function externalConverter); - const std::vector associatedPhrasesForKey(const std::string& key); bool hasAssociatedPhrasesForKey(const std::string& key); @@ -160,8 +153,6 @@ protected: bool m_phraseReplacementEnabled; bool m_cnsEnabled; bool m_symbolEnabled; - bool m_externalConverterEnabled; - std::function m_externalConverter; }; }; diff --git a/Source/Modules/LangModelRelated/LMInstantiator.mm b/Source/Modules/LangModelRelated/LMInstantiator.mm index 870468c8..57f88d7a 100644 --- a/Source/Modules/LangModelRelated/LMInstantiator.mm +++ b/Source/Modules/LangModelRelated/LMInstantiator.mm @@ -246,21 +246,6 @@ bool LMInstantiator::symbolEnabled() return m_symbolEnabled; } -void LMInstantiator::setExternalConverterEnabled(bool enabled) -{ - m_externalConverterEnabled = enabled; -} - -bool LMInstantiator::externalConverterEnabled() -{ - return m_externalConverterEnabled; -} - -void LMInstantiator::setExternalConverter(std::function externalConverter) -{ - m_externalConverter = externalConverter; -} - const std::vector LMInstantiator::filterAndTransformUnigrams(const std::vector unigrams, const std::unordered_set& excludedValues, std::unordered_set& insertedValues) { std::vector results; @@ -280,10 +265,6 @@ const std::vector LMInstantiator::filterAndTransformUnigra value = replacement; } } - if (m_externalConverterEnabled && m_externalConverter) { - std::string replacement = m_externalConverter(value); - value = replacement; - } if (insertedValues.find(value) == insertedValues.end()) { Gramambular::Unigram g; g.keyValue.value = value; diff --git a/Source/Modules/LangModelRelated/mgrLangModel.h b/Source/Modules/LangModelRelated/mgrLangModel.h index ded1aa4e..eba1d6b3 100644 --- a/Source/Modules/LangModelRelated/mgrLangModel.h +++ b/Source/Modules/LangModelRelated/mgrLangModel.h @@ -28,7 +28,6 @@ NS_ASSUME_NONNULL_BEGIN + (void)loadUserPhrases; + (void)loadUserAssociatedPhrases; + (void)loadUserPhraseReplacement; -+ (void)setupDataModelValueConverter; + (BOOL)checkIfUserLanguageModelFilesExist; + (BOOL)checkIfUserDataFolderExists; diff --git a/Source/Modules/LangModelRelated/mgrLangModel.mm b/Source/Modules/LangModelRelated/mgrLangModel.mm index da5eb3bc..c98a740a 100644 --- a/Source/Modules/LangModelRelated/mgrLangModel.mm +++ b/Source/Modules/LangModelRelated/mgrLangModel.mm @@ -134,32 +134,6 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing gLangModelCHS.loadPhraseReplacementMap([[self phraseReplacementDataPath:imeModeCHS] UTF8String]); } -+ (void)setupDataModelValueConverter -{ - auto converter = [] (string input) { -// if (!mgrPrefs.chineseConversionEnabled) { -// return input; -// } -// -// if (mgrPrefs.chineseConversionStyle == 0) { -// return input; -// } -// -// NSString *text = [NSString stringWithUTF8String:input.c_str()]; -// if (mgrPrefs.chineseConversionEngine == 1) { -// text = [VXHanConvert convertToKangXiFrom:text]; -// } -// else { -// text = [OpenCCBridge convertToKangXi:text]; -// } -// return string(text.UTF8String); - return input; - }; - - gLangModelCHT.setExternalConverter(converter); - gLangModelCHS.setExternalConverter(converter); -} - + (BOOL)checkIfUserDataFolderExists { NSString *folderPath = [self dataFolderPath]; @@ -244,24 +218,6 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing // BOOL addLineBreakAtFront = NO; NSString *path = areWeDeleting ? [self excludedPhrasesDataPath:mode] : [self userPhrasesDataPath:mode]; -// if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { -// NSError *error = nil; -// NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&error]; -// unsigned long long fileSize = [attr fileSize]; -// if (!error && fileSize) { -// NSFileHandle *readFile = [NSFileHandle fileHandleForReadingAtPath:path]; -// if (readFile) { -// [readFile seekToFileOffset:fileSize - 1]; -// NSData *data = [readFile readDataToEndOfFile]; -// const void *bytes = [data bytes]; -// if (*(char *)bytes != '\n') { -// addLineBreakAtFront = YES; -// } -// [readFile closeFile]; -// } -// } -// } - NSMutableString *currentMarkedPhrase = [NSMutableString string]; // if (addLineBreakAtFront) { // [currentMarkedPhrase appendString:@"\n"]; diff --git a/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib index 4fc4b409..5cf4fda9 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib +++ b/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib @@ -19,6 +19,7 @@ + @@ -161,7 +162,7 @@ - + @@ -448,7 +448,7 @@ - + @@ -456,7 +456,7 @@ - + @@ -481,7 +481,7 @@ - + @@ -489,7 +489,7 @@