Pre Merge pull request !88 from ShikiSuen/upd/1.9.4

This commit is contained in:
ShikiSuen 2022-08-17 00:13:24 +00:00 committed by Gitee
commit 86b5a63047
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
24 changed files with 305 additions and 268 deletions

@ -1 +1 @@
Subproject commit b5e6f15c198f87c4cf0227bc6d9b4346e86228a0
Subproject commit d672acffa68198740058d97ff29a9cddfa0bf791

View File

@ -127,15 +127,95 @@ 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
/// - consolidate:
func fixNode(candidate: (String, String), respectCursorPushing: Bool = true, preConsolidate: Bool = false) {
let theCandidate: Megrez.Compositor.Candidate = .init(key: candidate.0, value: candidate.1)
if !compositor.overrideCandidate(theCandidate, at: actualCursor, overrideType: .withHighScore) { return }
///
if preConsolidate {
consolidateCursorContext(with: theCandidate)
}
//
if !compositor.overrideCandidate(theCandidate, at: actualCandidateCursor) { return }
let previousWalk = compositor.walkedNodes
//
walk()

View File

@ -854,7 +854,7 @@ extension KeyHandler {
currentIndex = 0
}
fixNode(candidate: candidates[currentIndex], respectCursorPushing: false)
fixNode(candidate: candidates[currentIndex], respectCursorPushing: false, preConsolidate: false)
stateCallback(buildInputtingState)
return true

View File

@ -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 {

View File

@ -118,7 +118,7 @@ extension ctlInputMethod: ctlCandidateDelegate {
if let state = state as? InputState.ChoosingCandidate {
let selectedValue = state.candidates[index]
keyHandler.fixNode(candidate: selectedValue, respectCursorPushing: true)
keyHandler.fixNode(candidate: selectedValue, respectCursorPushing: true, preConsolidate: true)
let inputting = keyHandler.buildInputtingState

View File

@ -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()

View File

@ -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,10 +469,8 @@ public enum mgrPrefs {
}
@UserDefault(key: UserDef.kChineseConversionEnabled.rawValue, defaultValue: false)
static var chineseConversionEnabled: Bool
@discardableResult static func toggleChineseConversionEnabled() -> Bool {
chineseConversionEnabled = !chineseConversionEnabled
static var chineseConversionEnabled: Bool {
didSet {
// JIS
if chineseConversionEnabled, shiftJISShinjitaiOutputEnabled {
toggleShiftJISShinjitaiOutputEnabled()
@ -477,22 +478,35 @@ public enum mgrPrefs {
shiftJISShinjitaiOutputEnabled, forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue
)
}
UserDefaults.standard.set(chineseConversionEnabled, forKey: UserDef.kChineseConversionEnabled.rawValue)
UserDefaults.standard.set(
chineseConversionEnabled, forKey: UserDef.kChineseConversionEnabled.rawValue
)
}
}
@discardableResult static func toggleChineseConversionEnabled() -> Bool {
chineseConversionEnabled = !chineseConversionEnabled
return chineseConversionEnabled
}
@UserDefault(key: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue, defaultValue: false)
static var shiftJISShinjitaiOutputEnabled: Bool
@discardableResult static func toggleShiftJISShinjitaiOutputEnabled() -> Bool {
shiftJISShinjitaiOutputEnabled = !shiftJISShinjitaiOutputEnabled
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
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]?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 }
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

View File

@ -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)
}
}

View File

@ -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
)

View File

@ -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
}
)
}
}
}

View File

@ -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"),

View File

@ -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(

View File

@ -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>

View File

@ -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.";

View File

@ -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 キーの輪番切替対象をご指定ください。";

View File

@ -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 热键在选字窗内的轮替操作对象。";

View File

@ -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 熱鍵在選字窗內的輪替操作對象。";

View File

@ -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>

View File

@ -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>

View File

@ -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 = "";