Rebranding to vChewing, requiring macOS 10.12

This commit is contained in:
ShikiSuen 2021-12-17 16:04:16 +08:00
parent 44f62f25dc
commit efdf7772bb
76 changed files with 1315 additions and 352 deletions

View File

@ -6,7 +6,8 @@ jobs:
name: Build
runs-on: macOS-latest
env:
DEVELOPER_DIR: /Applications/Xcode_13.2.app/Contents/Developer
GIT_SSL_NO_VERIFY: true
DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer
steps:
- uses: actions/checkout@v1
- name: Clean

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ Credits.rtf
# that can be built by make -C Source/Data/bin/C_Version
# C_count.occ.exe
.idea
Source/Data/*

12
LICENSE Normal file
View File

@ -0,0 +1,12 @@
MIT License
Copyright (c) 2021 Mengjuei Hsieh et al.
Shiki Suen, the maintainer of the vChewing project, does not own any rights of the programming parts of it.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

12
LICENSE-CHS.txt Normal file
View File

@ -0,0 +1,12 @@
MIT License
麻理许可协议
著作权利所有 © 2011-2021 Mengjuei Hsieh 等。
威注音输入法维护人孙志贵对该产品的程序部分不享有任何所有权。
软件的著作权利人依此麻理授权条款,将其对于软件的著作权利授权释出,只要使用者践履以下二项麻理授权条款叙明的义务性规定,其即享有对此软件程式及其相关说明文档自由不受限制地进行利用的权利,范围包括「使用、重制、修改、合并、出版、散布、再授权、及贩售程式重制作品」等诸多方面的应用,而散布程式之人、更可将上述权利传递予其后收受程式的后手,倘若其后收受程式之人亦服膺以下二项麻理授权条款的义务性规定,则其对程式亦享有与前手运用范围相同的同一权利。
散布此一软件程序者,须将本条款其上的「著作权声明」及以下的「免责声明」,内嵌于软件程序及其重制作品的实体之中。
因麻理软件程序的授权模式乃是无偿提供,是以在现行法律的架构下可以主张合理的免除担保责任。麻理软件的著作权人或任何的后续散布者,对于其所散布的麻理软件程序皆不负任何形式上实质上的担保责任,明示亦或隐喻、商业利用性亦或特定目的使用性,这些均不在保障之列。利用麻理软件程序的所有风险均由使用者自行担负。假如所使用的麻理程序发生缺陷性问题,使用者需自行担负修正、改正及必要的服务支出。麻理软件程序的著作权人不负任何形式上实质上的担保责任,无论任何一般的、特殊的、偶发的、因果关系式的损害,或是麻理软件程序的不适用性,均须由使用者自行负担。

12
LICENSE-CHT.txt Normal file
View File

@ -0,0 +1,12 @@
MIT License
麻理授權條款
著作權利所有 © 2011-2021 Mengjuei Hsieh 等。
威注音輸入法維護人孫志貴對該產品的程式部分不享有任何所有權。
軟體的著作權利人依此麻理授權條款,將其對於軟體的著作權利授權釋出,只要使用者踐履以下二項麻理授權條款敘明的義務性規定,其即享有對此軟體程式及其相關說明文檔自由不受限制地進行利用的權利,範圍包括「使用、重製、修改、合併、出版、散布、再授權、及販售程式重製作品」等諸多方面的應用,而散布程式之人、更可將上述權利傳遞予其後收受程式的後手,倘若其後收受程式之人亦服膺以下二項麻理授權條款的義務性規定,則其對程式亦享有與前手運用範圍相同的同一權利。
散布此一軟體程式者,須將本條款其上的「著作權聲明」及以下的「免責聲明」,內嵌於軟體程式及其重製作品的實體之中。
因麻理軟體程式的授權模式乃是無償提供,是以在現行法律的架構下可以主張合理的免除擔保責任。麻理軟體的著作權人或任何的後續散布者,對於其所散布的麻理軟體程式皆不負任何形式上實質上的擔保責任,明示亦或隱喻、商業利用性亦或特定目的使用性,這些均不在保障之列。利用麻理軟體程式的所有風險均由使用者自行擔負。假如所使用的麻理程式發生缺陷性問題,使用者需自行擔負修正、改正及必要的服務支出。麻理軟體程式的著作權人不負任何形式上實質上的擔保責任,無論任何一般的、特殊的、偶發的、因果關係式的損害,或是麻理軟體程式的不適用性,均須由使用者自行負擔。

View File

@ -2,20 +2,10 @@ MIT License
Copyright (c) 2011-2021 Mengjuei Hsieh et al.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Shiki Suen, the maintainer of the vChewing project, does not own any rights of the programming parts of it.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -12,13 +12,13 @@ BUILD_SETTINGS += ONLY_ACTIVE_ARCH=NO
endif
release:
xcodebuild -project McBopomofo.xcodeproj -scheme McBopomofoInstaller -configuration Release $(BUILD_SETTINGS) build
xcodebuild -project vChewing.xcodeproj -scheme vChewingInstaller -configuration Release $(BUILD_SETTINGS) build
debug:
xcodebuild -project McBopomofo.xcodeproj -scheme McBopomofoInstaller -configuration Debug $(BUILD_SETTINGS) build
xcodebuild -project vChewing.xcodeproj -scheme vChewingInstaller -configuration Debug $(BUILD_SETTINGS) build
DSTROOT = /Library/Input Methods
VC_APP_ROOT = $(DSTROOT)/McBopomofo.app
VC_APP_ROOT = $(DSTROOT)/vChewing.app
.PHONY: permission-check install-debug install-release
@ -27,15 +27,15 @@ permission-check:
install-debug: permission-check
rm -rf "$(VC_APP_ROOT)"
open Build/Products/Debug/McBopomofoInstaller.app
open Build/Products/Debug/vChewingInstaller.app
install-release: permission-check
rm -rf "$(VC_APP_ROOT)"
open Build/Products/Release/McBopomofoInstaller.app
open Build/Products/Release/vChewingInstaller.app
.PHONY: clean
clean:
xcodebuild -scheme McBopomofoInstaller -configuration Debug $(BUILD_SETTINGS) clean
xcodebuild -scheme McBopomofoInstaller -configuration Release $(BUILD_SETTINGS) clean
xcodebuild -scheme vChewingInstaller -configuration Debug $(BUILD_SETTINGS) clean
xcodebuild -scheme vChewingInstaller -configuration Release $(BUILD_SETTINGS) clean
make clean --file=./Source/Data/Makefile || true

View File

@ -1,14 +0,0 @@
# OpenVanilla McBopomofo 小麥注音輸入法
## 開發流程
用 Xcode 開啟 `McBopomofo.xcodeproj`,選 "McBopomofo Installer" targetbuild 完之後直接執行該安裝程式,就可以安裝小麥注音。
第一次安裝完,日後程式碼或詞庫有任何修改,只要重複上述流程,再次安裝小麥注音即可。
要注意的是 macOS 可能會限制同一次 login session 能 kill 同一個輸入法 process 的次數(安裝程式透過 kill input method process 來讓新版的輸入法生效)。如果安裝若干次後,發現程式修改的結果並沒有出現,或甚至輸入法已無法再選用,只要登出目前帳號再重新登入即可。
## 軟體授權
本專案採用 MIT License 釋出,使用者可自由使用、散播本軟體,惟散播時必須完整保留版權聲明及軟體授權([詳全文](https://github.com/openvanilla/McBopomofo/blob/master/LICENSE.txt))。

View File

@ -1,14 +1,31 @@
# OpenVanilla McBopomofo 小麥注音輸入法
# vChewing 威注音输入法
## 開發流程
威注音输入法由小麦注音分支而来(且词库内已经移除任何可以妨碍该输入法在世界上任何地方传播的内容),是原生简体中文注音输入法:相比中州韵(鼠须管)而言,威注音能够做到真正的大千声韵并击。
用 Xcode 開啟 `McBopomofo.xcodeproj`,選 "McBopomofo Installer" targetbuild 完之後直接執行該安裝程式,就可以安裝小麥注音
威注音分支专案及威注音词库由孙志贵Shiki Suen维护。小麦注音官方原始仓库內的词库的内容均与孙志贵无关
第一次安裝完,日後程式碼或詞庫有任何修改,只要重複上述流程,再次安裝小麥注音即可。
## 建置流程
要注意的是 macOS 可能會限制同一次 login session 能 kill 同一個輸入法 process 的次數(安裝程式透過 kill input method process 來讓新版的輸入法生效)。如果安裝若干次後,發現程式修改的結果並沒有出現,或甚至輸入法已無法再選用,只要登出目前帳號再重新登入即可
系统需求:至少 macOS 10.12 Sierra
## 軟體授權
安装 Xcode 之后,请先配置 Xcode 允许其直接构建在专案所在的资料夹下的 build 资料夹内。步骤:
```
「Xcode」->「Preferences...」->「Locations」
「File」->「Project/WorkspaceSettings...」->「Advanced」
选「Custom」->「Relative to Workspace」即可。不选的话make 的过程会出错。
```
在终端机内定位到威注音的克隆本地专案的本地仓库的目录之后,执行 `make update` 以获取最新词库,在成功之后执行 `make` 即可组建。再执行 `make install` 可以触发威注音的安装程式。
本專案採用 MIT License 釋出,使用者可自由使用、散播本軟體,惟散播時必須完整保留版權聲明及軟體授權([詳全文](https://github.com/openvanilla/McBopomofo/blob/master/LICENSE.txt))。
第一次安装完,日后程式码或词库有任何修改,只要重复上述流程,再次安装威注音即可
要注意的是 macOS 可能会限制同一次 login session 能终结同一个输入法的执行进程的次数(安装程式透过 kill input method process 来让新版的输入法生效)。如果安装若干次后,发现程式修改的结果并没有出现、或甚至输入法已无法再选用,只需要登出目前的 macOS 系统帐号、再重新登入即可。
补记: 该输入法是在 2021 年 11 月初「28ae7deb4092f067539cff600397292e66a5dd56」这一版小麦注音建置的基础上完成的。因为在清洗词库的时候清洗了全部的 git commit 历史所以无法自动从小麦注音官方仓库上游继承任何改动只能手动同步任何在此之后的程式修正。最近一次同步參照是「f7a24862c4e1733a2264b56e434d1a449325d769」。除此以外还引入了 MJHsieh 制作(却尚未正式给小麦注音实装)的「临时记忆最近的部分选字词」的功能(该记忆有自己的忘却衰减曲线,且记忆的词汇会在每次重新开机时自动忘却。)。
## 应用授权
小麦注音引擎程式版权:© 2011-2021 OpenVanilla 专案团队Mengjuei Hsieh 等人)。
威注音词库由孙志贵维护,亦以 MIT 授权释出。
本专案采用 MIT License 释出,使用者可自由使用、散播本软体,惟散播时必须完整保留版权声明及软体授权([详全文 LICENSE.txt](https://github.com/openvanilla/McBopomofo/blob/master/LICENSE.txt))。

View File

@ -1,7 +1,7 @@
//
// AppDelegate.h
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)

View File

@ -1,7 +1,7 @@
//
// AppDelegate.m
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)
@ -156,7 +156,7 @@ static const NSTimeInterval kTimeoutInterval = 60.0;
- (void)showNoUpdateAvailableAlert
{
[[OVNonModalAlertWindowController sharedInstance] showWithTitle:NSLocalizedString(@"Check for Update Completed", nil) content:NSLocalizedString(@"You are already using the latest version of McBopomofo.", nil) confirmButtonTitle:NSLocalizedString(@"OK", nil) cancelButtonTitle:nil cancelAsDefault:NO delegate:nil];
[[OVNonModalAlertWindowController sharedInstance] showWithTitle:NSLocalizedString(@"Check for Update Completed", nil) content:NSLocalizedString(@"You are already using the latest version of vChewing.", nil) confirmButtonTitle:NSLocalizedString(@"OK", nil) cancelButtonTitle:nil cancelAsDefault:NO delegate:nil];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
@ -244,7 +244,7 @@ static const NSTimeInterval kTimeoutInterval = 60.0;
}
}
NSString *content = [NSString stringWithFormat:NSLocalizedString(@"You're currently using McBopomofo %@ (%@), a new version %@ (%@) is now available. Do you want to visit McBopomofo's website to download the version?%@", nil), [infoDict objectForKey:@"CFBundleShortVersionString"], currentVersion, [plist objectForKey:@"CFBundleShortVersionString"], remoteVersion, versionDescription];
NSString *content = [NSString stringWithFormat:NSLocalizedString(@"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@", nil), [infoDict objectForKey:@"CFBundleShortVersionString"], currentVersion, [plist objectForKey:@"CFBundleShortVersionString"], remoteVersion, versionDescription];
[[OVNonModalAlertWindowController sharedInstance] showWithTitle:NSLocalizedString(@"New Version Available", nil) content:content confirmButtonTitle:NSLocalizedString(@"Visit Website", nil) cancelButtonTitle:NSLocalizedString(@"Not Now", nil) cancelAsDefault:NO delegate:self];
}

View File

@ -14,10 +14,10 @@
<customObject id="-3" userLabel="Application"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="McBopomofo" id="56">
<menu key="submenu" title="McBopomofo" systemMenu="apple" id="57">
<menuItem title="vChewing" id="56">
<menu key="submenu" title="vChewing" systemMenu="apple" id="57">
<items>
<menuItem title="About McBopomofo" id="58">
<menuItem title="About vChewing" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
@ -32,7 +32,7 @@
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide McBopomofo" keyEquivalent="h" id="134">
<menuItem title="Hide vChewing" keyEquivalent="h" id="134">
<connections>
<action selector="performClose:" target="-1" id="536"/>
</connections>

View File

@ -57,7 +57,7 @@
self = [self initWithWindow:panel];
if (self) {
contentRect.origin = NSMakePoint(0.0, 0.0);
_candidateView = [[VTHorizontalCandidateView alloc] initWithFrame:contentRect];
_candidateView = [[VTHorizontalCandidateView alloc] initWithFrame:contentRect];
_candidateView.target = self;
_candidateView.action = @selector(candidateViewMouseDidClick:);
[[panel contentView] addSubview:_candidateView];
@ -151,7 +151,7 @@
- (void)setSelectedCandidateIndex:(NSUInteger)newIndex
{
NSUInteger keyLabelCount = [_keyLabels count];
NSUInteger keyLabelCount = [_keyLabels count];
if (newIndex < [_delegate candidateCountForController:self]) {
_currentPage = newIndex / keyLabelCount;
_candidateView.highlightedIndex = newIndex % keyLabelCount;
@ -175,7 +175,7 @@
NSMutableArray *candidates = [NSMutableArray array];
NSUInteger count = [_delegate candidateCountForController:self];
NSUInteger keyLabelCount = [_keyLabels count];
NSUInteger keyLabelCount = [_keyLabels count];
for (NSUInteger index = _currentPage * keyLabelCount, j = 0; index < count && j < keyLabelCount; index++, j++) {
[candidates addObject:[_delegate candidateController:self candidateAtIndex:index]];
}

View File

@ -96,7 +96,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
- (NSSize)sizeForView
{
NSSize result = NSMakeSize(0.0, 0.0);
if ([_elementWidths count]) {
if ([_elementWidths count]) {
for (NSNumber *w in _elementWidths) {
result.width += [w doubleValue];
}
@ -128,7 +128,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
[NSBezierPath strokeLineFromPoint:NSMakePoint(bounds.size.width, 0.0) toPoint:NSMakePoint(bounds.size.width, bounds.size.height)];
NSUInteger count = [_elementWidths count];
CGFloat accuWidth = 0.0;
CGFloat accuWidth = 0.0;
for (NSUInteger index = 0; index < count; index++) {
NSDictionary *activeCandidateAttr = _candidateAttrDict;
@ -154,7 +154,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
}
else {
[backgroundColor setFill];
}
}
[NSBezierPath fillRect:candidateRect];
[[_displayedCandidates objectAtIndex:index] drawInRect:candidateRect withAttributes:activeCandidateAttr];
@ -172,7 +172,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
return result;
}
NSUInteger count = [_elementWidths count];
NSUInteger count = [_elementWidths count];
CGFloat accuWidth = 0.0;
for (NSUInteger index = 0; index < count; index++) {
CGFloat currentWidth = [[_elementWidths objectAtIndex:index] doubleValue];
@ -182,7 +182,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
break;
}
accuWidth += currentWidth + 1.0;
accuWidth += currentWidth + 1.0;
}
return result;
@ -217,7 +217,7 @@ NS_INLINE CGFloat max(CGFloat a, CGFloat b) { return a > b ? a : b; }
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks"
if (triggerAction && _target && _action) {
[_target performSelector:_action withObject:self];
[_target performSelector:_action withObject:self];
}
# pragma clang diagnostic pop
}

View File

@ -81,7 +81,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
scrollViewRect.origin.x = stripRect.size.width;
scrollViewRect.size.width -= stripRect.size.width;
_scrollView = [[NSScrollView alloc] initWithFrame:scrollViewRect];
_scrollView = [[NSScrollView alloc] initWithFrame:scrollViewRect];
// >=10.7 only, elastic scroll causes some drawing issues with visible scroller, so we disable it
if ([_scrollView respondsToSelector:@selector(setVerticalScrollElasticity:)]) {
@ -155,7 +155,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
- (BOOL)highlightPreviousCandidate
{
return [self moveSelectionByOne:NO];
return [self moveSelectionByOne:NO];
}
- (NSUInteger)candidateIndexAtKeyLabelIndex:(NSUInteger)index
@ -224,13 +224,13 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
{
NSString *candidate = @"";
// rendering can occur when the delegate is already gone or data goes stale; in that case we ignore it
// rendering can occur when the delegate is already gone or data goes stale; in that case we ignore it
if (row < [_delegate candidateCountForController:self]) {
candidate = [_delegate candidateController:self candidateAtIndex:row];
}
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:candidate attributes:[NSDictionary dictionaryWithObjectsAndKeys:_candidateFont, NSFontAttributeName, _candidateTextParagraphStyle, NSParagraphStyleAttributeName, nil]];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:candidate attributes:[NSDictionary dictionaryWithObjectsAndKeys:_candidateFont, NSFontAttributeName, _candidateTextParagraphStyle, NSParagraphStyleAttributeName, nil]];
// we do more work than what this method is expected to; normally not a good practice, but for the amount of data (9 to 10 rows max), we can afford the overhead
@ -244,7 +244,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
// keep track of the highlighted index in the key label strip
NSUInteger count = [_keyLabels count];
NSInteger selectedRow = [_tableView selectedRow];
NSInteger selectedRow = [_tableView selectedRow];
if (selectedRow != -1) {
// cast this into signed integer to make our life easier
NSInteger newHilightIndex;
@ -255,7 +255,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
else {
NSInteger firstVisibleRow = [_tableView rowAtPoint:[_scrollView documentVisibleRect].origin];
newHilightIndex = selectedRow - firstVisibleRow;
newHilightIndex = selectedRow - firstVisibleRow;
if (newHilightIndex < -1) {
newHilightIndex = -1;
}
@ -263,7 +263,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
if (newHilightIndex != _keyLabelStripView.highlightedIndex && newHilightIndex >= 0) {
_keyLabelStripView.highlightedIndex = newHilightIndex;
[_keyLabelStripView setNeedsDisplay:YES];
[_keyLabelStripView setNeedsDisplay:YES];
}
}
@ -273,8 +273,8 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
NSInteger selectedRow = [_tableView selectedRow];
if (selectedRow != -1) {
// keep track of the highlighted index in the key label strip
if (selectedRow != -1) {
// keep track of the highlighted index in the key label strip
NSInteger firstVisibleRow = [_tableView rowAtPoint:[_scrollView documentVisibleRect].origin];
_keyLabelStripView.highlightedIndex = selectedRow - firstVisibleRow;
[_keyLabelStripView setNeedsDisplay:YES];
@ -285,7 +285,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
if ([_scrollView hasVerticalScroller]) {
[[_scrollView verticalScroller] setNeedsDisplay];
}
}
}
}
- (void)rowDoubleClicked:(id)sender
@ -331,8 +331,8 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
}
}
self.selectedCandidateIndex = newIndex;
return YES;
self.selectedCandidateIndex = newIndex;
return YES;
}
- (BOOL)moveSelectionByOne:(BOOL)forward
@ -360,7 +360,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
newIndex--;
}
self.selectedCandidateIndex = newIndex;
self.selectedCandidateIndex = newIndex;
return YES;
}
@ -393,7 +393,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
[_scrollView setHasVerticalScroller:YES];
NSScroller *verticalScroller = [_scrollView verticalScroller];
[verticalScroller setControlSize:controlSize];
[verticalScroller setControlSize:controlSize];
[verticalScroller setScrollerStyle:NSScrollerStyleLegacy];
scrollerWidth = [NSScroller scrollerWidthForControlSize:controlSize scrollerStyle:NSScrollerStyleLegacy];
}
@ -415,7 +415,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
maxKeyLabelWidth = max(rect.size.width, maxKeyLabelWidth);
}
CGFloat rowSpacing = [_tableView intercellSpacing].height;
CGFloat rowSpacing = [_tableView intercellSpacing].height;
CGFloat stripWidth = ceil(maxKeyLabelWidth * 1.20);
CGFloat tableViewStartWidth = ceil(_maxCandidateAttrStringWidth + scrollerWidth);;
CGFloat windowWidth = stripWidth + 1.0 + tableViewStartWidth;
@ -425,7 +425,7 @@ static const CGFloat kCandidateTextLeftMarginWithMandatedTableViewPadding = 0.0;
NSPoint topLeftPoint = NSMakePoint(frameRect.origin.x, frameRect.origin.y + frameRect.size.height);
frameRect.size = NSMakeSize(windowWidth, windowHeight);
frameRect.origin = NSMakePoint(topLeftPoint.x, topLeftPoint.y - frameRect.size.height);
frameRect.origin = NSMakePoint(topLeftPoint.x, topLeftPoint.y - frameRect.size.height);
[_keyLabelStripView setFrame:NSMakeRect(0.0, 0.0, stripWidth, windowHeight)];
[_scrollView setFrame:NSMakeRect(stripWidth + 1.0, 0.0, tableViewStartWidth, windowHeight)];

View File

@ -30,7 +30,7 @@
@implementation VTVerticalCandidateTableView
- (NSRect)adjustScroll:(NSRect)newVisible
{
NSRect scrollRect = newVisible;
NSRect scrollRect = newVisible;
CGFloat rowHeightPlusSpacing = [self rowHeight] + [self intercellSpacing].height;
scrollRect.origin.y = (NSInteger)(scrollRect.origin.y / rowHeightPlusSpacing) * rowHeightPlusSpacing;
return scrollRect;

View File

@ -58,14 +58,14 @@
{
NSRect bounds = [self bounds];
[[NSColor whiteColor] setFill];
[NSBezierPath fillRect:bounds];
[NSBezierPath fillRect:bounds];
NSUInteger count = [_keyLabels count];
NSUInteger count = [_keyLabels count];
if (!count) {
return;
}
CGFloat cellHeight = bounds.size.height / count;
CGFloat cellHeight = bounds.size.height / count;
NSColor *black = [NSColor blackColor];
NSColor *darkGray = [NSColor colorWithDeviceWhite:0.7 alpha:1.0];
NSColor *lightGray = [NSColor colorWithDeviceWhite:0.8 alpha:1.0];
@ -99,6 +99,6 @@
NSString *text = [_keyLabels objectAtIndex:index];
[text drawInRect:textRect withAttributes:textAttr];
}
}
}
@end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 495 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 869 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,7 @@
//
// InputMethodController.h
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)
@ -39,7 +39,7 @@
#import "FastLM.h"
#import "UserOverrideModel.h"
@interface McBopomofoInputMethodController : IMKInputController
@interface vChewingInputMethodController : IMKInputController
{
@private
// the reading buffer that takes user input
@ -55,7 +55,7 @@
std::vector<Formosa::Gramambular::NodeAnchor> _walkedNodes;
// user override model
McBopomofo::UserOverrideModel *_uom;
vChewing::UserOverrideModel *_uom;
// the latest composing buffer that is updated to the foreground app
NSMutableString *_composingBuffer;

View File

@ -1,7 +1,7 @@
//
// InputMethodController.m
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)
@ -41,7 +41,7 @@
#import "AppDelegate.h"
#import "VTHorizontalCandidateController.h"
#import "VTVerticalCandidateController.h"
#import "McBopomofo-Swift.h"
#import "vChewing-Swift.h"
//@import SwiftUI;
@ -76,9 +76,9 @@ static NSString *const kCandidateListTextSizeKey = @"CandidateListTextSize";
static NSString *const kSelectPhraseAfterCursorAsCandidatePreferenceKey = @"SelectPhraseAfterCursorAsCandidate";
static NSString *const kUseHorizontalCandidateListPreferenceKey = @"UseHorizontalCandidateList";
static NSString *const kComposingBufferSizePreferenceKey = @"ComposingBufferSize";
static NSString *const kDisableUserCandidateSelectionLearning = @"DisableUserCandidateSelectionLearning";
static NSString *const kChooseCandidateUsingSpaceKey = @"ChooseCandidateUsingSpaceKey";
static NSString *const kChineseConversionEnabledKey = @"ChineseConversionEnabledKey";
static NSString *const kDisableUserCandidateSelectionLearning = @"DisableUserCandidateSelectionLearning";
// advanced (usually optional) settings
static NSString *const kCandidateTextFontName = @"CandidateTextFontName";
@ -86,8 +86,8 @@ static NSString *const kCandidateKeyLabelFontName = @"CandidateKeyLabelFontName"
static NSString *const kCandidateKeys = @"CandidateKeys";
// input modes
static NSString *const kBopomofoModeIdentifier = @"org.openvanilla.inputmethod.McBopomofo.Bopomofo";
static NSString *const kPlainBopomofoModeIdentifier = @"org.openvanilla.inputmethod.McBopomofo.PlainBopomofo";
static NSString *const kBopomofoModeIdentifier = @"org.openvanilla.inputmethod.vChewing.Bopomofo";
static NSString *const kPlainBopomofoModeIdentifier = @"org.openvanilla.inputmethod.vChewing.PlainBopomofo";
// key code enums
enum {
@ -111,17 +111,13 @@ VTCandidateController *gCurrentCandidateController = nil;
// if DEBUG is defined, a DOT file (GraphViz format) will be written to the
// specified path everytime the grid is walked
#if DEBUG
static NSString *const kGraphVizOutputfile = @"/tmp/McBopomofo-visualization.dot";
static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
#endif
// shared language model object that stores our phrase-term probability database
FastLM gLanguageModel;
FastLM gLanguageModelPlainBopomofo;
static const int kUserOverrideModelCapacity = 500;
static const double kObservedOverrideHalflife = 5400.0; // 1.5 hr.
McBopomofo::UserOverrideModel gUserOverrideModel(kUserOverrideModelCapacity, kObservedOverrideHalflife);
// https://clang-analyzer.llvm.org/faq.html
__attribute__((annotate("returns_localized_nsstring")))
static inline NSString *LocalizationNotNeeded(NSString *s) {
@ -129,14 +125,17 @@ static inline NSString *LocalizationNotNeeded(NSString *s) {
}
// private methods
@interface McBopomofoInputMethodController () <VTCandidateControllerDelegate>
@interface vChewingInputMethodController () <VTCandidateControllerDelegate>
+ (VTHorizontalCandidateController *)horizontalCandidateController;
+ (VTVerticalCandidateController *)verticalCandidateController;
- (void)collectCandidates;
- (size_t)actualCandidateCursorIndex;
- (NSString *)neighborTrigramString;
- (void)_performDeferredSaveUserCandidatesDictionary;
- (void)saveUserCandidatesDictionary;
- (void)_showCandidateWindowUsingVerticalMode:(BOOL)useVerticalMode client:(id)client;
- (void)beep;
@ -153,37 +152,7 @@ public:
}
};
static const double kEpsilon = 0.000001;
static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon) {
double highestScore = 0.0;
for (auto ni = nodes.begin(), ne = nodes.end(); ni != ne; ++ni) {
double score = ni->node->highestUnigramScore();
if (score > highestScore) {
highestScore = score;
}
}
return highestScore + epsilon;
}
static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& candidateValue, bool fixed, double floatingNodeOverrideScore) {
for (auto ni = nodes.begin(), ne = nodes.end(); ni != ne; ++ni) {
const vector<KeyValuePair>& candidates = (*ni).node->candidates();
for (size_t i = 0, c = candidates.size(); i < c; ++i) {
if (candidates[i].value == candidateValue) {
// found our node
if (fixed) {
const_cast<Node*>((*ni).node)->selectCandidateAtIndex(i);
} else {
const_cast<Node*>((*ni).node)->selectFloatingCandidateAtIndex(i, floatingNodeOverrideScore);
}
return;
}
}
}
}
@implementation McBopomofoInputMethodController
@implementation vChewingInputMethodController
- (void)dealloc
{
// clean up everything
@ -213,7 +182,6 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
// create the lattice builder
_languageModel = &gLanguageModel;
_builder = new BlockReadingBuilder(_languageModel);
_uom = &gUserOverrideModel;
// each Mandarin syllable is separated by a hyphen
_builder->setJoinSeparator("-");
@ -221,6 +189,11 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
// create the composing buffer
_composingBuffer = [[NSMutableString alloc] init];
// populate the settings, by default, DISABLE user candidate learning
if (![[NSUserDefaults standardUserDefaults] objectForKey:kDisableUserCandidateSelectionLearning]) {
[[NSUserDefaults standardUserDefaults] setObject:(id)kCFBooleanTrue forKey:kDisableUserCandidateSelectionLearning];
}
_inputMode = kBopomofoModeIdentifier;
_chineseConversionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:kChineseConversionEnabledKey];
}
@ -232,7 +205,7 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
{
// a menu instance (autoreleased) is requested every time the user click on the input menu
NSMenu *menu = [[NSMenu alloc] initWithTitle:LocalizationNotNeeded(@"Input Method Menu")];
NSMenuItem *preferenceMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"McBopomofo Preferences", @"") action:@selector(showPreferences:) keyEquivalent:@""];
NSMenuItem *preferenceMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"vChewing Preferences", @"") action:@selector(showPreferences:) keyEquivalent:@""];
[menu addItem:preferenceMenuItem];
// If Option key is pressed, show the learning-related menu
@ -267,7 +240,7 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
NSMenuItem *updateCheckItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Check for Updates…", @"") action:@selector(checkForUpdate:) keyEquivalent:@""];
[menu addItem:updateCheckItem];
NSMenuItem *aboutMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"About McBopomofo…", @"") action:@selector(showAbout:) keyEquivalent:@""];
NSMenuItem *aboutMenuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"About vChewing…", @"") action:@selector(showAbout:) keyEquivalent:@""];
[menu addItem:aboutMenuItem];
return menu;
@ -720,15 +693,15 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
// then walk the lattice
[self popOverflowComposingTextAndWalk:client];
// get user override model suggestion
string overrideValue =
(_inputMode == kPlainBopomofoModeIdentifier) ? "" :
_uom->suggest(_walkedNodes, _builder->cursorIndex(), [[NSDate date] timeIntervalSince1970]);
if (!overrideValue.empty()) {
size_t cursorIndex = [self actualCandidateCursorIndex];
vector<NodeAnchor> nodes = _builder->grid().nodesCrossingOrEndingAt(cursorIndex);
double highestScore = FindHighestScore(nodes, kEpsilon);
OverrideCandidate(nodes, overrideValue, false, highestScore);
// see if we need to override the selection if a learned one exists
if (![[NSUserDefaults standardUserDefaults] boolForKey:kDisableUserCandidateSelectionLearning]) {
NSString *trigram = [self neighborTrigramString];
// Lookup from the user dict to see if the trigram fit or not
NSString *overrideCandidateString = [gCandidateLearningDictionary objectForKey:trigram];
if (overrideCandidateString) {
[self candidateSelected:(NSAttributedString *)overrideCandidateString];
}
}
// then update the text
@ -1307,6 +1280,61 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
return cursorIndex;
}
- (NSString *)neighborTrigramString
{
// gather the "trigram" for user candidate selection learning
NSMutableArray *termArray = [NSMutableArray array];
size_t cursorIndex = [self actualCandidateCursorIndex];
vector<NodeAnchor> nodes = _builder->grid().nodesCrossingOrEndingAt(cursorIndex);
const Node* prev = 0;
const Node* current = 0;
const Node* next = 0;
size_t wni = 0;
size_t wnc = _walkedNodes.size();
size_t accuSpanningLength = 0;
for (wni = 0; wni < wnc; wni++) {
NodeAnchor& anchor = _walkedNodes[wni];
if (!anchor.node) {
continue;
}
accuSpanningLength += anchor.spanningLength;
if (accuSpanningLength >= cursorIndex) {
prev = current;
current = anchor.node;
break;
}
current = anchor.node;
}
if (wni + 1 < wnc) {
next = _walkedNodes[wni + 1].node;
}
string term;
if (prev) {
term = prev->currentKeyValue().key;
[termArray addObject:[NSString stringWithUTF8String:term.c_str()]];
}
if (current) {
term = current->currentKeyValue().key;
[termArray addObject:[NSString stringWithUTF8String:term.c_str()]];
}
if (next) {
term = next->currentKeyValue().key;
[termArray addObject:[NSString stringWithUTF8String:term.c_str()]];
}
return [termArray componentsJoinedByString:@"-"];
}
- (void)_performDeferredSaveUserCandidatesDictionary
{
BOOL __unused success = [gCandidateLearningDictionary writeToFile:gUserCandidatesDictionaryPath atomically:YES];
@ -1330,13 +1358,13 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
BOOL useHorizontalCandidateList = [[NSUserDefaults standardUserDefaults] boolForKey:kUseHorizontalCandidateListPreferenceKey];
if (useVerticalMode) {
gCurrentCandidateController = [McBopomofoInputMethodController verticalCandidateController];
gCurrentCandidateController = [vChewingInputMethodController verticalCandidateController];
}
else if (useHorizontalCandidateList) {
gCurrentCandidateController = [McBopomofoInputMethodController horizontalCandidateController];
gCurrentCandidateController = [vChewingInputMethodController horizontalCandidateController];
}
else {
gCurrentCandidateController = [McBopomofoInputMethodController verticalCandidateController];
gCurrentCandidateController = [vChewingInputMethodController verticalCandidateController];
}
// set the attributes for the candidate panel (which uses NSAttributedString)
@ -1467,15 +1495,17 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
// candidate selected, override the node with selection
string selectedValue = [[_candidates objectAtIndex:index] UTF8String];
size_t cursorIndex = [self actualCandidateCursorIndex];
if (_inputMode != kPlainBopomofoModeIdentifier) {
_uom->observe(_walkedNodes, cursorIndex, selectedValue, [[NSDate date] timeIntervalSince1970]);
if (![[NSUserDefaults standardUserDefaults] boolForKey:kDisableUserCandidateSelectionLearning]) {
NSString *trigram = [self neighborTrigramString];
NSString *selectedNSString = [NSString stringWithUTF8String:selectedValue.c_str()];
[gCandidateLearningDictionary setObject:selectedNSString forKey:trigram];
[self saveUserCandidatesDictionary];
}
size_t cursorIndex = [self actualCandidateCursorIndex];
_builder->grid().fixNodeSelectedCandidate(cursorIndex, selectedValue);
vector<NodeAnchor> nodes = _builder->grid().nodesCrossingOrEndingAt(cursorIndex);
OverrideCandidate(nodes, selectedValue, true, 0.0);
[_candidates removeAllObjects];
[self walk];
@ -1491,7 +1521,7 @@ static void OverrideCandidate(const vector<NodeAnchor>& nodes, const string& can
static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, FastLM &lm)
{
NSString *dataPath = [[NSBundle bundleForClass:[McBopomofoInputMethodController class]] pathForResource:filenameWithoutExtension ofType:@"txt"];
NSString *dataPath = [[NSBundle bundleForClass:[vChewingInputMethodController class]] pathForResource:filenameWithoutExtension ofType:@"txt"];
bool result = lm.open([dataPath UTF8String]);
if (!result) {
NSLog(@"Failed opening language model: %@", dataPath);
@ -1518,7 +1548,7 @@ void LTLoadLanguageModel()
}
NSString *appSupportPath = [paths objectAtIndex:0];
NSString *userDictPath = [appSupportPath stringByAppendingPathComponent:@"McBopomofo"];
NSString *userDictPath = [appSupportPath stringByAppendingPathComponent:@"vChewing"];
BOOL isDir = NO;
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:userDictPath isDirectory:&isDir];

View File

@ -1,7 +1,7 @@
//
// AppDelegate.h
//
// Copyright (c) 2011-2012 The McBopomofo Project.
// Copyright (c) 2011-2012 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

View File

@ -1,7 +1,7 @@
//
// AppDelegate.m
//
// Copyright (c) 2011-2012 The McBopomofo Project.
// Copyright (c) 2011-2012 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -29,12 +29,12 @@
#import <sys/mount.h>
#import "OVInputSourceHelper.h"
static NSString *const kTargetBin = @"McBopomofo";
static NSString *const kTargetBin = @"vChewing";
static NSString *const kTargetType = @"app";
static NSString *const kTargetBundle = @"McBopomofo.app";
static NSString *const kTargetBundle = @"vChewing.app";
static NSString *const kDestinationPartial = @"~/Library/Input Methods/";
static NSString *const kTargetPartialPath = @"~/Library/Input Methods/McBopomofo.app";
static NSString *const kTargetFullBinPartialPath = @"~/Library/Input Methods/McBopomofo.app/Contents/MacOS/McBopomofo";
static NSString *const kTargetPartialPath = @"~/Library/Input Methods/vChewing.app";
static NSString *const kTargetFullBinPartialPath = @"~/Library/Input Methods/vChewing.app/Contents/MacOS/vChewing";
static const NSTimeInterval kTranslocationRemovalTickInterval = 0.5;
static const NSTimeInterval kTranslocationRemovalDeadline = 60.0;
@ -231,13 +231,13 @@ void RunAlertPanel(NSString *title, NSString *message, NSString *buttonTitle) {
}
if (warning) {
RunAlertPanel(NSLocalizedString(@"Attention", nil), NSLocalizedString(@"McBopomofo is upgraded, but please log out or reboot for the new version to be fully functional.", nil), NSLocalizedString(@"OK", nil));
RunAlertPanel(NSLocalizedString(@"Attention", nil), NSLocalizedString(@"vChewing is upgraded, but please log out or reboot for the new version to be fully functional.", nil), NSLocalizedString(@"OK", nil));
} else {
// Only prompt a warning if pre-macOS 12. The flag is not indicative of anything meaningful due to the need of user intervention in Prefernces.app on macOS 12.
if (!mainInputSourceEnabled && !isMacOS12OrAbove) {
RunAlertPanel(NSLocalizedString(@"Warning", nil), NSLocalizedString(@"Input method may not be fully enabled. Please enable it through System Preferences > Keyboard > Input Sources.", nil), NSLocalizedString(@"Continue", nil));
} else {
RunAlertPanel(NSLocalizedString(@"Installation Successful", nil), NSLocalizedString(@"McBopomofo is ready to use.", nil), NSLocalizedString(@"OK", nil));
RunAlertPanel(NSLocalizedString(@"Installation Successful", nil), NSLocalizedString(@"vChewing is ready to use.", nil), NSLocalizedString(@"OK", nil));
}
}

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011-2019 The McBopomofo Project.
// Copyright (c) 2011-2019 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011-2019 The McBopomofo Project.
// Copyright (c) 2011-2019 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

View File

@ -15,10 +15,10 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="McBopomofo Installer" id="56">
<menu key="submenu" title="McBopomofo Installer" systemMenu="apple" id="57">
<menuItem title="vChewing Installer" id="56">
<menu key="submenu" title="vChewing Installer" systemMenu="apple" id="57">
<items>
<menuItem title="About Install McBopomofo" id="58">
<menuItem title="About Install vChewing" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
@ -33,7 +33,7 @@
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide Install McBopomofo" keyEquivalent="h" id="134">
<menuItem title="Hide Install vChewing" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
@ -52,7 +52,7 @@
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Quit Install McBopomofo" keyEquivalent="q" id="136">
<menuItem title="Quit Install vChewing" keyEquivalent="q" id="136">
<connections>
<action selector="terminate:" target="-3" id="449"/>
</connections>
@ -82,7 +82,7 @@
</menuItem>
</items>
</menu>
<window title="McBopomofo Installer" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="371">
<window title="vChewing Installer" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="371">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="335" y="390" width="640" height="360"/>
@ -146,7 +146,7 @@ Gw
<textField verticalHuggingPriority="750" id="623">
<rect key="frame" x="17" y="323" width="559" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Welcome to the McBopomofo Installer! Please read the following Software Licence:" id="624">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Welcome to the vChewing Installer! Please read the following Software Licence:" id="624">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>

View File

@ -1,4 +1,4 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Install McBopomofo";
CFBundleName = "Install vChewing";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";

View File

@ -5,7 +5,7 @@
\margl1440\margr1440\vieww16860\viewh12620\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\b\fs36 \cf0 McBopomofo License Agreement
\f0\b\fs36 \cf0 vChewing License Agreement
\f1\b0\fs24 \
\
Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\

View File

@ -23,11 +23,11 @@
"OK" = "OK";
/* No comment provided by engineer. */
"McBopomofo is ready to use." = "McBopomofo is ready to use.";
"vChewing is ready to use." = "vChewing is ready to use.";
"Stopping the old version. This may take up to one minute…" = "Stopping the old version. This may take up to one minute…";
"Attention" = "Attention";
"McBopomofo is upgraded, but please log out or reboot for the new version to be fully functional." = "McBopomofo is upgraded, but please log out or reboot for the new version to be fully functional.";
"vChewing is upgraded, but please log out or reboot for the new version to be fully functional." = "vChewing is upgraded, but please log out or reboot for the new version to be fully functional.";
"Fatal Error" = "Fatal Error";
"Abort" = "Abort";

