InputHandler // Accommodating Tekkon 1.3.1 update.

- Also add Shift+Ctrl+Command+Option+Enter support for committing non-HTML textbook readings only.
This commit is contained in:
ShikiSuen 2022-12-15 11:45:00 +08:00
parent d9e7033f90
commit c13d223bb2
4 changed files with 58 additions and 23 deletions

View File

@ -181,25 +181,27 @@ extension IMEStateData {
public var readingThreadForDisplay: String { public var readingThreadForDisplay: String {
var arrOutput = [String]() var arrOutput = [String]()
for neta in markedReadings { for neta in markedReadings {
var neta = neta
if neta.isEmpty { continue } if neta.isEmpty { continue }
if neta.contains("_") { if neta.contains("_") {
arrOutput.append("??") arrOutput.append("??")
continue continue
} }
if !PrefMgr.shared.cassetteEnabled { neta.components(separatedBy: "-").forEach { subNeta in
if PrefMgr.shared.showHanyuPinyinInCompositionBuffer, var subNeta = subNeta
PrefMgr.shared.alwaysShowTooltipTextsHorizontally || !isVerticalTyping if !PrefMgr.shared.cassetteEnabled {
{ if PrefMgr.shared.showHanyuPinyinInCompositionBuffer,
// ->->調 PrefMgr.shared.alwaysShowTooltipTextsHorizontally || !isVerticalTyping
neta = Tekkon.restoreToneOneInZhuyinKey(targetJoined: neta) {
neta = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: neta) // ->->調
neta = Tekkon.cnvHanyuPinyinToTextbookStyle(targetJoined: neta) subNeta = Tekkon.restoreToneOneInPhona(target: subNeta)
} else { subNeta = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: subNeta)
neta = Tekkon.cnvZhuyinChainToTextbookReading(targetJoined: neta) subNeta = Tekkon.cnvHanyuPinyinToTextbookStyle(targetJoined: subNeta)
} else {
subNeta = Tekkon.cnvPhonaToTextbookReading(target: subNeta)
}
} }
arrOutput.append(subNeta)
} }
arrOutput.append(neta)
} }
return arrOutput.joined(separator: "\u{A0}") return arrOutput.joined(separator: "\u{A0}")
} }

View File

