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 {
var arrOutput = [String]()
for neta in markedReadings {
var neta = neta
if neta.isEmpty { continue }
if neta.contains("_") {
arrOutput.append("??")
continue
}
neta.components(separatedBy: "-").forEach { subNeta in
var subNeta = subNeta
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)
subNeta = Tekkon.cnvPhonaToHanyuPinyin(targetJoined: subNeta)
subNeta = Tekkon.cnvHanyuPinyinToTextbookStyle(targetJoined: subNeta)
} else {
neta = Tekkon.cnvZhuyinChainToTextbookReading(targetJoined: neta)
subNeta = Tekkon.cnvPhonaToTextbookReading(target: subNeta)
}
}
arrOutput.append(neta)
arrOutput.append(subNeta)
}
}
return arrOutput.joined(separator: "\u{A0}")
}

View File

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

View File

@ -295,6 +295,7 @@ extension InputHandler {
// MARK: - Command+Enter
/// Command+Enter
/// - Parameter isShiftPressed: Shift
/// - Returns: SessionCtl IMK
func handleCtrlCommandEnter(isShiftPressed: Bool = false) -> Bool {
guard let delegate = delegate else { return false }
@ -308,7 +309,11 @@ extension InputHandler {
if !prefs.cassetteEnabled {
if prefs.inlineDumpPinyinInLieuOfZhuyin {
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) //
}
@ -328,8 +333,9 @@ extension InputHandler {
// MARK: - Command+Option+Enter Ruby
/// Command+Option+Enter Ruby
/// - Parameter isShiftPressed: Shift
/// - Returns: SessionCtl IMK
func handleCtrlOptionCommandEnter() -> Bool {
func handleCtrlOptionCommandEnter(isShiftPressed: Bool = false) -> Bool {
guard let delegate = delegate else { return false }
let state = delegate.state
guard state.type == .ofInputting else { return false }
@ -337,19 +343,33 @@ extension InputHandler {
var composed = ""
for node in compositor.walkedNodes {
var key = node.keyArray.joined(separator: "\t")
var key = node.keyArray.joined(separator: " ")
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 {
key = Tekkon.restoreToneOneInZhuyinKey(targetJoined: key) //
key = Tekkon.cnvPhonaToHanyuPinyin(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
if isShiftPressed {
if !composed.isEmpty { composed += " " }
composed += key
continue
}
//
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)
: (PrefMgr.shared.showHanyuPinyinInCompositionBuffer
? Tekkon.cnvPhonaToHanyuPinyin(
targetJoined: Tekkon.restoreToneOneInZhuyinKey(
targetJoined: theCandidate.0.joined(separator: separator)))
targetJoined: {
var arr = [String]()
theCandidate.0.forEach { key in
arr.append(Tekkon.restoreToneOneInPhona(target: key))
}
return arr.joined(separator: "-")
}()
)
: theCandidate.0.joined(separator: separator))
result = "\(result)\u{17}(\(reading))"
}
@ -95,7 +101,14 @@ extension SessionCtl {
? neta.0.joined(separator: separator)
: (PrefMgr.shared.showHanyuPinyinInCompositionBuffer
? 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))
let netaShownWithPronunciation = "\(netaShown)\u{17}(\(reading))"
if candidateString == prefix + netaShownWithPronunciation {