View File

@ -1,7 +1,7 @@
//
// main.m
//
// Copyright (c) 2011-2012 The McBopomofo Project.
// Copyright (c) 2011-2012 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation

View File

@ -0,0 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "安装威注音";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";

View File

@ -0,0 +1,42 @@
{\rtf1\ansi\ansicpg950\cocoartf2636
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 HelveticaNeue-Bold;\f1\fnil\fcharset0 HelveticaNeue;\f2\fnil\fcharset136 PingFangTC-Regular;
}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\margl1440\margr1440\vieww16860\viewh12620\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\b\fs36 \cf0 vChewing License Agreement
\f1\b0\fs24 \
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f2 \cf0 \'b5\'db\'a7\'40\uc0\u26435 \'a7\'51\'a9\'d2\'a6\'b3
\f1 \'a9 2011-2021 Mengjuei Hsieh
\f2 \'b5\'a5\'a4\'48
\f1 \
\
\f2 \'ab\'c2\'aa\'60\'ad\'b5\uc0\u36755 \'a4\'4a\'aa\'6b\u32500 \u25252 \'a4\'48\u23385 \'a7\'d3\u36149 \u23545 \u35813 \u20135 \'ab\'7e\'aa\'ba\'b5\'7b\'a7\'c7\'b3\'a1\'a4\'c0\'a4\'a3\'a8\'c9\'a6\'b3\'a5\'f4\'a6\'f3\'a9\'d2\'a6\'b3\u26435 \'a1\'43
\f1 \
\
\f2 \uc0\u36719 \'a5\'f3\'aa\'ba\'b5\'db\'a7\'40\u26435 \'a7\'51\'a4\'48\'a8\'cc\'a6\'b9\'b3\'c2\'b2\'7a\'b1\'c2\u26435 \u26465 \'b4\'da\'a1\'41\u23558 \'a8\'e4\u23545 \'a4\'5f\u36719 \'a5\'f3\'aa\'ba\'b5\'db\'a7\'40\u26435 \'a7\'51\'b1\'c2\u26435 \u37322 \'a5\'58\'a1\'41\'a5\'75\'ad\'6e\'a8\'cf\'a5\'ce\'aa\'cc\u36341 \'bc\'69\'a5\'48\'a4\'55\'a4\'47\u39033 \'b3\'c2\'b2\'7a\'b1\'c2\u26435 \u26465 \'b4\'da\u21465 \'a9\'fa\'aa\'ba\u20041 \u21153 \'a9\'ca\u35268 \'a9\'77\'a1\'41\'a8\'e4\'a7\'59\'a8\'c9\'a6\'b3\u23545 \'a6\'b9\u36719 \'a5\'f3\'b5\'7b\'a6\'a1\'a4\'ce\'a8\'e4\'ac\'db\u20851 \u35828 \'a9\'fa\'a4\'e5\u26723 \'a6\'db\'a5\'d1\'a4\'a3\'a8\'fc\'ad\'ad\'a8\'ee\'a6\'61\u36827 \'a6\'e6\'a7\'51\'a5\'ce\'aa\'ba\u26435 \'a7\'51\'a1\'41\'ad\'53\u22260 \'a5\'5d\'ac\'41\'a1\'75\'a8\'cf\'a5\'ce\'a1\'42\'ad\'ab\'a8\'ee\'a1\'42\'ad\'d7\'a7\'ef\'a1\'42\'a6\'58\'a6\'7d\'a1\'42\'a5\'58\'aa\'a9\'a1\'42\'b4\'b2\'a5\'ac\'a1\'42\'a6\'41\'b1\'c2\u26435 \'a1\'42\'a4\'ce\u36137 \'b0\'e2\'b5\'7b\'a6\'a1\'ad\'ab\'a8\'ee\'a7\'40\'ab\'7e\'a1\'76\'b5\'a5\u35832 \'a6\'68\'a4\'e8\'ad\'b1\'aa\'ba\u24212 \'a5\'ce\'a1\'41\'a6\'d3\'b4\'b2\'a5\'ac\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a1\'42\'a7\'f3\'a5\'69\u23558 \'a4\'57\'ad\'7a\u26435 \'a7\'51\u20256 \u36882 \'a4\'a9\'a8\'e4\'a6\'5a\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'aa\'ba\'a6\'5a\'a4\'e2\'a1\'41\'ad\'d5\'ad\'59\'a8\'e4\'a6\'5a\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a5\'e7\'aa\'41\'c1\'74\'a5\'48\'a4\'55\'a4\'47\u39033 \'b3\'c2\'b2\'7a\'b1\'c2\u26435 \u26465 \'b4\'da\'aa\'ba\u20041 \u21153 \'a9\'ca\u35268 \'a9\'77\'a1\'41\u21017 \'a8\'e4\u23545 \'b5\'7b\'a6\'a1\'a5\'e7\'a8\'c9\'a6\'b3\'c9\'4f\'ab\'65\'a4\'e2\u36816 \'a5\'ce\'ad\'53\u22260 \'ac\'db\'a6\'50\'aa\'ba\'a6\'50\'a4\'40\u26435 \'a7\'51\'a1\'43
\f1 \
\
\f2 \'b4\'b2\'a5\'ac\'a6\'b9\'a4\'40\uc0\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'aa\'cc\'a1\'41\u39035 \u23558 \'a5\'bb\u26465 \'b4\'da\'a8\'e4\'a4\'57\'aa\'ba\'a1\'75\'b5\'db\'a7\'40\u26435 \u22768 \'a9\'fa\'a1\'76\'a4\'ce\'a5\'48\'a4\'55\'aa\'ba\'a1\'75\'a7\'4b\u36131 \u22768 \'a9\'fa\'a1\'76\'a1\'41\u20869 \'b4\'4f\'a4\'5f\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'a4\'ce\'a8\'e4\'ad\'ab\'a8\'ee\'a7\'40\'ab\'7e\'aa\'ba\u23454 \'ca\'5e\'a4\'a7\'a4\'a4\'a1\'43
\f1 \
\
\f2 \'a6\'5d\'b3\'c2\'b2\'7a\uc0\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'aa\'ba\'b1\'c2\u26435 \'bc\'d2\'a6\'a1\'a4\'44\'ac\'4f\u26080 \u20607 \'b4\'a3\'a8\'d1\'a1\'41\'ac\'4f\'a5\'48\'a6\'62\u29616 \'a6\'e6\'aa\'6b\'ab\'df\'aa\'ba\'ac\'5b\'cc\'db\'a4\'55\'a5\'69\'a5\'48\'a5\'44\u24352 \'a6\'58\'b2\'7a\'aa\'ba\'a7\'4b\'b0\'a3\u25285 \'ab\'4f\u36131 \'a5\'f4\'a1\'43\'b3\'c2\'b2\'7a\u36719 \'a5\'f3\'aa\'ba\'b5\'db\'a7\'40\u26435 \'a4\'48\'a9\'ce\'a5\'f4\'a6\'f3\'aa\'ba\'a6\'5a\u32493 \'b4\'b2\'a5\'ac\'aa\'cc\'a1\'41\u23545 \'a4\'5f\'a8\'e4\'a9\'d2\'b4\'b2\'a5\'ac\'aa\'ba\'b3\'c2\'b2\'7a\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'ac\'d2\'a4\'a3\u36127 \'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\u23454 \u36136 \'a4\'57\'aa\'ba\u25285 \'ab\'4f\u36131 \'a5\'f4\'a1\'41\'a9\'fa\'a5\'dc\'a5\'e7\'a9\'ce\u38544 \'b3\'eb\'a1\'42\'b0\'d3\u19994 \'a7\'51\'a5\'ce\'a9\'ca\'a5\'e7\'a9\'ce\'af\'53\'a9\'77\'a5\'d8\'aa\'ba\'a8\'cf\'a5\'ce\'a9\'ca\'a1\'41\u36825 \'a8\'c7\'a7\'a1\'a4\'a3\'a6\'62\'ab\'4f\'bb\'d9\'a4\'a7\'a6\'43\'a1\'43\'a7\'51\'a5\'ce\'b3\'c2\'b2\'7a\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'aa\'ba\'a9\'d2\'a6\'b3\u39118 \u38505 \'a7\'a1\'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\u25285 \u36127 \'a1\'43\'b0\'b2\'a6\'70\'a9\'d2\'a8\'cf\'a5\'ce\'aa\'ba\'b3\'c2\'b2\'7a\'b5\'7b\'a7\'c7\u21457 \'a5\'cd\'af\'ca\'b3\'b4\'a9\'ca\u38382 \u39064 \'a1\'41\'a8\'cf\'a5\'ce\'aa\'cc\'bb\'dd\'a6\'db\'a6\'e6\u25285 \u36127 \'ad\'d7\'a5\'bf\'a1\'42\'a7\'ef\'a5\'bf\'a4\'ce\'a5\'b2\'ad\'6e\'aa\'ba\'aa\'41\u21153 \'a4\'e4\'a5\'58\'a1\'43\'b3\'c2\'b2\'7a\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'aa\'ba\'b5\'db\'a7\'40\u26435 \'a4\'48\'a4\'a3\u36127 \'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\u23454 \u36136 \'a4\'57\'aa\'ba\u25285 \'ab\'4f\u36131 \'a5\'f4\'a1\'41\u26080 \u35770 \'a5\'f4\'a6\'f3\'a4\'40\'af\'eb\'aa\'ba\'a1\'42\'af\'53\'ae\'ed\'aa\'ba\'a1\'42\'b0\'b8\u21457 \'aa\'ba\'a1\'42\'a6\'5d\'aa\'47\u20851 \'a8\'74\'a6\'a1\'aa\'ba\u25439 \'ae\'60\'a1\'41\'a9\'ce\'ac\'4f\'b3\'c2\'b2\'7a\u36719 \'a5\'f3\'b5\'7b\'a7\'c7\'aa\'ba\'a4\'a3\'d3\'ec\'a5\'ce\'a9\'ca\'a1\'41\'a7\'a1\u39035 \'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\u36127 \u25285 \'a1\'43
\f1 \
\
Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\
\
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \'93Software\'94), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\
\
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\
\
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\
}

