diff --git a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift index 8a8bbe10..dfa2b988 100644 --- a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift +++ b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift @@ -134,6 +134,19 @@ public extension NSApplication { } } +// MARK: - String.applyingTransform + +public extension String { + func applyingTransformFW2HW(reverse: Bool) -> String { + if #available(macOS 10.11, *) { + return applyingTransform(.fullwidthToHalfwidth, reverse: reverse) ?? self + } + let theString = NSMutableString(string: self) + CFStringTransform(theString, nil, kCFStringTransformFullwidthHalfwidth, reverse) + return theString as String + } +} + // MARK: - Check whether current date is the given date. public extension Date { diff --git a/Source/Modules/InputHandler_HandleInput.swift b/Source/Modules/InputHandler_HandleInput.swift index 7b3f5db8..57636c25 100644 --- a/Source/Modules/InputHandler_HandleInput.swift +++ b/Source/Modules/InputHandler_HandleInput.swift @@ -235,8 +235,7 @@ extension InputHandler { if state.type == .ofEmpty { if input.isMainAreaNumKey, input.modifierFlags == [.shift, .option] { guard let strRAW = input.mainAreaNumKeyChar else { return false } - let newString = - strRAW.applyingTransform(.fullwidthToHalfwidth, reverse: !prefs.halfWidthPunctuationEnabled) ?? strRAW + let newString = strRAW.applyingTransformFW2HW(reverse: !prefs.halfWidthPunctuationEnabled) delegate.switchState(IMEState.ofCommitting(textToCommit: newString)) return true } diff --git a/Source/Modules/SessionCtl_HandleEvent.swift b/Source/Modules/SessionCtl_HandleEvent.swift index b485d95a..ba1948e7 100644 --- a/Source/Modules/SessionCtl_HandleEvent.swift +++ b/Source/Modules/SessionCtl_HandleEvent.swift @@ -130,7 +130,7 @@ public extension SessionCtl { // Apple 數字小鍵盤處理 if eventToDeal.isNumericPadKey, - let eventCharConverted = eventToDeal.characters?.applyingTransform(.fullwidthToHalfwidth, reverse: false) + let eventCharConverted = eventToDeal.characters?.applyingTransformFW2HW(reverse: false) { eventToDeal = eventToDeal.reinitiate(characters: eventCharConverted) ?? eventToDeal }