KeyConv // Mass refactor for performance optimization.

This commit is contained in:
ShikiSuen 2022-07-02 09:58:16 +08:00
parent 57f791b147
commit fa5dce444a
1 changed files with 270 additions and 241 deletions

View File

@ -24,7 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import Cocoa import Cocoa
class AppleKeyboardConverter: NSObject { enum AppleKeyboardConverter {
static let arrDynamicBasicKeyLayout: [String] = [ static let arrDynamicBasicKeyLayout: [String] = [
"com.apple.keylayout.ZhuyinBopomofo", "com.apple.keylayout.ZhuyinBopomofo",
"com.apple.keylayout.ZhuyinEten", "com.apple.keylayout.ZhuyinEten",
@ -39,287 +39,316 @@ class AppleKeyboardConverter: NSObject {
"org.unknown.keylayout.vChewingIBM", "org.unknown.keylayout.vChewingIBM",
"org.unknown.keylayout.vChewingMiTAC", "org.unknown.keylayout.vChewingMiTAC",
] ]
class func isDynamicBasicKeyboardLayoutEnabled() -> Bool {
static var isDynamicBasicKeyboardLayoutEnabled: Bool {
AppleKeyboardConverter.arrDynamicBasicKeyLayout.contains(mgrPrefs.basicKeyboardLayout) AppleKeyboardConverter.arrDynamicBasicKeyLayout.contains(mgrPrefs.basicKeyboardLayout)
} }
// Apple // Apple
class func cnvApple2ABC(_ charCode: UniChar) -> UniChar { static func cnvApple2ABC(_ charCode: UniChar) -> UniChar {
var charCode = charCode var charCode = charCode
// OVMandarin OVMandarin //
if isDynamicBasicKeyboardLayoutEnabled() { if isDynamicBasicKeyboardLayoutEnabled {
// Apple // Apple
switch mgrPrefs.basicKeyboardLayout { switch mgrPrefs.basicKeyboardLayout {
case "com.apple.keylayout.ZhuyinBopomofo": case "com.apple.keylayout.ZhuyinBopomofo":
do { switch charCode {
if charCode == 97 { charCode = UniChar(65) } case 97: charCode = UniChar(65)
if charCode == 98 { charCode = UniChar(66) } case 98: charCode = UniChar(66)
if charCode == 99 { charCode = UniChar(67) } case 99: charCode = UniChar(67)
if charCode == 100 { charCode = UniChar(68) } case 100: charCode = UniChar(68)
if charCode == 101 { charCode = UniChar(69) } case 101: charCode = UniChar(69)
if charCode == 102 { charCode = UniChar(70) } case 102: charCode = UniChar(70)
if charCode == 103 { charCode = UniChar(71) } case 103: charCode = UniChar(71)
if charCode == 104 { charCode = UniChar(72) } case 104: charCode = UniChar(72)
if charCode == 105 { charCode = UniChar(73) } case 105: charCode = UniChar(73)
if charCode == 106 { charCode = UniChar(74) } case 106: charCode = UniChar(74)
if charCode == 107 { charCode = UniChar(75) } case 107: charCode = UniChar(75)
if charCode == 108 { charCode = UniChar(76) } case 108: charCode = UniChar(76)
if charCode == 109 { charCode = UniChar(77) } case 109: charCode = UniChar(77)
if charCode == 110 { charCode = UniChar(78) } case 110: charCode = UniChar(78)
if charCode == 111 { charCode = UniChar(79) } case 111: charCode = UniChar(79)
if charCode == 112 { charCode = UniChar(80) } case 112: charCode = UniChar(80)
if charCode == 113 { charCode = UniChar(81) } case 113: charCode = UniChar(81)
if charCode == 114 { charCode = UniChar(82) } case 114: charCode = UniChar(82)
if charCode == 115 { charCode = UniChar(83) } case 115: charCode = UniChar(83)
if charCode == 116 { charCode = UniChar(84) } case 116: charCode = UniChar(84)
if charCode == 117 { charCode = UniChar(85) } case 117: charCode = UniChar(85)
if charCode == 118 { charCode = UniChar(86) } case 118: charCode = UniChar(86)
if charCode == 119 { charCode = UniChar(87) } case 119: charCode = UniChar(87)
if charCode == 120 { charCode = UniChar(88) } case 120: charCode = UniChar(88)
if charCode == 121 { charCode = UniChar(89) } case 121: charCode = UniChar(89)
if charCode == 122 { charCode = UniChar(90) } case 122: charCode = UniChar(90)
default: break
} }
case "com.apple.keylayout.ZhuyinEten": case "com.apple.keylayout.ZhuyinEten":
do { switch charCode {
if charCode == 65345 { charCode = UniChar(65) } case 65345: charCode = UniChar(65)
if charCode == 65346 { charCode = UniChar(66) } case 65346: charCode = UniChar(66)
if charCode == 65347 { charCode = UniChar(67) } case 65347: charCode = UniChar(67)
if charCode == 65348 { charCode = UniChar(68) } case 65348: charCode = UniChar(68)
if charCode == 65349 { charCode = UniChar(69) } case 65349: charCode = UniChar(69)
if charCode == 65350 { charCode = UniChar(70) } case 65350: charCode = UniChar(70)
if charCode == 65351 { charCode = UniChar(71) } case 65351: charCode = UniChar(71)
if charCode == 65352 { charCode = UniChar(72) } case 65352: charCode = UniChar(72)
if charCode == 65353 { charCode = UniChar(73) } case 65353: charCode = UniChar(73)
if charCode == 65354 { charCode = UniChar(74) } case 65354: charCode = UniChar(74)
if charCode == 65355 { charCode = UniChar(75) } case 65355: charCode = UniChar(75)
if charCode == 65356 { charCode = UniChar(76) } case 65356: charCode = UniChar(76)
if charCode == 65357 { charCode = UniChar(77) } case 65357: charCode = UniChar(77)
if charCode == 65358 { charCode = UniChar(78) } case 65358: charCode = UniChar(78)
if charCode == 65359 { charCode = UniChar(79) } case 65359: charCode = UniChar(79)
if charCode == 65360 { charCode = UniChar(80) } case 65360: charCode = UniChar(80)
if charCode == 65361 { charCode = UniChar(81) } case 65361: charCode = UniChar(81)
if charCode == 65362 { charCode = UniChar(82) } case 65362: charCode = UniChar(82)
if charCode == 65363 { charCode = UniChar(83) } case 65363: charCode = UniChar(83)
if charCode == 65364 { charCode = UniChar(84) } case 65364: charCode = UniChar(84)
if charCode == 65365 { charCode = UniChar(85) } case 65365: charCode = UniChar(85)
if charCode == 65366 { charCode = UniChar(86) } case 65366: charCode = UniChar(86)
if charCode == 65367 { charCode = UniChar(87) } case 65367: charCode = UniChar(87)
if charCode == 65368 { charCode = UniChar(88) } case 65368: charCode = UniChar(88)
if charCode == 65369 { charCode = UniChar(89) } case 65369: charCode = UniChar(89)
if charCode == 65370 { charCode = UniChar(90) } case 65370: charCode = UniChar(90)
default: break
} }
default: break default: break
} }
// //
if charCode == 12573 { charCode = UniChar(44) } switch charCode {
if charCode == 12582 { charCode = UniChar(45) } case 12573: charCode = UniChar(44)
if charCode == 12577 { charCode = UniChar(46) } case 12582: charCode = UniChar(45)
if charCode == 12581 { charCode = UniChar(47) } case 12577: charCode = UniChar(46)
if charCode == 12578 { charCode = UniChar(48) } case 12581: charCode = UniChar(47)
if charCode == 12549 { charCode = UniChar(49) } case 12578: charCode = UniChar(48)
if charCode == 12553 { charCode = UniChar(50) } case 12549: charCode = UniChar(49)
if charCode == 711 { charCode = UniChar(51) } case 12553: charCode = UniChar(50)
if charCode == 715 { charCode = UniChar(52) } case 711: charCode = UniChar(51)
if charCode == 12563 { charCode = UniChar(53) } case 715: charCode = UniChar(52)
if charCode == 714 { charCode = UniChar(54) } case 12563: charCode = UniChar(53)
if charCode == 729 { charCode = UniChar(55) } case 714: charCode = UniChar(54)
if charCode == 12570 { charCode = UniChar(56) } case 729: charCode = UniChar(55)
if charCode == 12574 { charCode = UniChar(57) } case 12570: charCode = UniChar(56)
if charCode == 12580 { charCode = UniChar(59) } case 12574: charCode = UniChar(57)
if charCode == 12551 { charCode = UniChar(97) } case 12580: charCode = UniChar(59)
if charCode == 12566 { charCode = UniChar(98) } case 12551: charCode = UniChar(97)
if charCode == 12559 { charCode = UniChar(99) } case 12566: charCode = UniChar(98)
if charCode == 12558 { charCode = UniChar(100) } case 12559: charCode = UniChar(99)
if charCode == 12557 { charCode = UniChar(101) } case 12558: charCode = UniChar(100)
if charCode == 12561 { charCode = UniChar(102) } case 12557: charCode = UniChar(101)
if charCode == 12565 { charCode = UniChar(103) } case 12561: charCode = UniChar(102)
if charCode == 12568 { charCode = UniChar(104) } case 12565: charCode = UniChar(103)
if charCode == 12571 { charCode = UniChar(105) } case 12568: charCode = UniChar(104)
if charCode == 12584 { charCode = UniChar(106) } case 12571: charCode = UniChar(105)
if charCode == 12572 { charCode = UniChar(107) } case 12584: charCode = UniChar(106)
if charCode == 12576 { charCode = UniChar(108) } case 12572: charCode = UniChar(107)
if charCode == 12585 { charCode = UniChar(109) } case 12576: charCode = UniChar(108)
if charCode == 12569 { charCode = UniChar(110) } case 12585: charCode = UniChar(109)
if charCode == 12575 { charCode = UniChar(111) } case 12569: charCode = UniChar(110)
if charCode == 12579 { charCode = UniChar(112) } case 12575: charCode = UniChar(111)
if charCode == 12550 { charCode = UniChar(113) } case 12579: charCode = UniChar(112)
if charCode == 12560 { charCode = UniChar(114) } case 12550: charCode = UniChar(113)
if charCode == 12555 { charCode = UniChar(115) } case 12560: charCode = UniChar(114)
if charCode == 12564 { charCode = UniChar(116) } case 12555: charCode = UniChar(115)
if charCode == 12583 { charCode = UniChar(117) } case 12564: charCode = UniChar(116)
if charCode == 12562 { charCode = UniChar(118) } case 12583: charCode = UniChar(117)
if charCode == 12554 { charCode = UniChar(119) } case 12562: charCode = UniChar(118)
if charCode == 12556 { charCode = UniChar(120) } case 12554: charCode = UniChar(119)
if charCode == 12567 { charCode = UniChar(121) } case 12556: charCode = UniChar(120)
if charCode == 12552 { charCode = UniChar(122) } case 12567: charCode = UniChar(121)
case 12552: charCode = UniChar(122)
default: break
}
// //
if charCode == 12289 { charCode = UniChar(92) } switch charCode {
if charCode == 12300 { charCode = UniChar(91) } case 12289: charCode = UniChar(92)
if charCode == 12301 { charCode = UniChar(93) } case 12300: charCode = UniChar(91)
if charCode == 12302 { charCode = UniChar(123) } case 12301: charCode = UniChar(93)
if charCode == 12303 { charCode = UniChar(125) } case 12302: charCode = UniChar(123)
if charCode == 65292 { charCode = UniChar(60) } case 12303: charCode = UniChar(125)
if charCode == 12290 { charCode = UniChar(62) } case 65292: charCode = UniChar(60)
case 12290: charCode = UniChar(62)
default: break
}
// SHIFT // SHIFT
if charCode == 65281 { charCode = UniChar(33) } switch charCode {
if charCode == 65312 { charCode = UniChar(64) } case 65281: charCode = UniChar(33)
if charCode == 65283 { charCode = UniChar(35) } case 65312: charCode = UniChar(64)
if charCode == 65284 { charCode = UniChar(36) } case 65283: charCode = UniChar(35)
if charCode == 65285 { charCode = UniChar(37) } case 65284: charCode = UniChar(36)
if charCode == 65087 { charCode = UniChar(94) } case 65285: charCode = UniChar(37)
if charCode == 65286 { charCode = UniChar(38) } case 65087: charCode = UniChar(94)
if charCode == 65290 { charCode = UniChar(42) } case 65286: charCode = UniChar(38)
if charCode == 65288 { charCode = UniChar(40) } case 65290: charCode = UniChar(42)
if charCode == 65289 { charCode = UniChar(41) } case 65288: charCode = UniChar(40)
case 65289: charCode = UniChar(41)
default: break
}
// Alt // Alt
if charCode == 8212 { charCode = UniChar(45) } if charCode == 8212 { charCode = UniChar(45) }
// Apple // Apple
if mgrPrefs.basicKeyboardLayout == "com.apple.keylayout.ZhuyinEten" { if mgrPrefs.basicKeyboardLayout == "com.apple.keylayout.ZhuyinEten" {
if charCode == 65343 { charCode = UniChar(95) } switch charCode {
if charCode == 65306 { charCode = UniChar(58) } case 65343: charCode = UniChar(95)
if charCode == 65311 { charCode = UniChar(63) } case 65306: charCode = UniChar(58)
if charCode == 65291 { charCode = UniChar(43) } case 65311: charCode = UniChar(63)
if charCode == 65372 { charCode = UniChar(124) } case 65291: charCode = UniChar(43)
case 65372: charCode = UniChar(124)
default: break
}
} }
} }
return charCode return charCode
} }
class func cnvStringApple2ABC(_ strProcessed: String) -> String { static func cnvStringApple2ABC(_ strProcessed: String) -> String {
var strProcessed = strProcessed var strProcessed = strProcessed
if isDynamicBasicKeyboardLayoutEnabled() { if isDynamicBasicKeyboardLayoutEnabled {
// Apple // Apple
switch mgrPrefs.basicKeyboardLayout { switch mgrPrefs.basicKeyboardLayout {
case "com.apple.keylayout.ZhuyinBopomofo": case "com.apple.keylayout.ZhuyinBopomofo":
do { switch strProcessed {
if strProcessed == "a" { strProcessed = "A" } case "a": strProcessed = "A"
if strProcessed == "b" { strProcessed = "B" } case "b": strProcessed = "B"
if strProcessed == "c" { strProcessed = "C" } case "c": strProcessed = "C"
if strProcessed == "d" { strProcessed = "D" } case "d": strProcessed = "D"
if strProcessed == "e" { strProcessed = "E" } case "e": strProcessed = "E"
if strProcessed == "f" { strProcessed = "F" } case "f": strProcessed = "F"
if strProcessed == "g" { strProcessed = "G" } case "g": strProcessed = "G"
if strProcessed == "h" { strProcessed = "H" } case "h": strProcessed = "H"
if strProcessed == "i" { strProcessed = "I" } case "i": strProcessed = "I"
if strProcessed == "j" { strProcessed = "J" } case "j": strProcessed = "J"
if strProcessed == "k" { strProcessed = "K" } case "k": strProcessed = "K"
if strProcessed == "l" { strProcessed = "L" } case "l": strProcessed = "L"
if strProcessed == "m" { strProcessed = "M" } case "m": strProcessed = "M"
if strProcessed == "n" { strProcessed = "N" } case "n": strProcessed = "N"
if strProcessed == "o" { strProcessed = "O" } case "o": strProcessed = "O"
if strProcessed == "p" { strProcessed = "P" } case "p": strProcessed = "P"
if strProcessed == "q" { strProcessed = "Q" } case "q": strProcessed = "Q"
if strProcessed == "r" { strProcessed = "R" } case "r": strProcessed = "R"
if strProcessed == "s" { strProcessed = "S" } case "s": strProcessed = "S"
if strProcessed == "t" { strProcessed = "T" } case "t": strProcessed = "T"
if strProcessed == "u" { strProcessed = "U" } case "u": strProcessed = "U"
if strProcessed == "v" { strProcessed = "V" } case "v": strProcessed = "V"
if strProcessed == "w" { strProcessed = "W" } case "w": strProcessed = "W"
if strProcessed == "x" { strProcessed = "X" } case "x": strProcessed = "X"
if strProcessed == "y" { strProcessed = "Y" } case "y": strProcessed = "Y"
if strProcessed == "z" { strProcessed = "Z" } case "z": strProcessed = "Z"
default: break
} }
case "com.apple.keylayout.ZhuyinEten": case "com.apple.keylayout.ZhuyinEten":
do { switch strProcessed {
if strProcessed == "" { strProcessed = "A" } case "": strProcessed = "A"
if strProcessed == "" { strProcessed = "B" } case "": strProcessed = "B"
if strProcessed == "" { strProcessed = "C" } case "": strProcessed = "C"
if strProcessed == "" { strProcessed = "D" } case "": strProcessed = "D"
if strProcessed == "" { strProcessed = "E" } case "": strProcessed = "E"
if strProcessed == "" { strProcessed = "F" } case "": strProcessed = "F"
if strProcessed == "" { strProcessed = "G" } case "": strProcessed = "G"
if strProcessed == "" { strProcessed = "H" } case "": strProcessed = "H"
if strProcessed == "" { strProcessed = "I" } case "": strProcessed = "I"
if strProcessed == "" { strProcessed = "J" } case "": strProcessed = "J"
if strProcessed == "" { strProcessed = "K" } case "": strProcessed = "K"
if strProcessed == "" { strProcessed = "L" } case "": strProcessed = "L"
if strProcessed == "" { strProcessed = "M" } case "": strProcessed = "M"
if strProcessed == "" { strProcessed = "N" } case "": strProcessed = "N"
if strProcessed == "" { strProcessed = "O" } case "": strProcessed = "O"
if strProcessed == "" { strProcessed = "P" } case "": strProcessed = "P"
if strProcessed == "" { strProcessed = "Q" } case "": strProcessed = "Q"
if strProcessed == "" { strProcessed = "R" } case "": strProcessed = "R"
if strProcessed == "" { strProcessed = "S" } case "": strProcessed = "S"
if strProcessed == "" { strProcessed = "T" } case "": strProcessed = "T"
if strProcessed == "" { strProcessed = "U" } case "": strProcessed = "U"
if strProcessed == "" { strProcessed = "V" } case "": strProcessed = "V"
if strProcessed == "" { strProcessed = "W" } case "": strProcessed = "W"
if strProcessed == "" { strProcessed = "X" } case "": strProcessed = "X"
if strProcessed == "" { strProcessed = "Y" } case "": strProcessed = "Y"
if strProcessed == "" { strProcessed = "Z" } case "": strProcessed = "Z"
default: break
} }
default: break default: break
} }
// //
if strProcessed == "" { strProcessed = "," } switch strProcessed {
if strProcessed == "" { strProcessed = "-" } case "": strProcessed = ","
if strProcessed == "" { strProcessed = "." } case "": strProcessed = "-"
if strProcessed == "" { strProcessed = "/" } case "": strProcessed = "."
if strProcessed == "" { strProcessed = "0" } case "": strProcessed = "/"
if strProcessed == "" { strProcessed = "1" } case "": strProcessed = "0"
if strProcessed == "" { strProcessed = "2" } case "": strProcessed = "1"
if strProcessed == "ˇ" { strProcessed = "3" } case "": strProcessed = "2"
if strProcessed == "ˋ" { strProcessed = "4" } case "ˇ": strProcessed = "3"
if strProcessed == "" { strProcessed = "5" } case "ˋ": strProcessed = "4"
if strProcessed == "ˊ" { strProcessed = "6" } case "": strProcessed = "5"
if strProcessed == "˙" { strProcessed = "7" } case "ˊ": strProcessed = "6"
if strProcessed == "" { strProcessed = "8" } case "˙": strProcessed = "7"
if strProcessed == "" { strProcessed = "9" } case "": strProcessed = "8"
if strProcessed == "" { strProcessed = ";" } case "": strProcessed = "9"
if strProcessed == "" { strProcessed = "a" } case "": strProcessed = ";"
if strProcessed == "" { strProcessed = "b" } case "": strProcessed = "a"
if strProcessed == "" { strProcessed = "c" } case "": strProcessed = "b"
if strProcessed == "" { strProcessed = "d" } case "": strProcessed = "c"
if strProcessed == "" { strProcessed = "e" } case "": strProcessed = "d"
if strProcessed == "" { strProcessed = "f" } case "": strProcessed = "e"
if strProcessed == "" { strProcessed = "g" } case "": strProcessed = "f"
if strProcessed == "" { strProcessed = "h" } case "": strProcessed = "g"
if strProcessed == "" { strProcessed = "i" } case "": strProcessed = "h"
if strProcessed == "" { strProcessed = "j" } case "": strProcessed = "i"
if strProcessed == "" { strProcessed = "k" } case "": strProcessed = "j"
if strProcessed == "" { strProcessed = "l" } case "": strProcessed = "k"
if strProcessed == "" { strProcessed = "m" } case "": strProcessed = "l"
if strProcessed == "" { strProcessed = "n" } case "": strProcessed = "m"
if strProcessed == "" { strProcessed = "o" } case "": strProcessed = "n"
if strProcessed == "" { strProcessed = "p" } case "": strProcessed = "o"
if strProcessed == "" { strProcessed = "q" } case "": strProcessed = "p"
if strProcessed == "" { strProcessed = "r" } case "": strProcessed = "q"
if strProcessed == "" { strProcessed = "s" } case "": strProcessed = "r"
if strProcessed == "" { strProcessed = "t" } case "": strProcessed = "s"
if strProcessed == "" { strProcessed = "u" } case "": strProcessed = "t"
if strProcessed == "" { strProcessed = "v" } case "": strProcessed = "u"
if strProcessed == "" { strProcessed = "w" } case "": strProcessed = "v"
if strProcessed == "" { strProcessed = "x" } case "": strProcessed = "w"
if strProcessed == "" { strProcessed = "y" } case "": strProcessed = "x"
if strProcessed == "" { strProcessed = "z" } case "": strProcessed = "y"
case "": strProcessed = "z"
default: break
}
// //
if strProcessed == "" { strProcessed = "\\" } switch strProcessed {
if strProcessed == "" { strProcessed = "[" } case "": strProcessed = "\\"
if strProcessed == "" { strProcessed = "]" } case "": strProcessed = "["
if strProcessed == "" { strProcessed = "{" } case "": strProcessed = "]"
if strProcessed == "" { strProcessed = "}" } case "": strProcessed = "{"
if strProcessed == "" { strProcessed = "<" } case "": strProcessed = "}"
if strProcessed == "" { strProcessed = ">" } case "": strProcessed = "<"
case "": strProcessed = ">"
default: break
}
// SHIFT // SHIFT
if strProcessed == "" { strProcessed = "!" } switch strProcessed {
if strProcessed == "" { strProcessed = "@" } case "": strProcessed = "!"
if strProcessed == "" { strProcessed = "#" } case "": strProcessed = "@"
if strProcessed == "" { strProcessed = "$" } case "": strProcessed = "#"
if strProcessed == "" { strProcessed = "%" } case "": strProcessed = "$"
if strProcessed == "︿" { strProcessed = "^" } case "": strProcessed = "%"
if strProcessed == "" { strProcessed = "&" } case "︿": strProcessed = "^"
if strProcessed == "" { strProcessed = "*" } case "": strProcessed = "&"
if strProcessed == "" { strProcessed = "(" } case "": strProcessed = "*"
if strProcessed == "" { strProcessed = ")" } case "": strProcessed = "("
case "": strProcessed = ")"
default: break
}
// Alt // Alt
if strProcessed == "" { strProcessed = "-" } if strProcessed == "" { strProcessed = "-" }
// Apple // Apple
if mgrPrefs.basicKeyboardLayout == "com.apple.keylayout.ZhuyinEten" { if mgrPrefs.basicKeyboardLayout == "com.apple.keylayout.ZhuyinEten" {
if strProcessed == "_" { strProcessed = "_" } switch strProcessed {
if strProcessed == "" { strProcessed = ":" } case "_": strProcessed = "_"
if strProcessed == "" { strProcessed = "?" } case "": strProcessed = ":"
if strProcessed == "" { strProcessed = "+" } case "": strProcessed = "?"
if strProcessed == "" { strProcessed = "|" } case "": strProcessed = "+"
case "": strProcessed = "|"
default: break
}
} }
} }
return strProcessed return strProcessed