View File

@ -0,0 +1,39 @@
/* No comment provided by engineer. */
"%@ (for version %@)" = "%1$@ (%2$@ 版)";
/* No comment provided by engineer. */
"Agree and Upgrade" = "同意并升级";
/* No comment provided by engineer. */
"Cancel" = "取消";
/* No comment provided by engineer. */
"Cannot activate the input method." = "无法启用输入法。";
/* No comment provided by engineer. */
"Cannot copy the file to the destination." = "无法将输入法拷贝至目的地。";
/* No comment provided by engineer. */
"Install Failed" = "安装失败";
/* No comment provided by engineer. */
"Installation Successful" = "安装成功";
/* No comment provided by engineer. */
"OK" = "好";
/* No comment provided by engineer. */
"vChewing is ready to use." = "威注音输入法安装成功";
"Finish" = "结束";
"Attention" = "请注意";
"vChewing is upgraded, but please log out or reboot for the new version to be fully functional." = "vChewing 安装完成,但建议您登出或重新开机,以便顺利使用新版。";
"Fatal Error" = "安装错误";
"Abort" = "放弃安装";
"Cannot register input source %@ at %@." = "无法从档案位置 %2$@ 安装输入法 \"%1$@\"。";
"Cannot find input source %@ after registration." = "在注册完输入法 \"%@\" 仍然无法找到输入法。";
"Warning" = "安装不完整";
"Input method may not be fully enabled. Please enable it through System Preferences > Keyboard > Input Sources." = "输入法已经安装好,但可能没有完全启用。请从“系统偏好设定” > “键盘” > “输入方式”分页加入输入法。";
"Continue" = "继续";