@ -149,7 +149,7 @@ extension InputHandler {
case .kCarriageReturn, .kLineFeed: // Enter case .kCarriageReturn, .kLineFeed: // Enter
return (input.isCommandHold && input.isControlHold) return (input.isCommandHold && input.isControlHold)
? (input.isOptionHold ? (input.isOptionHold
? handleCtrlOptionCommandEnter() ? handleCtrlOptionCommandEnter(isShiftPressed: input.isShiftHold)
: handleCtrlCommandEnter(isShiftPressed: input.isShiftHold)) : handleCtrlCommandEnter(isShiftPressed: input.isShiftHold))
: handleEnter() : handleEnter()
case .kSpace: // Space case .kSpace: // Space

View File

@ -295,6 +295,7 @@ extension InputHandler {
// MARK: - Command+Enter // MARK: - Command+Enter
/// Command+Enter /// Command+Enter
/// - Parameter isShiftPressed: Shift
/// - Returns: SessionCtl IMK /// - Returns: SessionCtl IMK
func handleCtrlCommandEnter(isShiftPressed: Bool = false) -> Bool { func handleCtrlCommandEnter(isShiftPressed: Bool = false) -> Bool {
guard let delegate = delegate else { return false } guard let delegate = delegate else { return false }
@ -308,7 +309,11 @@ extension InputHandler {
if !prefs.cassetteEnabled { if !prefs.cassetteEnabled {
if prefs.inlineDumpPinyinInLieuOfZhuyin { if prefs.inlineDumpPinyinInLieuOfZhuyin {
if !compositor.isEmpty { if !compositor.isEmpty {
displayedText = Tekkon.restoreToneOneInZhuyinKey(targetJoined: displayedText) // var arrDisplayedTextElements = [String]()
compositor.keys.forEach { key in
arrDisplayedTextElements.append(Tekkon.restoreToneOneInPhona(target: key)) //
}
displayedText = arrDisplayedTextElements.joined(separator: "\t")
} }
displayedText = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: displayedText) // displayedText = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: displayedText) //
} }
@ -328,8 +333,9 @@ extension InputHandler {
// MARK: - Command+Option+Enter Ruby // MARK: - Command+Option+Enter Ruby
/// Command+Option+Enter Ruby /// Command+Option+Enter Ruby
/// - Parameter isShiftPressed: Shift
/// - Returns: SessionCtl IMK /// - Returns: SessionCtl IMK
func handleCtrlOptionCommandEnter() -> Bool { func handleCtrlOptionCommandEnter(isShiftPressed: Bool = false) -> Bool {
guard let delegate = delegate else { return false } guard let delegate = delegate else { return false }
let state = delegate.state let state = delegate.state
guard state.type == .ofInputting else { return false } guard state.type == .ofInputting else { return false }
@ -337,19 +343,33 @@ extension InputHandler {
var composed = "" var composed = ""
for node in compositor.walkedNodes { for node in compositor.walkedNodes {
var key = node.keyArray.joined(separator: "\t") var key = node.keyArray.joined(separator: " ")
if !prefs.cassetteEnabled { if !prefs.cassetteEnabled {
var keyArray = node.keyArray
for (i, neta) in keyArray.enumerated() {
keyArray[i] =
prefs.inlineDumpPinyinInLieuOfZhuyin
? Tekkon.restoreToneOneInPhona(target: neta) //
: Tekkon.cnvPhonaToTextbookReading(target: neta) //
}
key = keyArray.joined(separator: "\t")
if prefs.inlineDumpPinyinInLieuOfZhuyin { if prefs.inlineDumpPinyinInLieuOfZhuyin {
key = Tekkon.restoreToneOneInZhuyinKey(targetJoined: key) //
key = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: key) // key = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: key) //
key = Tekkon.cnvHanyuPinyinToTextbookStyle(targetJoined: key) // 調 key = Tekkon.cnvHanyuPinyinToTextbookStyle(targetJoined: key) // 調
key = key.replacingOccurrences(of: "\t", with: " ")
} else {
key = Tekkon.cnvZhuyinChainToTextbookReading(targetJoined: key, newSeparator: " ")
} }
key = key.replacingOccurrences(of: "\t", with: " ")
} }
let value = node.value let value = node.value
if isShiftPressed {
if !composed.isEmpty { composed += " " }
composed += key
continue
}
// //
composed += key.contains("_") ? value : "<ruby>\(value)<rp>(</rp><rt>\(key)</rt><rp>)</rp></ruby>" composed += key.contains("_") ? value : "<ruby>\(value)<rp>(</rp><rt>\(key)</rt><rp>)</rp></ruby>"
} }

View File

@ -32,8 +32,14 @@ extension SessionCtl {
? theCandidate.0.joined(separator: separator) ? theCandidate.0.joined(separator: separator)
: (PrefMgr.shared.showHanyuPinyinInCompositionBuffer : (PrefMgr.shared.showHanyuPinyinInCompositionBuffer
? Tekkon.cnvPhonaToHanyuPinyin( ? Tekkon.cnvPhonaToHanyuPinyin(
targetJoined: Tekkon.restoreToneOneInZhuyinKey( targetJoined: {
targetJoined: theCandidate.0.joined(separator: separator))) var arr = [String]()
theCandidate.0.forEach { key in
arr.append(Tekkon.restoreToneOneInPhona(target: key))
}
return arr.joined(separator: "-")
}()
)
: theCandidate.0.joined(separator: separator)) : theCandidate.0.joined(separator: separator))
result = "\(result)\u{17}(\(reading))" result = "\(result)\u{17}(\(reading))"
} }
@ -95,7 +101,14 @@ extension SessionCtl {
? neta.0.joined(separator: separator) ? neta.0.joined(separator: separator)
: (PrefMgr.shared.showHanyuPinyinInCompositionBuffer : (PrefMgr.shared.showHanyuPinyinInCompositionBuffer
? Tekkon.cnvPhonaToHanyuPinyin( ? Tekkon.cnvPhonaToHanyuPinyin(
targetJoined: Tekkon.restoreToneOneInZhuyinKey(targetJoined: neta.0.joined(separator: separator))) targetJoined: {
var arr = [String]()
neta.0.forEach { key in
arr.append(Tekkon.restoreToneOneInPhona(target: key))
}
return arr.joined(separator: "-")
}()
)
: neta.0.joined(separator: separator)) : neta.0.joined(separator: separator))
let netaShownWithPronunciation = "\(netaShown)\u{17}(\(reading))" let netaShownWithPronunciation = "\(netaShown)\u{17}(\(reading))"
if candidateString == prefix + netaShownWithPronunciation { if candidateString == prefix + netaShownWithPronunciation {