Pre Merge pull request !87 from ShikiSuen/upd/1.9.4
This commit is contained in:
commit
0d49a5cefa
|
@ -1 +1 @@
|
|||
Subproject commit b5e6f15c198f87c4cf0227bc6d9b4346e86228a0
|
||||
Subproject commit 81eed557432fe6d7ba3246edea7f7f78626dde8f
|
|
@ -127,15 +127,92 @@ public class KeyHandler {
|
|||
return arrResult
|
||||
}
|
||||
|
||||
/// 鞏固當前組字器游標上下文,防止在當前游標位置固化節點時給作業範圍以外的內容帶來不想要的變化。
|
||||
///
|
||||
/// 打比方說輸入法原廠詞庫內有「章太炎」一詞,你敲「章太炎」,然後想把「太」改成「泰」以使其變成「章泰炎」。
|
||||
/// **macOS 內建的注音輸入法不會在這個過程對這個詞除了「太」以外的部分有任何變動**,
|
||||
/// 但所有 OV 系輸入法都對此有 Bug:會將這些部分全部重設為各自的讀音下的最高原始權重的漢字。
|
||||
/// 也就是說,選字之後的結果可能會變成「張泰言」。
|
||||
///
|
||||
/// - Remark: 類似的可以拿來測試的詞有「蔡依林」「周杰倫」。
|
||||
///
|
||||
/// 測試時請務必也測試「敲長句子、且這種詞在句子中間出現時」的情況。
|
||||
///
|
||||
/// 威注音輸入法截至 v1.9.3 SP2 版為止都受到上游的這個 Bug 的影響,且在 v1.9.4 版利用該函式修正了這個缺陷。
|
||||
/// 該修正必須搭配至少天權星組字引擎 v2.0.2 版方可生效。算法可能比較囉唆,但至少在常用情形下不會再發生該問題。
|
||||
/// - Parameter theCandidate: 要拿來覆寫的詞音配對。
|
||||
func consolidateCursorContext(with theCandidate: Megrez.Compositor.Candidate) {
|
||||
let grid = compositor
|
||||
var frontBoundaryEX = compositor.width - 1
|
||||
var rearBoundaryEX = 0
|
||||
if grid.overrideCandidate(theCandidate, at: actualCandidateCursor) {
|
||||
guard let node = compositor.walkedNodes.findNode(at: actualCandidateCursor, target: &frontBoundaryEX) else {
|
||||
return
|
||||
}
|
||||
rearBoundaryEX = max(0, frontBoundaryEX - node.keyArray.count)
|
||||
}
|
||||
|
||||
var frontBoundary = 0
|
||||
guard let node = compositor.walkedNodes.findNode(at: actualCandidateCursor, target: &frontBoundary) else { return }
|
||||
// 這兩個參數都得 -1。之前單獨測試的時候發現會有位置偏移。
|
||||
var rearBoundary = min(max(0, frontBoundary - node.keyArray.count), rearBoundaryEX) // 防呆
|
||||
frontBoundary = max(min(frontBoundary, compositor.width), frontBoundaryEX) // 防呆。
|
||||
|
||||
let cursorBackup = compositor.cursor
|
||||
while compositor.cursor > rearBoundary { compositor.jumpCursorBySpan(to: .rear) }
|
||||
rearBoundary = min(compositor.cursor, rearBoundary)
|
||||
compositor.cursor = cursorBackup // 游標歸位,再接著計算。
|
||||
while compositor.cursor < frontBoundary { compositor.jumpCursorBySpan(to: .front) }
|
||||
frontBoundary = max(compositor.cursor, frontBoundary)
|
||||
compositor.cursor = cursorBackup // 計算結束,游標歸位。
|
||||
|
||||
// 接下來獲取這個範圍內的媽的都不知道該怎麼講了。
|
||||
var nodeIndices = [Int]() // 僅作統計用。
|
||||
|
||||
var position = rearBoundary // 臨時統計用
|
||||
while position < frontBoundary {
|
||||
guard let regionIndex = compositor.cursorRegionMap[position] else {
|
||||
position += 1
|
||||
continue
|
||||
}
|
||||
if !nodeIndices.contains(regionIndex) {
|
||||
nodeIndices.append(regionIndex) // 新增統計
|
||||
guard compositor.walkedNodes.count > regionIndex else { break } // 防呆
|
||||
let currentNode = compositor.walkedNodes[regionIndex]
|
||||
guard currentNode.keyArray.count == currentNode.value.count else {
|
||||
compositor.overrideCandidate(currentNode.currentPair, at: position)
|
||||
position += currentNode.keyArray.count
|
||||
continue
|
||||
}
|
||||
let values = currentNode.currentPair.value.map { String($0) }
|
||||
for (subPosition, key) in currentNode.keyArray.enumerated() {
|
||||
guard values.count > subPosition else { break } // 防呆,應該沒有發生的可能性
|
||||
let thePair = Megrez.Compositor.Candidate(
|
||||
key: key, value: values[subPosition]
|
||||
)
|
||||
compositor.overrideCandidate(thePair, at: position)
|
||||
position += 1
|
||||
}
|
||||
continue
|
||||
}
|
||||
position += 1
|
||||
}
|
||||
}
|
||||
|
||||
/// 在組字器內,以給定之候選字(詞音配對)、來試圖在給定游標位置所在之處指定選字處理過程。
|
||||
/// 然後再將對應的節錨內的節點標記為「已經手動選字過」。
|
||||
/// 然後再將對應的節錨內的節點標記為「已經手動選字過」。我們稱之為「固化節點」。
|
||||
/// - Parameters:
|
||||
/// - value: 給定之候選字(詞音配對)。
|
||||
/// - respectCursorPushing: 若該選項為 true,則會在選字之後始終將游標推送至選字後的節錨的前方。
|
||||
func fixNode(candidate: (String, String), respectCursorPushing: Bool = true) {
|
||||
let actualCursor = actualCandidateCursor
|
||||
let theCandidate: Megrez.Compositor.Candidate = .init(key: candidate.0, value: candidate.1)
|
||||
if !compositor.overrideCandidate(theCandidate, at: actualCursor, overrideType: .withHighScore) { return }
|
||||
|
||||
/// 必須先鞏固當前組字器游標上下文。
|
||||
consolidateCursorContext(with: theCandidate)
|
||||
|
||||
// 回到正常流程。
|
||||
|
||||
if !compositor.overrideCandidate(theCandidate, at: actualCandidateCursor) { return }
|
||||
let previousWalk = compositor.walkedNodes
|
||||
// 開始爬軌。
|
||||
walk()
|
||||
|
|
|
@ -111,10 +111,7 @@ class ctlInputMethod: IMKInputController {
|
|||
keyHandler.clear() // 這句不要砍,因為後面 handle State.Empty() 不一定執行。
|
||||
keyHandler.ensureParser()
|
||||
|
||||
if #available(macOS 10.13, *) {
|
||||
} else {
|
||||
mgrPrefs.useIMKCandidateWindow = false // 防呆。macOS 10.11 用 IMK 選字窗會崩潰。
|
||||
}
|
||||
mgrPrefs.fixOddPreferences()
|
||||
|
||||
if isASCIIMode {
|
||||
if mgrPrefs.disableShiftTogglingAlphanumericalMode {
|
||||
|
|
|
@ -102,7 +102,7 @@ public enum IME {
|
|||
|
||||
// MARK: - System Dark Mode Status Detector.
|
||||
|
||||
static func isDarkMode() -> Bool {
|
||||
static var isDarkMode: Bool {
|
||||
if #available(macOS 10.15, *) {
|
||||
let appearanceDescription = NSApplication.shared.effectiveAppearance.debugDescription
|
||||
.lowercased()
|
||||
|
|
|
@ -280,6 +280,9 @@ public enum mgrPrefs {
|
|||
UserDefaults.standard.setDefault(
|
||||
mgrPrefs.upperCaseLetterKeyBehavior, forKey: UserDef.kUpperCaseLetterKeyBehavior.rawValue
|
||||
)
|
||||
UserDefaults.standard.setDefault(
|
||||
mgrPrefs.disableShiftTogglingAlphanumericalMode, forKey: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue
|
||||
)
|
||||
|
||||
// -----
|
||||
|
||||
|
@ -399,6 +402,12 @@ public enum mgrPrefs {
|
|||
@UserDefault(key: UserDef.kUpperCaseLetterKeyBehavior.rawValue, defaultValue: 0)
|
||||
static var upperCaseLetterKeyBehavior: Int
|
||||
|
||||
@UserDefault(key: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue, defaultValue: true)
|
||||
static var togglingAlphanumericalModeWithLShift: Bool
|
||||
|
||||
@UserDefault(key: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue, defaultValue: false)
|
||||
static var disableShiftTogglingAlphanumericalMode: Bool
|
||||
|
||||
// MARK: - Settings (Tier 2)
|
||||
|
||||
@UserDefault(key: UserDef.kUseIMKCandidateWindow.rawValue, defaultValue: false)
|
||||
|
@ -415,14 +424,8 @@ public enum mgrPrefs {
|
|||
@UserDefault(key: UserDef.kShouldAlwaysUseShiftKeyAccommodation.rawValue, defaultValue: false)
|
||||
static var shouldAlwaysUseShiftKeyAccommodation: Bool
|
||||
|
||||
@UserDefault(key: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue, defaultValue: false)
|
||||
static var disableShiftTogglingAlphanumericalMode: Bool
|
||||
|
||||
// MARK: - Settings (Tier 3)
|
||||
|
||||
@UserDefault(key: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue, defaultValue: true)
|
||||
static var togglingAlphanumericalModeWithLShift: Bool
|
||||
|
||||
static var minCandidateLength: Int {
|
||||
mgrPrefs.allowBoostingSingleKanjiAsUserPhrase ? 1 : 2
|
||||
}
|
||||
|
@ -466,33 +469,44 @@ public enum mgrPrefs {
|
|||
}
|
||||
|
||||
@UserDefault(key: UserDef.kChineseConversionEnabled.rawValue, defaultValue: false)
|
||||
static var chineseConversionEnabled: Bool
|
||||
static var chineseConversionEnabled: Bool {
|
||||
didSet {
|
||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||
if chineseConversionEnabled, shiftJISShinjitaiOutputEnabled {
|
||||
toggleShiftJISShinjitaiOutputEnabled()
|
||||
UserDefaults.standard.set(
|
||||
shiftJISShinjitaiOutputEnabled, forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue
|
||||
)
|
||||
}
|
||||
UserDefaults.standard.set(
|
||||
chineseConversionEnabled, forKey: UserDef.kChineseConversionEnabled.rawValue
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@discardableResult static func toggleChineseConversionEnabled() -> Bool {
|
||||
chineseConversionEnabled = !chineseConversionEnabled
|
||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||
if chineseConversionEnabled, shiftJISShinjitaiOutputEnabled {
|
||||
toggleShiftJISShinjitaiOutputEnabled()
|
||||
UserDefaults.standard.set(
|
||||
shiftJISShinjitaiOutputEnabled, forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue
|
||||
)
|
||||
}
|
||||
UserDefaults.standard.set(chineseConversionEnabled, forKey: UserDef.kChineseConversionEnabled.rawValue)
|
||||
return chineseConversionEnabled
|
||||
}
|
||||
|
||||
@UserDefault(key: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue, defaultValue: false)
|
||||
static var shiftJISShinjitaiOutputEnabled: Bool
|
||||
static var shiftJISShinjitaiOutputEnabled: Bool {
|
||||
didSet {
|
||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||
if shiftJISShinjitaiOutputEnabled, chineseConversionEnabled {
|
||||
toggleChineseConversionEnabled()
|
||||
UserDefaults.standard.set(
|
||||
chineseConversionEnabled, forKey: UserDef.kChineseConversionEnabled.rawValue
|
||||
)
|
||||
}
|
||||
UserDefaults.standard.set(
|
||||
shiftJISShinjitaiOutputEnabled, forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@discardableResult static func toggleShiftJISShinjitaiOutputEnabled() -> Bool {
|
||||
shiftJISShinjitaiOutputEnabled = !shiftJISShinjitaiOutputEnabled
|
||||
// 康熙轉換與 JIS 轉換不能同時開啟,否則會出現某些奇奇怪怪的情況
|
||||
if shiftJISShinjitaiOutputEnabled, chineseConversionEnabled {
|
||||
toggleChineseConversionEnabled()
|
||||
}
|
||||
UserDefaults.standard.set(
|
||||
shiftJISShinjitaiOutputEnabled, forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue
|
||||
)
|
||||
return shiftJISShinjitaiOutputEnabled
|
||||
}
|
||||
|
||||
|
@ -664,6 +678,21 @@ public enum mgrPrefs {
|
|||
static var usingHotKeyCurrencyNumerals: Bool
|
||||
}
|
||||
|
||||
// MARK: Auto parameter fix procedures, executed everytime on ctlInputMethod.activateServer().
|
||||
|
||||
extension mgrPrefs {
|
||||
static func fixOddPreferences() {
|
||||
// 防呆。macOS 10.11 用 IMK 選字窗會崩潰。
|
||||
if #unavailable(macOS 10.13) { mgrPrefs.useIMKCandidateWindow = false }
|
||||
if #unavailable(macOS 10.15) {
|
||||
handleDefaultCandidateFontsByLangIdentifier = false
|
||||
shouldAlwaysUseShiftKeyAccommodation = false
|
||||
disableShiftTogglingAlphanumericalMode = false
|
||||
togglingAlphanumericalModeWithLShift = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Snapshot Extension
|
||||
|
||||
var snapshot: [String: Any]?
|
||||
|
|
|
@ -223,34 +223,6 @@ extension Array where Element == Megrez.Compositor.Node {
|
|||
}
|
||||
return counter
|
||||
}
|
||||
|
||||
public func findNode(at cursor: Int, target outCursorPastNode: inout Int) -> Megrez.Compositor.Node? {
|
||||
guard !isEmpty else { return nil }
|
||||
let cursor = Swift.max(0, Swift.min(cursor, keys.count))
|
||||
|
||||
if cursor == 0, let theFirst = first {
|
||||
outCursorPastNode = theFirst.spanLength
|
||||
return theFirst
|
||||
}
|
||||
|
||||
// 同時應對「游標在右端」與「游標離右端還差一個位置」的情形。
|
||||
if cursor >= keys.count - 1, let theLast = last {
|
||||
outCursorPastNode = keys.count
|
||||
return theLast
|
||||
}
|
||||
|
||||
var accumulated = 0
|
||||
for neta in self {
|
||||
accumulated += neta.spanLength
|
||||
if accumulated > cursor {
|
||||
outCursorPastNode = accumulated
|
||||
return neta
|
||||
}
|
||||
}
|
||||
|
||||
// 下述情形本不應該出現。
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private Methods
|
||||
|
|
|
@ -13,7 +13,7 @@ extension Megrez {
|
|||
/// 簡單的貝氏推論:因為底層的語言模組只會提供單元圖資料。一旦將所有可以組字的單元圖
|
||||
/// 作為節點塞到組字器內,就可以用一個簡單的有向無環圖爬軌過程、來利用這些隱性資料值
|
||||
/// 算出最大相似估算結果。
|
||||
public class Compositor {
|
||||
public struct Compositor {
|
||||
/// 就文字輸入方向而言的方向。
|
||||
public enum TypingDirection { case front, rear }
|
||||
/// 軌格增減行為。
|
||||
|
@ -51,7 +51,7 @@ extension Megrez {
|
|||
self.separator = separator
|
||||
}
|
||||
|
||||
public func clear() {
|
||||
public mutating func clear() {
|
||||
cursor = 0
|
||||
keys.removeAll()
|
||||
spans.removeAll()
|
||||
|
@ -62,7 +62,7 @@ extension Megrez {
|
|||
/// 在游標位置插入給定的索引鍵。
|
||||
/// - Parameter key: 要插入的索引鍵。
|
||||
/// - Returns: 該操作是否成功執行。
|
||||
@discardableResult public func insertKey(_ key: String) -> Bool {
|
||||
@discardableResult public mutating func insertKey(_ key: String) -> Bool {
|
||||
guard !key.isEmpty, key != separator, langModel.hasUnigramsFor(key: key) else { return false }
|
||||
keys.insert(key, at: cursor)
|
||||
resizeGrid(at: cursor, do: .expand)
|
||||
|
@ -77,7 +77,7 @@ extension Megrez {
|
|||
/// 如果是朝著與文字輸入方向相反的方向砍的話,游標位置會自動遞減。
|
||||
/// - Parameter direction: 指定方向(相對於文字輸入方向而言)。
|
||||
/// - Returns: 該操作是否成功執行。
|
||||
@discardableResult public func dropKey(direction: TypingDirection) -> Bool {
|
||||
@discardableResult public mutating func dropKey(direction: TypingDirection) -> Bool {
|
||||
let isBackSpace: Bool = direction == .rear ? true : false
|
||||
guard cursor != (isBackSpace ? 0 : keys.count) else { return false }
|
||||
keys.remove(at: cursor - (isBackSpace ? 1 : 0))
|
||||
|
@ -90,7 +90,7 @@ extension Megrez {
|
|||
/// 按幅位來前後移動游標。
|
||||
/// - Parameter direction: 移動方向。
|
||||
/// - Returns: 該操作是否順利完成。
|
||||
@discardableResult public func jumpCursorBySpan(to direction: TypingDirection) -> Bool {
|
||||
@discardableResult public mutating func jumpCursorBySpan(to direction: TypingDirection) -> Bool {
|
||||
switch direction {
|
||||
case .front:
|
||||
if cursor == width { return false }
|
||||
|
@ -158,7 +158,7 @@ extension Megrez.Compositor {
|
|||
/// - Parameters:
|
||||
/// - location: 給定的幅位座標。
|
||||
/// - action: 指定是擴張還是縮減一個幅位。
|
||||
func resizeGrid(at location: Int, do action: ResizeBehavior) {
|
||||
mutating func resizeGrid(at location: Int, do action: ResizeBehavior) {
|
||||
let location = max(min(location, spans.count), 0) // 防呆
|
||||
switch action {
|
||||
case .expand:
|
||||
|
@ -255,7 +255,7 @@ extension Megrez.Compositor {
|
|||
}
|
||||
}
|
||||
|
||||
func updateCursorJumpingTables(_ walkedNodes: [Node]) {
|
||||
mutating func updateCursorJumpingTables(_ walkedNodes: [Node]) {
|
||||
var cursorRegionMapDict = [Int: Int]()
|
||||
cursorRegionMapDict[-1] = 0 // 防呆
|
||||
var counter = 0
|
||||
|
|
|
@ -11,7 +11,7 @@ extension Megrez.Compositor {
|
|||
/// 對於 `G = (V, E)`,該算法的運行次數為 `O(|V|+|E|)`,其中 `G` 是一個有向無環圖。
|
||||
/// 這意味著,即使軌格很大,也可以用很少的算力就可以爬軌。
|
||||
/// - Returns: 爬軌結果+該過程是否順利執行。
|
||||
@discardableResult public func walk() -> ([Node], Bool) {
|
||||
@discardableResult public mutating func walk() -> ([Node], Bool) {
|
||||
var result = [Node]()
|
||||
defer {
|
||||
walkedNodes = result
|
||||
|
|
|
@ -144,13 +144,17 @@ extension Megrez.Compositor {
|
|||
guard let overridden = overridden else { return false } // 啥也不覆寫。
|
||||
|
||||
for i in overridden.spanIndex..<min(spans.count, overridden.spanIndex + overridden.node.spanLength) {
|
||||
/// 咱們還得重設所有在相同的幅位座標的節點。舉例說之前爬軌的結果是「A BC」
|
||||
/// 咱們還得弱化所有在相同的幅位座標的節點的複寫權重。舉例說之前爬軌的結果是「A BC」
|
||||
/// 且 A 與 BC 都是被覆寫的結果,然後使用者現在在與 A 相同的幅位座標位置
|
||||
/// 選了「DEF」,那麼 BC 的覆寫狀態就有必要重設(但 A 不用重設)。
|
||||
arrOverlappedNodes = fetchOverlappingNodes(at: i)
|
||||
for anchor in arrOverlappedNodes {
|
||||
if anchor.node == overridden.node { continue }
|
||||
anchor.node.reset()
|
||||
if !overridden.node.key.contains(anchor.node.key) || !overridden.node.value.contains(anchor.node.value) {
|
||||
anchor.node.reset()
|
||||
continue
|
||||
}
|
||||
anchor.node.overridingScore /= 2
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
|
|
@ -17,8 +17,8 @@ extension Megrez.Compositor {
|
|||
/// [("a", -114), ("b", -514), ("c", -1919)] 的話,指定該覆寫行為則會導致該節
|
||||
/// 點返回的結果為 ("c", -114)。該覆寫行為多用於諸如使用者半衰記憶模組的建議
|
||||
/// 行為。被覆寫的這個節點的狀態可能不會再被爬軌行為擅自改回。該覆寫行為無法
|
||||
/// 防止其它節點被爬軌函式所支配。這種情況下就需要用到 kOverridingScore
|
||||
/// - withHighScore: 將該節點權重覆寫為 kOverridingScore,使其被爬軌函式所青睞。
|
||||
/// 防止其它節點被爬軌函式所支配。這種情況下就需要用到 overridingScore
|
||||
/// - withHighScore: 將該節點權重覆寫為 overridingScore,使其被爬軌函式所青睞。
|
||||
public enum OverrideType: Int {
|
||||
case withNoOverrides = 0
|
||||
case withTopUnigramScore = 1
|
||||
|
@ -32,7 +32,7 @@ extension Megrez.Compositor {
|
|||
/// 找出「A->bc」的爬軌途徑(尤其是當 A 和 B 使用「0」作為複寫數值的情況下)。這樣
|
||||
/// 一來,「A-B」就不一定始終會是爬軌函式的青睞結果了。所以,這裡一定要用大於 0 的
|
||||
/// 數(比如野獸常數),以讓「c」更容易單獨被選中。
|
||||
public static let kOverridingScore: Double = 114_514
|
||||
public var overridingScore: Double = 114_514
|
||||
|
||||
private(set) var key: String
|
||||
private(set) var keyArray: [String]
|
||||
|
@ -81,7 +81,7 @@ extension Megrez.Compositor {
|
|||
public var score: Double {
|
||||
guard !unigrams.isEmpty else { return 0 }
|
||||
switch overrideType {
|
||||
case .withHighScore: return Megrez.Compositor.Node.kOverridingScore
|
||||
case .withHighScore: return overridingScore
|
||||
case .withTopUnigramScore: return unigrams[0].score
|
||||
default: return currentUnigram.score
|
||||
}
|
||||
|
@ -139,4 +139,45 @@ extension Array where Element == Megrez.Compositor.Node {
|
|||
|
||||
/// 從一個節點陣列當中取出目前的索引鍵陣列。
|
||||
public var keys: [String] { map(\.key) }
|
||||
|
||||
/// 在陣列內以給定游標位置找出對應的節點。
|
||||
/// - Parameters:
|
||||
/// - cursor: 給定游標位置。
|
||||
/// - outCursorPastNode: 找出的節點的前端位置。
|
||||
/// - Returns: 查找結果。
|
||||
public func findNode(at cursor: Int, target outCursorPastNode: inout Int) -> Megrez.Compositor.Node? {
|
||||
guard !isEmpty else { return nil }
|
||||
let cursor = Swift.max(0, Swift.min(cursor, keys.count))
|
||||
|
||||
if cursor == 0, let theFirst = first {
|
||||
outCursorPastNode = theFirst.spanLength
|
||||
return theFirst
|
||||
}
|
||||
|
||||
// 同時應對「游標在右端」與「游標離右端還差一個位置」的情形。
|
||||
if cursor >= keys.count - 1, let theLast = last {
|
||||
outCursorPastNode = keys.count
|
||||
return theLast
|
||||
}
|
||||
|
||||
var accumulated = 0
|
||||
for neta in self {
|
||||
accumulated += neta.spanLength
|
||||
if accumulated > cursor {
|
||||
outCursorPastNode = accumulated
|
||||
return neta
|
||||
}
|
||||
}
|
||||
|
||||
// 下述情形本不應該出現。
|
||||
return nil
|
||||
}
|
||||
|
||||
/// 在陣列內以給定游標位置找出對應的節點。
|
||||
/// - Parameter cursor: 給定游標位置。
|
||||
/// - Returns: 查找結果。
|
||||
public func findNode(at cursor: Int) -> Megrez.Compositor.Node? {
|
||||
var useless = 0
|
||||
return findNode(at: cursor, target: &useless)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -135,6 +135,43 @@ private class vwrCandidateUniversal: NSView {
|
|||
cellPadding = ceil(biggestSize / 4.0) * 2
|
||||
}
|
||||
|
||||
func ensureLangIdentifier(for attr: inout [NSAttributedString.Key: AnyObject]) {
|
||||
if mgrPrefs.handleDefaultCandidateFontsByLangIdentifier {
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
if #available(macOS 12.0, *) {
|
||||
attr[.languageIdentifier] = "zh-Hans" as AnyObject
|
||||
}
|
||||
case InputMode.imeModeCHT:
|
||||
if #available(macOS 12.0, *) {
|
||||
attr[.languageIdentifier] =
|
||||
(mgrPrefs.shiftJISShinjitaiOutputEnabled || mgrPrefs.chineseConversionEnabled)
|
||||
? "ja" as AnyObject : "zh-Hant" as AnyObject
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var highlightedColor: NSColor {
|
||||
var result = NSColor.alternateSelectedControlColor
|
||||
var colorBlendAmount: CGFloat = IME.isDarkMode ? 0.3 : 0.0
|
||||
if #available(macOS 10.14, *), !IME.isDarkMode, IME.currentInputMode == .imeModeCHT {
|
||||
colorBlendAmount = 0.15
|
||||
}
|
||||
// The background color of the highlightened candidate
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
result = NSColor.systemRed
|
||||
case InputMode.imeModeCHT:
|
||||
result = NSColor.systemBlue
|
||||
default: break
|
||||
}
|
||||
let blendingAgainstTarget: NSColor = IME.isDarkMode ? NSColor.black : NSColor.white
|
||||
return result.blended(withFraction: colorBlendAmount, of: blendingAgainstTarget)!
|
||||
}
|
||||
|
||||
override func draw(_: NSRect) {
|
||||
let bounds = bounds
|
||||
NSColor.controlBackgroundColor.setFill() // Candidate list panel base background
|
||||
|
@ -161,24 +198,7 @@ private class vwrCandidateUniversal: NSView {
|
|||
var activeCandidateIndexAttr = keyLabelAttrDict
|
||||
var activeCandidateAttr = candidateAttrDict
|
||||
if index == highlightedIndex {
|
||||
let colorBlendAmount: CGFloat = IME.isDarkMode() ? 0.3 : 0
|
||||
// The background color of the highlightened candidate
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
NSColor.systemRed.blended(
|
||||
withFraction: colorBlendAmount,
|
||||
of: NSColor.black
|
||||
)!
|
||||
.setFill()
|
||||
case InputMode.imeModeCHT:
|
||||
NSColor.systemBlue.blended(
|
||||
withFraction: colorBlendAmount,
|
||||
of: NSColor.black
|
||||
)!
|
||||
.setFill()
|
||||
default:
|
||||
NSColor.alternateSelectedControlColor.setFill()
|
||||
}
|
||||
highlightedColor.setFill()
|
||||
// Highlightened index text color
|
||||
activeCandidateIndexAttr[.foregroundColor] = NSColor.selectedMenuItemTextColor
|
||||
.withAlphaComponent(0.84)
|
||||
|
@ -187,22 +207,7 @@ private class vwrCandidateUniversal: NSView {
|
|||
let path: NSBezierPath = .init(roundedRect: rctCandidateArea, xRadius: 6, yRadius: 6)
|
||||
path.fill()
|
||||
}
|
||||
if mgrPrefs.handleDefaultCandidateFontsByLangIdentifier {
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
if #available(macOS 12.0, *) {
|
||||
activeCandidateAttr[.languageIdentifier] = "zh-Hans" as AnyObject
|
||||
}
|
||||
case InputMode.imeModeCHT:
|
||||
if #available(macOS 12.0, *) {
|
||||
activeCandidateAttr[.languageIdentifier] =
|
||||
(mgrPrefs.shiftJISShinjitaiOutputEnabled || mgrPrefs.chineseConversionEnabled)
|
||||
? "ja" as AnyObject : "zh-Hant" as AnyObject
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
ensureLangIdentifier(for: &activeCandidateAttr)
|
||||
(keyLabels[index] as NSString).draw(
|
||||
in: rctLabel, withAttributes: activeCandidateIndexAttr
|
||||
)
|
||||
|
@ -232,24 +237,7 @@ private class vwrCandidateUniversal: NSView {
|
|||
var activeCandidateIndexAttr = keyLabelAttrDict
|
||||
var activeCandidateAttr = candidateAttrDict
|
||||
if index == highlightedIndex {
|
||||
let colorBlendAmount: CGFloat = IME.isDarkMode() ? 0.3 : 0
|
||||
// The background color of the highlightened candidate
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
NSColor.systemRed.blended(
|
||||
withFraction: colorBlendAmount,
|
||||
of: NSColor.black
|
||||
)!
|
||||
.setFill()
|
||||
case InputMode.imeModeCHT:
|
||||
NSColor.systemBlue.blended(
|
||||
withFraction: colorBlendAmount,
|
||||
of: NSColor.black
|
||||
)!
|
||||
.setFill()
|
||||
default:
|
||||
NSColor.alternateSelectedControlColor.setFill()
|
||||
}
|
||||
highlightedColor.setFill()
|
||||
// Highlightened index text color
|
||||
activeCandidateIndexAttr[.foregroundColor] = NSColor.selectedMenuItemTextColor
|
||||
.withAlphaComponent(0.84)
|
||||
|
@ -258,22 +246,7 @@ private class vwrCandidateUniversal: NSView {
|
|||
let path: NSBezierPath = .init(roundedRect: rctCandidateArea, xRadius: 6, yRadius: 6)
|
||||
path.fill()
|
||||
}
|
||||
if mgrPrefs.handleDefaultCandidateFontsByLangIdentifier {
|
||||
switch IME.currentInputMode {
|
||||
case InputMode.imeModeCHS:
|
||||
if #available(macOS 12.0, *) {
|
||||
activeCandidateAttr[.languageIdentifier] = "zh-Hans" as AnyObject
|
||||
}
|
||||
case InputMode.imeModeCHT:
|
||||
if #available(macOS 12.0, *) {
|
||||
activeCandidateAttr[.languageIdentifier] =
|
||||
(mgrPrefs.shiftJISShinjitaiOutputEnabled || mgrPrefs.chineseConversionEnabled)
|
||||
? "ja" as AnyObject : "zh-Hant" as AnyObject
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
ensureLangIdentifier(for: &activeCandidateAttr)
|
||||
(keyLabels[index] as NSString).draw(
|
||||
in: rctLabel, withAttributes: activeCandidateIndexAttr
|
||||
)
|
||||
|
|
|
@ -16,8 +16,6 @@ struct suiPrefPaneDevZone: View {
|
|||
forKey: UserDef.kHandleDefaultCandidateFontsByLangIdentifier.rawValue)
|
||||
@State private var selShouldAlwaysUseShiftKeyAccommodation: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShouldAlwaysUseShiftKeyAccommodation.rawValue)
|
||||
@State private var selDisableShiftTogglingAlphanumericalMode: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue)
|
||||
private let contentWidth: Double = {
|
||||
switch mgrPrefs.appleLanguages[0] {
|
||||
case "ja":
|
||||
|
@ -72,12 +70,6 @@ struct suiPrefPaneDevZone: View {
|
|||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
Toggle(
|
||||
LocalizedStringKey("Completely disable using Shift key to toggling alphanumerical mode"),
|
||||
isOn: $selDisableShiftTogglingAlphanumericalMode.onChange {
|
||||
mgrPrefs.disableShiftTogglingAlphanumericalMode = selDisableShiftTogglingAlphanumericalMode
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,8 @@ struct suiPrefPaneExperience: View {
|
|||
forKey: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue)
|
||||
@State private var selUpperCaseLetterKeyBehavior = UserDefaults.standard.integer(
|
||||
forKey: UserDef.kUpperCaseLetterKeyBehavior.rawValue)
|
||||
@State private var selDisableShiftTogglingAlphanumericalMode: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue)
|
||||
private let contentWidth: Double = {
|
||||
switch mgrPrefs.appleLanguages[0] {
|
||||
case "ja":
|
||||
|
@ -149,6 +151,12 @@ struct suiPrefPaneExperience: View {
|
|||
isOn: $selTogglingAlphanumericalModeWithLShift.onChange {
|
||||
mgrPrefs.togglingAlphanumericalModeWithLShift = selTogglingAlphanumericalModeWithLShift
|
||||
}
|
||||
).disabled(mgrPrefs.disableShiftTogglingAlphanumericalMode == true)
|
||||
Toggle(
|
||||
LocalizedStringKey("Completely disable using Shift key to toggling alphanumerical mode"),
|
||||
isOn: $selDisableShiftTogglingAlphanumericalMode.onChange {
|
||||
mgrPrefs.disableShiftTogglingAlphanumericalMode = selDisableShiftTogglingAlphanumericalMode
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow backspace-editing miscomposed readings"),
|
||||
|
|
|
@ -133,20 +133,14 @@ struct suiPrefPaneGeneral: View {
|
|||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to KangXi characters"),
|
||||
isOn: $selEnableKanjiConvToKangXi.onChange {
|
||||
mgrPrefs.chineseConversionEnabled = selEnableKanjiConvToKangXi
|
||||
if selEnableKanjiConvToKangXi {
|
||||
mgrPrefs.shiftJISShinjitaiOutputEnabled = !selEnableKanjiConvToKangXi
|
||||
selEnableKanjiConvToJIS = !selEnableKanjiConvToKangXi
|
||||
}
|
||||
selEnableKanjiConvToJIS = mgrPrefs.shiftJISShinjitaiOutputEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to JIS Shinjitai characters"),
|
||||
isOn: $selEnableKanjiConvToJIS.onChange {
|
||||
mgrPrefs.shiftJISShinjitaiOutputEnabled = selEnableKanjiConvToJIS
|
||||
if selEnableKanjiConvToJIS {
|
||||
mgrPrefs.chineseConversionEnabled = !selEnableKanjiConvToJIS
|
||||
selEnableKanjiConvToKangXi = !selEnableKanjiConvToJIS
|
||||
}
|
||||
selEnableKanjiConvToKangXi = mgrPrefs.chineseConversionEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21219" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21223" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21219"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21223"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -344,11 +344,11 @@
|
|||
<point key="canvasLocation" x="-895.5" y="-645.5"/>
|
||||
</visualEffectView>
|
||||
<visualEffectView blendingMode="behindWindow" material="sidebar" state="followsWindowActiveState" id="XWo-36-xGi" userLabel="vwrExperience">
|
||||
<rect key="frame" x="0.0" y="0.0" width="445" height="552"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="445" height="536"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField autoresizesSubviews="NO" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IpX-f7-rTL">
|
||||
<rect key="frame" x="18" y="517" width="317" height="15"/>
|
||||
<rect key="frame" x="18" y="501" width="317" height="15"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Choose which keys you prefer for selecting candidates." id="2pS-nv-te4">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -356,7 +356,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uHU-aL-du7">
|
||||
<rect key="frame" x="127" y="487" width="151" height="23"/>
|
||||
<rect key="frame" x="127" y="471" width="151" height="23"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="147" id="Luo-hb-kcY"/>
|
||||
</constraints>
|
||||
|
@ -375,7 +375,7 @@
|
|||
</connections>
|
||||
</comboBox>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ETa-09-qWI">
|
||||
<rect key="frame" x="31" y="491" width="91" height="15"/>
|
||||
<rect key="frame" x="31" y="475" width="91" height="15"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Selection Keys:" id="FnD-oH-El5">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -383,7 +383,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||
<rect key="frame" x="18" y="463" width="403" height="15"/>
|
||||
<rect key="frame" x="18" y="447" width="403" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the cursor position where you want to list possible candidates." id="14">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -391,7 +391,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<matrix wantsLayer="YES" verticalHuggingPriority="751" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||
<rect key="frame" x="33" y="417" width="402" height="38"/>
|
||||
<rect key="frame" x="33" y="401" width="402" height="38"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="402" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
|
@ -416,7 +416,7 @@
|
|||
</connections>
|
||||
</matrix>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7z2-DD-c58">
|
||||
<rect key="frame" x="33" y="396.5" width="318" height="16"/>
|
||||
<rect key="frame" x="33" y="380.5" width="318" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Push the cursor in front of the phrase after selection" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="RUG-ls-KyA">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -426,7 +426,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TMn-LX-3Ub">
|
||||
<rect key="frame" x="18" y="373" width="369" height="15"/>
|
||||
<rect key="frame" x="18" y="357" width="369" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Tab key in the candidate window." id="ueU-Rz-a1C">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -434,7 +434,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J0f-Aw-dxC">
|
||||
<rect key="frame" x="18" y="325" width="336" height="15"/>
|
||||
<rect key="frame" x="18" y="309" width="336" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Space key with candidates." id="Pg5-G9-pY5">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -442,7 +442,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bE0-Lq-Pj7">
|
||||
<rect key="frame" x="19" y="141.5" width="266" height="16"/>
|
||||
<rect key="frame" x="19" y="125.5" width="266" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Use ESC key to clear the entire input buffer" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="f2j-xD-4xK">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -452,7 +452,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
|
||||
<rect key="frame" x="19" y="162.5" width="285" height="16"/>
|
||||
<rect key="frame" x="19" y="146.5" width="285" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Enable Space key for calling candidate window" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="110">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -462,7 +462,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mzw-F2-aAQ">
|
||||
<rect key="frame" x="19" y="120.5" width="295" height="16"/>
|
||||
<rect key="frame" x="19" y="104.5" width="295" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Emulating select-candidate-per-character mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="ArK-Vk-OoT">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -472,7 +472,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="j8R-Hj-3dj">
|
||||
<rect key="frame" x="19" y="99.5" width="340" height="16"/>
|
||||
<rect key="frame" x="19" y="83.5" width="340" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Automatically correct reading combinations when typing" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="chkAutoCorrectReadingCombination">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -482,7 +482,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6MM-WC-Mpd">
|
||||
<rect key="frame" x="19" y="78.5" width="388" height="16"/>
|
||||
<rect key="frame" x="19" y="62.5" width="388" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Allow using Enter key to confirm associated candidate selection" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="chkAlsoConfirmAssociatedCandidatesByEnter">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -492,7 +492,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HaB-rc-AcW">
|
||||
<rect key="frame" x="19" y="57.5" width="388" height="16"/>
|
||||
<rect key="frame" x="19" y="41.5" width="388" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Allow backspace-editing miscomposed readings" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="chkKeepReadingUponCompositionError">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
|
@ -501,18 +501,8 @@
|
|||
<binding destination="32" name="value" keyPath="values.KeepReadingUponCompositionError" id="ddF-qg-jes"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FCB-ax-ARZ">
|
||||
<rect key="frame" x="19" y="36.5" width="388" height="16"/>
|
||||
<buttonCell key="cell" type="check" title="Also toggle alphanumerical mode with Left-Shift" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="chkTogglingAlphanumericalModeWithLShift">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.TogglingAlphanumericalModeWithLShift" id="XW6-un-l8B"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6q5-OP-iEb">
|
||||
<rect key="frame" x="18" y="255" width="332" height="15"/>
|
||||
<rect key="frame" x="18" y="239" width="332" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of Shift+Letter key with letter inputs." id="lblUpperCaseLetterKeyBehavior">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -520,7 +510,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<matrix wantsLayer="YES" verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n7q-ew-DYu">
|
||||
<rect key="frame" x="32" y="347" width="352" height="18"/>
|
||||
<rect key="frame" x="32" y="331" width="352" height="18"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="174" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
|
@ -547,7 +537,7 @@
|
|||
</connections>
|
||||
</matrix>
|
||||
<matrix wantsLayer="YES" verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YkJ-lr-EP6">
|
||||
<rect key="frame" x="32" y="279" width="386" height="38"/>
|
||||
<rect key="frame" x="32" y="263" width="386" height="38"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="386" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
|
@ -572,7 +562,7 @@
|
|||
</connections>
|
||||
</matrix>
|
||||
<matrix wantsLayer="YES" verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="veW-XM-HGs">
|
||||
<rect key="frame" x="32" y="187" width="386" height="61"/>
|
||||
<rect key="frame" x="32" y="171" width="386" height="61"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="386" height="19"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
|
@ -613,8 +603,6 @@
|
|||
<constraint firstItem="15" firstAttribute="leading" secondItem="XWo-36-xGi" secondAttribute="leading" constant="33" id="Be1-9m-alA"/>
|
||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="top" secondItem="TMn-LX-3Ub" secondAttribute="bottom" constant="8" id="BtQ-PX-1e1"/>
|
||||
<constraint firstItem="109" firstAttribute="leading" secondItem="XWo-36-xGi" secondAttribute="leading" constant="20" id="Cu9-uO-BZG"/>
|
||||
<constraint firstItem="FCB-ax-ARZ" firstAttribute="top" secondItem="HaB-rc-AcW" secondAttribute="bottom" constant="6" id="EAW-lg-2pb"/>
|
||||
<constraint firstItem="FCB-ax-ARZ" firstAttribute="leading" secondItem="HaB-rc-AcW" secondAttribute="leading" id="GjC-qu-Nxe"/>
|
||||
<constraint firstItem="j8R-Hj-3dj" firstAttribute="top" secondItem="mzw-F2-aAQ" secondAttribute="bottom" constant="6" id="H9h-Dz-FOL"/>
|
||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="leading" secondItem="XWo-36-xGi" secondAttribute="leading" constant="20" id="KKo-uq-jJx"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="6q5-OP-iEb" secondAttribute="trailing" constant="20" symbolic="YES" id="L3C-R7-eDB"/>
|
||||
|
@ -652,9 +640,8 @@
|
|||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="mzw-F2-aAQ" secondAttribute="trailing" constant="20" symbolic="YES" id="vCa-4g-Zxq"/>
|
||||
<constraint firstItem="uHU-aL-du7" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="trailing" constant="8" symbolic="YES" id="wZO-1b-2vC"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="13" secondAttribute="trailing" constant="20" symbolic="YES" id="yxg-7J-xR5"/>
|
||||
<constraint firstItem="FCB-ax-ARZ" firstAttribute="trailing" secondItem="HaB-rc-AcW" secondAttribute="trailing" id="z0l-7W-j7D"/>
|
||||
</constraints>
|
||||
<point key="canvasLocation" x="-896.5" y="-91"/>
|
||||
<point key="canvasLocation" x="-896.5" y="-112"/>
|
||||
</visualEffectView>
|
||||
<visualEffectView blendingMode="behindWindow" material="sidebar" state="followsWindowActiveState" id="Rnp-LM-RIF" userLabel="vwrDictionary">
|
||||
<rect key="frame" x="0.0" y="0.0" width="445" height="250"/>
|
||||
|
@ -1057,11 +1044,11 @@
|
|||
<point key="canvasLocation" x="-392" y="-704"/>
|
||||
</visualEffectView>
|
||||
<visualEffectView blendingMode="behindWindow" material="sidebar" state="followsWindowActiveState" id="Qd7-ln-nNO" userLabel="vwrDevZone">
|
||||
<rect key="frame" x="0.0" y="0.0" width="445" height="261"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="445" height="165"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lblControlDevZoneTitleDescription" userLabel="lblControlDevZoneTitleDescription">
|
||||
<rect key="frame" x="18" y="211" width="409" height="30"/>
|
||||
<rect key="frame" x="18" y="115" width="343" height="30"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" id="lblDevZoneTitleDescription">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<string key="title">Warning: This page is for testing future features.
|
||||
|
@ -1071,10 +1058,10 @@ Features listed here may not work as expected.</string>
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="P1o-bW-Tjn">
|
||||
<rect key="frame" x="20" y="200" width="405" height="5"/>
|
||||
<rect key="frame" x="20" y="104" width="339" height="5"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tglControlDevZoneIMKCandidate" userLabel="tglControlDevZoneIMKCandidate">
|
||||
<rect key="frame" x="19" y="178.5" width="406" height="17"/>
|
||||
<rect key="frame" x="19" y="82.5" width="340" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="1fy-CP-mlB"/>
|
||||
</constraints>
|
||||
|
@ -1088,60 +1075,32 @@ Features listed here may not work as expected.</string>
|
|||
</connections>
|
||||
</button>
|
||||
<textField wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lblControlDevZoneIMKCandidate" userLabel="lblControlDevZoneIMKCandidate">
|
||||
<rect key="frame" x="18" y="142" width="409" height="28"/>
|
||||
<rect key="frame" x="18" y="46" width="409" height="28"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="405" id="YoB-Wx-n3h"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="IMK candidate window is plagued with issues like malfunctioned selection keys, etc." id="lblDevZoneIMKCandidate">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tglControlDevZoneCandidateFont" userLabel="tglControlDevZoneCandidateFont">
|
||||
<rect key="frame" x="19" y="118.5" width="406" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="17" id="eCc-Cc-xvc"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="Use .langIdentifier to handle UI fonts in candidate window" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="tglDevZoneCandidateFont" userLabel="tglDevZoneCandidateFont">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.HandleDefaultCandidateFontsByLangIdentifier" id="EEd-Z8-b5S"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lblControlDevZoneCandidateFont" userLabel="lblControlDevZoneCandidateFont">
|
||||
<rect key="frame" x="18" y="68" width="409" height="42"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="405" id="1OL-J2-FUX"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" id="lblDevZoneCandidateFont">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="title">This only works since macOS 12 with non-IMK candidate window as an alternative wordaround of Apple Bug Report #FB10978412. Apple should patch that for macOS 11 and later.</string>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="lblControlDevZoneTitleDescription" firstAttribute="leading" secondItem="Qd7-ln-nNO" secondAttribute="leading" constant="20" symbolic="YES" id="0Ia-ut-ksj"/>
|
||||
<constraint firstItem="tglControlDevZoneIMKCandidate" firstAttribute="top" secondItem="P1o-bW-Tjn" secondAttribute="bottom" constant="7.5" id="3as-Db-NwQ"/>
|
||||
<constraint firstItem="tglControlDevZoneIMKCandidate" firstAttribute="leading" secondItem="lblControlDevZoneIMKCandidate" secondAttribute="leading" id="59X-nd-Otf"/>
|
||||
<constraint firstItem="lblControlDevZoneIMKCandidate" firstAttribute="leading" secondItem="tglControlDevZoneCandidateFont" secondAttribute="leading" id="COk-L6-3R8"/>
|
||||
<constraint firstItem="lblControlDevZoneCandidateFont" firstAttribute="top" secondItem="tglControlDevZoneCandidateFont" secondAttribute="bottom" constant="8.5" id="EyK-gG-Xhd"/>
|
||||
<constraint firstItem="P1o-bW-Tjn" firstAttribute="trailing" secondItem="tglControlDevZoneIMKCandidate" secondAttribute="trailing" id="LM7-ov-mng"/>
|
||||
<constraint firstItem="lblControlDevZoneTitleDescription" firstAttribute="trailing" secondItem="P1o-bW-Tjn" secondAttribute="trailing" id="LqC-ii-aOO"/>
|
||||
<constraint firstAttribute="bottom" relation="lessThanOrEqual" secondItem="lblControlDevZoneCandidateFont" secondAttribute="bottom" constant="82" id="NVG-bX-Lgd"/>
|
||||
<constraint firstItem="tglControlDevZoneCandidateFont" firstAttribute="top" secondItem="lblControlDevZoneIMKCandidate" secondAttribute="bottom" constant="6.5" id="UXh-8X-5wM"/>
|
||||
<constraint firstAttribute="trailing" secondItem="lblControlDevZoneIMKCandidate" secondAttribute="trailing" constant="20" symbolic="YES" id="MHM-FX-JE7"/>
|
||||
<constraint firstItem="lblControlDevZoneIMKCandidate" firstAttribute="leading" secondItem="tglControlDevZoneIMKCandidate" secondAttribute="leading" id="WDx-XS-EUF"/>
|
||||
<constraint firstItem="lblControlDevZoneTitleDescription" firstAttribute="leading" secondItem="P1o-bW-Tjn" secondAttribute="leading" id="Wc3-Oe-D2E"/>
|
||||
<constraint firstItem="P1o-bW-Tjn" firstAttribute="top" secondItem="lblControlDevZoneTitleDescription" secondAttribute="bottom" constant="8" symbolic="YES" id="Whf-Gf-g65"/>
|
||||
<constraint firstItem="lblControlDevZoneIMKCandidate" firstAttribute="top" secondItem="tglControlDevZoneIMKCandidate" secondAttribute="bottom" constant="8.5" id="awf-DD-u2k"/>
|
||||
<constraint firstAttribute="bottom" relation="lessThanOrEqual" secondItem="lblControlDevZoneIMKCandidate" secondAttribute="bottom" constant="142" id="ZcX-Vx-qyC"/>
|
||||
<constraint firstItem="lblControlDevZoneIMKCandidate" firstAttribute="top" secondItem="tglControlDevZoneIMKCandidate" secondAttribute="bottom" constant="9" id="eqi-Pb-gfH"/>
|
||||
<constraint firstItem="P1o-bW-Tjn" firstAttribute="leading" secondItem="tglControlDevZoneIMKCandidate" secondAttribute="leading" id="f2q-KJ-bvO"/>
|
||||
<constraint firstItem="tglControlDevZoneCandidateFont" firstAttribute="trailing" secondItem="lblControlDevZoneCandidateFont" secondAttribute="trailing" id="gWx-J5-kgO"/>
|
||||
<constraint firstItem="tglControlDevZoneIMKCandidate" firstAttribute="trailing" secondItem="lblControlDevZoneIMKCandidate" secondAttribute="trailing" id="lQf-A0-TPV"/>
|
||||
<constraint firstItem="tglControlDevZoneCandidateFont" firstAttribute="leading" secondItem="lblControlDevZoneCandidateFont" secondAttribute="leading" id="oCd-O4-Qfg"/>
|
||||
<constraint firstItem="lblControlDevZoneTitleDescription" firstAttribute="top" secondItem="Qd7-ln-nNO" secondAttribute="top" constant="20" symbolic="YES" id="vYg-x4-tfo"/>
|
||||
<constraint firstItem="lblControlDevZoneIMKCandidate" firstAttribute="trailing" secondItem="tglControlDevZoneCandidateFont" secondAttribute="trailing" id="z47-zE-rak"/>
|
||||
</constraints>
|
||||
<point key="canvasLocation" x="-393.5" y="-70.5"/>
|
||||
<point key="canvasLocation" x="-393.5" y="-119.5"/>
|
||||
</visualEffectView>
|
||||
</objects>
|
||||
</document>
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
"chkAutoCorrectReadingCombination.title" = "Automatically correct reading combinations when typing";
|
||||
"chkFetchSuggestionsFromUserOverrideModel.title" = "Applying typing suggestions from half-life user override model";
|
||||
"chkKeepReadingUponCompositionError.title" = "Allow backspace-editing miscomposed readings";
|
||||
"chkTogglingAlphanumericalModeWithLShift.title" = "Also toggle alphanumerical mode with Left-Shift";
|
||||
"chkUseFixecCandidateOrderOnSelection.title" = "Always use fixed listing order in candidate window";
|
||||
"DbW-eq-ZdB.title" = "Starlight";
|
||||
"dIN-TZ-67g.title" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
||||
|
@ -63,7 +62,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblDevZoneCandidateFont.title" = "This only works since macOS 12 with non-IMK candidate window as an alternative wordaround of Apple Bug Report #FB10978412. Apple should patch that for macOS 11 and later.";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK candidate window is plagued with issues like failed selection keys.";
|
||||
"lblDevZoneTitleDescription.title" = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
|
||||
"lblUpperCaseLetterKeyBehavior.title" = "Choose the behavior of Shift+Letter key with letter inputs.";
|
||||
|
@ -81,7 +79,6 @@
|
|||
"rVQ-Hx-cGi.title" = "Japanese";
|
||||
"s7u-Fm-dVg.title" = "Cycling Pages";
|
||||
"shc-Nu-UsM.title" = "Show page buttons in candidate list";
|
||||
"tglDevZoneCandidateFont.title" = "Use .langIdentifier to handle UI fonts in candidate window";
|
||||
"tglDevZoneIMKCandidate.title" = "Use IMK Candidate Window instead (will reboot the IME)";
|
||||
"TXr-FF-ehw.title" = "Traditional Chinese";
|
||||
"ueU-Rz-a1C.title" = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
"chkAutoCorrectReadingCombination.title" = "入力中で打ち間違った発音組み合わせを自動的に訂正する";
|
||||
"chkFetchSuggestionsFromUserOverrideModel.title" = "入力中で臨時記憶モジュールからお薦めの候補を自動的に選ぶ";
|
||||
"chkKeepReadingUponCompositionError.title" = "効かぬ音読みを BackSpace で再編集";
|
||||
"chkTogglingAlphanumericalModeWithLShift.title" = "左側の Shift キーでも英数入力モードの切り替え";
|
||||
"chkUseFixecCandidateOrderOnSelection.title" = "候補文字を固定順番で陳列する";
|
||||
"DbW-eq-ZdB.title" = "星光";
|
||||
"dIN-TZ-67g.title" = "Shift+Space で次のページ、Space で次の候補文字を";
|
||||
|
@ -63,7 +62,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblDevZoneCandidateFont.title" = "これは Apple Bug Report #FB10978412 の臨時対策であり、macOS 12 からの macOS に効き、IMK 以外の候補陳列ウィンドウに作用する。Apple は macOS 11 からの macOS のために該当 Bug を修復すべきである。";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 候補陳列ウィンドウで言選り用キーは現時点で利用不可、尚他故障あり。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。";
|
||||
"lblUpperCaseLetterKeyBehavior.title" = "Shift+文字キーの行為をご指定ください。";
|
||||
|
@ -81,7 +79,6 @@
|
|||
"rVQ-Hx-cGi.title" = "和語";
|
||||
"s7u-Fm-dVg.title" = "ページ";
|
||||
"shc-Nu-UsM.title" = "ページボタンを表示";
|
||||
"tglDevZoneCandidateFont.title" = "「.langIdentifier」を使って候補陳列ウィンドウのフォントを取り扱う";
|
||||
"tglDevZoneIMKCandidate.title" = "IMK 候補陳列ウィンドウを起用(入力アプリは自動的に再起動)";
|
||||
"TXr-FF-ehw.title" = "繁体中国語";
|
||||
"ueU-Rz-a1C.title" = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
"chkAutoCorrectReadingCombination.title" = "敲字时自动纠正读音组合";
|
||||
"chkFetchSuggestionsFromUserOverrideModel.title" = "在敲字时自动套用来自半衰记忆模组的建议";
|
||||
"chkKeepReadingUponCompositionError.title" = "允许对无效的读音使用 BackSpace 编辑";
|
||||
"chkTogglingAlphanumericalModeWithLShift.title" = "也允许使用左侧的 Shift 键盘切换英数输入模式";
|
||||
"chkUseFixecCandidateOrderOnSelection.title" = "以固定顺序来陈列选字窗内的候选字";
|
||||
"DbW-eq-ZdB.title" = "星光";
|
||||
"dIN-TZ-67g.title" = "Shift+Space 换下一页,Space 换选下一个候选字。";
|
||||
|
@ -63,7 +62,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblDevZoneCandidateFont.title" = "该方法是 Apple Bug Report #FB10978412 的保守治疗方案,用来仅针对 macOS 12 开始的系统,且仅对非 IMK 选字窗起作用。Apple 应该对 macOS 11 开始的系统修复这个 Bug。";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 选字窗目前暂时无法正常使用选字键,并具其它未知故障。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。";
|
||||
"lblUpperCaseLetterKeyBehavior.title" = "指定 Shift+字母键 的行为。";
|
||||
|
@ -81,7 +79,6 @@
|
|||
"rVQ-Hx-cGi.title" = "和语";
|
||||
"s7u-Fm-dVg.title" = "轮替页面";
|
||||
"shc-Nu-UsM.title" = "在选字窗内显示翻页按钮";
|
||||
"tglDevZoneCandidateFont.title" = "使用 .langIdentifier 来管理选字窗的预设介面字型";
|
||||
"tglDevZoneIMKCandidate.title" = "启用 IMK 选字窗(会自动重启输入法)";
|
||||
"TXr-FF-ehw.title" = "繁体中文";
|
||||
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 热键在选字窗内的轮替操作对象。";
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
"chkAutoCorrectReadingCombination.title" = "敲字時自動糾正讀音組合";
|
||||
"chkFetchSuggestionsFromUserOverrideModel.title" = "在敲字時自動套用來自半衰記憶模組的建議";
|
||||
"chkKeepReadingUponCompositionError.title" = "允許對無效的讀音使用 BackSpace 編輯";
|
||||
"chkTogglingAlphanumericalModeWithLShift.title" = "也允許使用左側的 Shift 鍵盤切換英數輸入模式";
|
||||
"chkUseFixecCandidateOrderOnSelection.title" = "以固定順序來陳列選字窗內的候選字";
|
||||
"DbW-eq-ZdB.title" = "星光";
|
||||
"dIN-TZ-67g.title" = "Shift+Space 換下一頁,Space 換選下一個候選字";
|
||||
|
@ -63,7 +62,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblDevZoneCandidateFont.title" = "該方法是 Apple Bug Report #FB10978412 的保守治療方案,用來僅針對 macOS 12 開始的系統,且僅對非 IMK 選字窗起作用。Apple 應該對 macOS 11 開始的系統修復這個 Bug。";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 選字窗目前暫時無法正常使用選字鍵,併具其它未知故障。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。";
|
||||
"lblUpperCaseLetterKeyBehavior.title" = "指定 Shift+字母鍵 的行為。";
|
||||
|
@ -81,7 +79,6 @@
|
|||
"rVQ-Hx-cGi.title" = "和語";
|
||||
"s7u-Fm-dVg.title" = "輪替頁面";
|
||||
"shc-Nu-UsM.title" = "在選字窗內顯示翻頁按鈕";
|
||||
"tglDevZoneCandidateFont.title" = "使用 .langIdentifier 來管理選字窗的預設介面字型";
|
||||
"tglDevZoneIMKCandidate.title" = "啟用 IMK 選字窗(會自動重啟輸入法)";
|
||||
"TXr-FF-ehw.title" = "繁體中文";
|
||||
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 熱鍵在選字窗內的輪替操作對象。";
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.9.3</string>
|
||||
<string>1.9.4</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1993</string>
|
||||
<string>1994</string>
|
||||
<key>UpdateInfoEndpoint</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
||||
<key>UpdateInfoSite</key>
|
||||
|
|
|
@ -726,7 +726,7 @@
|
|||
<key>USE_HFS+_COMPRESSION</key>
|
||||
<false/>
|
||||
<key>VERSION</key>
|
||||
<string>1.9.3</string>
|
||||
<string>1.9.4</string>
|
||||
</dict>
|
||||
<key>TYPE</key>
|
||||
<integer>0</integer>
|
||||
|
|
|
@ -1421,7 +1421,7 @@
|
|||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
|
@ -1431,7 +1431,7 @@
|
|||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewingTests;
|
||||
|
@ -1460,13 +1460,13 @@
|
|||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewingTests;
|
||||
|
@ -1497,7 +1497,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
|
@ -1518,7 +1518,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||
|
@ -1547,7 +1547,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
|
@ -1564,7 +1564,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||
|
@ -1678,7 +1678,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1706,7 +1706,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -1733,7 +1733,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1755,7 +1755,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
@ -1777,7 +1777,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
|
@ -1797,7 +1797,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -1819,7 +1819,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1993;
|
||||
CURRENT_PROJECT_VERSION = 1994;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
|
@ -1833,7 +1833,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.9.3;
|
||||
MARKETING_VERSION = 1.9.4;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
Loading…
Reference in New Issue