View File

@ -0,0 +1,209 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="494" id="495"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="安装威注音" id="56">
<menu key="submenu" title="安装威注音" systemMenu="apple" id="57">
<items>
<menuItem title="关于威注音安装程式" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="236">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="服务" id="131">
<menu key="submenu" title="服务" systemMenu="services" id="130"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="隐藏威注音安装程式" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
</menuItem>
<menuItem title="隐藏其他程式" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="368"/>
</connections>
</menuItem>
<menuItem title="显示所有程式" id="150">
<connections>
<action selector="unhideAllApplications:" target="-1" id="370"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="离开威注音安装程式" keyEquivalent="q" id="136">
<connections>
<action selector="terminate:" target="-3" id="449"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="档案" id="83">
<menu key="submenu" title="档案" id="81">
<items>
<menuItem title="关闭" keyEquivalent="w" id="73">
<connections>
<action selector="performClose:" target="-1" id="193"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="217"/>
<menuItem title="Format" id="375">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="View" id="295"/>
<menuItem title="Window" id="19"/>
<menuItem title="Help" id="490">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
<point key="canvasLocation" x="139" y="135"/>
</menu>
<window title="威注音输入法安装程式" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="371">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="335" y="390" width="640" height="360"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="372">
<rect key="frame" x="0.0" y="0.0" width="640" height="360"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<scrollView fixedFrame="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="536">
<rect key="frame" x="20" y="60" width="600" height="251"/>
<autoresizingMask key="autoresizingMask"/>
<clipView key="contentView" drawsBackground="NO" id="c84-Fy-j39">
<rect key="frame" x="1" y="1" width="598" height="249"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView editable="NO" importsGraphics="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="537">
<rect key="frame" x="0.0" y="0.0" width="583" height="249"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="583" height="249"/>
<size key="maxSize" width="600" height="10000000"/>
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
</textView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="538">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="539">
<rect key="frame" x="583" y="1" width="16" height="249"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="575">
<rect key="frame" x="460" y="12" width="166" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="同意安装" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="576">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="agreeAndInstallAction:" target="494" id="708"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="592">
<rect key="frame" x="330" y="12" width="130" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="取消" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="593">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancelAction:" target="494" id="707"/>
</connections>
</button>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="623">
<rect key="frame" x="17" y="323" width="559" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="欢迎您安装「威注音输入法」!在安装之前,请您阅读该应用的使用授权:" id="624">
<font key="font" size="13" name=".PingFangTC-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="688">
<rect key="frame" x="17" y="19" width="337" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="点选「同意安装」,表示您同意该应用的使用授权。" id="689">
<font key="font" size="11" name=".PingFangTC-Regular"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="494" id="706"/>
</connections>
<point key="canvasLocation" x="139" y="-142"/>
</window>
<customObject id="494" customClass="AppDelegate">
<connections>
<outlet property="cancelButton" destination="592" id="710"/>
<outlet property="installButton" destination="575" id="709"/>
<outlet property="progressIndicator" destination="4v9-yU-zek" id="W8M-2S-oXX"/>
<outlet property="progressSheet" destination="Pxv-O2-I1W" id="mp3-fA-PoS"/>
<outlet property="textView" destination="537" id="705"/>
<outlet property="window" destination="371" id="532"/>
</connections>
</customObject>
<customObject id="420" customClass="NSFontManager"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="Pxv-O2-I1W">
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="283" y="305" width="480" height="180"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="Qab-7x-ryB">
<rect key="frame" x="0.0" y="0.0" width="480" height="180"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="1" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="4v9-yU-zek">
<rect key="frame" x="20" y="67" width="440" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
</progressIndicator>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6mo-HZ-Dbl">
<rect key="frame" x="18" y="94" width="444" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="等待旧版完全停用,大约需要一分钟…" id="T73-Ph-Unt">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
<point key="canvasLocation" x="4" y="123.5"/>
</window>
</objects>
</document>

View File

@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "安裝小麥注音";
CFBundleName = "安裝注音";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";

View File

