TDKCandidates // Nomenclature update & Add spanLength property.

This commit is contained in:
ShikiSuen 2023-03-06 19:24:53 +08:00
parent 9da9c12809
commit a846fe48ac
6 changed files with 46 additions and 21 deletions

View File

@ -18,8 +18,9 @@ public class CandidateCellData: Hashable {
public var visualDimension: CGSize = .zero
public var locale = ""
public static var unifiedSize: Double = 16
public var key: String
public var selectionKey: String
public var displayedText: String
public var spanLength: Int
public var size: Double { Self.unifiedSize }
public var isHighlighted: Bool = false
public var whichLine: Int = 0
@ -38,18 +39,22 @@ public class CandidateCellData: Hashable {
: .init(red: 142 / 255, green: 142 / 255, blue: 147 / 255, alpha: 1)
}
public init(key: String, displayedText: String, isSelected: Bool = false) {
self.key = key
public init(
key: String, displayedText: String,
spanLength spanningLength: Int? = nil, isSelected: Bool = false
) {
selectionKey = key
self.displayedText = displayedText
spanLength = max(spanningLength ?? displayedText.count, 1)
isHighlighted = isSelected
}
public static func == (lhs: CandidateCellData, rhs: CandidateCellData) -> Bool {
lhs.key == rhs.key && lhs.displayedText == rhs.displayedText
lhs.selectionKey == rhs.selectionKey && lhs.displayedText == rhs.displayedText
}
public func hash(into hasher: inout Hasher) {
hasher.combine(key)
hasher.combine(selectionKey)
hasher.combine(displayedText)
}
@ -150,7 +155,7 @@ public class CandidateCellData: Hashable {
.paragraphStyle: Self.sharedParagraphStyle,
.foregroundColor: fontColorKey,
]
let attrStrKey = NSAttributedString(string: key, attributes: attrKey)
let attrStrKey = NSAttributedString(string: selectionKey, attributes: attrKey)
return attrStrKey
}

View File

@ -34,7 +34,7 @@ public extension CandidateCellData {
themeColor.cornerRadius(6)
VStack(spacing: 0) {
HStack(spacing: 4) {
Text(verbatim: key).font(.custom("Menlo", size: fontSizeKey))
Text(verbatim: selectionKey).font(.custom("Menlo", size: fontSizeKey))
.foregroundColor(Color.white.opacity(0.8)).lineLimit(1)
Text(verbatim: displayedText)
.font(.init(CTFontCreateUIFontForLanguage(.system, fontSizeCandidate, locale as CFString)!))
@ -44,7 +44,7 @@ public extension CandidateCellData {
} else {
VStack(spacing: 0) {
HStack(spacing: 4) {
Text(verbatim: key).font(.custom("Menlo", size: fontSizeKey))
Text(verbatim: selectionKey).font(.custom("Menlo", size: fontSizeKey))
.foregroundColor(Color.secondary).lineLimit(1)
Text(verbatim: displayedText)
.font(.init(CTFontCreateUIFontForLanguage(.system, fontSizeCandidate, locale as CFString)!))
@ -66,7 +66,7 @@ public extension CandidateCellData {
}
VStack(spacing: 0) {
HStack(spacing: 4) {
Text(verbatim: key).font(.system(size: fontSizeKey).monospaced())
Text(verbatim: selectionKey).font(.system(size: fontSizeKey).monospaced())
.foregroundColor(.init(nsColor: fontColorKey)).lineLimit(1)
Text(verbatim: displayedText)
.font(.init(CTFontCreateUIFontForLanguage(.system, fontSizeCandidate, locale as CFString)!))

View File

@ -77,7 +77,7 @@ public struct CandidatePool {
/// - direction:
/// - locale: zh-Hanszh-Hant
public init(
candidates: [String], lines: Int = 3, selectionKeys: String = "123456789",
candidates: [([String], String)], lines: Int = 3, selectionKeys: String = "123456789",
layout: LayoutOrientation = .vertical, locale: String = ""
) {
self.layout = layout
@ -86,7 +86,9 @@ public struct CandidatePool {
shitCell = CandidateCellData(key: " ", displayedText: "💩", isSelected: false)
blankCell.locale = locale
self.selectionKeys = selectionKeys.isEmpty ? "123456789" : selectionKeys
var allCandidates = candidates.map { CandidateCellData(key: " ", displayedText: $0) }
var allCandidates = candidates.map {
CandidateCellData(key: " ", displayedText: $0.1, spanLength: $0.0.count)
}
if allCandidates.isEmpty { allCandidates.append(blankCell) }
candidateDataAll = allCandidates
var currentColumn: [CandidateCellData] = []
@ -203,12 +205,12 @@ public extension CandidatePool {
for (i, candidateColumn) in candidateLines.enumerated() {
if i != currentLineNumber {
candidateColumn.forEach {
$0.key = " "
$0.selectionKey = " "
}
} else {
for (i, neta) in candidateColumn.enumerated() {
if neta.key.isEmpty { continue }
neta.key = selectionKeys.map(\.description)[i]
if neta.selectionKey.isEmpty { continue }
neta.selectionKey = selectionKeys.map(\.description)[i]
}
}
}

View File

@ -73,7 +73,7 @@ public class CtlCandidateTDK: CtlCandidate, NSWindowDelegate {
CandidateCellData.unifiedSize = candidateFont.pointSize
guard let delegate = delegate else { return }
Self.thePool = .init(
candidates: delegate.candidatePairs(conv: true).map(\.1), lines: maxLinesPerPage,
candidates: delegate.candidatePairs(conv: true), lines: maxLinesPerPage,
selectionKeys: delegate.selectionKeys, layout: currentLayout.layoutTDK, locale: locale
)
Self.thePool.tooltip = tooltip

View File

@ -371,9 +371,16 @@ struct VwrCandidateTDK_Previews: PreviewProvider {
@State static var tooltip = "📼"
@State static var oldOS: Bool = true
static var testCandidatesConverted: [([String], String)] {
testCandidates.map { candidate in
let firstValue: [String] = .init(repeating: "", count: candidate.count)
return (firstValue, candidate)
}
}
static var thePoolX: CandidatePool {
var result = CandidatePool(
candidates: testCandidates, lines: 4,
candidates: testCandidatesConverted, lines: 4,
selectionKeys: "123456", layout: .horizontal
)
result.reverseLookupResult = Self.reverseLookupResult
@ -384,7 +391,7 @@ struct VwrCandidateTDK_Previews: PreviewProvider {
static var thePoolXS: CandidatePool {
var result = CandidatePool(
candidates: testCandidates, lines: 1,
candidates: testCandidatesConverted, lines: 1,
selectionKeys: "123456", layout: .horizontal
)
result.reverseLookupResult = Self.reverseLookupResult
@ -395,7 +402,7 @@ struct VwrCandidateTDK_Previews: PreviewProvider {
static var thePoolY: CandidatePool {
var result = CandidatePool(
candidates: testCandidates, lines: 4,
candidates: testCandidatesConverted, lines: 4,
selectionKeys: "123456", layout: .vertical
)
result.reverseLookupResult = Self.reverseLookupResult
@ -407,7 +414,7 @@ struct VwrCandidateTDK_Previews: PreviewProvider {
static var thePoolYS: CandidatePool {
var result = CandidatePool(
candidates: testCandidates, lines: 1,
candidates: testCandidatesConverted, lines: 1,
selectionKeys: "123456", layout: .vertical
)
result.reverseLookupResult = Self.reverseLookupResult

View File

@ -19,8 +19,17 @@ final class CandidatePoolTests: XCTestCase {
"", "", "",
]
var testCandidatesConverted: [([String], String)] {
testCandidates.map { candidate in
let firstValue: [String] = .init(repeating: "", count: candidate.count)
return (firstValue, candidate)
}
}
func testPoolHorizontal() throws {
let pool = CandidatePool(candidates: testCandidates, selectionKeys: "123456", layout: .horizontal)
let pool = CandidatePool(
candidates: testCandidatesConverted, selectionKeys: "123456", layout: .horizontal
)
var strOutput = ""
pool.candidateLines.forEach {
$0.forEach {
@ -33,7 +42,9 @@ final class CandidatePoolTests: XCTestCase {
}
func testPoolVertical() throws {
let pool = CandidatePool(candidates: testCandidates, selectionKeys: "123456", layout: .vertical)
let pool = CandidatePool(
candidates: testCandidatesConverted, selectionKeys: "123456", layout: .vertical
)
var strOutput = ""
pool.candidateLines.forEach {
$0.forEach {