InputState // Fix an upstream bug of handling literal marked range.
This commit is contained in:
parent
49ab499b13
commit
e39bba23f4
|
@ -156,6 +156,11 @@ class InputState {
|
||||||
private var allowedMarkRange = 2...mgrPrefs.maxCandidateLength
|
private var allowedMarkRange = 2...mgrPrefs.maxCandidateLength
|
||||||
private(set) var markerIndex: Int = 0 { didSet { markerIndex = max(markerIndex, 0) } }
|
private(set) var markerIndex: Int = 0 { didSet { markerIndex = max(markerIndex, 0) } }
|
||||||
private(set) var markedRange: Range<Int>
|
private(set) var markedRange: Range<Int>
|
||||||
|
private var literalMarkedRange: Range<Int> {
|
||||||
|
let lowerBoundLiteral = composingBuffer.charIndexLiteral(from: markedRange.lowerBound)
|
||||||
|
let upperBoundLiteral = composingBuffer.charIndexLiteral(from: markedRange.upperBound)
|
||||||
|
return lowerBoundLiteral..<upperBoundLiteral
|
||||||
|
}
|
||||||
private var deleteTargetExists = false
|
private var deleteTargetExists = false
|
||||||
var tooltip: String {
|
var tooltip: String {
|
||||||
if composingBuffer.count != readings.count {
|
if composingBuffer.count != readings.count {
|
||||||
|
@ -175,14 +180,14 @@ class InputState {
|
||||||
}
|
}
|
||||||
|
|
||||||
let text = composingBuffer.utf16SubString(with: markedRange)
|
let text = composingBuffer.utf16SubString(with: markedRange)
|
||||||
if markedRange.count < allowedMarkRange.lowerBound {
|
if literalMarkedRange.count < allowedMarkRange.lowerBound {
|
||||||
ctlInputMethod.tooltipController.setColor(state: .denialInsufficiency)
|
ctlInputMethod.tooltipController.setColor(state: .denialInsufficiency)
|
||||||
return String(
|
return String(
|
||||||
format: NSLocalizedString(
|
format: NSLocalizedString(
|
||||||
"\"%@\" length must ≥ 2 for a user phrase.", comment: ""
|
"\"%@\" length must ≥ 2 for a user phrase.", comment: ""
|
||||||
), text
|
), text
|
||||||
)
|
)
|
||||||
} else if markedRange.count > allowedMarkRange.upperBound {
|
} else if literalMarkedRange.count > allowedMarkRange.upperBound {
|
||||||
ctlInputMethod.tooltipController.setColor(state: .denialOverflow)
|
ctlInputMethod.tooltipController.setColor(state: .denialOverflow)
|
||||||
return String(
|
return String(
|
||||||
format: NSLocalizedString(
|
format: NSLocalizedString(
|
||||||
|
@ -192,9 +197,7 @@ class InputState {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
let literalBegin = composingBuffer.charIndexLiteral(from: markedRange.lowerBound)
|
let selectedReadings = readings[literalMarkedRange]
|
||||||
let literalEnd = composingBuffer.charIndexLiteral(from: markedRange.upperBound)
|
|
||||||
let selectedReadings = readings[literalBegin..<literalEnd]
|
|
||||||
let joined = selectedReadings.joined(separator: "-")
|
let joined = selectedReadings.joined(separator: "-")
|
||||||
let exist = mgrLangModel.checkIfUserPhraseExist(
|
let exist = mgrLangModel.checkIfUserPhraseExist(
|
||||||
userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined
|
userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined
|
||||||
|
@ -280,14 +283,12 @@ class InputState {
|
||||||
((composingBuffer.count != readings.count)
|
((composingBuffer.count != readings.count)
|
||||||
|| (ctlInputMethod.areWeDeleting && !deleteTargetExists))
|
|| (ctlInputMethod.areWeDeleting && !deleteTargetExists))
|
||||||
? false
|
? false
|
||||||
: allowedMarkRange.contains(markedRange.count)
|
: allowedMarkRange.contains(literalMarkedRange.count)
|
||||||
}
|
}
|
||||||
|
|
||||||
var chkIfUserPhraseExists: Bool {
|
var chkIfUserPhraseExists: Bool {
|
||||||
let text = composingBuffer.utf16SubString(with: markedRange)
|
let text = composingBuffer.utf16SubString(with: markedRange)
|
||||||
let literalBegin = composingBuffer.charIndexLiteral(from: markedRange.lowerBound)
|
let selectedReadings = readings[literalMarkedRange]
|
||||||
let literalEnd = composingBuffer.charIndexLiteral(from: markedRange.upperBound)
|
|
||||||
let selectedReadings = readings[literalBegin..<literalEnd]
|
|
||||||
let joined = selectedReadings.joined(separator: "-")
|
let joined = selectedReadings.joined(separator: "-")
|
||||||
return mgrLangModel.checkIfUserPhraseExist(
|
return mgrLangModel.checkIfUserPhraseExist(
|
||||||
userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined
|
userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined
|
||||||
|
@ -296,9 +297,7 @@ class InputState {
|
||||||
|
|
||||||
var userPhrase: String {
|
var userPhrase: String {
|
||||||
let text = composingBuffer.utf16SubString(with: markedRange)
|
let text = composingBuffer.utf16SubString(with: markedRange)
|
||||||
let literalBegin = composingBuffer.charIndexLiteral(from: markedRange.lowerBound)
|
let selectedReadings = readings[literalMarkedRange]
|
||||||
let literalEnd = composingBuffer.charIndexLiteral(from: markedRange.upperBound)
|
|
||||||
let selectedReadings = readings[literalBegin..<literalEnd]
|
|
||||||
let joined = selectedReadings.joined(separator: "-")
|
let joined = selectedReadings.joined(separator: "-")
|
||||||
return "\(text) \(joined)"
|
return "\(text) \(joined)"
|
||||||
}
|
}
|
||||||
|
@ -306,9 +305,7 @@ class InputState {
|
||||||
var userPhraseConverted: String {
|
var userPhraseConverted: String {
|
||||||
let text =
|
let text =
|
||||||
OpenCCBridge.crossConvert(composingBuffer.utf16SubString(with: markedRange)) ?? ""
|
OpenCCBridge.crossConvert(composingBuffer.utf16SubString(with: markedRange)) ?? ""
|
||||||
let literalBegin = composingBuffer.charIndexLiteral(from: markedRange.lowerBound)
|
let selectedReadings = readings[literalMarkedRange]
|
||||||
let literalEnd = composingBuffer.charIndexLiteral(from: markedRange.upperBound)
|
|
||||||
let selectedReadings = readings[literalBegin..<literalEnd]
|
|
||||||
let joined = selectedReadings.joined(separator: "-")
|
let joined = selectedReadings.joined(separator: "-")
|
||||||
let convertedMark = "#𝙊𝙥𝙚𝙣𝘾𝘾"
|
let convertedMark = "#𝙊𝙥𝙚𝙣𝘾𝘾"
|
||||||
return "\(text) \(joined)\t\(convertedMark)"
|
return "\(text) \(joined)\t\(convertedMark)"
|
||||||
|
|
Loading…
Reference in New Issue