@ -1,15 +1,15 @@
{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf820
{\fonttbl\f0\fnil\fcharset0 LucidaGrande-Bold;\f1\fnil\fcharset0 LucidaGrande;\f2\fnil\fcharset136 PingFangTC-Regular;
{\rtf1\ansi\ansicpg950\cocoartf2636
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 HelveticaNeue-Bold;\f1\fnil\fcharset0 HelveticaNeue;\f2\fnil\fcharset136 PingFangTC-Regular;
}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\margl1440\margr1440\vieww16860\viewh12620\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\b\fs36 \cf0 McBopomofo License Agreement
\f0\b\fs36 \cf0 vChewing License Agreement
\f1\b0\fs24 \
\
Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f2 \cf0 \'b5\'db\'a7\'40\'c5\'76\'a7\'51\'a9\'d2\'a6\'b3
\f1 \'a9 2011-2021 Mengjuei Hsieh
@ -17,9 +17,11 @@ Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\
\f1 \
\
\f2 \'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a7\'51\'a4\'48\'a8\'cc\'a6\'b9
\f1 MIT
\f2 \'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'a1\'41\'b1\'4e\'a8\'e4\'b9\'ef\'a9\'f3\'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a7\'51\'b1\'c2\'c5\'76\'c4\'c0\'a5\'58\'a1\'41\'a5\'75\'ad\'6e\'a8\'cf\'a5\'ce\'aa\'cc\'bd\'ee\'bc\'69\'a5\'48\'a4\'55\'a4\'47\'b6\'b5\'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'b1\'d4\'a9\'fa\'aa\'ba\'b8\'71\'b0\'c8\'a9\'ca\'b3\'57\'a9\'77\'a1\'41\'a8\'e4\'a7\'59\'a8\'c9\'a6\'b3\'b9\'ef\'a6\'b9\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'a4\'ce\'a8\'e4\'ac\'db\'c3\'f6\'bb\'a1\'a9\'fa\'a4\'e5\'c0\'c9\'a6\'db\'a5\'d1\'a4\'a3\'a8\'fc\'ad\'ad\'a8\'ee\'a6\'61\'b6\'69\'a6\'e6\'a7\'51\'a5\'ce\'aa\'ba\'c5\'76\'a7\'51\'a1\'41\'bd\'64\'b3\'f2\'a5\'5d\'ac\'41\'a1\'75\'a8\'cf\'a5\'ce\'a1\'42\'ad\'ab\'bb\'73\'a1\'42\'ad\'d7\'a7\'ef\'a1\'42\'a6\'58\'a8\'d6\'a1\'42\'a5\'58\'aa\'a9\'a1\'42\'b4\'b2\'a5\'ac\'a1\'42\'a6\'41\'b1\'c2\'c5\'76\'a1\'42\'a4\'ce\'b3\'63\'b0\'e2\'b5\'7b\'a6\'a1\'ad\'ab\'bb\'73\'a7\'40\'ab\'7e\'a1\'76\'b5\'a5\'bd\'d1\'a6\'68\'a4\'e8\'ad\'b1\'aa\'ba\'c0\'b3\'a5\'ce\'a1\'41\'a6\'d3\'b4\'b2\'a5\'ac\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a1\'42\'a7\'f3\'a5\'69\'b1\'4e\'a4\'57\'ad\'7a\'c5\'76\'a7\'51\'b6\'c7\'bb\'bc\'a4\'a9\'a8\'e4\'ab\'e1\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'aa\'ba\'ab\'e1\'a4\'e2\'a1\'41\'ad\'d5\'ad\'59\'a8\'e4\'ab\'e1\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a5\'e7\'aa\'41\'c1\'74\'a5\'48\'a4\'55\'a4\'47\'b6\'b5\'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'aa\'ba\'b8\'71\'b0\'c8\'a9\'ca\'b3\'57\'a9\'77\'a1\'41\'ab\'68\'a8\'e4\'b9\'ef\'b5\'7b\'a6\'a1\'a5\'e7\'a8\'c9\'a6\'b3\'bb\'50\'ab\'65\'a4\'e2\'b9\'42\'a5\'ce\'bd\'64\'b3\'f2\'ac\'db\'a6\'50\'aa\'ba\'a6\'50\'a4\'40\'c5\'76\'a7\'51\'a1\'43
\f2 \'ab\'c2\'aa\'60\'ad\'b5\'bf\'e9\'a4\'4a\'aa\'6b\'ba\'fb\'c5\'40\'a4\'48\'ae\'5d\'a7\'d3\'b6\'51\'b9\'ef\'b8\'d3\'b2\'a3\'ab\'7e\'aa\'ba\'b5\'7b\'a6\'a1\'b3\'a1\'a4\'c0\'a4\'a3\'a8\'c9\'a6\'b3\'a5\'f4\'a6\'f3\'a9\'d2\'a6\'b3\'c5\'76\'a1\'43
\f1 \
\
\f2 \'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a7\'51\'a4\'48\'a8\'cc\'a6\'b9\'b3\'c2\'b2\'7a\'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'a1\'41\'b1\'4e\'a8\'e4\'b9\'ef\'a9\'f3\'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a7\'51\'b1\'c2\'c5\'76\'c4\'c0\'a5\'58\'a1\'41\'a5\'75\'ad\'6e\'a8\'cf\'a5\'ce\'aa\'cc\'bd\'ee\'bc\'69\'a5\'48\'a4\'55\'a4\'47\'b6\'b5\'b3\'c2\'b2\'7a\'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'b1\'d4\'a9\'fa\'aa\'ba\'b8\'71\'b0\'c8\'a9\'ca\'b3\'57\'a9\'77\'a1\'41\'a8\'e4\'a7\'59\'a8\'c9\'a6\'b3\'b9\'ef\'a6\'b9\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'a4\'ce\'a8\'e4\'ac\'db\'c3\'f6\'bb\'a1\'a9\'fa\'a4\'e5\'c0\'c9\'a6\'db\'a5\'d1\'a4\'a3\'a8\'fc\'ad\'ad\'a8\'ee\'a6\'61\'b6\'69\'a6\'e6\'a7\'51\'a5\'ce\'aa\'ba\'c5\'76\'a7\'51\'a1\'41\'bd\'64\'b3\'f2\'a5\'5d\'ac\'41\'a1\'75\'a8\'cf\'a5\'ce\'a1\'42\'ad\'ab\'bb\'73\'a1\'42\'ad\'d7\'a7\'ef\'a1\'42\'a6\'58\'a8\'d6\'a1\'42\'a5\'58\'aa\'a9\'a1\'42\'b4\'b2\'a5\'ac\'a1\'42\'a6\'41\'b1\'c2\'c5\'76\'a1\'42\'a4\'ce\'b3\'63\'b0\'e2\'b5\'7b\'a6\'a1\'ad\'ab\'bb\'73\'a7\'40\'ab\'7e\'a1\'76\'b5\'a5\'bd\'d1\'a6\'68\'a4\'e8\'ad\'b1\'aa\'ba\'c0\'b3\'a5\'ce\'a1\'41\'a6\'d3\'b4\'b2\'a5\'ac\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a1\'42\'a7\'f3\'a5\'69\'b1\'4e\'a4\'57\'ad\'7a\'c5\'76\'a7\'51\'b6\'c7\'bb\'bc\'a4\'a9\'a8\'e4\'ab\'e1\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'aa\'ba\'ab\'e1\'a4\'e2\'a1\'41\'ad\'d5\'ad\'59\'a8\'e4\'ab\'e1\'a6\'ac\'a8\'fc\'b5\'7b\'a6\'a1\'a4\'a7\'a4\'48\'a5\'e7\'aa\'41\'c1\'74\'a5\'48\'a4\'55\'a4\'47\'b6\'b5\'b3\'c2\'b2\'7a\'b1\'c2\'c5\'76\'b1\'f8\'b4\'da\'aa\'ba\'b8\'71\'b0\'c8\'a9\'ca\'b3\'57\'a9\'77\'a1\'41\'ab\'68\'a8\'e4\'b9\'ef\'b5\'7b\'a6\'a1\'a5\'e7\'a8\'c9\'a6\'b3\'bb\'50\'ab\'65\'a4\'e2\'b9\'42\'a5\'ce\'bd\'64\'b3\'f2\'ac\'db\'a6\'50\'aa\'ba\'a6\'50\'a4\'40\'c5\'76\'a7\'51\'a1\'43
\f1 \
\
@ -27,26 +29,14 @@ Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\
\f1 \
\
\f2 \'a6\'5d
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'b1\'c2\'c5\'76\'bc\'d2\'a6\'a1\'a4\'44\'ac\'4f\'b5\'4c\'c0\'76\'b4\'a3\'a8\'d1\'a1\'41\'ac\'4f\'a5\'48\'a6\'62\'b2\'7b\'a6\'e6\'aa\'6b\'ab\'df\'aa\'ba\'ac\'5b\'ba\'63\'a4\'55\'a5\'69\'a5\'48\'a5\'44\'b1\'69\'a6\'58\'b2\'7a\'aa\'ba\'a7\'4b\'b0\'a3\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'43
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a4\'48\'a9\'ce\'a5\'f4\'a6\'f3\'aa\'ba\'ab\'e1\'c4\'f2\'b4\'b2\'a5\'ac\'aa\'cc\'a1\'41\'b9\'ef\'a9\'f3\'a8\'e4\'a9\'d2\'b4\'b2\'a5\'ac\'aa\'ba
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'ac\'d2\'a4\'a3\'ad\'74\'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\'b9\'ea\'bd\'e8\'a4\'57\'aa\'ba\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'41\'a9\'fa\'a5\'dc\'a5\'e7\'a9\'ce\'c1\'f4\'b3\'eb\'a1\'42\'b0\'d3\'b7\'7e\'a7\'51\'a5\'ce\'a9\'ca\'a5\'e7\'a9\'ce\'af\'53\'a9\'77\'a5\'d8\'aa\'ba\'a8\'cf\'a5\'ce\'a9\'ca\'a1\'41\'b3\'6f\'a8\'c7\'a7\'a1\'a4\'a3\'a6\'62\'ab\'4f\'bb\'d9\'a4\'a7\'a6\'43\'a1\'43\'a7\'51\'a5\'ce
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'a9\'d2\'a6\'b3\'ad\'b7\'c0\'49\'a7\'a1\'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\'be\'e1\'ad\'74\'a1\'43\'b0\'b2\'a6\'70\'a9\'d2\'a8\'cf\'a5\'ce\'aa\'ba
\f1 MIT
\f2 \'b5\'7b\'a6\'a1\'b5\'6f\'a5\'cd\'af\'ca\'b3\'b4\'a9\'ca\'b0\'dd\'c3\'44\'a1\'41\'a8\'cf\'a5\'ce\'aa\'cc\'bb\'dd\'a6\'db\'a6\'e6\'be\'e1\'ad\'74\'ad\'d7\'a5\'bf\'a1\'42\'a7\'ef\'a5\'bf\'a4\'ce\'a5\'b2\'ad\'6e\'aa\'ba\'aa\'41\'b0\'c8\'a4\'e4\'a5\'58\'a1\'43
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a4\'48\'a4\'a3\'ad\'74\'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\'b9\'ea\'bd\'e8\'a4\'57\'aa\'ba\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'41\'b5\'4c\'bd\'d7\'a5\'f4\'a6\'f3\'a4\'40\'af\'eb\'aa\'ba\'a1\'42\'af\'53\'ae\'ed\'aa\'ba\'a1\'42\'b0\'b8\'b5\'6f\'aa\'ba\'a1\'42\'a6\'5d\'aa\'47\'c3\'f6\'ab\'59\'a6\'a1\'aa\'ba\'b7\'6c\'ae\'60\'a1\'41\'a9\'ce\'ac\'4f
\f1 MIT
\f2 \'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'a4\'a3\'be\'41\'a5\'ce\'a9\'ca\'a1\'41\'a7\'a1\'b6\'b7\'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\'ad\'74\'be\'e1\'a1\'43
\f2 \'a6\'5d\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'b1\'c2\'c5\'76\'bc\'d2\'a6\'a1\'a4\'44\'ac\'4f\'b5\'4c\'c0\'76\'b4\'a3\'a8\'d1\'a1\'41\'ac\'4f\'a5\'48\'a6\'62\'b2\'7b\'a6\'e6\'aa\'6b\'ab\'df\'aa\'ba\'ac\'5b\'ba\'63\'a4\'55\'a5\'69\'a5\'48\'a5\'44\'b1\'69\'a6\'58\'b2\'7a\'aa\'ba\'a7\'4b\'b0\'a3\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'43\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a4\'48\'a9\'ce\'a5\'f4\'a6\'f3\'aa\'ba\'ab\'e1\'c4\'f2\'b4\'b2\'a5\'ac\'aa\'cc\'a1\'41\'b9\'ef\'a9\'f3\'a8\'e4\'a9\'d2\'b4\'b2\'a5\'ac\'aa\'ba\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'ac\'d2\'a4\'a3\'ad\'74\'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\'b9\'ea\'bd\'e8\'a4\'57\'aa\'ba\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'41\'a9\'fa\'a5\'dc\'a5\'e7\'a9\'ce\'c1\'f4\'b3\'eb\'a1\'42\'b0\'d3\'b7\'7e\'a7\'51\'a5\'ce\'a9\'ca\'a5\'e7\'a9\'ce\'af\'53\'a9\'77\'a5\'d8\'aa\'ba\'a8\'cf\'a5\'ce\'a9\'ca\'a1\'41\'b3\'6f\'a8\'c7\'a7\'a1\'a4\'a3\'a6\'62\'ab\'4f\'bb\'d9\'a4\'a7\'a6\'43\'a1\'43\'a7\'51\'a5\'ce\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'a9\'d2\'a6\'b3\'ad\'b7\'c0\'49\'a7\'a1\'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\'be\'e1\'ad\'74\'a1\'43\'b0\'b2\'a6\'70\'a9\'d2\'a8\'cf\'a5\'ce\'aa\'ba\'b3\'c2\'b2\'7a\'b5\'7b\'a6\'a1\'b5\'6f\'a5\'cd\'af\'ca\'b3\'b4\'a9\'ca\'b0\'dd\'c3\'44\'a1\'41\'a8\'cf\'a5\'ce\'aa\'cc\'bb\'dd\'a6\'db\'a6\'e6\'be\'e1\'ad\'74\'ad\'d7\'a5\'bf\'a1\'42\'a7\'ef\'a5\'bf\'a4\'ce\'a5\'b2\'ad\'6e\'aa\'ba\'aa\'41\'b0\'c8\'a4\'e4\'a5\'58\'a1\'43\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'b5\'db\'a7\'40\'c5\'76\'a4\'48\'a4\'a3\'ad\'74\'a5\'f4\'a6\'f3\'a7\'ce\'a6\'a1\'a4\'57\'b9\'ea\'bd\'e8\'a4\'57\'aa\'ba\'be\'e1\'ab\'4f\'b3\'64\'a5\'f4\'a1\'41\'b5\'4c\'bd\'d7\'a5\'f4\'a6\'f3\'a4\'40\'af\'eb\'aa\'ba\'a1\'42\'af\'53\'ae\'ed\'aa\'ba\'a1\'42\'b0\'b8\'b5\'6f\'aa\'ba\'a1\'42\'a6\'5d\'aa\'47\'c3\'f6\'ab\'59\'a6\'a1\'aa\'ba\'b7\'6c\'ae\'60\'a1\'41\'a9\'ce\'ac\'4f\'b3\'c2\'b2\'7a\'b3\'6e\'c5\'e9\'b5\'7b\'a6\'a1\'aa\'ba\'a4\'a3\'be\'41\'a5\'ce\'a9\'ca\'a1\'41\'a7\'a1\'b6\'b7\'a5\'d1\'a8\'cf\'a5\'ce\'aa\'cc\'a6\'db\'a6\'e6\'ad\'74\'be\'e1\'a1\'43
\f1 \
\
Copyright \'a9 2011-2021 Mengjuei Hsieh et al.\
\
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \'93Software\'94), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\
\
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\
\
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\
}
}

View File

@ -23,11 +23,11 @@
"OK" = "好";
/* No comment provided by engineer. */
"McBopomofo is ready to use." = "小麥注音輸入法安裝成功";
"vChewing is ready to use." = "威注音輸入法安裝成功";
"Finish" = "結束";
"Attention" = "請注意";
"McBopomofo is upgraded, but please log out or reboot for the new version to be fully functional." = "McBopomofo 安裝完成,但建議您登出或重新開機,以便順利使用新版。";
"vChewing is upgraded, but please log out or reboot for the new version to be fully functional." = "vChewing 安裝完成,但建議您登出或重新開機,以便順利使用新版。";
"Fatal Error" = "安裝錯誤";
"Abort" = "放棄安裝";

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@ -15,10 +15,10 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="安裝小麥注音" id="56">
<menu key="submenu" title="安裝小麥注音" systemMenu="apple" id="57">
<menuItem title="安裝注音" id="56">
<menu key="submenu" title="安裝注音" systemMenu="apple" id="57">
<items>
<menuItem title="關於小麥注音安裝程式" id="58">
<menuItem title="關於注音安裝程式" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
@ -33,7 +33,7 @@
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="隱藏小麥注音安裝程式" keyEquivalent="h" id="134">
<menuItem title="隱藏注音安裝程式" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
@ -52,7 +52,7 @@
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="離開小麥注音安裝程式" keyEquivalent="q" id="136">
<menuItem title="離開注音安裝程式" keyEquivalent="q" id="136">
<connections>
<action selector="terminate:" target="-3" id="449"/>
</connections>
@ -81,22 +81,23 @@
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
<point key="canvasLocation" x="139" y="136"/>
</menu>
<window title="小麥注音輸入法安裝程式" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="371">
<window title="注音輸入法安裝程式" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="371">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="335" y="390" width="640" height="360"/>
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="372">
<rect key="frame" x="0.0" y="0.0" width="640" height="360"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="536">
<scrollView fixedFrame="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="536">
<rect key="frame" x="20" y="60" width="600" height="251"/>
<autoresizingMask key="autoresizingMask"/>
<clipView key="contentView" drawsBackground="NO" id="c84-Fy-j39">
<rect key="frame" x="1" y="1" width="583" height="249"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="1" y="1" width="598" height="249"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView editable="NO" importsGraphics="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="537">
<rect key="frame" x="0.0" y="0.0" width="583" height="249"/>
@ -109,16 +110,16 @@
</textView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="538">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="538">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="539">
<rect key="frame" x="584" y="1" width="15" height="249"/>
<scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="539">
<rect key="frame" x="583" y="1" width="16" height="249"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<button verticalHuggingPriority="750" imageHugsTitle="YES" id="575">
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="575">
<rect key="frame" x="460" y="12" width="166" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="同意安裝" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="576">
@ -129,7 +130,7 @@
<action selector="agreeAndInstallAction:" target="494" id="708"/>
</connections>
</button>
<button verticalHuggingPriority="750" imageHugsTitle="YES" id="592">
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="592">
<rect key="frame" x="330" y="12" width="130" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="取消" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="593">
@ -143,16 +144,16 @@ Gw
<action selector="cancelAction:" target="494" id="707"/>
</connections>
</button>
<textField verticalHuggingPriority="750" id="623">
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="623">
<rect key="frame" x="17" y="323" width="559" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="歡迎您安裝「小麥注音輸入法」!在安裝之前,請您閱讀本軟體的使用授權:" id="624">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="歡迎您安裝「注音輸入法」!在安裝之前,請您閱讀本軟體的使用授權:" id="624">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" id="688">
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="688">
<rect key="frame" x="17" y="19" width="337" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="點選「同意安裝」,表示您同意本軟體的使用授權。" id="689">
@ -166,6 +167,7 @@ Gw
<connections>
<outlet property="delegate" destination="494" id="706"/>
</connections>
<point key="canvasLocation" x="139" y="-141"/>
</window>
<customObject id="494" customClass="AppDelegate">
<connections>
@ -181,20 +183,20 @@ Gw
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="Pxv-O2-I1W">
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="283" y="305" width="480" height="180"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="Qab-7x-ryB">
<rect key="frame" x="0.0" y="0.0" width="480" height="180"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<progressIndicator wantsLayer="YES" maxValue="1" style="bar" id="4v9-yU-zek">
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="1" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="4v9-yU-zek">
<rect key="frame" x="20" y="67" width="440" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
</progressIndicator>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="6mo-HZ-Dbl">
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6mo-HZ-Dbl">
<rect key="frame" x="18" y="94" width="444" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="等待舊版完全停用,大約需要一分鐘…" id="T73-Ph-Unt">
<font key="font" size="13" name=".PingFangTC-Regular"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>

View File

@ -1,7 +0,0 @@
//
// Prefix header for all source files of the 'McBopomofo' target in the 'McBopomofo' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

View File

@ -1,7 +1,7 @@
import Foundation
import OpenCC
// Since SwiftyOpenCC only provide Swift classes, we create an NSObject subclass
// Since SwiftyLibreCC only provide Swift classes, we create an NSObject subclass
// in Swift in order to bridge the Swift classes into our Objective-C++ project.
class OpenCCBridge : NSObject {
private static let shared = OpenCCBridge()

View File

@ -1,7 +1,7 @@
//
// PreferencesWindowController.h
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)

View File

@ -1,7 +1,7 @@
//
// PreferencesWindowController.m
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)

