!12 1.4.2 // Serious bug fix.

Merge pull request !12 from ShikiSuen/upd/1.4.2
This commit is contained in:
ShikiSuen 2022-03-24 02:25:59 +00:00 committed by Gitee
commit 44262cd86d
24 changed files with 778 additions and 504 deletions

View File

@ -57,7 +57,7 @@
"QYf-Nf-hoi.title" = "OpenVanilla 小麦注音プロジェクトから派生。";
/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "VW8-s5-Wpn"; */
"VW8-s5-Wpn.title" = "小麦注音入力エンジン開発Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。\nmacOS 版の開発Shiki Suen, Hiraku Wang, など。\n威注音語彙データの維持Shiki Suen。";
"VW8-s5-Wpn.title" = "小麦注音入力エンジン開発Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。\nmacOS 版威注音の開発Shiki Suen, Hiraku Wang, など。\n威注音語彙データの維持Shiki Suen。";
/* Class = "NSTextFieldCell"; title = "Placeholder for showing copyright information."; ObjectID = "eo3-TK-0rB"; */
"eo3-TK-0rB.title" = "Placeholder for showing copyright information.";

View File

@ -0,0 +1,2 @@
#!/bin/sh
~/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing install --all

View File

@ -2,7 +2,7 @@ vChewing macOS: MIT商標不許可ライセンス (MIT-NTL License)
© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.
小麦注音入力エンジン開発Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。
威注音 macOS 版の開発Hiraku Wang, Shiki Suen, など。
macOS 版威注音の開発Hiraku Wang, Shiki Suen, など。
威注音語彙データの維持Shiki Suen。
以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

View File

