Merge branch 'upd/1.3.5' into 'main'
v1.3.5 // Key Behaviors, Debug Mode, etc. See merge request vChewing/vChewing-macOS!1
This commit is contained in:
commit
e50e2daa10
|
@ -1,3 +1,3 @@
|
|||
[submodule "Source/Data"]
|
||||
path = Source/Data
|
||||
url = https://gitee.com/vchewing/libvchewing-data
|
||||
url = https://jihulab.com/vChewing/libvchewing-data.git
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
vChewing macOS: 3-Clause BSD License MITライセンス
|
||||
vChewing macOS: MIT商標不許可ライセンス (MIT-NTL License)
|
||||
|
||||
© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.
|
||||
小麦注音入力エンジン開発:Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。
|
||||
|
|
12
README.md
12
README.md
|
@ -1,8 +1,14 @@
|
|||
因不可控的网络条件原因,该仓库只能保证在 Gitee 有最新的内容可用:https://gitee.com/vchewing/vChewing-macOS
|
||||
因不可控原因,该仓库只能保证在 GitLab China 有最新的内容可用:
|
||||
|
||||
- 下载:https://jihulab.com/vChewing/vChewing-macOS/-/releases
|
||||
- 程式码仓库:https://jihulab.com/vChewing/vChewing-macOS
|
||||
|
||||
# vChewing 威注音输入法
|
||||
|
||||
威注音输入法由小麦注音分支而来(且词库内已经移除任何可以妨碍该输入法在世界上任何地方传播的内容),是原生简体中文注音输入法:相比中州韵(鼠须管)而言,威注音能够做到真正的大千声韵并击。
|
||||
威注音输入法基于小麦注音二次开发,是原生简体中文注音输入法:
|
||||
|
||||
- 威注音的原厂词库内不存在任何可以妨碍该输入法在世界上任何地方传播的内容。
|
||||
- 相比中州韵(鼠须管)而言,威注音能够做到真正的大千声韵并击。
|
||||
|
||||
>威注音有很多特色功能。在此仅列举部分:
|
||||
>- 支援 macOS 荧幕模拟键盘(仅传统大千与传统倚天布局)。
|
||||
|
@ -56,7 +62,7 @@
|
|||
|
||||
要注意的是 macOS 可能会限制同一次 login session 能终结同一个输入法的执行进程的次数(安装程式透过 kill input method process 来让新版的输入法生效)。如果安装若干次后,发现程式修改的结果并没有出现、或甚至输入法已无法再选用,只需要登出目前的 macOS 系统帐号、再重新登入即可。
|
||||
|
||||
补记: 该输入法是在 2021 年 11 月初「28ae7deb4092f067539cff600397292e66a5dd56」这一版小麦注音建置的基础上完成的。因为在清洗词库的时候清洗了全部的 git commit 历史,所以无法自动从小麦注音官方仓库上游继承任何改动,只能手动同步任何在此之后的程式修正。最近一次同步參照是 zonble 的分支「5cb6819e132a02bbcba77dbf083ada418750dab7」。
|
||||
补记: 该输入法是在 2021 年 11 月初「28ae7deb4092f067539cff600397292e66a5dd56」这一版小麦注音建置的基础上完成的。因为在清洗词库的时候清洗了全部的 git commit 历史,所以无法自动从小麦注音官方仓库上游继承任何改动,只能手动同步任何在此之后的程式修正。最近一次同步參照是上游主仓库的 2.2.2 版、以及 zonble 的分支「5cb6819e132a02bbcba77dbf083ada418750dab7」。
|
||||
|
||||
## 应用授权
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 6dc73cd3edd47c85089db8f58e92f0c821e67ed6
|
||||
Subproject commit e4238c5193173d82397a5dd96c91b6e50c7641b0
|
|
@ -184,7 +184,7 @@ class InputState: NSObject {
|
|||
let joined = selectedReadings.joined(separator: "-")
|
||||
let exist = mgrLangModel.checkIfUserPhraseExist(userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined)
|
||||
if exist {
|
||||
return String(format: NSLocalizedString("\"%@\" already exists, ENTER to boost its priority.", comment: ""), text)
|
||||
return String(format: NSLocalizedString("\"%@\" already exists, ENTER to override its priority.", comment: ""), text)
|
||||
}
|
||||
|
||||
return String(format: NSLocalizedString("\"%@\" selected. ENTER to add user phrase.", comment: ""), text)
|
||||
|
|
|
@ -39,6 +39,7 @@ extern InputMode imeModeNULL;
|
|||
|
||||
@interface KeyHandler : NSObject
|
||||
|
||||
- (BOOL)isBuilderEmpty;
|
||||
- (BOOL)handleInput:(KeyHandlerInput *)input
|
||||
state:(InputState *)state
|
||||
stateCallback:(void (^)(InputState *))stateCallback
|
||||
|
|
|
@ -87,6 +87,14 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
return _inputMode;
|
||||
}
|
||||
|
||||
- (BOOL)isBuilderEmpty {
|
||||
if (_builder->grid().width() == 0) {
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setInputMode:(NSString *)value
|
||||
{
|
||||
NSString *newInputMode;
|
||||
|
@ -255,7 +263,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
// Caps Lock processing : if Caps Lock is on, temporarily disable bopomofo.
|
||||
if ([input isBackSpace] || [input isEnterCharCode] || [input isEnter] || [input isAbsorbedArrowKey] || [input isExtraChooseCandidateKey] || [input isExtraChooseCandidateKeyReverse] || [input isCursorForward] || [input isCursorBackward]) {
|
||||
if ([input isBackSpace] || [input isEnter] || [input isAbsorbedArrowKey] || [input isExtraChooseCandidateKey] || [input isExtraChooseCandidateKeyReverse] || [input isCursorForward] || [input isCursorBackward]) {
|
||||
// do nothing if backspace is pressed -- we ignore the key
|
||||
} else if ([input isCapsLockOn]) {
|
||||
// process all possible combination, we hope.
|
||||
|
@ -339,13 +347,14 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
|
||||
// see if we have composition if Enter/Space is hit and buffer is not empty
|
||||
// this is bit-OR'ed so that the tone marker key is also taken into account
|
||||
composeReading |= (!_bpmfReadingBuffer->isEmpty() && ([input isSpace] || [input isEnterCharCode] || [input isEnter]));
|
||||
composeReading |= (!_bpmfReadingBuffer->isEmpty() && ([input isSpace] || [input isEnter]));
|
||||
if (composeReading) {
|
||||
// combine the reading
|
||||
std::string reading = _bpmfReadingBuffer->syllable().composedString();
|
||||
|
||||
// see if we have a unigram for this
|
||||
if (!_languageModel->hasUnigramsForKey(reading)) {
|
||||
[self errorCallbackConsolePrint:@"B49C0979"];
|
||||
errorCallback();
|
||||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
|
@ -410,7 +419,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if (_bpmfReadingBuffer->isEmpty() &&
|
||||
[state isKindOfClass:[InputStateNotEmpty class]] &&
|
||||
([input isExtraChooseCandidateKey] || [input isExtraChooseCandidateKeyReverse]
|
||||
|| [input isSpace] || [input isPageDown] || [input isPageUp]
|
||||
|| [input isSpace] || [input isPageDown] || [input isPageUp] || [input isTab]
|
||||
|| (input.useVerticalMode && ([input isVerticalModeOnlyChooseCandidateKey])))) {
|
||||
if ([input isSpace]) {
|
||||
// if the spacebar is NOT set to be a selection key
|
||||
|
@ -497,7 +506,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
// MARK: Enter
|
||||
if ([input isEnter] || [input isEnterCharCode]) {
|
||||
if ([input isEnter]) {
|
||||
if ([input isControlHold]) {
|
||||
if (ctlInputMethod.areWeUsingOurOwnPhraseEditor) {
|
||||
return [self _handleCtrlEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback];
|
||||
|
@ -508,8 +517,10 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
|
||||
// MARK: Punctuation list
|
||||
if ([input isSymbolMenuKey]) {
|
||||
InputStateEmpty *empty = [[InputStateEmpty alloc] init];
|
||||
stateCallback(empty);
|
||||
|
||||
// 得在這裡先 commit buffer,不然會導致「在摁 ESC 離開符號選單時會重複輸入上一次的組字區的內容」的不當行為。
|
||||
// 於是這裡用「模擬一次 Enter 鍵的操作」使其代為執行這個 commit buffer 的動作。
|
||||
[self _handleEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback];
|
||||
|
||||
SymbolNode *root = [SymbolNode root];
|
||||
InputStateSymbolTable *symbolState = [[InputStateSymbolTable alloc] initWithNode:root useVerticalMode:input.useVerticalMode];
|
||||
|
@ -567,6 +578,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
// strange behavior if we don't do this, "thinking" the key is not
|
||||
// actually consumed)
|
||||
if ([state isKindOfClass:[InputStateNotEmpty class]] || !_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"A9BFF20E"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -617,6 +629,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
if (!_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"6ED95318"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -632,6 +645,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
marking.tooltipForInputting = currentState.tooltip;
|
||||
stateCallback(marking);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"D326DEA3"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -641,6 +655,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"7045E6F3"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -655,6 +670,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
if (!_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"B3BA5257"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -670,6 +686,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
marking.tooltipForInputting = currentState.tooltip;
|
||||
stateCallback(marking);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"BB7F6DB9"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -679,6 +696,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"A96AAD58"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -694,6 +712,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
if (!_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"ABC44080"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -704,6 +723,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"66D97F90"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -718,6 +738,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
if (!_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"9B69908D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -728,6 +749,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"9B69908E"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -742,6 +764,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
if (!_bpmfReadingBuffer->isEmpty()) {
|
||||
[self errorCallbackConsolePrint:@"9B6F908D"];
|
||||
errorCallback();
|
||||
}
|
||||
stateCallback(state);
|
||||
|
@ -759,6 +782,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
_builder->deleteReadingBeforeCursor();
|
||||
[self _walk];
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"9D69908D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -795,10 +819,12 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
stateCallback(inputting);
|
||||
}
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"9B69938D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"9C69908D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -852,6 +878,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
_builder->insertReadingAtCursor(customPunctuation);
|
||||
poppedText = [self _popOverflowComposingTextAndWalk];
|
||||
} else { // If there is still unfinished bpmf reading, ignore the punctuation
|
||||
[self errorCallbackConsolePrint:@"A9B69908D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
return YES;
|
||||
|
@ -891,8 +918,9 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
|
||||
// Enter
|
||||
if ([input isEnter] || [input isEnterCharCode]) {
|
||||
if ([input isEnter]) {
|
||||
if (![self.delegate keyHandler:self didRequestWriteUserPhraseWithState:state]) {
|
||||
[self errorCallbackConsolePrint:@"5B69CC8D"];
|
||||
errorCallback();
|
||||
return YES;
|
||||
}
|
||||
|
@ -917,6 +945,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
stateCallback(marking);
|
||||
}
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"1149908D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -938,6 +967,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
stateCallback(marking);
|
||||
}
|
||||
} else {
|
||||
[self errorCallbackConsolePrint:@"9B51408D"];
|
||||
errorCallback();
|
||||
stateCallback(state);
|
||||
}
|
||||
|
@ -970,6 +1000,12 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
[self clear];
|
||||
InputStateEmptyIgnoringPreviousState *empty = [[InputStateEmptyIgnoringPreviousState alloc] init];
|
||||
stateCallback(empty);
|
||||
} else if ([self isBuilderEmpty]) {
|
||||
// 如果此時發現當前組字緩衝區為真空的情況的話,就將當前的組字緩衝區析構處理、強制重設輸入狀態。
|
||||
// 不然的話,一個本不該出現的真空組字緩衝區會使前後方向鍵與 BackSpace 鍵失靈。
|
||||
[self clear];
|
||||
InputStateEmptyIgnoringPreviousState *empty = [[InputStateEmptyIgnoringPreviousState alloc] init];
|
||||
stateCallback(empty);
|
||||
} else {
|
||||
InputStateInputting *inputting = (InputStateInputting *)[self buildInputtingState];
|
||||
stateCallback(inputting);
|
||||
|
@ -977,7 +1013,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
return YES;
|
||||
}
|
||||
|
||||
if ([input isEnterCharCode] || [input isEnter]) {
|
||||
if ([input isEnter]) {
|
||||
if ([state isKindOfClass: [InputStateAssociatedPhrases class]]) {
|
||||
[self clear];
|
||||
InputStateEmptyIgnoringPreviousState *empty = [[InputStateEmptyIgnoringPreviousState alloc] init];
|
||||
|
@ -988,9 +1024,24 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
return YES;
|
||||
}
|
||||
|
||||
if ([input isTab]) {
|
||||
BOOL updated =
|
||||
Preferences.specifyTabKeyBehavior?
|
||||
([input isShiftHold] ? [gCurrentCandidateController showPreviousPage] : [gCurrentCandidateController showNextPage])
|
||||
:
|
||||
([input isShiftHold] ? [gCurrentCandidateController highlightPreviousCandidate] : [gCurrentCandidateController highlightNextCandidate])
|
||||
;
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B691919"];
|
||||
errorCallback();
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
if ([input isSpace] || [input isPageDown] || input.emacsKey == vChewingEmacsKeyNextPage) {
|
||||
BOOL updated = [gCurrentCandidateController showNextPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B691919"];
|
||||
errorCallback();
|
||||
}
|
||||
return YES;
|
||||
|
@ -999,6 +1050,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if ([input isPageUp]) {
|
||||
BOOL updated = [gCurrentCandidateController showPreviousPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9569955D"];
|
||||
errorCallback();
|
||||
}
|
||||
return YES;
|
||||
|
@ -1008,11 +1060,13 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if ([gCurrentCandidateController isKindOfClass:[VTHorizontalCandidateController class]]) {
|
||||
BOOL updated = [gCurrentCandidateController highlightPreviousCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"1145148D"];
|
||||
errorCallback();
|
||||
}
|
||||
} else {
|
||||
BOOL updated = [gCurrentCandidateController showPreviousPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"1919810D"];
|
||||
errorCallback();
|
||||
}
|
||||
}
|
||||
|
@ -1022,6 +1076,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if (input.emacsKey == vChewingEmacsKeyBackward) {
|
||||
BOOL updated = [gCurrentCandidateController highlightPreviousCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B89308D"];
|
||||
errorCallback();
|
||||
}
|
||||
return YES;
|
||||
|
@ -1031,11 +1086,13 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if ([gCurrentCandidateController isKindOfClass:[VTHorizontalCandidateController class]]) {
|
||||
BOOL updated = [gCurrentCandidateController highlightNextCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B65138D"];
|
||||
errorCallback();
|
||||
}
|
||||
} else {
|
||||
BOOL updated = [gCurrentCandidateController showNextPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9244908D"];
|
||||
errorCallback();
|
||||
}
|
||||
}
|
||||
|
@ -1045,6 +1102,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if (input.emacsKey == vChewingEmacsKeyForward) {
|
||||
BOOL updated = [gCurrentCandidateController highlightNextCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B2428D"];
|
||||
errorCallback();
|
||||
}
|
||||
return YES;
|
||||
|
@ -1054,11 +1112,13 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if ([gCurrentCandidateController isKindOfClass:[VTHorizontalCandidateController class]]) {
|
||||
BOOL updated = [gCurrentCandidateController showPreviousPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"9B614524"];
|
||||
errorCallback();
|
||||
}
|
||||
} else {
|
||||
BOOL updated = [gCurrentCandidateController highlightPreviousCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"ASD9908D"];
|
||||
errorCallback();
|
||||
}
|
||||
}
|
||||
|
@ -1069,11 +1129,13 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
if ([gCurrentCandidateController isKindOfClass:[VTHorizontalCandidateController class]]) {
|
||||
BOOL updated = [gCurrentCandidateController showNextPage];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"92B990DD"];
|
||||
errorCallback();
|
||||
}
|
||||
} else {
|
||||
BOOL updated = [gCurrentCandidateController highlightNextCandidate];
|
||||
if (!updated) {
|
||||
[self errorCallbackConsolePrint:@"6B99908D"];
|
||||
errorCallback();
|
||||
}
|
||||
}
|
||||
|
@ -1082,6 +1144,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
|
||||
if ([input isHome] || input.emacsKey == vChewingEmacsKeyHome) {
|
||||
if (gCurrentCandidateController.selectedCandidateIndex == 0) {
|
||||
[self errorCallbackConsolePrint:@"9B6EDE8D"];
|
||||
errorCallback();
|
||||
} else {
|
||||
gCurrentCandidateController.selectedCandidateIndex = 0;
|
||||
|
@ -1104,6 +1167,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
|
||||
if (([input isEnd] || input.emacsKey == vChewingEmacsKeyEnd) && candidates.count > 0) {
|
||||
if (gCurrentCandidateController.selectedCandidateIndex == candidates.count - 1) {
|
||||
[self errorCallbackConsolePrint:@"9B69AAAD"];
|
||||
errorCallback();
|
||||
} else {
|
||||
gCurrentCandidateController.selectedCandidateIndex = candidates.count - 1;
|
||||
|
@ -1181,6 +1245,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
}
|
||||
}
|
||||
|
||||
[self errorCallbackConsolePrint:@"172A0F81"];
|
||||
errorCallback();
|
||||
return YES;
|
||||
}
|
||||
|
@ -1378,4 +1443,11 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
|
|||
return nil;
|
||||
}
|
||||
|
||||
-(void)errorCallbackConsolePrint:(NSString *)strPrint
|
||||
{
|
||||
if (Preferences.isDebugModeEnabled) {
|
||||
NSLog(@"vChewingErrorCallback: %@", strPrint);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -19,8 +19,11 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH
|
|||
|
||||
import Cocoa
|
||||
|
||||
// KeyCodes: https://eastmanreference.com/complete-list-of-applescript-key-codes
|
||||
enum KeyCode: UInt16 {
|
||||
case none = 0
|
||||
case esc = 53
|
||||
case tab = 48
|
||||
case enter = 76
|
||||
case up = 126
|
||||
case down = 125
|
||||
|
@ -33,6 +36,7 @@ enum KeyCode: UInt16 {
|
|||
case delete = 117
|
||||
}
|
||||
|
||||
// CharCodes: https://theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
|
||||
enum CharCode: UInt16 {
|
||||
case space = 32
|
||||
case backSpace = 8
|
||||
|
@ -141,12 +145,12 @@ class KeyHandlerInput: NSObject {
|
|||
return code.rawValue != KeyCode.none.rawValue
|
||||
}
|
||||
|
||||
@objc var isEnter: Bool {
|
||||
KeyCode(rawValue: keyCode) == KeyCode.enter
|
||||
@objc var isTab: Bool {
|
||||
KeyCode(rawValue: keyCode) == KeyCode.tab
|
||||
}
|
||||
|
||||
@objc var isEnterCharCode: Bool {
|
||||
CharCode(rawValue: charCode) == CharCode.enter
|
||||
@objc var isEnter: Bool {
|
||||
(CharCode(rawValue: charCode) == CharCode.enter) || (KeyCode(rawValue: keyCode) == KeyCode.enter)
|
||||
}
|
||||
|
||||
@objc var isUp: Bool {
|
||||
|
@ -182,7 +186,7 @@ class KeyHandlerInput: NSObject {
|
|||
}
|
||||
|
||||
@objc var isESC: Bool {
|
||||
CharCode(rawValue: charCode) == CharCode.esc
|
||||
(CharCode(rawValue: charCode) == CharCode.esc) || (KeyCode(rawValue: keyCode) == KeyCode.esc)
|
||||
}
|
||||
|
||||
@objc var isHome: Bool {
|
||||
|
|
|
@ -37,7 +37,7 @@ class LMConsolidator
|
|||
public:
|
||||
static bool CheckPragma(const char *path);
|
||||
static bool FixEOF(const char *path);
|
||||
static bool ConsolidateContent(const char *path, bool shouldsort, bool shouldCheckPragma);
|
||||
static bool ConsolidateContent(const char *path, bool shouldCheckPragma);
|
||||
};
|
||||
|
||||
} // namespace vChewing
|
||||
|
|
|
@ -71,8 +71,8 @@ bool LMConsolidator::FixEOF(const char *path)
|
|||
} // END: EOF FIXER.
|
||||
|
||||
// CONTENT CONSOLIDATOR. CREDIT: Shiki Suen.
|
||||
bool LMConsolidator::ConsolidateContent(const char *path, bool shouldsort, bool shouldCheckPragma) {
|
||||
if (LMConsolidator::CheckPragma(path) && !shouldsort && shouldCheckPragma){
|
||||
bool LMConsolidator::ConsolidateContent(const char *path, bool shouldCheckPragma) {
|
||||
if (LMConsolidator::CheckPragma(path) && shouldCheckPragma){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -97,8 +97,7 @@ bool LMConsolidator::ConsolidateContent(const char *path, bool shouldsort, bool
|
|||
vecEntry[i] = regex_replace(vecEntry[i], sedTrailingSpace, "").c_str(); // 去掉行尾空格。
|
||||
}
|
||||
}
|
||||
// 在第二遍 for 運算之前,針對 vecEntry 排序+去除重複條目。
|
||||
if (shouldsort) {sort(vecEntry.begin(), vecEntry.end());} // 要不要排序,得做成開關。
|
||||
// 在第二遍 for 運算之前,針對 vecEntry 去除重複條目。
|
||||
vecEntry.erase(unique(vecEntry.begin(), vecEntry.end()), vecEntry.end()); // 去重複。
|
||||
// 統整完畢。開始將統整過的內容寫入檔案。
|
||||
ofstream zfdContentConsolidatorOutput(path); // 這裡是要從頭開始重寫檔案內容,所以不需要「 ios_base::app 」。
|
||||
|
|
|
@ -19,6 +19,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH
|
|||
|
||||
import Cocoa
|
||||
|
||||
private let kIsDebugModeEnabled = "_DebugMode"
|
||||
private let kCheckUpdateAutomatically = "CheckUpdateAutomatically"
|
||||
private let kKeyboardLayoutPreference = "KeyboardLayout"
|
||||
private let kBasisKeyboardLayoutPreference = "BasisKeyboardLayout"
|
||||
|
@ -27,9 +28,6 @@ private let kFunctionKeyKeyboardLayoutOverrideIncludeShift = "FunctionKeyKeyboar
|
|||
private let kCandidateListTextSize = "CandidateListTextSize"
|
||||
private let kAppleLanguagesPreferences = "AppleLanguages"
|
||||
private let kShouldAutoReloadUserDataFiles = "ShouldAutoReloadUserDataFiles"
|
||||
private let kShouldAutoSortUserPhrasesAndExclListOnLoad = "ShouldAutoSortUserPhrasesAndExclListOnLoad"
|
||||
private let kShouldAutoSortPhraseReplacementMapOnLoad = "ShouldAutoSortPhraseReplacementMapOnLoad"
|
||||
private let kShouldAutoSortAssociatedPhrasesOnLoad = "ShouldAutoSortAssociatedPhrasesOnLoad"
|
||||
private let kSelectPhraseAfterCursorAsCandidatePreference = "SelectPhraseAfterCursorAsCandidate"
|
||||
private let kUseHorizontalCandidateListPreference = "UseHorizontalCandidateList"
|
||||
private let kComposingBufferSizePreference = "ComposingBufferSize"
|
||||
|
@ -40,6 +38,7 @@ private let kShiftJISShinjitaiOutputEnabled = "ShiftJISShinjitaiOutputEnabled"
|
|||
private let kHalfWidthPunctuationEnabled = "HalfWidthPunctuationEnable"
|
||||
private let kMoveCursorAfterSelectingCandidate = "MoveCursorAfterSelectingCandidate"
|
||||
private let kEscToCleanInputBuffer = "EscToCleanInputBuffer"
|
||||
private let kSpecifyTabKeyBehavior = "SpecifyTabKeyBehavior"
|
||||
private let kUseSCPCTypingMode = "UseSCPCTypingMode"
|
||||
private let kMaxCandidateLength = "MaxCandidateLength"
|
||||
private let kShouldNotFartInLieuOfBeep = "ShouldNotFartInLieuOfBeep"
|
||||
|
@ -213,16 +212,14 @@ struct ComposingBufferSize {
|
|||
// MARK: -
|
||||
@objc public class Preferences: NSObject {
|
||||
static var allKeys:[String] {
|
||||
[kKeyboardLayoutPreference,
|
||||
[kIsDebugModeEnabled,
|
||||
kKeyboardLayoutPreference,
|
||||
kBasisKeyboardLayoutPreference,
|
||||
kFunctionKeyKeyboardLayoutPreference,
|
||||
kFunctionKeyKeyboardLayoutOverrideIncludeShift,
|
||||
kCandidateListTextSize,
|
||||
kAppleLanguagesPreferences,
|
||||
kShouldAutoReloadUserDataFiles,
|
||||
kShouldAutoSortUserPhrasesAndExclListOnLoad,
|
||||
kShouldAutoSortPhraseReplacementMapOnLoad,
|
||||
kShouldAutoSortAssociatedPhrasesOnLoad,
|
||||
kSelectPhraseAfterCursorAsCandidatePreference,
|
||||
kUseHorizontalCandidateListPreference,
|
||||
kComposingBufferSizePreference,
|
||||
|
@ -231,6 +228,7 @@ struct ComposingBufferSize {
|
|||
kChineseConversionEnabled,
|
||||
kShiftJISShinjitaiOutputEnabled,
|
||||
kHalfWidthPunctuationEnabled,
|
||||
kSpecifyTabKeyBehavior,
|
||||
kEscToCleanInputBuffer,
|
||||
kCandidateTextFontName,
|
||||
kCandidateKeyLabelFontName,
|
||||
|
@ -248,6 +246,11 @@ struct ComposingBufferSize {
|
|||
@objc public static func setMissingDefaults () {
|
||||
// 既然 Preferences Module 的預設屬性不自動寫入 plist、而且還是 private,那這邊就先寫入了。
|
||||
|
||||
// 首次啟用輸入法時不要啟用偵錯模式。
|
||||
if UserDefaults.standard.object(forKey: kIsDebugModeEnabled) == nil {
|
||||
UserDefaults.standard.set(Preferences.isDebugModeEnabled, forKey: kIsDebugModeEnabled)
|
||||
}
|
||||
|
||||
// 首次啟用輸入法時設定不要自動更新,免得在某些要隔絕外部網路連線的保密機構內觸犯資安規則。
|
||||
if UserDefaults.standard.object(forKey: kCheckUpdateAutomatically) == nil {
|
||||
UserDefaults.standard.set(false, forKey: kCheckUpdateAutomatically)
|
||||
|
@ -263,24 +266,14 @@ struct ComposingBufferSize {
|
|||
UserDefaults.standard.set(Preferences.chooseCandidateUsingSpace, forKey: kChooseCandidateUsingSpace)
|
||||
}
|
||||
|
||||
// 在檔案載入時,預設不啟用使用者自訂語彙表與語彙排除表的內容排序。
|
||||
// 自動檢測使用者自訂語彙數據的變動並載入。
|
||||
if UserDefaults.standard.object(forKey: kShouldAutoReloadUserDataFiles) == nil {
|
||||
UserDefaults.standard.set(Preferences.shouldAutoReloadUserDataFiles, forKey: kShouldAutoReloadUserDataFiles)
|
||||
}
|
||||
|
||||
// 在檔案載入時,預設不啟用語彙置換表的內容排序。
|
||||
if UserDefaults.standard.object(forKey: kShouldAutoSortUserPhrasesAndExclListOnLoad) == nil {
|
||||
UserDefaults.standard.set(Preferences.shouldAutoSortUserPhrasesAndExclListOnLoad, forKey: kShouldAutoSortUserPhrasesAndExclListOnLoad)
|
||||
}
|
||||
|
||||
// 在檔案載入時,預設不啟用自訂聯想詞表的內容排序。
|
||||
if UserDefaults.standard.object(forKey: kShouldAutoSortAssociatedPhrasesOnLoad) == nil {
|
||||
UserDefaults.standard.set(Preferences.shouldAutoSortAssociatedPhrasesOnLoad, forKey: kShouldAutoSortAssociatedPhrasesOnLoad)
|
||||
}
|
||||
|
||||
// 自動檢測使用者自訂語彙數據的變動並載入。
|
||||
if UserDefaults.standard.object(forKey: kShouldAutoSortPhraseReplacementMapOnLoad) == nil {
|
||||
UserDefaults.standard.set(Preferences.shouldAutoSortPhraseReplacementMapOnLoad, forKey: kShouldAutoSortPhraseReplacementMapOnLoad)
|
||||
// 預設情況下讓 Tab 鍵在選字窗內切換候選字、而不是用來換頁。
|
||||
if UserDefaults.standard.object(forKey: kSpecifyTabKeyBehavior) == nil {
|
||||
UserDefaults.standard.set(Preferences.specifyTabKeyBehavior, forKey: kSpecifyTabKeyBehavior)
|
||||
}
|
||||
|
||||
// 預設禁用逐字選字模式(就是每個字都要選的那種),所以設成 false
|
||||
|
@ -336,6 +329,9 @@ struct ComposingBufferSize {
|
|||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
|
||||
@UserDefault(key: kIsDebugModeEnabled, defaultValue: false)
|
||||
@objc static var isDebugModeEnabled: Bool
|
||||
|
||||
@UserDefault(key: kAppleLanguagesPreferences, defaultValue: [])
|
||||
@objc static var appleLanguages: Array<String>
|
||||
|
||||
|
@ -361,15 +357,6 @@ struct ComposingBufferSize {
|
|||
@UserDefault(key: kShouldAutoReloadUserDataFiles, defaultValue: true)
|
||||
@objc static var shouldAutoReloadUserDataFiles: Bool
|
||||
|
||||
@UserDefault(key: kShouldAutoSortUserPhrasesAndExclListOnLoad, defaultValue: false)
|
||||
@objc static var shouldAutoSortUserPhrasesAndExclListOnLoad: Bool
|
||||
|
||||
@UserDefault(key: kShouldAutoSortPhraseReplacementMapOnLoad, defaultValue: false)
|
||||
@objc static var shouldAutoSortPhraseReplacementMapOnLoad: Bool
|
||||
|
||||
@UserDefault(key: kShouldAutoSortAssociatedPhrasesOnLoad, defaultValue: false)
|
||||
@objc static var shouldAutoSortAssociatedPhrasesOnLoad: Bool
|
||||
|
||||
@UserDefault(key: kSelectPhraseAfterCursorAsCandidatePreference, defaultValue: true)
|
||||
@objc static var selectPhraseAfterCursorAsCandidate: Bool
|
||||
|
||||
|
@ -448,7 +435,10 @@ struct ComposingBufferSize {
|
|||
@UserDefault(key: kEscToCleanInputBuffer, defaultValue: true)
|
||||
@objc static var escToCleanInputBuffer: Bool
|
||||
|
||||
// MARK: Optional settings
|
||||
@UserDefault(key: kSpecifyTabKeyBehavior, defaultValue: false)
|
||||
@objc static var specifyTabKeyBehavior: Bool
|
||||
|
||||
// MARK: - Optional settings
|
||||
@UserDefault(key: kCandidateTextFontName, defaultValue: nil)
|
||||
@objc static var candidateTextFontName: String?
|
||||
|
||||
|
|
|
@ -115,7 +115,9 @@ class ctlInputMethod: IMKInputController {
|
|||
menu.addItem(NSMenuItem.separator()) // ---------------------
|
||||
|
||||
menu.addItem(withTitle: NSLocalizedString("vChewing Preferences…", comment: ""), action: #selector(showPreferences(_:)), keyEquivalent: "")
|
||||
menu.addItem(withTitle: NSLocalizedString("Check for Updates…", comment: ""), action: #selector(checkForUpdate(_:)), keyEquivalent: "")
|
||||
if !optionKeyPressed {
|
||||
menu.addItem(withTitle: NSLocalizedString("Check for Updates…", comment: ""), action: #selector(checkForUpdate(_:)), keyEquivalent: "")
|
||||
}
|
||||
menu.addItem(withTitle: NSLocalizedString("About vChewing…", comment: ""), action: #selector(showAbout(_:)), keyEquivalent: "")
|
||||
if optionKeyPressed {
|
||||
menu.addItem(withTitle: NSLocalizedString("Reboot vChewing…", comment: ""), action: #selector(selfTerminate(_:)), keyEquivalent: "")
|
||||
|
|
|
@ -59,7 +59,7 @@ bool AssociatedPhrases::open(const char *path)
|
|||
}
|
||||
|
||||
LMConsolidator::FixEOF(path);
|
||||
LMConsolidator::ConsolidateContent(path, Preferences.shouldAutoSortAssociatedPhrasesOnLoad, true);
|
||||
LMConsolidator::ConsolidateContent(path, true);
|
||||
|
||||
fd = ::open(path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
|
|
|
@ -54,7 +54,7 @@ bool PhraseReplacementMap::open(const char *path)
|
|||
}
|
||||
|
||||
LMConsolidator::FixEOF(path);
|
||||
LMConsolidator::ConsolidateContent(path, Preferences.shouldAutoSortPhraseReplacementMapOnLoad, true);
|
||||
LMConsolidator::ConsolidateContent(path, true);
|
||||
|
||||
fd = ::open(path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
|
|
|
@ -60,7 +60,7 @@ bool UserPhrasesLM::open(const char *path)
|
|||
}
|
||||
|
||||
LMConsolidator::FixEOF(path);
|
||||
LMConsolidator::ConsolidateContent(path, Preferences.shouldAutoSortUserPhrasesAndExclListOnLoad, true);
|
||||
LMConsolidator::ConsolidateContent(path, true);
|
||||
|
||||
fd = ::open(path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
|
|
|
@ -266,7 +266,7 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
|
|||
[writeFile closeFile];
|
||||
|
||||
// We enforce the format consolidation here, since the pragma header will let the UserPhraseLM bypasses the consolidating process on load.
|
||||
vChewing::LMConsolidator::ConsolidateContent([path UTF8String], Preferences.shouldAutoSortUserPhrasesAndExclListOnLoad, false);
|
||||
vChewing::LMConsolidator::ConsolidateContent([path UTF8String], false);
|
||||
|
||||
// We use FSEventStream to monitor the change of the user phrase folder,
|
||||
// so we don't have to load data here unless FSEventStream is disabled by user.
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase.";
|
||||
"\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase.";
|
||||
"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase.";
|
||||
"\"%@\" already exists, ENTER to boost its priority." = "\"%@\" already exists, ENTER to boost its priority.";
|
||||
"\"%@\" already exists, ENTER to override its priority." = "\"%@\" already exists, ENTER to override its priority.";
|
||||
"Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…";
|
||||
"Use Phrase Replacement" = "Use Phrase Replacement";
|
||||
"Candidates keys cannot be empty." = "Candidates keys cannot be empty.";
|
||||
|
|
|
@ -124,9 +124,9 @@
|
|||
<key>TISParticipatesInTouchBar</key>
|
||||
<false/>
|
||||
<key>UpdateInfoEndpoint</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
||||
<string>https://jihulab.com/vChewing/vChewing-macOS/-/raw/main/Update-Info.plist</string>
|
||||
<key>UpdateInfoSite</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS</string>
|
||||
<string>https://jihulab.com/vChewing/vChewing-macOS</string>
|
||||
<key>tsInputMethodCharacterRepertoireKey</key>
|
||||
<array>
|
||||
<string>Hans</string>
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase.";
|
||||
"\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase.";
|
||||
"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase.";
|
||||
"\"%@\" already exists, ENTER to boost its priority." = "\"%@\" already exists, ENTER to boost its priority.";
|
||||
"\"%@\" already exists, ENTER to override its priority." = "\"%@\" already exists, ENTER to override its priority.";
|
||||
"Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…";
|
||||
"Use Phrase Replacement" = "Use Phrase Replacement";
|
||||
"Candidates keys cannot be empty." = "Candidates keys cannot be empty.";
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」もう1つ文字のお選びを。";
|
||||
"\"%@\" length should ≤ %d for a user phrase." = "「%@」文字数過剰で登録不可、%d 文字以内にして下さい。";
|
||||
"\"%@\" selected. ENTER to add user phrase." = "「%@」を ENTER で辞書に登録。";
|
||||
"\"%@\" already exists, ENTER to boost its priority." = "「%@」は既存語彙であり、ENTER で最優先にする。";
|
||||
"\"%@\" already exists, ENTER to override its priority." = "「%@」は既存語彙であり、ENTER で優先順位を再調整。";
|
||||
"Edit Phrase Replacement Table…" = "言葉置換表を編集…";
|
||||
"Use Phrase Replacement" = "言葉置換機能";
|
||||
"Candidates keys cannot be empty." = "言選り用キー陣列に何かキーをご登録ください。";
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」字数不足以自订语汇。";
|
||||
"\"%@\" length should ≤ %d for a user phrase." = "「%@」字数超过 %d、无法自订。";
|
||||
"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自订语汇。";
|
||||
"\"%@\" already exists, ENTER to boost its priority." = "「%@」已存在,敲 ENTER 以提升其权重。";
|
||||
"\"%@\" already exists, ENTER to override its priority." = "「%@」已存在,敲 ENTER 以覆写其权重。";
|
||||
"Edit Phrase Replacement Table…" = "编辑语汇置换表…";
|
||||
"Use Phrase Replacement" = "使用语汇置换";
|
||||
"Candidates keys cannot be empty." = "您必须指定选字键。";
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」字數不足以自訂語彙。";
|
||||
"\"%@\" length should ≤ %d for a user phrase." = "「%@」字數超過 %d、無法自訂。";
|
||||
"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自訂語彙。";
|
||||
"\"%@\" already exists, ENTER to boost its priority." = "「%@」已存在,敲 ENTER 以提升其權重。";
|
||||
"\"%@\" already exists, ENTER to override its priority." = "「%@」已存在,敲 ENTER 以覆寫其權重。";
|
||||
"Edit Phrase Replacement Table…" = "編輯語彙置換表…";
|
||||
"Use Phrase Replacement" = "使用語彙置換";
|
||||
"Candidates keys cannot be empty." = "您必須指定選字鍵。";
|
||||
|
|
|
@ -255,61 +255,32 @@ public class HorizontalCandidateController: CandidateController {
|
|||
}
|
||||
|
||||
public override func showNextPage() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
if currentPage + 1 >= pageCount {
|
||||
currentPage = 0
|
||||
} else {
|
||||
currentPage += 1
|
||||
}
|
||||
|
||||
guard delegate != nil else {return false}
|
||||
if pageCount == 1 {return highlightNextCandidate()}
|
||||
currentPage = (currentPage + 1 >= pageCount) ? 0 : currentPage + 1
|
||||
candidateView.highlightedIndex = 0
|
||||
layoutCandidateView()
|
||||
return true
|
||||
}
|
||||
|
||||
public override func showPreviousPage() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
if currentPage == 0 {
|
||||
currentPage = pageCount - 1
|
||||
} else {
|
||||
currentPage -= 1
|
||||
}
|
||||
|
||||
guard delegate != nil else {return false}
|
||||
if pageCount == 1 {return highlightPreviousCandidate()}
|
||||
currentPage = (currentPage == 0) ? pageCount - 1 : currentPage - 1
|
||||
candidateView.highlightedIndex = 0
|
||||
layoutCandidateView()
|
||||
return true
|
||||
}
|
||||
|
||||
public override func highlightNextCandidate() -> Bool {
|
||||
guard let delegate = delegate else {
|
||||
return false
|
||||
}
|
||||
|
||||
let currentIndex = selectedCandidateIndex
|
||||
if currentIndex + 1 >= delegate.candidateCountForController(self) {
|
||||
return false
|
||||
}
|
||||
selectedCandidateIndex = currentIndex + 1
|
||||
guard let delegate = delegate else {return false}
|
||||
selectedCandidateIndex = (selectedCandidateIndex + 1 >= delegate.candidateCountForController(self)) ? 0 : selectedCandidateIndex + 1
|
||||
return true
|
||||
}
|
||||
|
||||
public override func highlightPreviousCandidate() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
let currentIndex = selectedCandidateIndex
|
||||
if currentIndex == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
selectedCandidateIndex = currentIndex - 1
|
||||
guard let delegate = delegate else {return false}
|
||||
selectedCandidateIndex = (selectedCandidateIndex == 0) ? delegate.candidateCountForController(self) - 1 : selectedCandidateIndex - 1
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
@ -261,61 +261,32 @@ public class VerticalCandidateController: CandidateController {
|
|||
}
|
||||
|
||||
public override func showNextPage() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
if currentPage + 1 >= pageCount {
|
||||
currentPage = 0
|
||||
} else {
|
||||
currentPage += 1
|
||||
}
|
||||
|
||||
guard delegate != nil else {return false}
|
||||
if pageCount == 1 {return highlightNextCandidate()}
|
||||
currentPage = (currentPage + 1 >= pageCount) ? 0 : currentPage + 1
|
||||
candidateView.highlightedIndex = 0
|
||||
layoutCandidateView()
|
||||
return true
|
||||
}
|
||||
|
||||
public override func showPreviousPage() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
if currentPage == 0 {
|
||||
currentPage = pageCount - 1
|
||||
} else {
|
||||
currentPage -= 1
|
||||
}
|
||||
|
||||
guard delegate != nil else {return false}
|
||||
if pageCount == 1 {return highlightPreviousCandidate()}
|
||||
currentPage = (currentPage == 0) ? pageCount - 1 : currentPage - 1
|
||||
candidateView.highlightedIndex = 0
|
||||
layoutCandidateView()
|
||||
return true
|
||||
}
|
||||
|
||||
public override func highlightNextCandidate() -> Bool {
|
||||
guard let delegate = delegate else {
|
||||
return false
|
||||
}
|
||||
|
||||
let currentIndex = selectedCandidateIndex
|
||||
if currentIndex + 1 >= delegate.candidateCountForController(self) {
|
||||
return false
|
||||
}
|
||||
selectedCandidateIndex = currentIndex + 1
|
||||
guard let delegate = delegate else {return false}
|
||||
selectedCandidateIndex = (selectedCandidateIndex + 1 >= delegate.candidateCountForController(self)) ? 0 : selectedCandidateIndex + 1
|
||||
return true
|
||||
}
|
||||
|
||||
public override func highlightPreviousCandidate() -> Bool {
|
||||
guard delegate != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
let currentIndex = selectedCandidateIndex
|
||||
if currentIndex == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
selectedCandidateIndex = currentIndex - 1
|
||||
guard let delegate = delegate else {return false}
|
||||
selectedCandidateIndex = (selectedCandidateIndex == 0) ? delegate.candidateCountForController(self) - 1 : selectedCandidateIndex - 1
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
@ -300,15 +300,29 @@
|
|||
</constraints>
|
||||
</view>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mwD-Yz-AU9">
|
||||
<rect key="frame" x="346" y="12.5" width="94" height="17"/>
|
||||
<buttonCell key="cell" type="check" title="Debug Mode" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="sZx-18-8dO">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values._DebugMode" id="RsM-TR-7Lf"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="mwD-Yz-AU9" firstAttribute="baseline" secondItem="Fc2-qh-r1H" secondAttribute="baseline" id="0JL-hQ-6wv"/>
|
||||
<constraint firstItem="2Y6-Am-WM1" firstAttribute="leading" secondItem="Uyz-xL-TVN" secondAttribute="leading" id="37f-ZR-zcC"/>
|
||||
<constraint firstItem="mwD-Yz-AU9" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Fc2-qh-r1H" secondAttribute="trailing" constant="8" symbolic="YES" id="46T-tt-c7b"/>
|
||||
<constraint firstItem="Fc2-qh-r1H" firstAttribute="leading" secondItem="9TJ-dn-iXU" secondAttribute="leading" constant="27" id="BGq-cN-jpR"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Fc2-qh-r1H" secondAttribute="bottom" constant="13" id="DF3-YG-9e5"/>
|
||||
<constraint firstAttribute="trailing" secondItem="mwD-Yz-AU9" secondAttribute="trailing" constant="23" id="Vwp-g8-y63"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2Y6-Am-WM1" secondAttribute="trailing" constant="9" id="ZPe-b1-SbT"/>
|
||||
<constraint firstItem="2Y6-Am-WM1" firstAttribute="top" secondItem="9TJ-dn-iXU" secondAttribute="top" constant="5" id="bJ6-j1-t07"/>
|
||||
<constraint firstItem="2Y6-Am-WM1" firstAttribute="trailing" secondItem="Uyz-xL-TVN" secondAttribute="trailing" id="ewc-fS-Lds"/>
|
||||
<constraint firstItem="Uyz-xL-TVN" firstAttribute="top" secondItem="9TJ-dn-iXU" secondAttribute="top" constant="239" id="hBw-kZ-RWt"/>
|
||||
<constraint firstItem="mwD-Yz-AU9" firstAttribute="firstBaseline" secondItem="Fc2-qh-r1H" secondAttribute="firstBaseline" id="jda-kZ-9OZ"/>
|
||||
<constraint firstItem="Fc2-qh-r1H" firstAttribute="top" secondItem="Uyz-xL-TVN" secondAttribute="bottom" constant="8" symbolic="YES" id="m8Q-6u-Xbr"/>
|
||||
<constraint firstItem="2Y6-Am-WM1" firstAttribute="leading" secondItem="9TJ-dn-iXU" secondAttribute="leading" constant="9" id="pSQ-3h-nNK"/>
|
||||
<constraint firstItem="Uyz-xL-TVN" firstAttribute="top" secondItem="2Y6-Am-WM1" secondAttribute="bottom" constant="8" symbolic="YES" id="raC-bi-5o9"/>
|
||||
|
@ -318,17 +332,17 @@
|
|||
</tabViewItem>
|
||||
<tabViewItem label="Advanced" identifier="" id="xrE-8T-WKO">
|
||||
<view key="view" id="bZr-iP-F6T">
|
||||
<rect key="frame" x="10" y="33" width="463" height="424"/>
|
||||
<rect key="frame" x="10" y="33" width="464" height="424"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<box title="Advanced Settings" translatesAutoresizingMaskIntoConstraints="NO" id="E1l-m8-xgb">
|
||||
<rect key="frame" x="6" y="179" width="451" height="240"/>
|
||||
<rect key="frame" x="6" y="117" width="452" height="302"/>
|
||||
<view key="contentView" id="Zaa-dP-WdF">
|
||||
<rect key="frame" x="3" y="3" width="445" height="222"/>
|
||||
<rect key="frame" x="3" y="3" width="446" height="284"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField autoresizesSubviews="NO" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IpX-f7-rTL">
|
||||
<rect key="frame" x="18" y="191" width="410" height="16"/>
|
||||
<rect key="frame" x="18" y="253" width="410" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="AH9-nI-ozD"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="406" id="xMo-mW-3aW"/>
|
||||
|
@ -340,7 +354,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uHU-aL-du7">
|
||||
<rect key="frame" x="128" y="160" width="150" height="25"/>
|
||||
<rect key="frame" x="128" y="222" width="150" height="25"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="147" id="aJi-ff-WnC"/>
|
||||
</constraints>
|
||||
|
@ -359,7 +373,7 @@
|
|||
</connections>
|
||||
</comboBox>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ETa-09-qWI">
|
||||
<rect key="frame" x="31" y="165" width="91" height="15"/>
|
||||
<rect key="frame" x="31" y="227" 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"/>
|
||||
|
@ -367,7 +381,7 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||
<rect key="frame" x="18" y="141" width="403" height="15"/>
|
||||
<rect key="frame" x="18" y="203" width="403" height="15"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="371" id="lJN-Yf-Fka"/>
|
||||
</constraints>
|
||||
|
@ -378,9 +392,9 @@
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<matrix verticalHuggingPriority="751" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||
<rect key="frame" x="33" y="93" width="402" height="40"/>
|
||||
<rect key="frame" x="33" y="157" width="402" height="38"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="402" height="19"/>
|
||||
<size key="cellSize" width="402" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="18">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
|
@ -402,25 +416,10 @@
|
|||
<binding destination="32" name="selectedTag" keyPath="values.SelectPhraseAfterCursorAsCandidate" id="104"/>
|
||||
</connections>
|
||||
</matrix>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
|
||||
<rect key="frame" x="19" y="68.5" width="289" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="288" id="DZZ-LM-h2m"/>
|
||||
<constraint firstAttribute="height" constant="16" id="lZq-1x-koI"/>
|
||||
</constraints>
|
||||
<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"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.ChooseCandidateUsingSpace" id="NU1-DG-vUz"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bE0-Lq-Pj7">
|
||||
<rect key="frame" x="19" y="46.5" width="266" height="17"/>
|
||||
<rect key="frame" x="19" y="43.5" width="266" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="PX9-9G-dZz"/>
|
||||
<constraint firstAttribute="height" constant="16" id="VKi-k7-llg"/>
|
||||
<constraint firstAttribute="height" constant="16" id="2BB-Tu-KPL"/>
|
||||
</constraints>
|
||||
<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"/>
|
||||
|
@ -431,10 +430,9 @@
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7z2-DD-c58">
|
||||
<rect key="frame" x="19" y="25.5" width="407" height="17"/>
|
||||
<rect key="frame" x="19" y="22.5" width="407" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="ZIc-th-1VJ"/>
|
||||
<constraint firstAttribute="height" constant="16" id="ZUJ-yT-gaw"/>
|
||||
<constraint firstAttribute="height" constant="16" id="SEv-bA-Zgb"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="Push the cursor to the front of the phrase after candidate selection" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="RUG-ls-KyA">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
|
@ -444,81 +442,93 @@
|
|||
<binding destination="32" name="value" keyPath="values.MoveCursorAfterSelectingCandidate" id="BbO-T6-zh3"/>
|
||||
</connections>
|
||||
</button>
|
||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n7q-ew-DYu">
|
||||
<rect key="frame" x="33" y="89" 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"/>
|
||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="6Hs-cH-sbg">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<cells>
|
||||
<column>
|
||||
<buttonCell type="radio" title="Cycling Candidates" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="FVC-br-H57">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Cycling Pages" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="s7u-Fm-dVg">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
</column>
|
||||
</cells>
|
||||
<connections>
|
||||
<binding destination="32" name="selectedTag" keyPath="values.SpecifyTabKeyBehavior" id="ZDp-6s-2lR"/>
|
||||
</connections>
|
||||
</matrix>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TMn-LX-3Ub">
|
||||
<rect key="frame" x="18" y="134" width="376" 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="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
|
||||
<rect key="frame" x="19" y="65.5" width="288" height="17"/>
|
||||
<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"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.ChooseCandidateUsingSpace" id="NU1-DG-vUz"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="trailing" secondItem="13" secondAttribute="trailing" id="0h0-j4-7cc"/>
|
||||
<constraint firstItem="7z2-DD-c58" firstAttribute="top" secondItem="bE0-Lq-Pj7" secondAttribute="bottom" constant="5" id="2qc-vg-IJ1"/>
|
||||
<constraint firstItem="uHU-aL-du7" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="trailing" constant="8" symbolic="YES" id="3KF-Tb-0Tz"/>
|
||||
<constraint firstItem="7z2-DD-c58" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="3bj-ct-oCo"/>
|
||||
<constraint firstItem="15" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="8" symbolic="YES" id="3fd-BG-6Jx"/>
|
||||
<constraint firstItem="15" firstAttribute="leading" secondItem="n7q-ew-DYu" secondAttribute="leading" id="5Dm-qA-qLH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="TMn-LX-3Ub" secondAttribute="trailing" constant="54" id="5Tp-rD-xca"/>
|
||||
<constraint firstItem="15" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="leading" id="5k7-2k-aLK"/>
|
||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="leading" secondItem="7z2-DD-c58" secondAttribute="leading" id="8pc-8H-bgi"/>
|
||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="9ed-h6-bOl"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="13" secondAttribute="trailing" constant="71" id="D0Q-CG-6LS"/>
|
||||
<constraint firstItem="uHU-aL-du7" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="8" id="Di9-bm-CIq"/>
|
||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="leading" secondItem="13" secondAttribute="leading" id="DnS-Aj-hOl"/>
|
||||
<constraint firstItem="7z2-DD-c58" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="IpX-f7-rTL" secondAttribute="trailing" id="Eer-u6-4rD"/>
|
||||
<constraint firstItem="ETa-09-qWI" firstAttribute="centerY" secondItem="uHU-aL-du7" secondAttribute="centerY" constant="1" id="FHZ-PV-14v"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="bE0-Lq-Pj7" secondAttribute="trailing" constant="208" id="FhD-OS-9RF"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="109" secondAttribute="trailing" constant="154" id="LMr-eu-xAG"/>
|
||||
<constraint firstItem="ETa-09-qWI" firstAttribute="firstBaseline" secondItem="uHU-aL-du7" secondAttribute="firstBaseline" constant="1" id="OnR-PS-PDx"/>
|
||||
<constraint firstItem="13" firstAttribute="top" secondItem="uHU-aL-du7" secondAttribute="bottom" constant="8" id="Oq3-TL-cYE"/>
|
||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="top" secondItem="Zaa-dP-WdF" secondAttribute="top" constant="15" id="QXa-JH-WOl"/>
|
||||
<constraint firstItem="ETa-09-qWI" firstAttribute="baseline" secondItem="uHU-aL-du7" secondAttribute="firstBaseline" constant="1" id="QzY-qa-SJw"/>
|
||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="top" secondItem="109" secondAttribute="bottom" constant="6" symbolic="YES" id="cT2-FV-Or9"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="109" secondAttribute="trailing" constant="20" symbolic="YES" id="YLS-EG-Wz9"/>
|
||||
<constraint firstItem="109" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="cvg-BI-hdw"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bE0-Lq-Pj7" secondAttribute="trailing" constant="20" symbolic="YES" id="dBh-2u-jwE"/>
|
||||
<constraint firstItem="7z2-DD-c58" firstAttribute="centerX" secondItem="Zaa-dP-WdF" secondAttribute="centerX" id="dQE-Aq-dEH"/>
|
||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="leading" secondItem="13" secondAttribute="leading" id="dXS-M3-fDf"/>
|
||||
<constraint firstItem="109" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="ePO-mn-wZM"/>
|
||||
<constraint firstAttribute="trailing" secondItem="7z2-DD-c58" secondAttribute="trailing" constant="19" id="gu0-F2-6CK"/>
|
||||
<constraint firstItem="7z2-DD-c58" firstAttribute="top" secondItem="bE0-Lq-Pj7" secondAttribute="bottom" constant="5" id="h6e-x2-Tqk"/>
|
||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="e1i-5L-zYg"/>
|
||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="top" secondItem="109" secondAttribute="bottom" constant="6" symbolic="YES" id="e3r-jQ-JVU"/>
|
||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="top" secondItem="TMn-LX-3Ub" secondAttribute="bottom" constant="7" id="hsj-M1-mVj"/>
|
||||
<constraint firstItem="ETa-09-qWI" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="jMc-w0-nTn"/>
|
||||
<constraint firstItem="109" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" id="jW8-k4-5sl"/>
|
||||
<constraint firstItem="15" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="8" id="mY6-fM-KSH"/>
|
||||
<constraint firstItem="15" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="leading" id="o4v-uI-Y3a"/>
|
||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="leading" secondItem="109" secondAttribute="leading" id="nMh-aU-qa9"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="IpX-f7-rTL" secondAttribute="trailing" constant="36" id="pqa-tx-4pg"/>
|
||||
<constraint firstItem="109" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="tRQ-NF-XQS"/>
|
||||
<constraint firstItem="109" firstAttribute="leading" secondItem="IpX-f7-rTL" secondAttribute="leading" id="yea-b7-cDv"/>
|
||||
<constraint firstAttribute="bottom" secondItem="7z2-DD-c58" secondAttribute="bottom" constant="22.5" id="qMh-n9-Sex"/>
|
||||
<constraint firstItem="109" firstAttribute="top" secondItem="n7q-ew-DYu" secondAttribute="bottom" constant="7" id="rfz-Dp-TPC"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</box>
|
||||
<box title="Dictionary Settings" translatesAutoresizingMaskIntoConstraints="NO" id="s4r-ji-vbr">
|
||||
<rect key="frame" x="6" y="10" width="451" height="165"/>
|
||||
<rect key="frame" x="6" y="10" width="452" height="103"/>
|
||||
<view key="contentView" id="rWB-y8-q94">
|
||||
<rect key="frame" x="3" y="3" width="445" height="147"/>
|
||||
<rect key="frame" x="3" y="3" width="446" height="85"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dnE-Vw-KrP">
|
||||
<rect key="frame" x="18" y="117" width="323" height="15"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="231" id="MzY-w8-DKW"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Define your preferred action when user data files reload." id="j48-5a-cEs">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="1hA-Po-5li">
|
||||
<rect key="frame" x="19" y="94.5" width="401" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="288" id="0mm-CA-Mxs"/>
|
||||
<constraint firstAttribute="height" constant="16" id="c3e-cU-pEw"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="Sort entries when reloading user phrases and excluded phrases list" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="Li3-Yg-SOC">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.ShouldAutoSortUserPhrasesAndExclListOnLoad" id="k4w-CX-EfE"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nnT-wS-mZo">
|
||||
<rect key="frame" x="19" y="72.5" width="342" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="IBn-Xf-uEw"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="srn-3X-kPi"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="Sort entries when reloading the phrase replacement map" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="o60-vW-i1B">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.ShouldAutoSortPhraseReplacementMapOnLoad" id="Xn2-So-Dp3"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="p7V-IN-OTr">
|
||||
<rect key="frame" x="19" y="51.5" width="336" height="17"/>
|
||||
<rect key="frame" x="19" y="55.5" width="336" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="8eX-Tw-Erk"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="234" id="yhP-XF-CQj"/>
|
||||
|
@ -533,22 +543,13 @@
|
|||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="dnE-Vw-KrP" secondAttribute="trailing" constant="214" id="3wA-Rn-cTn"/>
|
||||
<constraint firstItem="nnT-wS-mZo" firstAttribute="leading" secondItem="p7V-IN-OTr" secondAttribute="leading" id="4di-W1-ufn"/>
|
||||
<constraint firstItem="1hA-Po-5li" firstAttribute="leading" secondItem="nnT-wS-mZo" secondAttribute="leading" id="Cfb-2F-MRg"/>
|
||||
<constraint firstItem="1hA-Po-5li" firstAttribute="leading" secondItem="dnE-Vw-KrP" secondAttribute="leading" id="Exw-iA-Unz"/>
|
||||
<constraint firstItem="1hA-Po-5li" firstAttribute="top" secondItem="dnE-Vw-KrP" secondAttribute="bottom" constant="6.5" id="HrQ-4q-l78"/>
|
||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="leading" secondItem="rWB-y8-q94" secondAttribute="leading" constant="20" symbolic="YES" id="Hv7-uF-IXh"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="p7V-IN-OTr" secondAttribute="trailing" constant="20" symbolic="YES" id="MFR-05-QJN"/>
|
||||
<constraint firstItem="dnE-Vw-KrP" firstAttribute="leading" secondItem="rWB-y8-q94" secondAttribute="leading" constant="20" id="QQJ-7P-HAG"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="nnT-wS-mZo" secondAttribute="trailing" constant="101" id="QsT-xW-prJ"/>
|
||||
<constraint firstItem="dnE-Vw-KrP" firstAttribute="top" secondItem="rWB-y8-q94" secondAttribute="top" constant="15" id="Vzj-xd-Q2W"/>
|
||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="top" secondItem="nnT-wS-mZo" secondAttribute="bottom" constant="5" id="gRe-fD-67h"/>
|
||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="1hA-Po-5li" secondAttribute="trailing" constant="39" id="quD-Rd-uwL"/>
|
||||
<constraint firstItem="nnT-wS-mZo" firstAttribute="top" secondItem="1hA-Po-5li" secondAttribute="bottom" constant="6" symbolic="YES" id="zxn-Pa-o6f"/>
|
||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="top" secondItem="rWB-y8-q94" secondAttribute="top" constant="13.5" id="MTI-N4-JSK"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="161" id="mfq-di-Kby"/>
|
||||
<constraint firstAttribute="height" constant="99" id="mfq-di-Kby"/>
|
||||
</constraints>
|
||||
</box>
|
||||
</subviews>
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
||||
"1.title" = "vChewing Preferences";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
||||
"sZx-18-8dO.title" = "Debug Mode";
|
||||
|
||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
||||
"5.title" = "OtherViews";
|
||||
|
||||
|
@ -131,9 +134,6 @@
|
|||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
||||
"GlJ-Ns-9eE.title" = "Auto-Select";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
|
||||
"Li3-Yg-SOC.title" = "Sort entries when reloading user phrases and excluded phrases list";
|
||||
|
||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
||||
"QUQ-oY-4Hc.label" = "General";
|
||||
|
||||
|
@ -173,9 +173,6 @@
|
|||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
||||
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
|
||||
"j48-5a-cEs.title" = "Define your preferred action when user data files reload.";
|
||||
|
||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
|
||||
|
@ -185,9 +182,6 @@
|
|||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
|
||||
"o60-vW-i1B.title" = "Sort entries when reloading the phrase replacement map";
|
||||
|
||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
||||
"rVQ-Hx-cGi.title" = "Japanese";
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
||||
"1.title" = "威注音アプリ機能設定";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
||||
"sZx-18-8dO.title" = "欠陥辿着モード";
|
||||
|
||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
||||
"5.title" = "OtherViews";
|
||||
|
||||
|
@ -131,9 +134,6 @@
|
|||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
||||
"GlJ-Ns-9eE.title" = "システム設定に準ずる";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
|
||||
"Li3-Yg-SOC.title" = "ユーザー辞書と条目排除表を読み込むときに、内容の順番を整う";
|
||||
|
||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
||||
"QUQ-oY-4Hc.label" = "全般";
|
||||
|
||||
|
@ -173,9 +173,6 @@
|
|||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
||||
"iRg-wx-Nx2.title" = "入力候補陣列の候補文字の字号をご指定ください。";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
|
||||
"j48-5a-cEs.title" = "ユーザー辞書データの読み込む時のやることをご指示ください。";
|
||||
|
||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
|
||||
|
@ -185,9 +182,6 @@
|
|||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
|
||||
"o60-vW-i1B.title" = "言葉置換表を読み込むときに、内容の順番を整う";
|
||||
|
||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
||||
"rVQ-Hx-cGi.title" = "和語";
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
||||
"1.title" = "威注音偏好设定";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
||||
"sZx-18-8dO.title" = "侦错模式";
|
||||
|
||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
||||
"5.title" = "OtherViews";
|
||||
|
||||
|
@ -131,9 +134,6 @@
|
|||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
||||
"GlJ-Ns-9eE.title" = "自动选择";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
|
||||
"Li3-Yg-SOC.title" = "在重新加载自订语汇与滤除语汇时,统整档案内容排序";
|
||||
|
||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
||||
"QUQ-oY-4Hc.label" = "一般";
|
||||
|
||||
|
@ -173,9 +173,6 @@
|
|||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
||||
"iRg-wx-Nx2.title" = "变更候选字窗的字型大小。";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
|
||||
"j48-5a-cEs.title" = "请指定在使用者资料重载时要启用的功能。";
|
||||
|
||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
|
||||
|
@ -185,9 +182,6 @@
|
|||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
|
||||
"o60-vW-i1B.title" = "在重新加载语汇滤除表时,统整档案内容排序";
|
||||
|
||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
||||
"rVQ-Hx-cGi.title" = "和语";
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
||||
"1.title" = "威注音偏好設定";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
||||
"sZx-18-8dO.title" = "偵錯模式";
|
||||
|
||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
||||
"5.title" = "OtherViews";
|
||||
|
||||
|
@ -131,9 +134,6 @@
|
|||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
||||
"GlJ-Ns-9eE.title" = "自動選擇";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
|
||||
"Li3-Yg-SOC.title" = "在重新載入自訂語彙與濾除語彙時,統整檔案內容排序";
|
||||
|
||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
||||
"QUQ-oY-4Hc.label" = "一般";
|
||||
|
||||
|
@ -173,9 +173,6 @@
|
|||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
||||
"iRg-wx-Nx2.title" = "變更候選字窗的字型大小。";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
|
||||
"j48-5a-cEs.title" = "請指定在使用者數據重載時要啟用的功能。";
|
||||
|
||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
|
||||
|
@ -185,9 +182,6 @@
|
|||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
|
||||
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
|
||||
"o60-vW-i1B.title" = "在重新載入語彙濾除表時,統整檔案內容排序";
|
||||
|
||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
||||
"rVQ-Hx-cGi.title" = "和語";
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UpdateInfoEndpoint</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
||||
<string>https://jihulab.com/vChewing/vChewing-macOS/-/raw/main/Update-Info.plist</string>
|
||||
<key>UpdateInfoSite</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS</string>
|
||||
<string>https://jihulab.com/vChewing/vChewing-macOS</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1923</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
|
|
@ -1249,7 +1249,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
|
@ -1268,7 +1268,7 @@
|
|||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||
|
@ -1301,7 +1301,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
|
@ -1315,7 +1315,7 @@
|
|||
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||
|
@ -1345,7 +1345,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_ASSET_PATHS = KeyboardExtension/vChewingKeyLayout.bundle;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1364,7 +1364,7 @@
|
|||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing.KeyboardExtension;
|
||||
|
@ -1396,7 +1396,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_ASSET_PATHS = KeyboardExtension/vChewingKeyLayout.bundle;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1410,7 +1410,7 @@
|
|||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing.KeyboardExtension;
|
||||
|
@ -1526,7 +1526,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
|
@ -1558,7 +1558,7 @@
|
|||
INFOPLIST_FILE = "Source/Resources/IME-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -1591,7 +1591,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1617,7 +1617,7 @@
|
|||
INFOPLIST_FILE = "Source/Resources/IME-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
@ -1700,7 +1700,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
|
@ -1722,7 +1722,7 @@
|
|||
INFOPLIST_FILE = "Installer/Installer-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -1750,7 +1750,7 @@
|
|||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1923;
|
||||
CURRENT_PROJECT_VERSION = 1924;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
|
@ -1766,7 +1766,7 @@
|
|||
INFOPLIST_FILE = "Installer/Installer-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||
MARKETING_VERSION = 1.3.4;
|
||||
MARKETING_VERSION = 1.3.5;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
Loading…
Reference in New Issue