View File

@ -140,7 +140,7 @@
│   ├── Bopomofo@2x.tiff
│   ├── BopomofoTextMenu.tiff
│   ├── BopomofoTextMenu@2x.tiff
│   ├── McBopomofo.iconset
│   ├── vChewing.iconset
│   │   ├── icon_128x128.png
│   │   ├── icon_128x128@2x.png
│   │   ├── icon_16x16.png
@ -169,13 +169,18 @@
│   │   ├── Localizable.strings
│   │   └── MainMenu.xib
│   ├── main.m
│   ├── zh-Hans.lproj
│   │   ├── InfoPlist.strings
│   │   ├── License.rtf
│   │   ├── Localizable.strings
│   │   └── MainMenu.xib
│   └── zh-Hant.lproj
│   ├── InfoPlist.strings
│   ├── License.rtf
│   ├── Localizable.strings
│   └── MainMenu.xib
├── McBopomofo-Info.plist
├── McBopomofo-Prefix.pch
├── vChewing-Info.plist
├── vChewing-Prefix.pch
├── OVInputSourceHelper.h
├── OVInputSourceHelper.m
├── PreferencesWindowController.h
@ -192,6 +197,12 @@
│   ├── MainMenu.xib
│   ├── UpdateNotificationController.xib
│   └── preferences.xib
├── zh-Hans.lproj
│   ├── InfoPlist.strings
│   ├── Localizable.strings
│   ├── MainMenu.xib
│   ├── UpdateNotificationController.xib
│   └── preferences.xib
├── main.m
└── zh-Hant.lproj
├── InfoPlist.strings

View File

@ -1,7 +1,7 @@
//
// UpdateNotificationController.h
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)

View File

@ -1,7 +1,7 @@
//
// UpdateNotificationController.m
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)

View File

@ -1,7 +1,7 @@
//
// UserOverrideModel.cpp
//
// Copyright (c) 2017 The McBopomofo Project.
// Copyright (c) 2017 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -31,7 +31,7 @@
#include <cmath>
#include <sstream>
using namespace McBopomofo;
using namespace vChewing;
// About 20 generations.
static const double DecayThreshould = 1.0 / 1048576.0;

View File

@ -1,7 +1,7 @@
//
// UserOverrideModel.h
//
// Copyright (c) 2017 The McBopomofo Project.
// Copyright (c) 2017 The vChewing Project.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
@ -34,7 +34,7 @@
#include "Gramambular.h"
namespace McBopomofo {
namespace vChewing {
using namespace Formosa::Gramambular;
@ -75,7 +75,7 @@ private:
std::map<std::string, std::list<KeyObservationPair>::iterator> m_lruMap;
};
}; // namespace McBopomofo
}; // namespace vChewing
#endif

View File

@ -1,6 +1,6 @@
CFBundleName = "McBopomofo";
CFBundleDisplayName = "McBopomofo";
CFBundleName = "vChewing";
CFBundleDisplayName = "vChewing";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";
"org.openvanilla.inputmethod.McBopomofo.Bopomofo" = "Bopomofo";
"org.openvanilla.inputmethod.McBopomofo.PlainBopomofo" = "Plain Bopomofo";
"org.openvanilla.inputmethod.vChewing.Bopomofo" = "vChewing";
"org.openvanilla.inputmethod.vChewing.PlainBopomofo" = "Plain vChewing";

View File

@ -1,5 +1,5 @@
/* No comment provided by engineer. */
"About McBopomofo…" = "About McBopomofo…";
"About vChewing…" = "About vChewing…";
/* No comment provided by engineer. */
"Clear Learning Dictionary (%ju Items)" = "Clear Learning Dictionary (%ju Items)";
@ -11,7 +11,7 @@
"Enable Selection Learning" = "Enable Selection Learning";
/* No comment provided by engineer. */
"McBopomofo Preferences" = "McBopomofo Preferences";
"vChewing Preferences" = "vChewing Preferences";
/* No comment provided by engineer. */
"Check Later" = "Check Later";
@ -23,7 +23,7 @@
"Check for Update Completed" = "Check for Update Completed";
/* No comment provided by engineer. */
"You are already using the latest version of McBopomofo." = "You are already using the latest version of McBopomofo.";
"You are already using the latest version of vChewing." = "You are already using the latest version of vChewing.";
/* No comment provided by engineer. */
"Update Check Failed" = "Update Check Failed";
@ -47,6 +47,6 @@
"Visit Website" = "Visit Website";
/* No comment provided by engineer. */
"You're currently using McBopomofo %@ (%@), a new version %@ (%@) is now available. Do you want to visit McBopomofo's website to download the version?%@" = "You're currently using McBopomofo %@ (%@), a new version %@ (%@) is now available. Do you want to visit McBopomofo's website to download the version?%@";
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@";
"Chinese Conversion" = "Convert to Simplified Chinese";

View File