@ -72,7 +72,7 @@
威注音輸入法 macOS 版程式維護Shiki Suen。特別感謝 Hiraku Wong 等人的技術協力。
威注音詞庫由孫志貴維護,以 3-Clause BSD License 授權釋出
威注音詞庫由 Shiki Suen 維護,以 3-Clause BSD License 授權釋出。其中的詞頻數據[由 NAER 授權用於非商業用途](https://twitter.com/ShikiSuen/status/1479329302713831424)
使用者可自由使用、散播本軟體,惟散播時必須完整保留版權聲明及軟體授權、且一旦經過修改便不可以再繼續使用威注音的產品名稱。

@ -1 +1 @@
Subproject commit 21e4163c6f6f5c9929c1dd5872d091f732f07836
Subproject commit bc21120f7241f61d968d291c988c2c34df4a1263

View File

@ -158,12 +158,13 @@ class InputState: NSObject {
@objc private(set) var markerIndex: UInt
@objc private(set) var markedRange: NSRange
@objc private var deleteTargetExists = false
@objc var tooltip: String {
if composingBuffer.count != readings.count {
TooltipController.backgroundColor = NSColor(red: 0.55, green: 0.00, blue: 0.00, alpha: 1.00)
TooltipController.textColor = NSColor.white
return NSLocalizedString("⚠︎ Unhandlable char selected for user phrases.", comment: "")
return NSLocalizedString("⚠︎ Unhandlable: Chars and Readings in buffer doesn't match.", comment: "")
}
if mgrPrefs.phraseReplacementEnabled {
@ -192,13 +193,14 @@ class InputState: NSObject {
let joined = selectedReadings.joined(separator: "-")
let exist = mgrLangModel.checkIfUserPhraseExist(userPhrase: text, mode: ctlInputMethod.currentKeyHandler.inputMode, key: joined)
if exist {
deleteTargetExists = exist
TooltipController.backgroundColor = NSColor(red: 0.00, green: 0.18, blue: 0.13, alpha: 1.00)
TooltipController.textColor = NSColor(red: 0.00, green: 1.00, blue: 0.74, alpha: 1.00)
return String(format: NSLocalizedString("\"%@\" already exists, ENTER to boost its priority.", comment: ""), text)
return String(format: NSLocalizedString("\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude.", comment: ""), text)
}
TooltipController.backgroundColor = NSColor(red: 0.18, green: 0.18, blue: 0.18, alpha: 1.00)
TooltipController.textColor = NSColor.white
return String(format: NSLocalizedString("\"%@\" selected. ENTER to add user phrase.", comment: ""), text)
return String(format: NSLocalizedString("\"%@\" selected. to add user phrase.", comment: ""), text)
}
@objc var tooltipForInputting: String = ""
@ -257,6 +259,9 @@ class InputState: NSObject {
if markedRange.length > kMaxMarkRangeLength {
return false
}
if ctlInputMethod.areWeDeleting && !deleteTargetExists {
return false
}
return markedRange.length >= kMinMarkRangeLength && markedRange.length <= kMaxMarkRangeLength
}

View File

@ -525,12 +525,10 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
// MARK: Enter
if ([input isEnter]) {
if ([input isControlHold]) {
if (ctlInputMethod.areWeUsingOurOwnPhraseEditor || [input isCommandHold]) {
return [self _handleCtrlEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback];
}
}
return [self _handleEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback];
return ([input isControlHold] && [input isCommandHold]) ?
[self _handleCtrlCommandEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback]
:
[self _handleEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback];
}
// MARK: Punctuation list
@ -592,10 +590,10 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
}
}
// still nothing, then we update the composing buffer (some app has
// strange behavior if we don't do this, "thinking" the key is not
// actually consumed)
// still nothing, then we update the composing buffer (some app has strange behavior if we don't do this, "thinking" the key is not actually consumed)
// 砍掉這一段會導致「F1-F12 按鍵干擾組字區」的問題。暫時只能先恢復這段,且補上偵錯彙報機制,方便今後排查故障。
if ([state isKindOfClass:[InputStateNotEmpty class]] || !_bpmfReadingBuffer->isEmpty()) {
[IME prtDebugIntel:[NSString stringWithFormat:@"Blocked data: charCode: %c, keyCode: %c", charCode, input.keyCode]];
[IME prtDebugIntel:@"A9BFF20E"];
errorCallback();
stateCallback(state);
@ -850,7 +848,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
return YES;
}
- (BOOL)_handleCtrlEnterWithState:(InputState *)state stateCallback:(void (^)(InputState *))stateCallback errorCallback:(void (^)(void))errorCallback
- (BOOL)_handleCtrlCommandEnterWithState:(InputState *)state stateCallback:(void (^)(InputState *))stateCallback errorCallback:(void (^)(void))errorCallback
{
if (![state isKindOfClass:[InputStateInputting class]]) return NO;
@ -1002,7 +1000,8 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot";
UniChar charCode = input.charCode;
VTCandidateController *gCurrentCandidateController = [self.delegate candidateControllerForKeyHandler:self];
BOOL cancelCandidateKey = [input isBackSpace] || [input isESC] || [input isDelete];
BOOL cancelCandidateKey = [input isBackSpace] || [input isESC] || [input isDelete]
|| (([input isCursorBackward] || [input isCursorForward]) && [input isShiftHold]);
if (cancelCandidateKey) {
if ([state isKindOfClass: [InputStateAssociatedPhrases class]]) {

View File

@ -41,6 +41,8 @@ class ctlInputMethod: IMKInputController {
@objc static let kIMEModeCHS = "org.atelierInmu.inputmethod.vChewing.IMECHS";
@objc static let kIMEModeCHT = "org.atelierInmu.inputmethod.vChewing.IMECHT";
@objc static let kIMEModeNULL = "org.atelierInmu.inputmethod.vChewing.IMENULL";
@objc static var areWeDeleting = false;
private static let tooltipController = TooltipController()
@ -188,25 +190,24 @@ class ctlInputMethod: IMKInputController {
override func handle(_ event: NSEvent!, client: Any!) -> Bool {
if event.type == .flagsChanged {
let functionKeyKeyboardLayoutID = mgrPrefs.functionKeyboardLayout
let basisKeyboardLayoutID = mgrPrefs.basisKeyboardLayout
if functionKeyKeyboardLayoutID == basisKeyboardLayoutID {
return false
}
// flags使 KeyHandler
// flags
// event.type == .flagsChanged return false
// NSInternalInconsistencyException
if (mgrPrefs.functionKeyboardLayout != mgrPrefs.basisKeyboardLayout) && (event.type == .flagsChanged) {
let includeShift = mgrPrefs.functionKeyKeyboardLayoutOverrideIncludeShiftKey
if event.modifierFlags.contains(.capsLock) ||
if (event.modifierFlags == .capsLock ||
event.modifierFlags.contains(.command) ||
event.modifierFlags.contains(.option) ||
event.modifierFlags.contains(.control) ||
event.modifierFlags.contains(.function) ||
(event.modifierFlags.contains(.shift) && includeShift) {
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: functionKeyKeyboardLayoutID)
return false
(event.modifierFlags.contains(.shift) && includeShift)) {
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: mgrPrefs.functionKeyboardLayout)
} else {
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: mgrPrefs.basisKeyboardLayout)
}
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: basisKeyboardLayoutID)
// Enter
ctlInputMethod.areWeDeleting = event.modifierFlags.contains([.shift, .command])
return false
}
@ -647,8 +648,8 @@ extension ctlInputMethod: KeyHandlerDelegate {
return false
}
let InputModeReversed: InputMode = (ctlInputMethod.currentKeyHandler.inputMode == InputMode.imeModeCHT) ? InputMode.imeModeCHS : InputMode.imeModeCHT
mgrLangModel.writeUserPhrase(state.userPhrase, inputMode: keyHandler.inputMode, areWeDuplicating: state.chkIfUserPhraseExists)
mgrLangModel.writeUserPhrase(state.userPhraseConverted, inputMode: InputModeReversed, areWeDuplicating: false)
mgrLangModel.writeUserPhrase(state.userPhrase, inputMode: keyHandler.inputMode, areWeDuplicating: state.chkIfUserPhraseExists, areWeDeleting: ctlInputMethod.areWeDeleting)
mgrLangModel.writeUserPhrase(state.userPhraseConverted, inputMode: InputModeReversed, areWeDuplicating: false, areWeDeleting: ctlInputMethod.areWeDeleting)
return true
}
}

View File

@ -33,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (BOOL)checkIfUserDataFolderExists;
+ (BOOL)checkIfUserPhraseExist:(NSString *)userPhrase inputMode:(InputMode)mode key:(NSString *)key NS_SWIFT_NAME(checkIfUserPhraseExist(userPhrase:mode:key:));
+ (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating;
+ (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating areWeDeleting:(BOOL)areWeDeleting;
+ (void)setPhraseReplacementEnabled:(BOOL)phraseReplacementEnabled;
+ (void)setCNSEnabled:(BOOL)cnsEnabled;
+ (void)setSymbolEnabled:(BOOL)symbolEnabled;

View File

@ -235,14 +235,14 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
return NO;
}
+ (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating
+ (BOOL)writeUserPhrase:(NSString *)userPhrase inputMode:(InputMode)mode areWeDuplicating:(BOOL)areWeDuplicating areWeDeleting:(BOOL)areWeDeleting
{
if (![self checkIfUserLanguageModelFilesExist]) {
return NO;
}
// BOOL addLineBreakAtFront = NO;
NSString *path = [self userPhrasesDataPath:mode];
NSString *path = areWeDeleting ? [self excludedPhrasesDataPath:mode] : [self userPhrasesDataPath:mode];
// if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
// NSError *error = nil;
@ -267,7 +267,7 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
// [currentMarkedPhrase appendString:@"\n"];
// }
[currentMarkedPhrase appendString:userPhrase];
if (areWeDuplicating) {
if (areWeDuplicating && !areWeDeleting) {
// Do not use ASCII characters to comment here.
// Otherwise, it will be scrambled by HYPY2BPMF module shipped in the vChewing Phrase Editor.
[currentMarkedPhrase appendString:@"\t#𝙾𝚟𝚎𝚛𝚛𝚒𝚍𝚎"];

View File

@ -23,8 +23,8 @@
"Half-Width Punctuation Mode" = "Half-Width Punctuation Mode";
"\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase.";
"\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase.";
"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase.";
"\"%@\" already exists, ENTER to boost its priority." = "\"%@\" already exists, ENTER to boost its priority.";
"\"%@\" selected. ↩ to add user phrase." = "\"%@\" selected. ↩ to add user phrase.";
"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude.";
"Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…";
"Use Phrase Replacement" = "Use Phrase Replacement";
"Candidates keys cannot be empty." = "Candidates keys cannot be empty.";
@ -34,7 +34,7 @@
"Please specify at least 4 candidate keys." = "Please specify at least 4 candidate keys.";
"Maximum 15 candidate keys allowed." = "Maximum 15 candidate keys allowed.";
"⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ Phrase replacement mode enabled, interfering user phrase entry.";
"⚠︎ Unhandlable char selected for user phrases." = "⚠︎ Unhandlable char selected for user phrases.";
"⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ Unhandlable: Chars and Readings in buffer doesn't match.";
"Per-Char Select Mode" = "Per-Char Select Mode";
"CNS11643 Mode" = "CNS11643 Mode";
"JIS Shinjitai Output" = "JIS Shinjitai Output";

View File

@ -23,8 +23,8 @@
"Half-Width Punctuation Mode" = "Half-Width Punctuation Mode";
"\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase.";
"\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase.";
"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase.";
"\"%@\" already exists, ENTER to boost its priority." = "\"%@\" already exists, ENTER to boost its priority.";
"\"%@\" selected. ↩ to add user phrase." = "\"%@\" selected. ↩ to add user phrase.";
"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude.";
"Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…";
"Use Phrase Replacement" = "Use Phrase Replacement";
"Candidates keys cannot be empty." = "Candidates keys cannot be empty.";
@ -34,7 +34,7 @@
"Please specify at least 4 candidate keys." = "Please specify at least 4 candidate keys.";
"Maximum 15 candidate keys allowed." = "Maximum 15 candidate keys allowed.";
"⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ Phrase replacement mode enabled, interfering user phrase entry.";
"⚠︎ Unhandlable char selected for user phrases." = "⚠︎ Unhandlable char selected for user phrases.";
"⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ Unhandlable: Chars and Readings in buffer doesn't match.";
"Per-Char Select Mode" = "Per-Char Select Mode";
"CNS11643 Mode" = "CNS11643 Mode";
"JIS Shinjitai Output" = "JIS Shinjitai Output";

View File

@ -23,8 +23,8 @@
"Half-Width Punctuation Mode" = "半角句読モード";
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」もう1つ文字のお選びを。";
"\"%@\" length should ≤ %d for a user phrase." = "「%@」文字数過剰で登録不可、%d 文字以内にして下さい。";
"\"%@\" selected. ENTER to add user phrase." = "「%@」を ENTER で辞書に登録。";
"\"%@\" already exists, ENTER to boost its priority." = "「%@」は既存語彙であり、ENTER で最優先にする。";
"\"%@\" selected. ↩ to add user phrase." = "「%@」を ↩ で辞書に登録。";
"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」は既存語彙:↩ で最優先にし;⇧⌘↩ で排除。";
"Edit Phrase Replacement Table…" = "言葉置換表を編集…";
"Use Phrase Replacement" = "言葉置換機能";
"Candidates keys cannot be empty." = "言選り用キー陣列に何かキーをご登録ください。";
@ -34,7 +34,7 @@
"Please specify at least 4 candidate keys." = "言選り用キー陣列に少なくとも4つのキーをご登録ください。";
"Maximum 15 candidate keys allowed." = "言選り用キー陣列には最多15つキー登録できます。";
"⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ 言葉置換機能稼働中、新添付言葉にも影響。";
"⚠︎ Unhandlable char selected for user phrases." = "⚠︎ ユーザー辞書の対処できない文字は選択されています。";
"⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ 緩衝列の字数は読みの数と不同等のため、対処不可。";
"Per-Char Select Mode" = "全候補入力モード";
"CNS11643 Mode" = "全字庫モード";
"JIS Shinjitai Output" = "JIS 新字体モード";

View File

@ -23,8 +23,8 @@
"Half-Width Punctuation Mode" = "半角标点模式";
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」字数不足以自订语汇。";
"\"%@\" length should ≤ %d for a user phrase." = "「%@」字数超过 %d、无法自订。";
"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自订语汇。";
"\"%@\" already exists, ENTER to boost its priority." = "「%@」已存在,敲 ENTER 以提升其权重。";
"\"%@\" selected. to add user phrase." = "「%@」敲 Enter 添入自订语汇。";
"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」已存在:敲 ↩ 以升权;敲 ⇧⌘↩ 以排除。";
"Edit Phrase Replacement Table…" = "编辑语汇置换表…";
"Use Phrase Replacement" = "使用语汇置换";
"Candidates keys cannot be empty." = "您必须指定选字键。";
@ -34,7 +34,7 @@
"Please specify at least 4 candidate keys." = "请至少指定四个选字键。";
"Maximum 15 candidate keys allowed." = "选字键最多只能指定十五个。";
"⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ 语汇置换功能已启用,会波及语汇自订。";
"⚠︎ Unhandlable char selected for user phrases." = "⚠︎ 已选中无法处理的字符,无法加入自订语汇。";
"⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ 无法处理组字区字数与读音数不对应的情形。";
"Per-Char Select Mode" = "仿真逐字选字输入";
"CNS11643 Mode" = "全字库模式";
"JIS Shinjitai Output" = "JIS 新字体模式";

View File

@ -23,8 +23,8 @@
"Half-Width Punctuation Mode" = "半形標點模式";
"\"%@\" length must ≥ 2 for a user phrase." = "「%@」字數不足以自訂語彙。";
"\"%@\" length should ≤ %d for a user phrase." = "「%@」字數超過 %d、無法自訂。";
"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自訂語彙。";
"\"%@\" already exists, ENTER to boost its priority." = "「%@」已存在,敲 ENTER 以提升其權重。";
"\"%@\" selected. to add user phrase." = "「%@」敲 Enter 添入自訂語彙。";
"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」已存在:敲 ↩ 以升權;敲 ⇧⌘↩ 以排除。";
"Edit Phrase Replacement Table…" = "編輯語彙置換表…";
"Use Phrase Replacement" = "使用語彙置換";
"Candidates keys cannot be empty." = "您必須指定選字鍵。";
@ -34,7 +34,7 @@
"Please specify at least 4 candidate keys." = "請至少指定四個選字鍵。";
"Maximum 15 candidate keys allowed." = "選字鍵最多只能指定十五個。";
"⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ 語彙置換功能已啟用,會波及語彙自訂。";
"⚠︎ Unhandlable char selected for user phrases." = "⚠︎ 已選中無法處理的字元,無法加入自訂語彙。";
"⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ 無法處理組字區字數與讀音數不對應的情形。";
"Per-Char Select Mode" = "模擬逐字選字輸入";
"CNS11643 Mode" = "全字庫模式";
"JIS Shinjitai Output" = "JIS 新字體模式";

View File

@ -104,7 +104,6 @@ public class NotifierController: NSWindowController, NotifierWindowDelegate {
let transparentVisualEffect = NSVisualEffectView()
transparentVisualEffect.blendingMode = .behindWindow
transparentVisualEffect.state = .active
transparentVisualEffect.material = .dark
let panel = NotifierWindow(contentRect: windowRect, styleMask: styleMask, backing: .buffered, defer: false)
panel.contentView = transparentVisualEffect

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="20037" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="20037"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
@ -37,10 +37,273 @@
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="73w-1j-Pwb">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="aF3-oi-MgO">
<items>
<menuItem title="Undo" keyEquivalent="z" id="VvZ-by-3nQ">
<connections>
<action selector="undo:" target="-1" id="dM4-lt-Id3"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="LwP-Gv-Nnn">
<connections>
<action selector="redo:" target="-1" id="2Hr-YX-Ra9"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="4o9-gU-7Ts"/>
<menuItem title="Cut" keyEquivalent="x" id="FMA-yq-tJm">
<connections>
<action selector="cut:" target="-1" id="eMD-tW-O7D"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="xSe-3Y-Hb0">
<connections>
<action selector="copy:" target="-1" id="ADA-xT-moq"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="gaB-df-vQW">
<connections>
<action selector="paste:" target="-1" id="Oxs-FQ-EY8"/>
</connections>
</menuItem>
<menuItem title="Delete" id="blu-F1-kET">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="-1" id="n2a-VH-u4x"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="R7e-C0-eBE">
<connections>
<action selector="selectAll:" target="-1" id="WBA-da-pQi"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
<point key="canvasLocation" x="139" y="154"/>
</menu>
<customObject id="494" customClass="AppDelegate"/>
<customObject id="494" customClass="AppDelegate" customModule="vChewing" customModuleProvider="target"/>
<customObject id="420" customClass="NSFontManager"/>
<menuItem title="Edit" id="ubu-d1-37W">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="rWr-dm-Kh8">
<items>
<menuItem title="Undo" keyEquivalent="z" id="3jT-kO-21c">
<connections>
<action selector="undo:" target="-1" id="H88-C0-yc4"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="o0s-IT-wiY">
<connections>
<action selector="redo:" target="-1" id="XMe-PD-zfW"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="GdZ-gw-RJ8"/>
<menuItem title="Cut" keyEquivalent="x" id="CeT-VO-r8T">
<connections>
<action selector="cut:" target="-1" id="tGh-UJ-Vgt"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="MIS-yk-vix">
<connections>
<action selector="copy:" target="-1" id="JK4-kZ-a0m"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="JUZ-YQ-cFn">
<connections>
<action selector="paste:" target="-1" id="46I-YE-e2p"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="JOe-dd-jy3">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="Rxh-ra-eKX"/>
</connections>
</menuItem>
<menuItem title="Delete" id="Faq-pj-osx">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="-1" id="Cf4-1V-BBE"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="Km9-HM-RBf">
<connections>
<action selector="selectAll:" target="-1" id="TdD-7L-1Hl"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="3Q6-9i-Ftx"/>
<menuItem title="Find" id="eZX-Tk-2Xs">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="o8K-C1-Ual">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="x8v-4n-8Se">
<connections>
<action selector="performFindPanelAction:" target="-1" id="NPo-Yv-mhO"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="VO0-HH-cDi">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="dfm-eJ-wf8"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="L2F-2v-SNG">
<connections>
<action selector="performFindPanelAction:" target="-1" id="Yrz-HD-dMn"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="FzW-oT-4oW">
<connections>
<action selector="performFindPanelAction:" target="-1" id="QYN-5u-Zdh"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="OuV-dO-fyz">
<connections>
<action selector="performFindPanelAction:" target="-1" id="BZA-Sf-ZCF"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="Yh8-Lk-MRK">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="Cop-2Q-Beg"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="OjH-Oc-gM5">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="rrh-zf-CSE">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="tuz-aN-xtP">
<connections>
<action selector="showGuessPanel:" target="-1" id="gQt-Ay-LeU"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="ouV-6W-KCA">
<connections>
<action selector="checkSpelling:" target="-1" id="105-Ob-GAr"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="27b-Cl-Ti1"/>
<menuItem title="Check Spelling While Typing" id="hCs-gx-PNe">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="eQJ-3B-eRo"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="Ueh-2V-rU3">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="Sba-oJ-gVM"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="YAm-Zg-eX4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="7U7-L5-wzk"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="Ap5-IB-isK">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="yhF-g2-yW7">
<items>
<menuItem title="Show Substitutions" id="jrN-2d-uJP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="aNR-LM-bAT"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="bnA-uN-vXa"/>
<menuItem title="Smart Copy/Paste" id="Fpp-CM-nih">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="hYU-zq-zFJ"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="H46-y2-RTt">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="hmA-7z-eIl"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="d5k-mO-lMN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="dwi-Ki-5U1"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="wSJ-zV-SHN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="40W-Sa-gpf"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="Kse-Sx-GW1">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="-1" id="Bds-Kb-mV8"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="Zp2-yc-5aq">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="RVr-al-Vwf"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="6Ph-8U-iVV">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="aX8-Sh-tR0">
<items>
<menuItem title="Make Upper Case" id="omc-Qv-BAT">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="cnH-13-TAH"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="f8Y-8w-C0J">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="SYC-Pb-q91"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="egK-sl-ehm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="hvr-oY-28h"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="Ibl-gf-hHZ">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="l5i-Fp-oFN">
<items>
<menuItem title="Start Speaking" id="ig1-uM-Ksp">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="-1" id="2LD-ZA-Tht"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="nYM-UY-zpE">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="-1" id="jNL-ea-ecQ"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
</objects>
</document>

View File

@ -24,4 +24,4 @@
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "lblCredits"; */
"lblCredits.title" = "小麦注音入力エンジン開発Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。\nmacOS 版の開発Shiki Suen, Hiraku Wang, など。\n威注音語彙データの維持Shiki Suen。";
"lblCredits.title" = "小麦注音入力エンジン開発Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, など。\nmacOS 版威注音の開発Shiki Suen, Hiraku Wang, など。\n威注音語彙データの維持Shiki Suen。";

View File

@ -24,4 +24,4 @@
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "lblCredits"; */
"VW8-s5-Wpn.title" = "小麦注音引擎研发Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, 等。\n威注音 macOS 程式研发Shiki Suen, Hiraku Wang, 等。\n威注音词库维护Shiki Suen。";
"lblCredits.title" = "小麦注音引擎研发Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, 等。\n威注音 macOS 程式研发Shiki Suen, Hiraku Wang, 等。\n威注音词库维护Shiki Suen。";

View File

@ -24,4 +24,4 @@
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "lblCredits"; */
"VW8-s5-Wpn.title" = "小麥注音引擎研發Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, 等。\n威注音 macOS 程式研發Shiki Suen, Hiraku Wang, 等。\n威注音詞庫維護Shiki Suen。";
"lblCredits.title" = "小麥注音引擎研發Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, 等。\n威注音 macOS 程式研發Shiki Suen, Hiraku Wang, 等。\n威注音詞庫維護Shiki Suen。";

View File

@ -7,8 +7,8 @@
<key>UpdateInfoSite</key>
<string>https://gitee.com/vChewing/vChewing-macOS/releases</string>
<key>CFBundleVersion</key>
<string>1940</string>
<string>1942</string>
<key>CFBundleShortVersionString</key>
<string>1.4.0</string>
<string>1.4.2</string>
</dict>
</plist>

View File

@ -27,6 +27,9 @@ extension String {
self = regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith)
} catch { return }
}
mutating func selfReplace(_ strOf: String, _ strWith: String = "") {
self = self.replacingOccurrences(of: strOf, with: strWith)
}
mutating func formatConsolidate(HYPY2BPMF: Bool) {
// Step 1: Consolidating formats per line.
var strProcessed = self
@ -55,435 +58,435 @@ extension String {
//
//
// 調
varLineData.regReplace(pattern: "chuang", replaceWith: "ㄔㄨㄤ")
varLineData.regReplace(pattern: "shuang", replaceWith: "ㄕㄨㄤ")
varLineData.regReplace(pattern: "zhuang", replaceWith: "ㄓㄨㄤ")
varLineData.regReplace(pattern: "chang", replaceWith: "ㄔㄤ")
varLineData.regReplace(pattern: "cheng", replaceWith: "ㄔㄥ")
varLineData.regReplace(pattern: "chong", replaceWith: "ㄔㄨㄥ")
varLineData.regReplace(pattern: "chuai", replaceWith: "ㄔㄨㄞ")
varLineData.regReplace(pattern: "chuan", replaceWith: "ㄔㄨㄢ")
varLineData.regReplace(pattern: "guang", replaceWith: "ㄍㄨㄤ")
varLineData.regReplace(pattern: "huang", replaceWith: "ㄏㄨㄤ")
varLineData.regReplace(pattern: "jiang", replaceWith: "ㄐㄧㄤ")
varLineData.regReplace(pattern: "jiong", replaceWith: "ㄐㄩㄥ")
varLineData.regReplace(pattern: "kuang", replaceWith: "ㄎㄨㄤ")
varLineData.regReplace(pattern: "liang", replaceWith: "ㄌㄧㄤ")
varLineData.regReplace(pattern: "niang", replaceWith: "ㄋㄧㄤ")
varLineData.regReplace(pattern: "qiang", replaceWith: "ㄑㄧㄤ")
varLineData.regReplace(pattern: "qiong", replaceWith: "ㄑㄩㄥ")
varLineData.regReplace(pattern: "shang", replaceWith: "ㄕㄤ")
varLineData.regReplace(pattern: "sheng", replaceWith: "ㄕㄥ")
varLineData.regReplace(pattern: "shuai", replaceWith: "ㄕㄨㄞ")
varLineData.regReplace(pattern: "shuan", replaceWith: "ㄕㄨㄢ")
varLineData.regReplace(pattern: "xiang", replaceWith: "ㄒㄧㄤ")
varLineData.regReplace(pattern: "xiong", replaceWith: "ㄒㄩㄥ")
varLineData.regReplace(pattern: "zhang", replaceWith: "ㄓㄤ")
varLineData.regReplace(pattern: "zheng", replaceWith: "ㄓㄥ")
varLineData.regReplace(pattern: "zhong", replaceWith: "ㄓㄨㄥ")
varLineData.regReplace(pattern: "zhuai", replaceWith: "ㄓㄨㄞ")
varLineData.regReplace(pattern: "zhuan", replaceWith: "ㄓㄨㄢ")
varLineData.regReplace(pattern: "bang", replaceWith: "ㄅㄤ")
varLineData.regReplace(pattern: "beng", replaceWith: "ㄅㄥ")
varLineData.regReplace(pattern: "bian", replaceWith: "ㄅㄧㄢ")
varLineData.regReplace(pattern: "biao", replaceWith: "ㄅㄧㄠ")
varLineData.regReplace(pattern: "bing", replaceWith: "ㄅㄧㄥ")
varLineData.regReplace(pattern: "cang", replaceWith: "ㄘㄤ")
varLineData.regReplace(pattern: "ceng", replaceWith: "ㄘㄥ")
varLineData.regReplace(pattern: "chai", replaceWith: "ㄔㄞ")
varLineData.regReplace(pattern: "chan", replaceWith: "ㄔㄢ")
varLineData.regReplace(pattern: "chao", replaceWith: "ㄔㄠ")
varLineData.regReplace(pattern: "chen", replaceWith: "ㄔㄣ")
varLineData.regReplace(pattern: "chou", replaceWith: "ㄔㄡ")
varLineData.regReplace(pattern: "chua", replaceWith: "ㄔㄨㄚ")
varLineData.regReplace(pattern: "chui", replaceWith: "ㄔㄨㄟ")
varLineData.regReplace(pattern: "chun", replaceWith: "ㄔㄨㄣ")
varLineData.regReplace(pattern: "chuo", replaceWith: "ㄔㄨㄛ")
varLineData.regReplace(pattern: "cong", replaceWith: "ㄘㄨㄥ")
varLineData.regReplace(pattern: "cuan", replaceWith: "ㄘㄨㄢ")
varLineData.regReplace(pattern: "dang", replaceWith: "ㄉㄤ")
varLineData.regReplace(pattern: "deng", replaceWith: "ㄉㄥ")
varLineData.regReplace(pattern: "dian", replaceWith: "ㄉㄧㄢ")
varLineData.regReplace(pattern: "diao", replaceWith: "ㄉㄧㄠ")
varLineData.regReplace(pattern: "ding", replaceWith: "ㄉㄧㄥ")
varLineData.regReplace(pattern: "dong", replaceWith: "ㄉㄨㄥ")
varLineData.regReplace(pattern: "duan", replaceWith: "ㄉㄨㄢ")
varLineData.regReplace(pattern: "fang", replaceWith: "ㄈㄤ")
varLineData.regReplace(pattern: "feng", replaceWith: "ㄈㄥ")
varLineData.regReplace(pattern: "fiao", replaceWith: "ㄈㄧㄠ")
varLineData.regReplace(pattern: "fong", replaceWith: "ㄈㄨㄥ")
varLineData.regReplace(pattern: "gang", replaceWith: "ㄍㄤ")
varLineData.regReplace(pattern: "geng", replaceWith: "ㄍㄥ")
varLineData.regReplace(pattern: "giao", replaceWith: "ㄍㄧㄠ")
varLineData.regReplace(pattern: "gong", replaceWith: "ㄍㄨㄥ")
varLineData.regReplace(pattern: "guai", replaceWith: "ㄍㄨㄞ")
varLineData.regReplace(pattern: "guan", replaceWith: "ㄍㄨㄢ")
varLineData.regReplace(pattern: "hang", replaceWith: "ㄏㄤ")
varLineData.regReplace(pattern: "heng", replaceWith: "ㄏㄥ")
varLineData.regReplace(pattern: "hong", replaceWith: "ㄏㄨㄥ")
varLineData.regReplace(pattern: "huai", replaceWith: "ㄏㄨㄞ")
varLineData.regReplace(pattern: "huan", replaceWith: "ㄏㄨㄢ")
varLineData.regReplace(pattern: "jian", replaceWith: "ㄐㄧㄢ")
varLineData.regReplace(pattern: "jiao", replaceWith: "ㄐㄧㄠ")
varLineData.regReplace(pattern: "jing", replaceWith: "ㄐㄧㄥ")
varLineData.regReplace(pattern: "juan", replaceWith: "ㄐㄩㄢ")
varLineData.regReplace(pattern: "kang", replaceWith: "ㄎㄤ")
varLineData.regReplace(pattern: "keng", replaceWith: "ㄎㄥ")
varLineData.regReplace(pattern: "kong", replaceWith: "ㄎㄨㄥ")
varLineData.regReplace(pattern: "kuai", replaceWith: "ㄎㄨㄞ")
varLineData.regReplace(pattern: "kuan", replaceWith: "ㄎㄨㄢ")
varLineData.regReplace(pattern: "lang", replaceWith: "ㄌㄤ")
varLineData.regReplace(pattern: "leng", replaceWith: "ㄌㄥ")
varLineData.regReplace(pattern: "lian", replaceWith: "ㄌㄧㄢ")
varLineData.regReplace(pattern: "liao", replaceWith: "ㄌㄧㄠ")
varLineData.regReplace(pattern: "ling", replaceWith: "ㄌㄧㄥ")
varLineData.regReplace(pattern: "long", replaceWith: "ㄌㄨㄥ")
varLineData.regReplace(pattern: "luan", replaceWith: "ㄌㄨㄢ")
varLineData.regReplace(pattern: "lvan", replaceWith: "ㄌㄩㄢ")
varLineData.regReplace(pattern: "mang", replaceWith: "ㄇㄤ")
varLineData.regReplace(pattern: "meng", replaceWith: "ㄇㄥ")
varLineData.regReplace(pattern: "mian", replaceWith: "ㄇㄧㄢ")
varLineData.regReplace(pattern: "miao", replaceWith: "ㄇㄧㄠ")
varLineData.regReplace(pattern: "ming", replaceWith: "ㄇㄧㄥ")
varLineData.regReplace(pattern: "nang", replaceWith: "ㄋㄤ")
varLineData.regReplace(pattern: "neng", replaceWith: "ㄋㄥ")
varLineData.regReplace(pattern: "nian", replaceWith: "ㄋㄧㄢ")
varLineData.regReplace(pattern: "niao", replaceWith: "ㄋㄧㄠ")
varLineData.regReplace(pattern: "ning", replaceWith: "ㄋㄧㄥ")
varLineData.regReplace(pattern: "nong", replaceWith: "ㄋㄨㄥ")
varLineData.regReplace(pattern: "nuan", replaceWith: "ㄋㄨㄢ")
varLineData.regReplace(pattern: "pang", replaceWith: "ㄆㄤ")
varLineData.regReplace(pattern: "peng", replaceWith: "ㄆㄥ")
varLineData.regReplace(pattern: "pian", replaceWith: "ㄆㄧㄢ")
varLineData.regReplace(pattern: "piao", replaceWith: "ㄆㄧㄠ")
varLineData.regReplace(pattern: "ping", replaceWith: "ㄆㄧㄥ")
varLineData.regReplace(pattern: "qian", replaceWith: "ㄑㄧㄢ")
varLineData.regReplace(pattern: "qiao", replaceWith: "ㄑㄧㄠ")
varLineData.regReplace(pattern: "qing", replaceWith: "ㄑㄧㄥ")
varLineData.regReplace(pattern: "quan", replaceWith: "ㄑㄩㄢ")
varLineData.regReplace(pattern: "rang", replaceWith: "ㄖㄤ")
varLineData.regReplace(pattern: "reng", replaceWith: "ㄖㄥ")
varLineData.regReplace(pattern: "rong", replaceWith: "ㄖㄨㄥ")
varLineData.regReplace(pattern: "ruan", replaceWith: "ㄖㄨㄢ")
varLineData.regReplace(pattern: "sang", replaceWith: "ㄙㄤ")
varLineData.regReplace(pattern: "seng", replaceWith: "ㄙㄥ")
varLineData.regReplace(pattern: "shai", replaceWith: "ㄕㄞ")
varLineData.regReplace(pattern: "shan", replaceWith: "ㄕㄢ")
varLineData.regReplace(pattern: "shao", replaceWith: "ㄕㄠ")
varLineData.regReplace(pattern: "shei", replaceWith: "ㄕㄟ")
varLineData.regReplace(pattern: "shen", replaceWith: "ㄕㄣ")
varLineData.regReplace(pattern: "shou", replaceWith: "ㄕㄡ")
varLineData.regReplace(pattern: "shua", replaceWith: "ㄕㄨㄚ")
varLineData.regReplace(pattern: "shui", replaceWith: "ㄕㄨㄟ")
varLineData.regReplace(pattern: "shun", replaceWith: "ㄕㄨㄣ")
varLineData.regReplace(pattern: "shuo", replaceWith: "ㄕㄨㄛ")
varLineData.regReplace(pattern: "song", replaceWith: "ㄙㄨㄥ")
varLineData.regReplace(pattern: "suan", replaceWith: "ㄙㄨㄢ")
varLineData.regReplace(pattern: "tang", replaceWith: "ㄊㄤ")
varLineData.regReplace(pattern: "teng", replaceWith: "ㄊㄥ")
varLineData.regReplace(pattern: "tian", replaceWith: "ㄊㄧㄢ")
varLineData.regReplace(pattern: "tiao", replaceWith: "ㄊㄧㄠ")
varLineData.regReplace(pattern: "ting", replaceWith: "ㄊㄧㄥ")
varLineData.regReplace(pattern: "tong", replaceWith: "ㄊㄨㄥ")
varLineData.regReplace(pattern: "tuan", replaceWith: "ㄊㄨㄢ")
varLineData.regReplace(pattern: "wang", replaceWith: "ㄨㄤ")
varLineData.regReplace(pattern: "weng", replaceWith: "ㄨㄥ")
varLineData.regReplace(pattern: "xian", replaceWith: "ㄒㄧㄢ")
varLineData.regReplace(pattern: "xiao", replaceWith: "ㄒㄧㄠ")
varLineData.regReplace(pattern: "xing", replaceWith: "ㄒㄧㄥ")
varLineData.regReplace(pattern: "xuan", replaceWith: "ㄒㄩㄢ")
varLineData.regReplace(pattern: "yang", replaceWith: "ㄧㄤ")
varLineData.regReplace(pattern: "ying", replaceWith: "ㄧㄥ")
varLineData.regReplace(pattern: "yong", replaceWith: "ㄩㄥ")
varLineData.regReplace(pattern: "yuan", replaceWith: "ㄩㄢ")
varLineData.regReplace(pattern: "zang", replaceWith: "ㄗㄤ")
varLineData.regReplace(pattern: "zeng", replaceWith: "ㄗㄥ")
varLineData.regReplace(pattern: "zhai", replaceWith: "ㄓㄞ")
varLineData.regReplace(pattern: "zhan", replaceWith: "ㄓㄢ")
varLineData.regReplace(pattern: "zhao", replaceWith: "ㄓㄠ")
varLineData.regReplace(pattern: "zhei", replaceWith: "ㄓㄟ")
varLineData.regReplace(pattern: "zhen", replaceWith: "ㄓㄣ")
varLineData.regReplace(pattern: "zhou", replaceWith: "ㄓㄡ")
varLineData.regReplace(pattern: "zhua", replaceWith: "ㄓㄨㄚ")
varLineData.regReplace(pattern: "zhui", replaceWith: "ㄓㄨㄟ")
varLineData.regReplace(pattern: "zhun", replaceWith: "ㄓㄨㄣ")
varLineData.regReplace(pattern: "zhuo", replaceWith: "ㄓㄨㄛ")
varLineData.regReplace(pattern: "zong", replaceWith: "ㄗㄨㄥ")
varLineData.regReplace(pattern: "zuan", replaceWith: "ㄗㄨㄢ")
varLineData.regReplace(pattern: "jun", replaceWith: "ㄐㄩㄣ")
varLineData.regReplace(pattern: "ang", replaceWith: "")
varLineData.regReplace(pattern: "bai", replaceWith: "ㄅㄞ")
varLineData.regReplace(pattern: "ban", replaceWith: "ㄅㄢ")
varLineData.regReplace(pattern: "bao", replaceWith: "ㄅㄠ")
varLineData.regReplace(pattern: "bei", replaceWith: "ㄅㄟ")
varLineData.regReplace(pattern: "ben", replaceWith: "ㄅㄣ")
varLineData.regReplace(pattern: "bie", replaceWith: "ㄅㄧㄝ")
varLineData.regReplace(pattern: "bin", replaceWith: "ㄅㄧㄣ")
varLineData.regReplace(pattern: "cai", replaceWith: "ㄘㄞ")
varLineData.regReplace(pattern: "can", replaceWith: "ㄘㄢ")
varLineData.regReplace(pattern: "cao", replaceWith: "ㄘㄠ")
varLineData.regReplace(pattern: "cei", replaceWith: "ㄘㄟ")
varLineData.regReplace(pattern: "cen", replaceWith: "ㄘㄣ")
varLineData.regReplace(pattern: "cha", replaceWith: "ㄔㄚ")
varLineData.regReplace(pattern: "che", replaceWith: "ㄔㄜ")
varLineData.regReplace(pattern: "chi", replaceWith: "")
varLineData.regReplace(pattern: "chu", replaceWith: "ㄔㄨ")
varLineData.regReplace(pattern: "cou", replaceWith: "ㄘㄡ")
varLineData.regReplace(pattern: "cui", replaceWith: "ㄘㄨㄟ")
varLineData.regReplace(pattern: "cun", replaceWith: "ㄘㄨㄣ")
varLineData.regReplace(pattern: "cuo", replaceWith: "ㄘㄨㄛ")
varLineData.regReplace(pattern: "dai", replaceWith: "ㄉㄞ")
varLineData.regReplace(pattern: "dan", replaceWith: "ㄉㄢ")
varLineData.regReplace(pattern: "dao", replaceWith: "ㄉㄠ")
varLineData.regReplace(pattern: "dei", replaceWith: "ㄉㄟ")
varLineData.regReplace(pattern: "den", replaceWith: "ㄉㄣ")
varLineData.regReplace(pattern: "dia", replaceWith: "ㄉㄧㄚ")
varLineData.regReplace(pattern: "die", replaceWith: "ㄉㄧㄝ")
varLineData.regReplace(pattern: "diu", replaceWith: "ㄉㄧㄡ")
varLineData.regReplace(pattern: "dou", replaceWith: "ㄉㄡ")
varLineData.regReplace(pattern: "dui", replaceWith: "ㄉㄨㄟ")
varLineData.regReplace(pattern: "dun", replaceWith: "ㄉㄨㄣ")
varLineData.regReplace(pattern: "duo", replaceWith: "ㄉㄨㄛ")
varLineData.regReplace(pattern: "eng", replaceWith: "")
varLineData.regReplace(pattern: "fan", replaceWith: "ㄈㄢ")
varLineData.regReplace(pattern: "fei", replaceWith: "ㄈㄟ")
varLineData.regReplace(pattern: "fen", replaceWith: "ㄈㄣ")
varLineData.regReplace(pattern: "fou", replaceWith: "ㄈㄡ")
varLineData.regReplace(pattern: "gai", replaceWith: "ㄍㄞ")
varLineData.regReplace(pattern: "gan", replaceWith: "ㄍㄢ")
varLineData.regReplace(pattern: "gao", replaceWith: "ㄍㄠ")
varLineData.regReplace(pattern: "gei", replaceWith: "ㄍㄟ")
varLineData.regReplace(pattern: "gin", replaceWith: "ㄍㄧㄣ")
varLineData.regReplace(pattern: "gen", replaceWith: "ㄍㄣ")
varLineData.regReplace(pattern: "gou", replaceWith: "ㄍㄡ")
varLineData.regReplace(pattern: "gua", replaceWith: "ㄍㄨㄚ")
varLineData.regReplace(pattern: "gue", replaceWith: "ㄍㄨㄜ")
varLineData.regReplace(pattern: "gui", replaceWith: "ㄍㄨㄟ")
varLineData.regReplace(pattern: "gun", replaceWith: "ㄍㄨㄣ")
varLineData.regReplace(pattern: "guo", replaceWith: "ㄍㄨㄛ")
varLineData.regReplace(pattern: "hai", replaceWith: "ㄏㄞ")
varLineData.regReplace(pattern: "han", replaceWith: "ㄏㄢ")
varLineData.regReplace(pattern: "hao", replaceWith: "ㄏㄠ")
varLineData.regReplace(pattern: "hei", replaceWith: "ㄏㄟ")
varLineData.regReplace(pattern: "hen", replaceWith: "ㄏㄣ")
varLineData.regReplace(pattern: "hou", replaceWith: "ㄏㄡ")
varLineData.regReplace(pattern: "hua", replaceWith: "ㄏㄨㄚ")
varLineData.regReplace(pattern: "hui", replaceWith: "ㄏㄨㄟ")
varLineData.regReplace(pattern: "hun", replaceWith: "ㄏㄨㄣ")
varLineData.regReplace(pattern: "huo", replaceWith: "ㄏㄨㄛ")
varLineData.regReplace(pattern: "jia", replaceWith: "ㄐㄧㄚ")
varLineData.regReplace(pattern: "jie", replaceWith: "ㄐㄧㄝ")
varLineData.regReplace(pattern: "jin", replaceWith: "ㄐㄧㄣ")
varLineData.regReplace(pattern: "jiu", replaceWith: "ㄐㄧㄡ")
varLineData.regReplace(pattern: "jue", replaceWith: "ㄐㄩㄝ")
varLineData.regReplace(pattern: "kai", replaceWith: "ㄎㄞ")
varLineData.regReplace(pattern: "kan", replaceWith: "ㄎㄢ")
varLineData.regReplace(pattern: "kao", replaceWith: "ㄎㄠ")
varLineData.regReplace(pattern: "ken", replaceWith: "ㄎㄣ")
varLineData.regReplace(pattern: "kiu", replaceWith: "ㄎㄧㄡ")
varLineData.regReplace(pattern: "kou", replaceWith: "ㄎㄡ")
varLineData.regReplace(pattern: "kua", replaceWith: "ㄎㄨㄚ")
varLineData.regReplace(pattern: "kui", replaceWith: "ㄎㄨㄟ")
varLineData.regReplace(pattern: "kun", replaceWith: "ㄎㄨㄣ")
varLineData.regReplace(pattern: "kuo", replaceWith: "ㄎㄨㄛ")
varLineData.regReplace(pattern: "lai", replaceWith: "ㄌㄞ")
varLineData.regReplace(pattern: "lan", replaceWith: "ㄌㄢ")
varLineData.regReplace(pattern: "lao", replaceWith: "ㄌㄠ")
varLineData.regReplace(pattern: "lei", replaceWith: "ㄌㄟ")
varLineData.regReplace(pattern: "lia", replaceWith: "ㄌㄧㄚ")
varLineData.regReplace(pattern: "lie", replaceWith: "ㄌㄧㄝ")
varLineData.regReplace(pattern: "lin", replaceWith: "ㄌㄧㄣ")
varLineData.regReplace(pattern: "liu", replaceWith: "ㄌㄧㄡ")
varLineData.regReplace(pattern: "lou", replaceWith: "ㄌㄡ")
varLineData.regReplace(pattern: "lun", replaceWith: "ㄌㄨㄣ")
varLineData.regReplace(pattern: "luo", replaceWith: "ㄌㄨㄛ")
varLineData.regReplace(pattern: "lve", replaceWith: "ㄌㄩㄝ")
varLineData.regReplace(pattern: "mai", replaceWith: "ㄇㄞ")
varLineData.regReplace(pattern: "man", replaceWith: "ㄇㄢ")
varLineData.regReplace(pattern: "mao", replaceWith: "ㄇㄠ")
varLineData.regReplace(pattern: "mei", replaceWith: "ㄇㄟ")
varLineData.regReplace(pattern: "men", replaceWith: "ㄇㄣ")
varLineData.regReplace(pattern: "mie", replaceWith: "ㄇㄧㄝ")
varLineData.regReplace(pattern: "min", replaceWith: "ㄇㄧㄣ")
varLineData.regReplace(pattern: "miu", replaceWith: "ㄇㄧㄡ")
varLineData.regReplace(pattern: "mou", replaceWith: "ㄇㄡ")
varLineData.regReplace(pattern: "nai", replaceWith: "ㄋㄞ")
varLineData.regReplace(pattern: "nan", replaceWith: "ㄋㄢ")
varLineData.regReplace(pattern: "nao", replaceWith: "ㄋㄠ")
varLineData.regReplace(pattern: "nei", replaceWith: "ㄋㄟ")
varLineData.regReplace(pattern: "nen", replaceWith: "ㄋㄣ")
varLineData.regReplace(pattern: "nie", replaceWith: "ㄋㄧㄝ")
varLineData.regReplace(pattern: "nin", replaceWith: "ㄋㄧㄣ")
varLineData.regReplace(pattern: "niu", replaceWith: "ㄋㄧㄡ")
varLineData.regReplace(pattern: "nou", replaceWith: "ㄋㄡ")
varLineData.regReplace(pattern: "nui", replaceWith: "ㄋㄨㄟ")
varLineData.regReplace(pattern: "nun", replaceWith: "ㄋㄨㄣ")
varLineData.regReplace(pattern: "nuo", replaceWith: "ㄋㄨㄛ")
varLineData.regReplace(pattern: "nve", replaceWith: "ㄋㄩㄝ")
varLineData.regReplace(pattern: "pai", replaceWith: "ㄆㄞ")
varLineData.regReplace(pattern: "pan", replaceWith: "ㄆㄢ")
varLineData.regReplace(pattern: "pao", replaceWith: "ㄆㄠ")
varLineData.regReplace(pattern: "pei", replaceWith: "ㄆㄟ")
varLineData.regReplace(pattern: "pen", replaceWith: "ㄆㄣ")
varLineData.regReplace(pattern: "pia", replaceWith: "ㄆㄧㄚ")
varLineData.regReplace(pattern: "pie", replaceWith: "ㄆㄧㄝ")
varLineData.regReplace(pattern: "pin", replaceWith: "ㄆㄧㄣ")
varLineData.regReplace(pattern: "pou", replaceWith: "ㄆㄡ")
varLineData.regReplace(pattern: "qia", replaceWith: "ㄑㄧㄚ")
varLineData.regReplace(pattern: "qie", replaceWith: "ㄑㄧㄝ")
varLineData.regReplace(pattern: "qin", replaceWith: "ㄑㄧㄣ")
varLineData.regReplace(pattern: "qiu", replaceWith: "ㄑㄧㄡ")
varLineData.regReplace(pattern: "que", replaceWith: "ㄑㄩㄝ")
varLineData.regReplace(pattern: "qun", replaceWith: "ㄑㄩㄣ")
varLineData.regReplace(pattern: "ran", replaceWith: "ㄖㄢ")
varLineData.regReplace(pattern: "rao", replaceWith: "ㄖㄠ")
varLineData.regReplace(pattern: "ren", replaceWith: "ㄖㄣ")
varLineData.regReplace(pattern: "rou", replaceWith: "ㄖㄡ")
varLineData.regReplace(pattern: "rui", replaceWith: "ㄖㄨㄟ")
varLineData.regReplace(pattern: "run", replaceWith: "ㄖㄨㄣ")
varLineData.regReplace(pattern: "ruo", replaceWith: "ㄖㄨㄛ")
varLineData.regReplace(pattern: "sai", replaceWith: "ㄙㄞ")
varLineData.regReplace(pattern: "san", replaceWith: "ㄙㄢ")
varLineData.regReplace(pattern: "sao", replaceWith: "ㄙㄠ")
varLineData.regReplace(pattern: "sei", replaceWith: "ㄙㄟ")
varLineData.regReplace(pattern: "sen", replaceWith: "ㄙㄣ")
varLineData.regReplace(pattern: "sha", replaceWith: "ㄕㄚ")
varLineData.regReplace(pattern: "she", replaceWith: "ㄕㄜ")
varLineData.regReplace(pattern: "shi", replaceWith: "")
varLineData.regReplace(pattern: "shu", replaceWith: "ㄕㄨ")
varLineData.regReplace(pattern: "sou", replaceWith: "ㄙㄡ")
varLineData.regReplace(pattern: "sui", replaceWith: "ㄙㄨㄟ")
varLineData.regReplace(pattern: "sun", replaceWith: "ㄙㄨㄣ")
varLineData.regReplace(pattern: "suo", replaceWith: "ㄙㄨㄛ")
varLineData.regReplace(pattern: "tai", replaceWith: "ㄊㄞ")
varLineData.regReplace(pattern: "tan", replaceWith: "ㄊㄢ")
varLineData.regReplace(pattern: "tao", replaceWith: "ㄊㄠ")
varLineData.regReplace(pattern: "tie", replaceWith: "ㄊㄧㄝ")
varLineData.regReplace(pattern: "tou", replaceWith: "ㄊㄡ")
varLineData.regReplace(pattern: "tui", replaceWith: "ㄊㄨㄟ")
varLineData.regReplace(pattern: "tun", replaceWith: "ㄊㄨㄣ")
varLineData.regReplace(pattern: "tuo", replaceWith: "ㄊㄨㄛ")
varLineData.regReplace(pattern: "wai", replaceWith: "ㄨㄞ")
varLineData.regReplace(pattern: "wan", replaceWith: "ㄨㄢ")
varLineData.regReplace(pattern: "wei", replaceWith: "ㄨㄟ")
varLineData.regReplace(pattern: "wen", replaceWith: "ㄨㄣ")
varLineData.regReplace(pattern: "xia", replaceWith: "ㄒㄧㄚ")
varLineData.regReplace(pattern: "xie", replaceWith: "ㄒㄧㄝ")
varLineData.regReplace(pattern: "xin", replaceWith: "ㄒㄧㄣ")
varLineData.regReplace(pattern: "xiu", replaceWith: "ㄒㄧㄡ")
varLineData.regReplace(pattern: "xue", replaceWith: "ㄒㄩㄝ")
varLineData.regReplace(pattern: "xun", replaceWith: "ㄒㄩㄣ")
varLineData.regReplace(pattern: "yai", replaceWith: "ㄧㄞ")
varLineData.regReplace(pattern: "yan", replaceWith: "ㄧㄢ")
varLineData.regReplace(pattern: "yao", replaceWith: "ㄧㄠ")
varLineData.regReplace(pattern: "yin", replaceWith: "ㄧㄣ")
varLineData.regReplace(pattern: "you", replaceWith: "ㄧㄡ")
varLineData.regReplace(pattern: "yue", replaceWith: "ㄩㄝ")
varLineData.regReplace(pattern: "yun", replaceWith: "ㄩㄣ")
varLineData.regReplace(pattern: "zai", replaceWith: "ㄗㄞ")
varLineData.regReplace(pattern: "zan", replaceWith: "ㄗㄢ")
varLineData.regReplace(pattern: "zao", replaceWith: "ㄗㄠ")
varLineData.regReplace(pattern: "zei", replaceWith: "ㄗㄟ")
varLineData.regReplace(pattern: "zen", replaceWith: "ㄗㄣ")
varLineData.regReplace(pattern: "zha", replaceWith: "ㄓㄚ")
varLineData.regReplace(pattern: "zhe", replaceWith: "ㄓㄜ")
varLineData.regReplace(pattern: "zhi", replaceWith: "")
varLineData.regReplace(pattern: "zhu", replaceWith: "ㄓㄨ")
varLineData.regReplace(pattern: "zou", replaceWith: "ㄗㄡ")
varLineData.regReplace(pattern: "zui", replaceWith: "ㄗㄨㄟ")
varLineData.regReplace(pattern: "zun", replaceWith: "ㄗㄨㄣ")
varLineData.regReplace(pattern: "zuo", replaceWith: "ㄗㄨㄛ")
varLineData.regReplace(pattern: "ai", replaceWith: "")
varLineData.regReplace(pattern: "an", replaceWith: "")
varLineData.regReplace(pattern: "ao", replaceWith: "")
varLineData.regReplace(pattern: "ba", replaceWith: "ㄅㄚ")
varLineData.regReplace(pattern: "bi", replaceWith: "ㄅㄧ")
varLineData.regReplace(pattern: "bo", replaceWith: "ㄅㄛ")
varLineData.regReplace(pattern: "bu", replaceWith: "ㄅㄨ")
varLineData.regReplace(pattern: "ca", replaceWith: "ㄘㄚ")
varLineData.regReplace(pattern: "ce", replaceWith: "ㄘㄜ")
varLineData.regReplace(pattern: "ci", replaceWith: "")
varLineData.regReplace(pattern: "cu", replaceWith: "ㄘㄨ")
varLineData.regReplace(pattern: "da", replaceWith: "ㄉㄚ")
varLineData.regReplace(pattern: "de", replaceWith: "ㄉㄜ")
varLineData.regReplace(pattern: "di", replaceWith: "ㄉㄧ")
varLineData.regReplace(pattern: "du", replaceWith: "ㄉㄨ")
varLineData.regReplace(pattern: "eh", replaceWith: "")
varLineData.regReplace(pattern: "ei", replaceWith: "")
varLineData.regReplace(pattern: "en", replaceWith: "")
varLineData.regReplace(pattern: "er", replaceWith: "")
varLineData.regReplace(pattern: "fa", replaceWith: "ㄈㄚ")
varLineData.regReplace(pattern: "fo", replaceWith: "ㄈㄛ")
varLineData.regReplace(pattern: "fu", replaceWith: "ㄈㄨ")
varLineData.regReplace(pattern: "ga", replaceWith: "ㄍㄚ")
varLineData.regReplace(pattern: "ge", replaceWith: "ㄍㄜ")
varLineData.regReplace(pattern: "gi", replaceWith: "ㄍㄧ")
varLineData.regReplace(pattern: "gu", replaceWith: "ㄍㄨ")
varLineData.regReplace(pattern: "ha", replaceWith: "ㄏㄚ")
varLineData.regReplace(pattern: "he", replaceWith: "ㄏㄜ")
varLineData.regReplace(pattern: "hu", replaceWith: "ㄏㄨ")
varLineData.regReplace(pattern: "ji", replaceWith: "ㄐㄧ")
varLineData.regReplace(pattern: "ju", replaceWith: "ㄐㄩ")
varLineData.regReplace(pattern: "ka", replaceWith: "ㄎㄚ")
varLineData.regReplace(pattern: "ke", replaceWith: "ㄎㄜ")
varLineData.regReplace(pattern: "ku", replaceWith: "ㄎㄨ")
varLineData.regReplace(pattern: "la", replaceWith: "ㄌㄚ")
varLineData.regReplace(pattern: "le", replaceWith: "ㄌㄜ")
varLineData.regReplace(pattern: "li", replaceWith: "ㄌㄧ")
varLineData.regReplace(pattern: "lo", replaceWith: "ㄌㄛ")
varLineData.regReplace(pattern: "lu", replaceWith: "ㄌㄨ")
varLineData.regReplace(pattern: "lv", replaceWith: "ㄌㄩ")
varLineData.regReplace(pattern: "ma", replaceWith: "ㄇㄚ")
varLineData.regReplace(pattern: "me", replaceWith: "ㄇㄜ")
varLineData.regReplace(pattern: "mi", replaceWith: "ㄇㄧ")
varLineData.regReplace(pattern: "mo", replaceWith: "ㄇㄛ")
varLineData.regReplace(pattern: "mu", replaceWith: "ㄇㄨ")
varLineData.regReplace(pattern: "na", replaceWith: "ㄋㄚ")
varLineData.regReplace(pattern: "ne", replaceWith: "ㄋㄜ")
varLineData.regReplace(pattern: "ni", replaceWith: "ㄋㄧ")
varLineData.regReplace(pattern: "nu", replaceWith: "ㄋㄨ")
varLineData.regReplace(pattern: "nv", replaceWith: "ㄋㄩ")
varLineData.regReplace(pattern: "ou", replaceWith: "")
varLineData.regReplace(pattern: "pa", replaceWith: "ㄆㄚ")
varLineData.regReplace(pattern: "pi", replaceWith: "ㄆㄧ")
varLineData.regReplace(pattern: "po", replaceWith: "ㄆㄛ")
varLineData.regReplace(pattern: "pu", replaceWith: "ㄆㄨ")
varLineData.regReplace(pattern: "qi", replaceWith: "ㄑㄧ")
varLineData.regReplace(pattern: "qu", replaceWith: "ㄑㄩ")
varLineData.regReplace(pattern: "re", replaceWith: "ㄖㄜ")
varLineData.regReplace(pattern: "ri", replaceWith: "")
varLineData.regReplace(pattern: "ru", replaceWith: "ㄖㄨ")
varLineData.regReplace(pattern: "sa", replaceWith: "ㄙㄚ")
varLineData.regReplace(pattern: "se", replaceWith: "ㄙㄜ")
varLineData.regReplace(pattern: "si", replaceWith: "")
varLineData.regReplace(pattern: "su", replaceWith: "ㄙㄨ")
varLineData.regReplace(pattern: "ta", replaceWith: "ㄊㄚ")
varLineData.regReplace(pattern: "te", replaceWith: "ㄊㄜ")
varLineData.regReplace(pattern: "ti", replaceWith: "ㄊㄧ")
varLineData.regReplace(pattern: "tu", replaceWith: "ㄊㄨ")
varLineData.regReplace(pattern: "wa", replaceWith: "ㄨㄚ")
varLineData.regReplace(pattern: "wo", replaceWith: "ㄨㄛ")
varLineData.regReplace(pattern: "wu", replaceWith: "")
varLineData.regReplace(pattern: "xi", replaceWith: "ㄒㄧ")
varLineData.regReplace(pattern: "xu", replaceWith: "ㄒㄩ")
varLineData.regReplace(pattern: "ya", replaceWith: "ㄧㄚ")
varLineData.regReplace(pattern: "ye", replaceWith: "ㄧㄝ")
varLineData.regReplace(pattern: "yi", replaceWith: "")
varLineData.regReplace(pattern: "yo", replaceWith: "ㄧㄛ")
varLineData.regReplace(pattern: "yu", replaceWith: "")
varLineData.regReplace(pattern: "za", replaceWith: "ㄗㄚ")
varLineData.regReplace(pattern: "ze", replaceWith: "ㄗㄜ")
varLineData.regReplace(pattern: "zi", replaceWith: "")
varLineData.regReplace(pattern: "zu", replaceWith: "ㄗㄨ")
varLineData.regReplace(pattern: "a", replaceWith: "")
varLineData.regReplace(pattern: "e", replaceWith: "")
varLineData.regReplace(pattern: "o", replaceWith: "")
varLineData.regReplace(pattern: "q", replaceWith: "")
varLineData.regReplace(pattern: "2", replaceWith: "ˊ")
varLineData.regReplace(pattern: "3", replaceWith: "ˇ")
varLineData.regReplace(pattern: "4", replaceWith: "ˋ")
varLineData.regReplace(pattern: "5", replaceWith: "˙")
varLineData.regReplace(pattern: "1", replaceWith: "")
varLineData.selfReplace("chuang", "ㄔㄨㄤ")
varLineData.selfReplace("shuang", "ㄕㄨㄤ")
varLineData.selfReplace("zhuang", "ㄓㄨㄤ")
varLineData.selfReplace("chang", "ㄔㄤ")
varLineData.selfReplace("cheng", "ㄔㄥ")
varLineData.selfReplace("chong", "ㄔㄨㄥ")
varLineData.selfReplace("chuai", "ㄔㄨㄞ")
varLineData.selfReplace("chuan", "ㄔㄨㄢ")
varLineData.selfReplace("guang", "ㄍㄨㄤ")
varLineData.selfReplace("huang", "ㄏㄨㄤ")
varLineData.selfReplace("jiang", "ㄐㄧㄤ")
varLineData.selfReplace("jiong", "ㄐㄩㄥ")
varLineData.selfReplace("kuang", "ㄎㄨㄤ")
varLineData.selfReplace("liang", "ㄌㄧㄤ")
varLineData.selfReplace("niang", "ㄋㄧㄤ")
varLineData.selfReplace("qiang", "ㄑㄧㄤ")
varLineData.selfReplace("qiong", "ㄑㄩㄥ")
varLineData.selfReplace("shang", "ㄕㄤ")
varLineData.selfReplace("sheng", "ㄕㄥ")
varLineData.selfReplace("shuai", "ㄕㄨㄞ")
varLineData.selfReplace("shuan", "ㄕㄨㄢ")
varLineData.selfReplace("xiang", "ㄒㄧㄤ")
varLineData.selfReplace("xiong", "ㄒㄩㄥ")
varLineData.selfReplace("zhang", "ㄓㄤ")
varLineData.selfReplace("zheng", "ㄓㄥ")
varLineData.selfReplace("zhong", "ㄓㄨㄥ")
varLineData.selfReplace("zhuai", "ㄓㄨㄞ")
varLineData.selfReplace("zhuan", "ㄓㄨㄢ")
varLineData.selfReplace("bang", "ㄅㄤ")
varLineData.selfReplace("beng", "ㄅㄥ")
varLineData.selfReplace("bian", "ㄅㄧㄢ")
varLineData.selfReplace("biao", "ㄅㄧㄠ")
varLineData.selfReplace("bing", "ㄅㄧㄥ")
varLineData.selfReplace("cang", "ㄘㄤ")
varLineData.selfReplace("ceng", "ㄘㄥ")
varLineData.selfReplace("chai", "ㄔㄞ")
varLineData.selfReplace("chan", "ㄔㄢ")
varLineData.selfReplace("chao", "ㄔㄠ")
varLineData.selfReplace("chen", "ㄔㄣ")
varLineData.selfReplace("chou", "ㄔㄡ")
varLineData.selfReplace("chua", "ㄔㄨㄚ")
varLineData.selfReplace("chui", "ㄔㄨㄟ")
varLineData.selfReplace("chun", "ㄔㄨㄣ")
varLineData.selfReplace("chuo", "ㄔㄨㄛ")
varLineData.selfReplace("cong", "ㄘㄨㄥ")
varLineData.selfReplace("cuan", "ㄘㄨㄢ")
varLineData.selfReplace("dang", "ㄉㄤ")
varLineData.selfReplace("deng", "ㄉㄥ")
varLineData.selfReplace("dian", "ㄉㄧㄢ")
varLineData.selfReplace("diao", "ㄉㄧㄠ")
varLineData.selfReplace("ding", "ㄉㄧㄥ")
varLineData.selfReplace("dong", "ㄉㄨㄥ")
varLineData.selfReplace("duan", "ㄉㄨㄢ")
varLineData.selfReplace("fang", "ㄈㄤ")
varLineData.selfReplace("feng", "ㄈㄥ")
varLineData.selfReplace("fiao", "ㄈㄧㄠ")
varLineData.selfReplace("fong", "ㄈㄨㄥ")
varLineData.selfReplace("gang", "ㄍㄤ")
varLineData.selfReplace("geng", "ㄍㄥ")
varLineData.selfReplace("giao", "ㄍㄧㄠ")
varLineData.selfReplace("gong", "ㄍㄨㄥ")
varLineData.selfReplace("guai", "ㄍㄨㄞ")
varLineData.selfReplace("guan", "ㄍㄨㄢ")
varLineData.selfReplace("hang", "ㄏㄤ")
varLineData.selfReplace("heng", "ㄏㄥ")
varLineData.selfReplace("hong", "ㄏㄨㄥ")
varLineData.selfReplace("huai", "ㄏㄨㄞ")
varLineData.selfReplace("huan", "ㄏㄨㄢ")
varLineData.selfReplace("jian", "ㄐㄧㄢ")
varLineData.selfReplace("jiao", "ㄐㄧㄠ")
varLineData.selfReplace("jing", "ㄐㄧㄥ")
varLineData.selfReplace("juan", "ㄐㄩㄢ")
varLineData.selfReplace("kang", "ㄎㄤ")
varLineData.selfReplace("keng", "ㄎㄥ")
varLineData.selfReplace("kong", "ㄎㄨㄥ")
varLineData.selfReplace("kuai", "ㄎㄨㄞ")
varLineData.selfReplace("kuan", "ㄎㄨㄢ")
varLineData.selfReplace("lang", "ㄌㄤ")
varLineData.selfReplace("leng", "ㄌㄥ")
varLineData.selfReplace("lian", "ㄌㄧㄢ")
varLineData.selfReplace("liao", "ㄌㄧㄠ")
varLineData.selfReplace("ling", "ㄌㄧㄥ")
varLineData.selfReplace("long", "ㄌㄨㄥ")
varLineData.selfReplace("luan", "ㄌㄨㄢ")
varLineData.selfReplace("lvan", "ㄌㄩㄢ")
varLineData.selfReplace("mang", "ㄇㄤ")
varLineData.selfReplace("meng", "ㄇㄥ")
varLineData.selfReplace("mian", "ㄇㄧㄢ")
varLineData.selfReplace("miao", "ㄇㄧㄠ")
varLineData.selfReplace("ming", "ㄇㄧㄥ")
varLineData.selfReplace("nang", "ㄋㄤ")
varLineData.selfReplace("neng", "ㄋㄥ")
varLineData.selfReplace("nian", "ㄋㄧㄢ")
varLineData.selfReplace("niao", "ㄋㄧㄠ")
varLineData.selfReplace("ning", "ㄋㄧㄥ")
varLineData.selfReplace("nong", "ㄋㄨㄥ")
varLineData.selfReplace("nuan", "ㄋㄨㄢ")
varLineData.selfReplace("pang", "ㄆㄤ")
varLineData.selfReplace("peng", "ㄆㄥ")
varLineData.selfReplace("pian", "ㄆㄧㄢ")
varLineData.selfReplace("piao", "ㄆㄧㄠ")
varLineData.selfReplace("ping", "ㄆㄧㄥ")
varLineData.selfReplace("qian", "ㄑㄧㄢ")
varLineData.selfReplace("qiao", "ㄑㄧㄠ")
varLineData.selfReplace("qing", "ㄑㄧㄥ")
varLineData.selfReplace("quan", "ㄑㄩㄢ")
varLineData.selfReplace("rang", "ㄖㄤ")
varLineData.selfReplace("reng", "ㄖㄥ")
varLineData.selfReplace("rong", "ㄖㄨㄥ")
varLineData.selfReplace("ruan", "ㄖㄨㄢ")
varLineData.selfReplace("sang", "ㄙㄤ")
varLineData.selfReplace("seng", "ㄙㄥ")
varLineData.selfReplace("shai", "ㄕㄞ")
varLineData.selfReplace("shan", "ㄕㄢ")
varLineData.selfReplace("shao", "ㄕㄠ")
varLineData.selfReplace("shei", "ㄕㄟ")
varLineData.selfReplace("shen", "ㄕㄣ")
varLineData.selfReplace("shou", "ㄕㄡ")
varLineData.selfReplace("shua", "ㄕㄨㄚ")
varLineData.selfReplace("shui", "ㄕㄨㄟ")
varLineData.selfReplace("shun", "ㄕㄨㄣ")
varLineData.selfReplace("shuo", "ㄕㄨㄛ")
varLineData.selfReplace("song", "ㄙㄨㄥ")
varLineData.selfReplace("suan", "ㄙㄨㄢ")
varLineData.selfReplace("tang", "ㄊㄤ")
varLineData.selfReplace("teng", "ㄊㄥ")
varLineData.selfReplace("tian", "ㄊㄧㄢ")
varLineData.selfReplace("tiao", "ㄊㄧㄠ")
varLineData.selfReplace("ting", "ㄊㄧㄥ")
varLineData.selfReplace("tong", "ㄊㄨㄥ")
varLineData.selfReplace("tuan", "ㄊㄨㄢ")
varLineData.selfReplace("wang", "ㄨㄤ")
varLineData.selfReplace("weng", "ㄨㄥ")
varLineData.selfReplace("xian", "ㄒㄧㄢ")
varLineData.selfReplace("xiao", "ㄒㄧㄠ")
varLineData.selfReplace("xing", "ㄒㄧㄥ")
varLineData.selfReplace("xuan", "ㄒㄩㄢ")
varLineData.selfReplace("yang", "ㄧㄤ")
varLineData.selfReplace("ying", "ㄧㄥ")
varLineData.selfReplace("yong", "ㄩㄥ")
varLineData.selfReplace("yuan", "ㄩㄢ")
varLineData.selfReplace("zang", "ㄗㄤ")
varLineData.selfReplace("zeng", "ㄗㄥ")
varLineData.selfReplace("zhai", "ㄓㄞ")
varLineData.selfReplace("zhan", "ㄓㄢ")
varLineData.selfReplace("zhao", "ㄓㄠ")
varLineData.selfReplace("zhei", "ㄓㄟ")
varLineData.selfReplace("zhen", "ㄓㄣ")
varLineData.selfReplace("zhou", "ㄓㄡ")
varLineData.selfReplace("zhua", "ㄓㄨㄚ")
varLineData.selfReplace("zhui", "ㄓㄨㄟ")
varLineData.selfReplace("zhun", "ㄓㄨㄣ")
varLineData.selfReplace("zhuo", "ㄓㄨㄛ")
varLineData.selfReplace("zong", "ㄗㄨㄥ")
varLineData.selfReplace("zuan", "ㄗㄨㄢ")
varLineData.selfReplace("jun", "ㄐㄩㄣ")
varLineData.selfReplace("ang", "")
varLineData.selfReplace("bai", "ㄅㄞ")
varLineData.selfReplace("ban", "ㄅㄢ")
varLineData.selfReplace("bao", "ㄅㄠ")
varLineData.selfReplace("bei", "ㄅㄟ")
varLineData.selfReplace("ben", "ㄅㄣ")
varLineData.selfReplace("bie", "ㄅㄧㄝ")
varLineData.selfReplace("bin", "ㄅㄧㄣ")
varLineData.selfReplace("cai", "ㄘㄞ")
varLineData.selfReplace("can", "ㄘㄢ")
varLineData.selfReplace("cao", "ㄘㄠ")
varLineData.selfReplace("cei", "ㄘㄟ")
varLineData.selfReplace("cen", "ㄘㄣ")
varLineData.selfReplace("cha", "ㄔㄚ")
varLineData.selfReplace("che", "ㄔㄜ")
varLineData.selfReplace("chi", "")
varLineData.selfReplace("chu", "ㄔㄨ")
varLineData.selfReplace("cou", "ㄘㄡ")
varLineData.selfReplace("cui", "ㄘㄨㄟ")
varLineData.selfReplace("cun", "ㄘㄨㄣ")
varLineData.selfReplace("cuo", "ㄘㄨㄛ")
varLineData.selfReplace("dai", "ㄉㄞ")
varLineData.selfReplace("dan", "ㄉㄢ")
varLineData.selfReplace("dao", "ㄉㄠ")
varLineData.selfReplace("dei", "ㄉㄟ")
varLineData.selfReplace("den", "ㄉㄣ")
varLineData.selfReplace("dia", "ㄉㄧㄚ")
varLineData.selfReplace("die", "ㄉㄧㄝ")
varLineData.selfReplace("diu", "ㄉㄧㄡ")
varLineData.selfReplace("dou", "ㄉㄡ")
varLineData.selfReplace("dui", "ㄉㄨㄟ")
varLineData.selfReplace("dun", "ㄉㄨㄣ")
varLineData.selfReplace("duo", "ㄉㄨㄛ")
varLineData.selfReplace("eng", "")
varLineData.selfReplace("fan", "ㄈㄢ")
varLineData.selfReplace("fei", "ㄈㄟ")
varLineData.selfReplace("fen", "ㄈㄣ")
varLineData.selfReplace("fou", "ㄈㄡ")
varLineData.selfReplace("gai", "ㄍㄞ")
varLineData.selfReplace("gan", "ㄍㄢ")
varLineData.selfReplace("gao", "ㄍㄠ")
varLineData.selfReplace("gei", "ㄍㄟ")
varLineData.selfReplace("gin", "ㄍㄧㄣ")
varLineData.selfReplace("gen", "ㄍㄣ")
varLineData.selfReplace("gou", "ㄍㄡ")
varLineData.selfReplace("gua", "ㄍㄨㄚ")
varLineData.selfReplace("gue", "ㄍㄨㄜ")
varLineData.selfReplace("gui", "ㄍㄨㄟ")
varLineData.selfReplace("gun", "ㄍㄨㄣ")
varLineData.selfReplace("guo", "ㄍㄨㄛ")
varLineData.selfReplace("hai", "ㄏㄞ")
varLineData.selfReplace("han", "ㄏㄢ")
varLineData.selfReplace("hao", "ㄏㄠ")
varLineData.selfReplace("hei", "ㄏㄟ")
varLineData.selfReplace("hen", "ㄏㄣ")
varLineData.selfReplace("hou", "ㄏㄡ")
varLineData.selfReplace("hua", "ㄏㄨㄚ")
varLineData.selfReplace("hui", "ㄏㄨㄟ")
varLineData.selfReplace("hun", "ㄏㄨㄣ")
varLineData.selfReplace("huo", "ㄏㄨㄛ")
varLineData.selfReplace("jia", "ㄐㄧㄚ")
varLineData.selfReplace("jie", "ㄐㄧㄝ")
varLineData.selfReplace("jin", "ㄐㄧㄣ")
varLineData.selfReplace("jiu", "ㄐㄧㄡ")
varLineData.selfReplace("jue", "ㄐㄩㄝ")
varLineData.selfReplace("kai", "ㄎㄞ")
varLineData.selfReplace("kan", "ㄎㄢ")
varLineData.selfReplace("kao", "ㄎㄠ")
varLineData.selfReplace("ken", "ㄎㄣ")
varLineData.selfReplace("kiu", "ㄎㄧㄡ")
varLineData.selfReplace("kou", "ㄎㄡ")
varLineData.selfReplace("kua", "ㄎㄨㄚ")
varLineData.selfReplace("kui", "ㄎㄨㄟ")
varLineData.selfReplace("kun", "ㄎㄨㄣ")
varLineData.selfReplace("kuo", "ㄎㄨㄛ")
varLineData.selfReplace("lai", "ㄌㄞ")
varLineData.selfReplace("lan", "ㄌㄢ")
varLineData.selfReplace("lao", "ㄌㄠ")
varLineData.selfReplace("lei", "ㄌㄟ")
varLineData.selfReplace("lia", "ㄌㄧㄚ")
varLineData.selfReplace("lie", "ㄌㄧㄝ")
varLineData.selfReplace("lin", "ㄌㄧㄣ")
varLineData.selfReplace("liu", "ㄌㄧㄡ")
varLineData.selfReplace("lou", "ㄌㄡ")
varLineData.selfReplace("lun", "ㄌㄨㄣ")
varLineData.selfReplace("luo", "ㄌㄨㄛ")
varLineData.selfReplace("lve", "ㄌㄩㄝ")
varLineData.selfReplace("mai", "ㄇㄞ")
varLineData.selfReplace("man", "ㄇㄢ")
varLineData.selfReplace("mao", "ㄇㄠ")
varLineData.selfReplace("mei", "ㄇㄟ")
varLineData.selfReplace("men", "ㄇㄣ")
varLineData.selfReplace("mie", "ㄇㄧㄝ")
varLineData.selfReplace("min", "ㄇㄧㄣ")
varLineData.selfReplace("miu", "ㄇㄧㄡ")
varLineData.selfReplace("mou", "ㄇㄡ")
varLineData.selfReplace("nai", "ㄋㄞ")
varLineData.selfReplace("nan", "ㄋㄢ")
varLineData.selfReplace("nao", "ㄋㄠ")
varLineData.selfReplace("nei", "ㄋㄟ")
varLineData.selfReplace("nen", "ㄋㄣ")
varLineData.selfReplace("nie", "ㄋㄧㄝ")
varLineData.selfReplace("nin", "ㄋㄧㄣ")
varLineData.selfReplace("niu", "ㄋㄧㄡ")
varLineData.selfReplace("nou", "ㄋㄡ")
varLineData.selfReplace("nui", "ㄋㄨㄟ")
varLineData.selfReplace("nun", "ㄋㄨㄣ")
varLineData.selfReplace("nuo", "ㄋㄨㄛ")
varLineData.selfReplace("nve", "ㄋㄩㄝ")
varLineData.selfReplace("pai", "ㄆㄞ")
varLineData.selfReplace("pan", "ㄆㄢ")
varLineData.selfReplace("pao", "ㄆㄠ")
varLineData.selfReplace("pei", "ㄆㄟ")
varLineData.selfReplace("pen", "ㄆㄣ")
varLineData.selfReplace("pia", "ㄆㄧㄚ")
varLineData.selfReplace("pie", "ㄆㄧㄝ")
varLineData.selfReplace("pin", "ㄆㄧㄣ")
varLineData.selfReplace("pou", "ㄆㄡ")
varLineData.selfReplace("qia", "ㄑㄧㄚ")
varLineData.selfReplace("qie", "ㄑㄧㄝ")
varLineData.selfReplace("qin", "ㄑㄧㄣ")
varLineData.selfReplace("qiu", "ㄑㄧㄡ")
varLineData.selfReplace("que", "ㄑㄩㄝ")
varLineData.selfReplace("qun", "ㄑㄩㄣ")
varLineData.selfReplace("ran", "ㄖㄢ")
varLineData.selfReplace("rao", "ㄖㄠ")
varLineData.selfReplace("ren", "ㄖㄣ")
varLineData.selfReplace("rou", "ㄖㄡ")
varLineData.selfReplace("rui", "ㄖㄨㄟ")
varLineData.selfReplace("run", "ㄖㄨㄣ")
varLineData.selfReplace("ruo", "ㄖㄨㄛ")
varLineData.selfReplace("sai", "ㄙㄞ")
varLineData.selfReplace("san", "ㄙㄢ")
varLineData.selfReplace("sao", "ㄙㄠ")
varLineData.selfReplace("sei", "ㄙㄟ")
varLineData.selfReplace("sen", "ㄙㄣ")
varLineData.selfReplace("sha", "ㄕㄚ")
varLineData.selfReplace("she", "ㄕㄜ")
varLineData.selfReplace("shi", "")
varLineData.selfReplace("shu", "ㄕㄨ")
varLineData.selfReplace("sou", "ㄙㄡ")
varLineData.selfReplace("sui", "ㄙㄨㄟ")
varLineData.selfReplace("sun", "ㄙㄨㄣ")
varLineData.selfReplace("suo", "ㄙㄨㄛ")
varLineData.selfReplace("tai", "ㄊㄞ")
varLineData.selfReplace("tan", "ㄊㄢ")
varLineData.selfReplace("tao", "ㄊㄠ")
varLineData.selfReplace("tie", "ㄊㄧㄝ")
varLineData.selfReplace("tou", "ㄊㄡ")
varLineData.selfReplace("tui", "ㄊㄨㄟ")
varLineData.selfReplace("tun", "ㄊㄨㄣ")
varLineData.selfReplace("tuo", "ㄊㄨㄛ")
varLineData.selfReplace("wai", "ㄨㄞ")
varLineData.selfReplace("wan", "ㄨㄢ")
varLineData.selfReplace("wei", "ㄨㄟ")
varLineData.selfReplace("wen", "ㄨㄣ")
varLineData.selfReplace("xia", "ㄒㄧㄚ")
varLineData.selfReplace("xie", "ㄒㄧㄝ")
varLineData.selfReplace("xin", "ㄒㄧㄣ")
varLineData.selfReplace("xiu", "ㄒㄧㄡ")
varLineData.selfReplace("xue", "ㄒㄩㄝ")
varLineData.selfReplace("xun", "ㄒㄩㄣ")
varLineData.selfReplace("yai", "ㄧㄞ")
varLineData.selfReplace("yan", "ㄧㄢ")
varLineData.selfReplace("yao", "ㄧㄠ")
varLineData.selfReplace("yin", "ㄧㄣ")
varLineData.selfReplace("you", "ㄧㄡ")
varLineData.selfReplace("yue", "ㄩㄝ")
varLineData.selfReplace("yun", "ㄩㄣ")
varLineData.selfReplace("zai", "ㄗㄞ")
varLineData.selfReplace("zan", "ㄗㄢ")
varLineData.selfReplace("zao", "ㄗㄠ")
varLineData.selfReplace("zei", "ㄗㄟ")
varLineData.selfReplace("zen", "ㄗㄣ")
varLineData.selfReplace("zha", "ㄓㄚ")
varLineData.selfReplace("zhe", "ㄓㄜ")
varLineData.selfReplace("zhi", "")
varLineData.selfReplace("zhu", "ㄓㄨ")
varLineData.selfReplace("zou", "ㄗㄡ")
varLineData.selfReplace("zui", "ㄗㄨㄟ")
varLineData.selfReplace("zun", "ㄗㄨㄣ")
varLineData.selfReplace("zuo", "ㄗㄨㄛ")
varLineData.selfReplace("ai", "")
varLineData.selfReplace("an", "")
varLineData.selfReplace("ao", "")
varLineData.selfReplace("ba", "ㄅㄚ")
varLineData.selfReplace("bi", "ㄅㄧ")
varLineData.selfReplace("bo", "ㄅㄛ")
varLineData.selfReplace("bu", "ㄅㄨ")
varLineData.selfReplace("ca", "ㄘㄚ")
varLineData.selfReplace("ce", "ㄘㄜ")
varLineData.selfReplace("ci", "")
varLineData.selfReplace("cu", "ㄘㄨ")
varLineData.selfReplace("da", "ㄉㄚ")
varLineData.selfReplace("de", "ㄉㄜ")
varLineData.selfReplace("di", "ㄉㄧ")
varLineData.selfReplace("du", "ㄉㄨ")
varLineData.selfReplace("eh", "")
varLineData.selfReplace("ei", "")
varLineData.selfReplace("en", "")
varLineData.selfReplace("er", "")
varLineData.selfReplace("fa", "ㄈㄚ")
varLineData.selfReplace("fo", "ㄈㄛ")
varLineData.selfReplace("fu", "ㄈㄨ")
varLineData.selfReplace("ga", "ㄍㄚ")
varLineData.selfReplace("ge", "ㄍㄜ")
varLineData.selfReplace("gi", "ㄍㄧ")
varLineData.selfReplace("gu", "ㄍㄨ")
varLineData.selfReplace("ha", "ㄏㄚ")
varLineData.selfReplace("he", "ㄏㄜ")
varLineData.selfReplace("hu", "ㄏㄨ")
varLineData.selfReplace("ji", "ㄐㄧ")
varLineData.selfReplace("ju", "ㄐㄩ")
varLineData.selfReplace("ka", "ㄎㄚ")
varLineData.selfReplace("ke", "ㄎㄜ")
varLineData.selfReplace("ku", "ㄎㄨ")
varLineData.selfReplace("la", "ㄌㄚ")
varLineData.selfReplace("le", "ㄌㄜ")
varLineData.selfReplace("li", "ㄌㄧ")
varLineData.selfReplace("lo", "ㄌㄛ")
varLineData.selfReplace("lu", "ㄌㄨ")
varLineData.selfReplace("lv", "ㄌㄩ")
varLineData.selfReplace("ma", "ㄇㄚ")
varLineData.selfReplace("me", "ㄇㄜ")
varLineData.selfReplace("mi", "ㄇㄧ")
varLineData.selfReplace("mo", "ㄇㄛ")
varLineData.selfReplace("mu", "ㄇㄨ")
varLineData.selfReplace("na", "ㄋㄚ")
varLineData.selfReplace("ne", "ㄋㄜ")
varLineData.selfReplace("ni", "ㄋㄧ")
varLineData.selfReplace("nu", "ㄋㄨ")
varLineData.selfReplace("nv", "ㄋㄩ")
varLineData.selfReplace("ou", "")
varLineData.selfReplace("pa", "ㄆㄚ")
varLineData.selfReplace("pi", "ㄆㄧ")
varLineData.selfReplace("po", "ㄆㄛ")
varLineData.selfReplace("pu", "ㄆㄨ")
varLineData.selfReplace("qi", "ㄑㄧ")
varLineData.selfReplace("qu", "ㄑㄩ")
varLineData.selfReplace("re", "ㄖㄜ")
varLineData.selfReplace("ri", "")
varLineData.selfReplace("ru", "ㄖㄨ")
varLineData.selfReplace("sa", "ㄙㄚ")
varLineData.selfReplace("se", "ㄙㄜ")
varLineData.selfReplace("si", "")
varLineData.selfReplace("su", "ㄙㄨ")
varLineData.selfReplace("ta", "ㄊㄚ")
varLineData.selfReplace("te", "ㄊㄜ")
varLineData.selfReplace("ti", "ㄊㄧ")
varLineData.selfReplace("tu", "ㄊㄨ")
varLineData.selfReplace("wa", "ㄨㄚ")
varLineData.selfReplace("wo", "ㄨㄛ")
varLineData.selfReplace("wu", "")
varLineData.selfReplace("xi", "ㄒㄧ")
varLineData.selfReplace("xu", "ㄒㄩ")
varLineData.selfReplace("ya", "ㄧㄚ")
varLineData.selfReplace("ye", "ㄧㄝ")
varLineData.selfReplace("yi", "")
varLineData.selfReplace("yo", "ㄧㄛ")
varLineData.selfReplace("yu", "")
varLineData.selfReplace("za", "ㄗㄚ")
varLineData.selfReplace("ze", "ㄗㄜ")
varLineData.selfReplace("zi", "")
varLineData.selfReplace("zu", "ㄗㄨ")
varLineData.selfReplace("a", "")
varLineData.selfReplace("e", "")
varLineData.selfReplace("o", "")
varLineData.selfReplace("q", "")
varLineData.selfReplace("2", "ˊ")
varLineData.selfReplace("3", "ˇ")
varLineData.selfReplace("4", "ˋ")
varLineData.selfReplace("5", "˙")
varLineData.selfReplace("1", "")
strProcessed += varLineData
strProcessed += "\n"
}

View File

@ -686,6 +686,8 @@
<dict>
<key>POSTINSTALL_PATH</key>
<dict>
<key>PATH</key>
<string>Installer/pkgPostInstall.sh</string>
<key>PATH_TYPE</key>
<integer>1</integer>
</dict>
@ -724,7 +726,7 @@
<key>USE_HFS+_COMPRESSION</key>
<false/>
<key>VERSION</key>
<string>1.4.0</string>
<string>1.4.2</string>
</dict>
<key>TYPE</key>
<integer>0</integer>

View File

@ -1179,7 +1179,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
@ -1202,7 +1202,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
@ -1235,7 +1235,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
@ -1254,7 +1254,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
@ -1369,7 +1369,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
@ -1404,7 +1404,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1437,7 +1437,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
@ -1467,7 +1467,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -1551,7 +1551,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
@ -1576,7 +1576,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
@ -1604,7 +1604,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1940;
CURRENT_PROJECT_VERSION = 1942;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
@ -1624,7 +1624,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
MARKETING_VERSION = 1.4.0;
MARKETING_VERSION = 1.4.2;
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";