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