Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Core/Sources/ConverterServer/ConverterServer+KeyEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ extension ConverterServer {
guard !prediction.appendText.isEmpty else {
return
}
if let candidate = prediction.candidate {
// 読みを補完する前に伝える。補完後の再変換で候補の表記が先頭の制約になる
manager.acceptPredictionCandidate(candidate)
}
manager.insertAtCursorPosition(prediction.appendText, inputStyle: .direct)
}
}
10 changes: 9 additions & 1 deletion Core/Sources/Core/InputUtils/SegmentsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ public final class SegmentsManager {
public var displayText: String
public var appendText: String
public var deleteCount: Int = 0
/// 表示のもとになった変換器の候補。受け入れたことを変換器へ伝えるのに使う
public var candidate: Candidate?
}

struct BackspaceTypoCorrectionLock: Sendable {
Expand Down Expand Up @@ -861,6 +863,11 @@ public final class SegmentsManager {
return [backspaceAdjustedPredictionCandidate]
}

/// 予測候補を受け入れたことを変換器へ伝える。以降の変換では、その候補の表記が先頭の制約になる
public func acceptPredictionCandidate(_ candidate: Candidate) {
self.kanaKanjiConverter.setPrefixCandidate(candidate)
}

public static func preferredPredictionCandidates(
typoCorrectionCandidates: [PredictionCandidate],
predictionCandidates: [PredictionCandidate]
Expand Down Expand Up @@ -898,11 +905,12 @@ public final class SegmentsManager {
guard !reading.isEmpty else {
continue
}
if let predictionCandidate = Self.makePredictionCandidate(
if var predictionCandidate = Self.makePredictionCandidate(
currentTarget: target,
candidateReading: reading,
displayText: candidate.text
) {
predictionCandidate.candidate = candidate
return [predictionCandidate]
}
}
Expand Down