@ -1,7 +1,7 @@
//
// main.m
//
// Copyright (c) 2011 The McBopomofo Project.
// Copyright (c) 2021 The vChewing Project.
//
// Contributors:
// Mengjuei Hsieh (@mjhsieh)
@ -35,7 +35,7 @@
#import <Cocoa/Cocoa.h>
#import "OVInputSourceHelper.h"
static NSString *const kConnectionName = @"McBopomofo_1_Connection";
static NSString *const kConnectionName = @"vChewing_1_Connection";
int main(int argc, char *argv[])
{

View File

@ -24,7 +24,7 @@
<dict>
<key>tsInputModeListKey</key>
<dict>
<key>org.openvanilla.inputmethod.McBopomofo.Bopomofo</key>
<key>org.openvanilla.inputmethod.vChewing.Bopomofo</key>
<dict>
<key>TISDoubleSpaceSubstitution</key>
<string>。</string>
@ -32,6 +32,7 @@
<string>Bopomofo.tiff</string>
<key>tsInputModeCharacterRepertoireKey</key>
<array>
<string>Hans</string>
<string>Hant</string>
<string>Han</string>
</array>
@ -50,7 +51,7 @@
<key>tsInputModeScriptKey</key>
<string>smTradChinese</string>
<key>TISIntendedLanguage</key>
<string>zh-Hant</string>
<string>zh-Hans</string>
<key>tsInputModeCharacterRepertoireKey</key>
<array>
<string>Hant</string>
@ -59,7 +60,7 @@
<key>tsInputModeKeyEquivalentModifiersKey</key>
<integer>4608</integer>
</dict>
<key>org.openvanilla.inputmethod.McBopomofo.PlainBopomofo</key>
<key>org.openvanilla.inputmethod.vChewing.PlainBopomofo</key>
<dict>
<key>TISDoubleSpaceSubstitution</key>
<string>。</string>
@ -67,6 +68,7 @@
<string>PlainBopomofo.tiff</string>
<key>tsInputModeCharacterRepertoireKey</key>
<array>
<string>Hans</string>
<string>Hant</string>
<string>Han</string>
</array>
@ -85,7 +87,7 @@
<key>tsInputModeScriptKey</key>
<string>smTradChinese</string>
<key>TISIntendedLanguage</key>
<string>zh-Hant</string>
<string>zh-Hans</string>
<key>tsInputModeCharacterRepertoireKey</key>
<array>
<string>Hant</string>
@ -97,16 +99,16 @@
</dict>
<key>tsVisibleInputModeOrderedArrayKey</key>
<array>
<string>org.openvanilla.inputmethod.McBopomofo.Bopomofo</string>
<string>org.openvanilla.inputmethod.McBopomofo.PlainBopomofo</string>
<string>org.openvanilla.inputmethod.vChewing.Bopomofo</string>
<string>org.openvanilla.inputmethod.vChewing.PlainBopomofo</string>
</array>
</dict>
<key>InputMethodConnectionName</key>
<string>McBopomofo_1_Connection</string>
<string>vChewing_1_Connection</string>
<key>InputMethodServerControllerClass</key>
<string>McBopomofoInputMethodController</string>
<string>vChewingInputMethodController</string>
<key>InputMethodServerDelegateClass</key>
<string>McBopomofoInputMethodController</string>
<string>vChewingInputMethodController</string>
<key>InputMethodServerPreferencesWindowControllerClass</key>
<string>PreferencesWindowController</string>
<key>LSApplicationCategoryType</key>
@ -126,19 +128,20 @@
<key>TICapsLockLanguageSwitchCapable</key>
<true/>
<key>TISInputSourceID</key>
<string>org.openvanilla.inputmethod.McBopomofo</string>
<string>org.openvanilla.inputmethod.vChewing</string>
<key>TISIntendedLanguage</key>
<string>zh-Hant</string>
<string>zh-Hans</string>
<key>TISParticipatesInTouchBar</key>
<false/>
<key>UpdateInfoEndpoint</key>
<string>https://mcbopomofo.openvanilla.org/updates/Info.plist</string>
<string>https://vchewing.openvanilla.org/updates/Info.plist</string>
<key>UpdateInfoSite</key>
<string>https://mcbopomofo.openvanilla.org/</string>
<string>https://vchewing.openvanilla.org/</string>
<key>tsInputMethodCharacterRepertoireKey</key>
<array>
<string>Hant</string>
<string>Hans</string>
<string>Hant</string>
<string>Han</string>
</array>
<key>tsInputMethodIconFileKey</key>
<string>Bopomofo.tiff</string>

View File

@ -0,0 +1,7 @@
//
// Prefix header for all source files of the 'vChewing' target in the 'vChewing' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

View File

@ -0,0 +1,5 @@
CFBundleName = "威注音";
CFBundleDisplayName = "威注音";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";
"org.openvanilla.inputmethod.vChewing.Bopomofo" = "威注音";
"org.openvanilla.inputmethod.vChewing.PlainBopomofo" = "ㄅ半全注";

View File

@ -0,0 +1,52 @@
/* No comment provided by engineer. */
"About vChewing…" = "关于威注音…";
/* No comment provided by engineer. */
"Clear Learning Dictionary (%ju Items)" = "清除学习辞典 (%ju 个项目)";
/* No comment provided by engineer. */
"Dump Learning Data to Console" = "将学习辞典内容输出到 Console 上";
/* No comment provided by engineer. */
"Enable Selection Learning" = "使用自动学习功能";
/* No comment provided by engineer. */
"vChewing Preferences" = "威注音偏好设定";
/* No comment provided by engineer. */
"Check Later" = "晚点再通知我";
/* No comment provided by engineer. */
"Check for Updates…" = "检查是否有新版…";
/* No comment provided by engineer. */
"Check for Update Completed" = "新版检查完毕";
/* No comment provided by engineer. */
"You are already using the latest version of vChewing." = "目前使用的已经是最新版本。";
/* No comment provided by engineer. */
"Update Check Failed" = "无法检查新版";
/* No comment provided by engineer. */
"There may be no internet connection or the server failed to respond.\n\nError message: %@" = "网路连线失败,或是伺服器没有回应。\n\n错误说明%@";
/* No comment provided by engineer. */
"OK" = "好";
/* No comment provided by engineer. */
"Dismiss" = "关闭本视窗";
/* No comment provided by engineer. */
"New Version Available" = "有新版可下载";
/* No comment provided by engineer. */
"Not Now" = "以后再说";
/* No comment provided by engineer. */
"Visit Website" = "前往网站";
/* No comment provided by engineer. */
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音版本是 %1$@ (%2$@),网路上有更新版本 %3$@ (%4$@) 可供下载。是否要前往威注音网站下载新版来安装?%5$@";
"Chinese Conversion" = "强制简体字输出";

View File

@ -0,0 +1,295 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="494" id="495"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="vChewing" id="56">
<menu key="submenu" title="vChewing" systemMenu="apple" id="57">
<items>
<menuItem title="About vChewing" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="236">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Services" id="131">
<menu key="submenu" title="Services" systemMenu="services" id="130"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide vChewing" keyEquivalent="h" id="134">
<connections>
<action selector="performClose:" target="-1" id="536"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="368"/>
</connections>
</menuItem>
<menuItem title="Show All" id="150">
<connections>
<action selector="unhideAllApplications:" target="-1" id="370"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="83">
<menu key="submenu" title="File" id="81">
<items>
<menuItem title="Close" keyEquivalent="w" id="73">
<connections>
<action selector="performClose:" target="-1" id="535"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="217">
<menu key="submenu" title="Edit" id="205">
<items>
<menuItem title="Undo" keyEquivalent="z" id="207">
<connections>
<action selector="undo:" target="-1" id="223"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="215">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="redo:" target="-1" id="231"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="206">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Cut" keyEquivalent="x" id="199">
<connections>
<action selector="cut:" target="-1" id="228"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="197">
<connections>
<action selector="copy:" target="-1" id="224"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="203">
<connections>
<action selector="paste:" target="-1" id="226"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="485">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="486"/>
</connections>
</menuItem>
<menuItem title="Delete" id="202">
<connections>
<action selector="delete:" target="-1" id="235"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="198">
<connections>
<action selector="selectAll:" target="-1" id="232"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="214">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Find" id="218">
<menu key="submenu" title="Find" id="220">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="209">
<connections>
<action selector="performFindPanelAction:" target="-1" id="241"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="208">
<connections>
<action selector="performFindPanelAction:" target="-1" id="487"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="213">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="488"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="221">
<connections>
<action selector="performFindPanelAction:" target="-1" id="489"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="210">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="245"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="216">
<menu key="submenu" title="Spelling and Grammar" id="200">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="204">
<connections>
<action selector="showGuessPanel:" target="-1" id="230"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="201">
<connections>
<action selector="checkSpelling:" target="-1" id="225"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="453"/>
<menuItem title="Check Spelling While Typing" id="219">
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="222"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="346">
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="347"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="454">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="456"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="348">
<menu key="submenu" title="Substitutions" id="349">
<items>
<menuItem title="Show Substitutions" id="457">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="458"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="459"/>
<menuItem title="Smart Copy/Paste" tag="1" keyEquivalent="f" id="350">
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="355"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" tag="2" keyEquivalent="g" id="351">
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="356"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="460">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="461"/>
</connections>
</menuItem>
<menuItem title="Smart Links" tag="3" keyEquivalent="G" id="354">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="357"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="462">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="463"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="450">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="451">
<items>
<menuItem title="Make Upper Case" id="452">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="464"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="465">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="468"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="466">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="467"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="211">
<menu key="submenu" title="Speech" id="212">
<items>
<menuItem title="Start Speaking" id="196">
<connections>
<action selector="startSpeaking:" target="-1" id="233"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="195">
<connections>
<action selector="stopSpeaking:" target="-1" id="227"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="19">
<menu key="submenu" title="Window" systemMenu="window" id="24">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="23">
<connections>
<action selector="performMiniaturize:" target="-1" id="37"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="239">
<connections>
<action selector="performZoom:" target="-1" id="240"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="92">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Bring All to Front" id="5">
<connections>
<action selector="arrangeInFront:" target="-1" id="39"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<customObject id="494" customClass="AppDelegate"/>
<customObject id="420" customClass="NSFontManager"/>
</objects>
</document>

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="PreferencesWindowController">
<connections>
<outlet property="basisKeyboardLayoutButton" destination="112" id="123"/>
<outlet property="fontSizePopUpButton" destination="90" id="108"/>
<outlet property="selectionKeyComboBox" destination="bQw-gl-dUP" id="lbm-r5-0A0"/>
<outlet property="window" destination="1" id="30"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="注音偏好设定" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" animationBehavior="default" id="1" userLabel="Window - Preferences">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="489" y="334" width="406" height="353"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="406" height="353"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="179" y="310" width="125" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="4">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="5">
<items>
<menuItem title="标准" id="6">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="倚天" tag="1" id="7"/>
<menuItem title="许氏键盘" tag="2" id="8"/>
<menuItem title="倚天26键" tag="3" id="9"/>
<menuItem title="IBM" tag="5" id="125"/>
<menuItem title="汉语拼音" tag="4" id="10"/>
</items>
</menu>
<connections>
<binding destination="32" name="selectedTag" keyPath="values.KeyboardLayout" id="103"/>
</connections>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="11">
<rect key="frame" x="80" y="317" width="97" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="注音键盘配置:" id="12">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="112">
<rect key="frame" x="179" y="270" width="149" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="115">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="116"/>
</popUpButtonCell>
<connections>
<action selector="updateBasisKeyboardLayoutAction:" target="-2" id="124"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="113">
<rect key="frame" x="66" y="277" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="英数字键盘配置:" id="114">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="13">
<rect key="frame" x="10" y="174" width="164" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="选字时,候选词起算点在:" id="14">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23">
<rect key="frame" x="63" y="128" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="候选词呈现方式:" id="24">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="28">
<rect key="frame" x="63" y="81" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="选字窗文字大小:" id="29">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<matrix verticalHuggingPriority="750" fixedFrame="YES" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="19">
<rect key="frame" x="179" y="106" width="207" height="38"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="207" height="18"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="20">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<cells>
<column>
<buttonCell type="radio" title="垂直列表" imagePosition="left" alignment="left" state="on" inset="2" id="22">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="水平列表" imagePosition="left" alignment="left" tag="1" inset="2" id="21">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</column>
</cells>
<connections>
<binding destination="32" name="selectedTag" keyPath="values.UseHorizontalCandidateList" id="105"/>
</connections>
</matrix>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="90">
<rect key="frame" x="176" y="74" width="86" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="push" title="18" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="18" imageScaling="proportionallyDown" inset="2" selectedItem="96" id="91">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="92">
<items>
<menuItem title="12" tag="12" id="93"/>
<menuItem title="14" tag="14" id="94"/>
<menuItem title="16" tag="16" id="95"/>
<menuItem title="18" state="on" tag="18" id="96"/>
<menuItem title="24" tag="24" id="98"/>
<menuItem title="32" tag="32" id="99"/>
<menuItem title="64" tag="64" id="100"/>
<menuItem title="96" tag="96" id="101"/>
</items>
</menu>
</popUpButtonCell>
<connections>
<binding destination="32" name="selectedTag" keyPath="values.CandidateListTextSize" id="107"/>
</connections>
</popUpButton>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="109">
<rect key="frame" x="180" y="212" width="148" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="使用空白键选字" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="110">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.ChooseCandidateUsingSpaceKey" id="111"/>
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ooW-fi-BVN">
<rect key="frame" x="180" y="19" width="148" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="定期检查是否有新版" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="rcF-Ys-CM3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="32" name="value" keyPath="values.CheckUpdateAutomatically" id="drP-1F-7NA"/>
</connections>
</button>
<comboBox verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bQw-gl-dUP">
<rect key="frame" x="179" y="239" width="209" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="mNx-Jy-SJB">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<objectValues>
<string>Item 1</string>
<string>Item 2</string>
<string>Item 3</string>
</objectValues>
</comboBoxCell>
<connections>
<action selector="changeSelectionKeyAction:" target="-2" id="B0y-Ig-139"/>
</connections>
</comboBox>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8KJ-n8-0Wd">
<rect key="frame" x="119" y="244" width="58" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="选字键:" id="eBT-Tv-vED">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<matrix verticalHuggingPriority="750" fixedFrame="YES" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
<rect key="frame" x="179" y="152" width="207" height="38"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="207" height="18"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="18">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<cells>
<column>
<buttonCell type="radio" title="游标前面(像汉音输入法)" imagePosition="left" alignment="left" state="on" inset="2" id="16">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="游标后面(像微软新注音)" imagePosition="left" alignment="left" tag="1" inset="2" id="17">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</column>
</cells>
<connections>
<binding destination="32" name="selectedTag" keyPath="values.SelectPhraseAfterCursorAsCandidate" id="104"/>
</connections>
</matrix>
</subviews>
</view>
<point key="canvasLocation" x="150" y="190.5"/>
</window>
<userDefaultsController representsSharedInstance="YES" id="32"/>
</objects>
</document>

View File

@ -1,5 +1,5 @@
CFBundleName = "小麥注音";
CFBundleDisplayName = "小麥注音";
CFBundleName = "注音";
CFBundleDisplayName = "注音";
NSHumanReadableCopyright = "Copyright © 2011-2021 Mengjuei Hsieh et al.\nAll Rights Reserved.";
"org.openvanilla.inputmethod.McBopomofo.Bopomofo" = "小麥注音";
"org.openvanilla.inputmethod.McBopomofo.PlainBopomofo" = "傳統注音";
"org.openvanilla.inputmethod.vChewing.Bopomofo" = "威注音";
"org.openvanilla.inputmethod.vChewing.PlainBopomofo" = "ㄅ半全注";

View File

@ -1,5 +1,5 @@
/* No comment provided by engineer. */
"About McBopomofo…" = "關於小麥注音…";
"About vChewing…" = "關於威注音…";
/* No comment provided by engineer. */
"Clear Learning Dictionary (%ju Items)" = "清除學習辭典 (%ju 個項目)";
@ -11,7 +11,7 @@
"Enable Selection Learning" = "使用自動學習功能";
/* No comment provided by engineer. */
"McBopomofo Preferences" = "小麥注音偏好設定";
"vChewing Preferences" = "威注音偏好設定";
/* No comment provided by engineer. */
"Check Later" = "晚點再通知我";
@ -23,7 +23,7 @@
"Check for Update Completed" = "新版檢查完畢";
/* No comment provided by engineer. */
"You are already using the latest version of McBopomofo." = "目前使用的已經是最新版本。";
"You are already using the latest version of vChewing." = "目前使用的已經是最新版本。";
/* No comment provided by engineer. */
"Update Check Failed" = "無法檢查新版";
@ -47,6 +47,6 @@
"Visit Website" = "前往網站";
/* No comment provided by engineer. */
"You're currently using McBopomofo %@ (%@), a new version %@ (%@) is now available. Do you want to visit McBopomofo's website to download the version?%@" = "目前使用的小麥注音版本是 %1$@ (%2$@),網路上有更新版本 %3$@ (%4$@) 可供下載。是否要前往小麥注音網站下載新版來安裝?%5$@";
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音版本是 %1$@ (%2$@),網路上有更新版本 %3$@ (%4$@) 可供下載。是否要前往威注音網站下載新版來安裝?%5$@";
"Chinese Conversion" = "輸出簡體中文";

View File

@ -14,10 +14,10 @@
<customObject id="-3" userLabel="Application"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="McBopomofo" id="56">
<menu key="submenu" title="McBopomofo" systemMenu="apple" id="57">
<menuItem title="vChewing" id="56">
<menu key="submenu" title="vChewing" systemMenu="apple" id="57">
<items>
<menuItem title="About McBopomofo" id="58">
<menuItem title="About vChewing" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
@ -32,7 +32,7 @@
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide McBopomofo" keyEquivalent="h" id="134">
<menuItem title="Hide vChewing" keyEquivalent="h" id="134">
<connections>
<action selector="performClose:" target="-1" id="536"/>
</connections>

View File

@ -20,7 +20,7 @@
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="489" y="334" width="406" height="353"/>
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
<rect key="screenRect" x="0.0" y="0.0" width="1504" height="821"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="406" height="353"/>
<autoresizingMask key="autoresizingMask"/>
@ -49,7 +49,7 @@
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="11">
<rect key="frame" x="82" y="316" width="95" height="17"/>
<rect key="frame" x="80" y="317" width="97" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="注音鍵盤配置:" id="12">
<font key="font" metaFont="system"/>
@ -70,7 +70,7 @@
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="113">
<rect key="frame" x="69" y="276" width="108" height="17"/>
<rect key="frame" x="66" y="277" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="英數字鍵盤配置:" id="114">
<font key="font" metaFont="system"/>
@ -79,7 +79,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="13">
<rect key="frame" x="14" y="173" width="160" height="17"/>
<rect key="frame" x="10" y="174" width="164" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="選字時,候選詞起算點在:" id="14">
<font key="font" metaFont="system"/>
@ -88,7 +88,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="23">
<rect key="frame" x="36" y="127" width="138" height="17"/>
<rect key="frame" x="63" y="128" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="候選詞呈現方式:" id="24">
<font key="font" metaFont="system"/>
@ -97,7 +97,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="28">
<rect key="frame" x="66" y="80" width="108" height="17"/>
<rect key="frame" x="63" y="81" width="111" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="選字窗文字大小:" id="29">
<font key="font" metaFont="system"/>
@ -106,10 +106,10 @@
</textFieldCell>
</textField>
<matrix verticalHuggingPriority="750" fixedFrame="YES" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
<rect key="frame" x="179" y="152" width="184" height="38"/>
<rect key="frame" x="179" y="152" width="206" height="38"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="184" height="18"/>
<size key="cellSize" width="206" height="18"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="18">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -181,7 +181,7 @@
</connections>
</popUpButton>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="109">
<rect key="frame" x="180" y="212" width="113" height="18"/>
<rect key="frame" x="180" y="212" width="148" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="check" title="使用空白鍵選字" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="110">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -220,7 +220,7 @@
</connections>
</comboBox>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8KJ-n8-0Wd">
<rect key="frame" x="69" y="243" width="108" height="17"/>
<rect key="frame" x="119" y="244" width="58" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="選字鍵:" id="eBT-Tv-vED">
<font key="font" metaFont="system"/>

View File

@ -41,16 +41,14 @@
6ACA41FC15FC1D9000935EF6 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6ACA41EE15FC1D9000935EF6 /* Localizable.strings */; };
6ACA41FD15FC1D9000935EF6 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6ACA41F015FC1D9000935EF6 /* MainMenu.xib */; };
6ACA41FF15FC1D9000935EF6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ACA41F415FC1D9000935EF6 /* main.m */; };
6ACA420215FC1E5200935EF6 /* McBopomofo.app in Resources */ = {isa = PBXBuildFile; fileRef = 6A0D4EA215FC0D2D00ABF4B3 /* McBopomofo.app */; };
6ACA420215FC1E5200935EF6 /* vChewing.app in Resources */ = {isa = PBXBuildFile; fileRef = 6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */; };
6AD7CBC815FE555000691B5B /* data-plain-bpmf.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6AD7CBC715FE555000691B5B /* data-plain-bpmf.txt */; };
6AE210B215FC63CC003659FE /* PlainBopomofo.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 6AE210B015FC63CC003659FE /* PlainBopomofo.tiff */; };
6AE210B315FC63CC003659FE /* PlainBopomofo@2x.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 6AE210B115FC63CC003659FE /* PlainBopomofo@2x.tiff */; };
6AE30A491F7F40B7008735BD /* UserOverrideModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6AE30A471F7F40B7008735BD /* UserOverrideModel.cpp */; };
6AFF97F2253B299E007F1C49 /* OVNonModalAlertWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF97F0253B299E007F1C49 /* OVNonModalAlertWindowController.xib */; };
6AFF97F3253B299E007F1C49 /* OVNonModalAlertWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AFF97F1253B299E007F1C49 /* OVNonModalAlertWindowController.m */; };
D427A9C125ED28CC005D43E0 /* OpenCCBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D427A9C025ED28CC005D43E0 /* OpenCCBridge.swift */; };
D48550A325EBE689006A204C /* OpenCC in Frameworks */ = {isa = PBXBuildFile; productRef = D48550A225EBE689006A204C /* OpenCC */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -66,14 +64,22 @@
containerPortal = 6A0D4E9415FC0CFA00ABF4B3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6A0D4EA115FC0D2D00ABF4B3;
remoteInfo = McBopomofo;
remoteInfo = vChewing;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
5B9781D32763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
5B9781D42763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hans"; path = "zh-Hans.lproj/License.rtf"; sourceTree = "<group>"; };
5B9781D52763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
5B9781D62763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.xib"; sourceTree = "<group>"; };
5B9781D72763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Source/zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
5B9781D82763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Source/zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
5B9781D92763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.xib"; sourceTree = "<group>"; };
5B9781DA2763850700897999 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "zh-Hans"; path = "Source/zh-Hans.lproj/preferences.xib"; sourceTree = "<group>"; };
6A0421A615FEF3F50061ED63 /* FastLM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastLM.cpp; sourceTree = "<group>"; };
6A0421A715FEF3F50061ED63 /* FastLM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastLM.h; sourceTree = "<group>"; };
6A0D4EA215FC0D2D00ABF4B3 /* McBopomofo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = McBopomofo.app; sourceTree = BUILT_PRODUCTS_DIR; };
6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewing.app; sourceTree = BUILT_PRODUCTS_DIR; };
6A0D4EA615FC0D2D00ABF4B3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
6A0D4EA915FC0D2D00ABF4B3 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
6A0D4EAB15FC0D2D00ABF4B3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@ -100,8 +106,8 @@
6A0D4EE415FC0DA600ABF4B3 /* VTVerticalKeyLabelStripView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VTVerticalKeyLabelStripView.m; sourceTree = "<group>"; };
6A0D4EEF15FC0DA600ABF4B3 /* Bopomofo.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Bopomofo.tiff; sourceTree = "<group>"; };
6A0D4EF015FC0DA600ABF4B3 /* Bopomofo@2x.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "Bopomofo@2x.tiff"; sourceTree = "<group>"; };
6A0D4EF515FC0DA600ABF4B3 /* McBopomofo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "McBopomofo-Info.plist"; sourceTree = "<group>"; };
6A0D4EF615FC0DA600ABF4B3 /* McBopomofo-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "McBopomofo-Prefix.pch"; sourceTree = "<group>"; };
6A0D4EF515FC0DA600ABF4B3 /* vChewing-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "vChewing-Info.plist"; sourceTree = "<group>"; };
6A0D4EF615FC0DA600ABF4B3 /* vChewing-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "vChewing-Prefix.pch"; sourceTree = "<group>"; };
6A0D4F1415FC0EB100ABF4B3 /* Bigram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bigram.h; sourceTree = "<group>"; };
6A0D4F1515FC0EB100ABF4B3 /* BlockReadingBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockReadingBuilder.h; sourceTree = "<group>"; };
6A0D4F1615FC0EB100ABF4B3 /* Gramambular.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gramambular.h; sourceTree = "<group>"; };
@ -192,7 +198,7 @@
6A38BBFC15FC117A00A8A51F /* PhraseFreq.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PhraseFreq.txt; sourceTree = "<group>"; };
6A38BBFD15FC117A00A8A51F /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
6A38BC2715FC158A00A8A51F /* InputMethodKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InputMethodKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/InputMethodKit.framework; sourceTree = DEVELOPER_DIR; };
6ACA41CB15FC1D7500935EF6 /* McBopomofoInstaller.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = McBopomofoInstaller.app; sourceTree = BUILT_PRODUCTS_DIR; };
6ACA41CB15FC1D7500935EF6 /* vChewingInstaller.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewingInstaller.app; sourceTree = BUILT_PRODUCTS_DIR; };
6ACA41E815FC1D9000935EF6 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Source/Installer/AppDelegate.h; sourceTree = SOURCE_ROOT; };
6ACA41E915FC1D9000935EF6 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Source/Installer/AppDelegate.m; sourceTree = SOURCE_ROOT; };
6ACA41EB15FC1D9000935EF6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@ -208,12 +214,10 @@
6AD7CBC715FE555000691B5B /* data-plain-bpmf.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "data-plain-bpmf.txt"; sourceTree = "<group>"; };
6AE210B015FC63CC003659FE /* PlainBopomofo.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = PlainBopomofo.tiff; sourceTree = "<group>"; };
6AE210B115FC63CC003659FE /* PlainBopomofo@2x.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "PlainBopomofo@2x.tiff"; sourceTree = "<group>"; };
6AE30A471F7F40B7008735BD /* UserOverrideModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserOverrideModel.cpp; sourceTree = "<group>"; };
6AE30A481F7F40B7008735BD /* UserOverrideModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserOverrideModel.h; sourceTree = "<group>"; };
6AFF97EF253B299E007F1C49 /* OVNonModalAlertWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OVNonModalAlertWindowController.h; sourceTree = "<group>"; };
6AFF97F0253B299E007F1C49 /* OVNonModalAlertWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OVNonModalAlertWindowController.xib; sourceTree = "<group>"; };
6AFF97F1253B299E007F1C49 /* OVNonModalAlertWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OVNonModalAlertWindowController.m; sourceTree = "<group>"; };
D427A9BF25ED28CC005D43E0 /* McBopomofo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "McBopomofo-Bridging-Header.h"; sourceTree = "<group>"; };
D427A9BF25ED28CC005D43E0 /* vChewing-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "vChewing-Bridging-Header.h"; sourceTree = "<group>"; };
D427A9C025ED28CC005D43E0 /* OpenCCBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenCCBridge.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -251,8 +255,8 @@
6A0D4EA315FC0D2D00ABF4B3 /* Products */ = {
isa = PBXGroup;
children = (
6A0D4EA215FC0D2D00ABF4B3 /* McBopomofo.app */,
6ACA41CB15FC1D7500935EF6 /* McBopomofoInstaller.app */,
6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */,
6ACA41CB15FC1D7500935EF6 /* vChewingInstaller.app */,
);
name = Products;
sourceTree = "<group>";
@ -281,17 +285,17 @@
6A0D4EC615FC0D6400ABF4B3 /* InputMethodController.h */,
6A0D4EC715FC0D6400ABF4B3 /* InputMethodController.mm */,
6A0D4EC815FC0D6400ABF4B3 /* main.m */,
6A0D4EF615FC0DA600ABF4B3 /* McBopomofo-Prefix.pch */,
6A0D4EF615FC0DA600ABF4B3 /* vChewing-Prefix.pch */,
6AFF97EF253B299E007F1C49 /* OVNonModalAlertWindowController.h */,
6AFF97F1253B299E007F1C49 /* OVNonModalAlertWindowController.m */,
6A0D4EC915FC0D6400ABF4B3 /* OVInputSourceHelper.h */,
6A0D4ECA15FC0D6400ABF4B3 /* OVInputSourceHelper.m */,
6A0D4ECB15FC0D6400ABF4B3 /* PreferencesWindowController.h */,
6A0D4ECC15FC0D6400ABF4B3 /* PreferencesWindowController.m */,
D427A9C025ED28CC005D43E0 /* OpenCCBridge.swift */,
D427A9BF25ED28CC005D43E0 /* vChewing-Bridging-Header.h */,
6AE30A471F7F40B7008735BD /* UserOverrideModel.cpp */,
6AE30A481F7F40B7008735BD /* UserOverrideModel.h */,
D427A9C025ED28CC005D43E0 /* OpenCCBridge.swift */,
D427A9BF25ED28CC005D43E0 /* McBopomofo-Bridging-Header.h */,
);
path = Source;
sourceTree = "<group>";
@ -410,7 +414,7 @@
children = (
6AFF97F0253B299E007F1C49 /* OVNonModalAlertWindowController.xib */,
6A0D4EEE15FC0DA600ABF4B3 /* Images */,
6A0D4EF515FC0DA600ABF4B3 /* McBopomofo-Info.plist */,
6A0D4EF515FC0DA600ABF4B3 /* vChewing-Info.plist */,
6A0D4F4815FC0EE100ABF4B3 /* InfoPlist.strings */,
6A0D4F4A15FC0EE100ABF4B3 /* Localizable.strings */,
6A187E2816004C5900466B2E /* MainMenu.xib */,
@ -490,7 +494,7 @@
/* Begin PBXLegacyTarget section */
6A38BC2115FC12FD00A8A51F /* Data */ = {
isa = PBXLegacyTarget;
buildArgumentsString = "$(ACTION)";
buildArgumentsString = "$(ACTION) CHSBuild";
buildConfigurationList = 6A38BC2215FC12FD00A8A51F /* Build configuration list for PBXLegacyTarget "Data" */;
buildPhases = (
);
@ -505,9 +509,9 @@
/* End PBXLegacyTarget section */
/* Begin PBXNativeTarget section */
6A0D4EA115FC0D2D00ABF4B3 /* McBopomofo */ = {
6A0D4EA115FC0D2D00ABF4B3 /* vChewing */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6A0D4EC015FC0D2E00ABF4B3 /* Build configuration list for PBXNativeTarget "McBopomofo" */;
buildConfigurationList = 6A0D4EC015FC0D2E00ABF4B3 /* Build configuration list for PBXNativeTarget "vChewing" */;
buildPhases = (
6A0D4E9E15FC0D2D00ABF4B3 /* Sources */,
6A0D4E9F15FC0D2D00ABF4B3 /* Frameworks */,
@ -518,17 +522,17 @@
dependencies = (
6A38BC2615FC131100A8A51F /* PBXTargetDependency */,
);
name = McBopomofo;
name = vChewing;
packageProductDependencies = (
D48550A225EBE689006A204C /* OpenCC */,
);
productName = McBopomofo;
productReference = 6A0D4EA215FC0D2D00ABF4B3 /* McBopomofo.app */;
productName = vChewing;
productReference = 6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */;
productType = "com.apple.product-type.application";
};
6ACA41CA15FC1D7500935EF6 /* McBopomofoInstaller */ = {
6ACA41CA15FC1D7500935EF6 /* vChewingInstaller */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6ACA41E415FC1D7600935EF6 /* Build configuration list for PBXNativeTarget "McBopomofoInstaller" */;
buildConfigurationList = 6ACA41E415FC1D7600935EF6 /* Build configuration list for PBXNativeTarget "vChewingInstaller" */;
buildPhases = (
6ACA41C715FC1D7500935EF6 /* Sources */,
6ACA41C815FC1D7500935EF6 /* Frameworks */,
@ -540,9 +544,9 @@
dependencies = (
6ACA420115FC1DCC00935EF6 /* PBXTargetDependency */,
);
name = McBopomofoInstaller;
productName = McBopomofoInstaller;
productReference = 6ACA41CB15FC1D7500935EF6 /* McBopomofoInstaller.app */;
name = vChewingInstaller;
productName = vChewingInstaller;
productReference = 6ACA41CB15FC1D7500935EF6 /* vChewingInstaller.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@ -558,7 +562,7 @@
};
};
};
buildConfigurationList = 6A0D4E9715FC0CFA00ABF4B3 /* Build configuration list for PBXProject "McBopomofo" */;
buildConfigurationList = 6A0D4E9715FC0CFA00ABF4B3 /* Build configuration list for PBXProject "vChewing" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
@ -566,6 +570,7 @@
en,
"zh-Hant",
Base,
"zh-Hans",
);
mainGroup = 6A0D4E9215FC0CFA00ABF4B3;
packageReferences = (
@ -575,8 +580,8 @@
projectDirPath = "";
projectRoot = "";
targets = (
6A0D4EA115FC0D2D00ABF4B3 /* McBopomofo */,
6ACA41CA15FC1D7500935EF6 /* McBopomofoInstaller */,
6A0D4EA115FC0D2D00ABF4B3 /* vChewing */,
6ACA41CA15FC1D7500935EF6 /* vChewingInstaller */,
6A38BC2115FC12FD00A8A51F /* Data */,
);
};
@ -606,7 +611,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6ACA420215FC1E5200935EF6 /* McBopomofo.app in Resources */,
6ACA420215FC1E5200935EF6 /* vChewing.app in Resources */,
6A2E40F9253A6AA000D1AE1D /* Images.xcassets in Resources */,
6ACA41FA15FC1D9000935EF6 /* InfoPlist.strings in Resources */,
6A225A1F23679F2600F685C6 /* NotarizedArchives in Resources */,
@ -653,7 +658,6 @@
6A0D4F0015FC0DA600ABF4B3 /* VTHorizontalCandidateView.m in Sources */,
6AFF97F3253B299E007F1C49 /* OVNonModalAlertWindowController.m in Sources */,
6A0D4F0115FC0DA600ABF4B3 /* VTVerticalCandidateController.m in Sources */,
6AE30A491F7F40B7008735BD /* UserOverrideModel.cpp in Sources */,
6A0D4F0215FC0DA600ABF4B3 /* VTVerticalCandidateTableView.m in Sources */,
6A0D4F0315FC0DA600ABF4B3 /* VTVerticalKeyLabelStripView.m in Sources */,
D427A9C125ED28CC005D43E0 /* OpenCCBridge.swift in Sources */,
@ -683,7 +687,7 @@
};
6ACA420115FC1DCC00935EF6 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6A0D4EA115FC0D2D00ABF4B3 /* McBopomofo */;
target = 6A0D4EA115FC0D2D00ABF4B3 /* vChewing */;
targetProxy = 6ACA420015FC1DCC00935EF6 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@ -694,6 +698,7 @@
children = (
6A0D4F4915FC0EE100ABF4B3 /* en */,
6A0D4F5415FC0EF900ABF4B3 /* zh-Hant */,
5B9781D72763850700897999 /* zh-Hans */,
);
name = InfoPlist.strings;
path = ..;
@ -704,6 +709,7 @@
children = (
6A0D4F4B15FC0EE100ABF4B3 /* en */,
6A0D4F5515FC0EF900ABF4B3 /* zh-Hant */,
5B9781D82763850700897999 /* zh-Hans */,
);
name = Localizable.strings;
path = ..;
@ -714,6 +720,7 @@
children = (
6A0D4F5615FC0EF900ABF4B3 /* zh-Hant */,
6A15B32721A51F2300B92CD3 /* Base */,
5B9781DA2763850700897999 /* zh-Hans */,
);
name = preferences.xib;
path = ..;
@ -724,6 +731,7 @@
children = (
6A187E2916004C7300466B2E /* zh-Hant */,
6A15B32521A51F2300B92CD3 /* Base */,
5B9781D92763850700897999 /* zh-Hans */,
);
name = MainMenu.xib;
sourceTree = "<group>";
@ -733,6 +741,7 @@
children = (
6ACA41EB15FC1D9000935EF6 /* en */,
6ACA41F515FC1D9000935EF6 /* zh-Hant */,
5B9781D32763850700897999 /* zh-Hans */,
);
name = InfoPlist.strings;
path = Source/Installer;
@ -743,6 +752,7 @@
children = (
6ACA41ED15FC1D9000935EF6 /* en */,
6ACA41F615FC1D9000935EF6 /* zh-Hant */,
5B9781D42763850700897999 /* zh-Hans */,
);
name = License.rtf;
path = Source/Installer;
@ -753,6 +763,7 @@
children = (
6ACA41EF15FC1D9000935EF6 /* en */,
6ACA41F715FC1D9000935EF6 /* zh-Hant */,
5B9781D52763850700897999 /* zh-Hans */,
);
name = Localizable.strings;
path = Source/Installer;
@ -763,6 +774,7 @@
children = (
6ACA41F815FC1D9000935EF6 /* zh-Hant */,
6A15B32421A51F2300B92CD3 /* Base */,
5B9781D62763850700897999 /* zh-Hans */,
);
name = MainMenu.xib;
path = Source/Installer;
@ -872,7 +884,7 @@
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Source/McBopomofo-Prefix.pch";
GCC_PREFIX_HEADER = "Source/vChewing-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@ -893,17 +905,17 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Source/McBopomofo-Info.plist";
INFOPLIST_FILE = "Source/vChewing-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.10;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.openvanilla.inputmethod.McBopomofo;
PRODUCT_BUNDLE_IDENTIFIER = org.openvanilla.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_OBJC_BRIDGING_HEADER = "Source/McBopomofo-Bridging-Header.h";
SWIFT_OBJC_BRIDGING_HEADER = "Source/vChewing-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
WRAPPER_EXTENSION = app;
@ -931,7 +943,7 @@
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Source/McBopomofo-Prefix.pch";
GCC_PREFIX_HEADER = "Source/vChewing-Prefix.pch";
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
@ -947,16 +959,16 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "Source/McBopomofo-Info.plist";
INFOPLIST_FILE = "Source/vChewing-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.10;
PRODUCT_BUNDLE_IDENTIFIER = org.openvanilla.inputmethod.McBopomofo;
PRODUCT_BUNDLE_IDENTIFIER = org.openvanilla.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_OBJC_BRIDGING_HEADER = "Source/McBopomofo-Bridging-Header.h";
SWIFT_OBJC_BRIDGING_HEADER = "Source/vChewing-Bridging-Header.h";
SWIFT_VERSION = 5.0;
WRAPPER_EXTENSION = app;
};
@ -1051,7 +1063,7 @@
INFOPLIST_FILE = "Source/Installer/Installer-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.10;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.openvanilla.McBopomofo.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_BUNDLE_IDENTIFIER = "org.openvanilla.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
WRAPPER_EXTENSION = app;
@ -1083,7 +1095,7 @@
HEADER_SEARCH_PATHS = ../;
INFOPLIST_FILE = "Source/Installer/Installer-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.10;
PRODUCT_BUNDLE_IDENTIFIER = "org.openvanilla.McBopomofo.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_BUNDLE_IDENTIFIER = "org.openvanilla.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
WRAPPER_EXTENSION = app;
@ -1093,7 +1105,7 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
6A0D4E9715FC0CFA00ABF4B3 /* Build configuration list for PBXProject "McBopomofo" */ = {
6A0D4E9715FC0CFA00ABF4B3 /* Build configuration list for PBXProject "vChewing" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6A0D4E9915FC0CFA00ABF4B3 /* Debug */,
@ -1102,7 +1114,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6A0D4EC015FC0D2E00ABF4B3 /* Build configuration list for PBXNativeTarget "McBopomofo" */ = {
6A0D4EC015FC0D2E00ABF4B3 /* Build configuration list for PBXNativeTarget "vChewing" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6A0D4EBE15FC0D2E00ABF4B3 /* Debug */,
@ -1120,7 +1132,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6ACA41E415FC1D7600935EF6 /* Build configuration list for PBXNativeTarget "McBopomofoInstaller" */ = {
6ACA41E415FC1D7600935EF6 /* Build configuration list for PBXNativeTarget "vChewingInstaller" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6ACA41E515FC1D7600935EF6 /* Debug */,

View File

@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6A0D4EA115FC0D2D00ABF4B3"
BuildableName = "McBopomofo.app"
BlueprintName = "McBopomofo"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewing.app"
BlueprintName = "vChewing"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@ -45,9 +45,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6A0D4EA115FC0D2D00ABF4B3"
BuildableName = "McBopomofo.app"
BlueprintName = "McBopomofo"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewing.app"
BlueprintName = "vChewing"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
@ -62,9 +62,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6A0D4EA115FC0D2D00ABF4B3"
BuildableName = "McBopomofo.app"
BlueprintName = "McBopomofo"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewing.app"
BlueprintName = "vChewing"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>

View File

@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6ACA41CA15FC1D7500935EF6"
BuildableName = "McBopomofoInstaller.app"
BlueprintName = "McBopomofoInstaller"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewingInstaller.app"
BlueprintName = "vChewingInstaller"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@ -45,9 +45,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6ACA41CA15FC1D7500935EF6"
BuildableName = "McBopomofoInstaller.app"
BlueprintName = "McBopomofoInstaller"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewingInstaller.app"
BlueprintName = "vChewingInstaller"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
@ -62,9 +62,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6ACA41CA15FC1D7500935EF6"
BuildableName = "McBopomofoInstaller.app"
BlueprintName = "McBopomofoInstaller"
ReferencedContainer = "container:McBopomofo.xcodeproj">
BuildableName = "vChewingInstaller.app"
BlueprintName = "vChewingInstaller"
ReferencedContainer = "container:vChewing.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>