diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 135d82e7..7392e009 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,13 +6,8 @@
為了不讓參與者們浪費各自的熱情,特設此文以說明該專案目前最需要協助的地方。
-1. 有人能用 Swift 將該專案內的這個源自 LibFormosa 的組件套件重寫:
- - Mandarin 組件,用以分析普通話音韻數據、創建且控制 Syllable Composer 注音拼識組件。
- - 一堆記憶體指針操作,實在看不懂這個組件的處理邏輯是什麼,無能為力。
-2. 讓 Alt+波浪鍵選單能夠在諸如 MS Word 以及終端機內正常工作(可以用方向鍵控制高亮候選內容,等)。
+1. 讓 Alt+波浪鍵選單能夠在諸如 MS Word 以及終端機內正常工作(可以用方向鍵控制高亮候選內容,等)。
- 原理上而言恐怕得欺騙當前正在接受輸入的應用、使其誤以為當前有組字區。這只是推測。
-3. SQLite 實現。
-
除了上述各項以外的貢獻,除非特邀、或者有足夠的說服理由與吸引力(比如語法錯誤或更好的重構方法等),否則敝專案可能會無視或者拒絕。
diff --git a/Installer/Resources/Base.lproj/MainMenu.xib b/Installer/Resources/Base.lproj/MainMenu.xib
index 71ebe7b7..b565efb0 100644
--- a/Installer/Resources/Base.lproj/MainMenu.xib
+++ b/Installer/Resources/Base.lproj/MainMenu.xib
@@ -132,17 +132,17 @@
-
+
-
+
-
+
-
+
@@ -162,7 +162,7 @@
-
+
@@ -194,11 +194,9 @@
-
-
+
+
- McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.
-vChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
vChewing Phrase Database Maintained by Shiki Suen.
@@ -207,7 +205,7 @@ vChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
vChewing
-
+
diff --git a/Installer/Resources/en.lproj/MainMenu.strings b/Installer/Resources/en.lproj/MainMenu.strings
index f45a3b26..128b545d 100644
--- a/Installer/Resources/en.lproj/MainMenu.strings
+++ b/Installer/Resources/en.lproj/MainMenu.strings
@@ -56,8 +56,8 @@
/* Class = "NSTextFieldCell"; title = "Derived from OpenVanilla McBopopmofo Project."; ObjectID = "QYf-Nf-hoi"; */
"QYf-Nf-hoi.title" = "Derived from OpenVanilla McBopopmofo Project.";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
-"VW8-s5-Wpn.title" = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine.";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
+"VW8-s5-Wpn.title" = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine.";
/* Class = "NSTextFieldCell"; title = "Placeholder for showing copyright information."; ObjectID = "eo3-TK-0rB"; */
// "eo3-TK-0rB.title" = "Placeholder for showing copyright information.";
diff --git a/Installer/Resources/ja.lproj/MainMenu.strings b/Installer/Resources/ja.lproj/MainMenu.strings
index 63f67c93..bda4245d 100644
--- a/Installer/Resources/ja.lproj/MainMenu.strings
+++ b/Installer/Resources/ja.lproj/MainMenu.strings
@@ -56,8 +56,8 @@
/* Class = "NSTextFieldCell"; title = "Derived from OpenVanilla McBopopmofo Project."; ObjectID = "QYf-Nf-hoi"; */
"QYf-Nf-hoi.title" = "OpenVanilla 小麦注音プロジェクトから派生。";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
-"VW8-s5-Wpn.title" = "ボポモフォエンジン開発:Lukhnos Liu。\n入力状態管理システム開発:Zonble Yang。\nmacOS 版威注音の開発:Shiki Suen, Isaac Xen, Hiraku Wang, など。\n威注音語彙データの維持:Shiki Suen。\nMegrez 辞書処理エンジン:Shiki Suen(Lukhnos の Gramambular C++ エンジンを Swift で再開発したものである)。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
+"VW8-s5-Wpn.title" = "鉄恨ボポモフォエンジン開発:Shiki Suen。\n入力状態管理システム開発:Zonble Yang。\nmacOS 版威注音の開発:Shiki Suen, Isaac Xen, Hiraku Wang, など。\n威注音語彙データの維持:Shiki Suen。\nMegrez 辞書処理エンジン:Shiki Suen(Lukhnos の Gramambular C++ エンジンを Swift で再開発したものである)。";
/* Class = "NSTextFieldCell"; title = "Placeholder for showing copyright information."; ObjectID = "eo3-TK-0rB"; */
"eo3-TK-0rB.title" = "Placeholder for showing copyright information.";
diff --git a/Installer/Resources/zh-Hans.lproj/MainMenu.strings b/Installer/Resources/zh-Hans.lproj/MainMenu.strings
index b5ab37d3..49bcceef 100644
--- a/Installer/Resources/zh-Hans.lproj/MainMenu.strings
+++ b/Installer/Resources/zh-Hans.lproj/MainMenu.strings
@@ -56,9 +56,8 @@
/* Class = "NSTextFieldCell"; title = "Derived from OpenVanilla McBopopmofo Project."; ObjectID = "QYf-Nf-hoi"; */
"QYf-Nf-hoi.title" = "该专案由 OpenVanilla 小麦注音专案衍生而来。";
-/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
-vChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "VW8-s5-Wpn"; */
-"VW8-s5-Wpn.title" = "注音拼音输入处理引擎研发:Lukhnos Liu。\n输入法状态管理引擎研发:Zonble Yang。\n威注音 macOS 程式研发:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音词库维护:Shiki Suen。\n天权星语汇引擎:Shiki Suen,用 Swift 将 Lukhnos 的 C++ Gramambular 重写而得。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
+"VW8-s5-Wpn.title" = "铁恨注音并击输入处理引擎研发:Shiki Suen。\n输入法状态管理引擎研发:Zonble Yang。\n威注音 macOS 程式研发:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音词库维护:Shiki Suen。\n天权星语汇引擎:Shiki Suen,用 Swift 将 Lukhnos 的 C++ Gramambular 重写而得。";
/* Class = "NSTextFieldCell"; title = "Placeholder for showing copyright information."; ObjectID = "eo3-TK-0rB"; */
// "eo3-TK-0rB.title" = "Placeholder for showing copyright information.";
diff --git a/Installer/Resources/zh-Hant.lproj/MainMenu.strings b/Installer/Resources/zh-Hant.lproj/MainMenu.strings
index 0996d412..1da9c6a1 100644
--- a/Installer/Resources/zh-Hant.lproj/MainMenu.strings
+++ b/Installer/Resources/zh-Hant.lproj/MainMenu.strings
@@ -56,9 +56,8 @@
/* Class = "NSTextFieldCell"; title = "Derived from OpenVanilla McBopopmofo Project."; ObjectID = "QYf-Nf-hoi"; */
"QYf-Nf-hoi.title" = "該專案由 OpenVanilla 小麥注音專案衍生而來。";
-/* Class = "NSTextFieldCell"; title = "McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
-vChewing Phrase Database Maintained by Shiki Suen."; ObjectID = "VW8-s5-Wpn"; */
-"VW8-s5-Wpn.title" = "注音拼音輸入處理引擎研發:Lukhnos Liu。\n輸入法狀態管理引擎研發:Zonble Yang。\n威注音 macOS 程式研發:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音詞庫維護:Shiki Suen。\n天權星語彙引擎:Shiki Suen,用 Swift 將 Lukhnos 的 C++ Gramambular 重寫而得。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "VW8-s5-Wpn"; */
+"VW8-s5-Wpn.title" = "鐵恨注音並擊輸入處理引擎研發:Shiki Suen。\n輸入法狀態管理引擎研發:Zonble Yang。\n威注音 macOS 程式研發:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音詞庫維護:Shiki Suen。\n天權星語彙引擎:Shiki Suen,用 Swift 將 Lukhnos 的 C++ Gramambular 重寫而得。";
/* Class = "NSTextFieldCell"; title = "Placeholder for showing copyright information."; ObjectID = "eo3-TK-0rB"; */
// "eo3-TK-0rB.title" = "Placeholder for showing copyright information.";
diff --git a/KeyboardExtension/vChewingKeyLayout.bundle/Contents/Resources/vChewing FakeSeigyou.keylayout b/KeyboardExtension/vChewingKeyLayout.bundle/Contents/Resources/vChewing FakeSeigyou.keylayout
index f52ebd3a..fcf51885 100644
--- a/KeyboardExtension/vChewingKeyLayout.bundle/Contents/Resources/vChewing FakeSeigyou.keylayout
+++ b/KeyboardExtension/vChewingKeyLayout.bundle/Contents/Resources/vChewing FakeSeigyou.keylayout
@@ -1,7 +1,7 @@
-
-
+
+
@@ -84,7 +84,7 @@
-
+
diff --git a/LICENSE-CHS.txt b/LICENSE-CHS.txt
index 3539bc05..a636a2f4 100644
--- a/LICENSE-CHS.txt
+++ b/LICENSE-CHS.txt
@@ -3,7 +3,7 @@
vChewing macOS: MIT-NTL License 麻理(去商标)授权合约
© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.
-注音拼音输入处理引擎研发:Lukhnos Liu。
+铁恨注音并击输入处理引擎研发:Shiki Suen。
输入法状态管理引擎研发:Zonble Yang。
威注音 macOS 程式研发:Shiki Suen, Isaac Xen, Hiraku Wang, 等。
威注音词库维护:Shiki Suen。
diff --git a/LICENSE-CHT.txt b/LICENSE-CHT.txt
index b629fd9e..55e191ae 100644
--- a/LICENSE-CHT.txt
+++ b/LICENSE-CHT.txt
@@ -3,7 +3,7 @@
vChewing macOS: MIT-NTL License 麻理(去商標)授權合約
© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.
-注音拼音輸入處理引擎研發:Lukhnos Liu。
+鐵恨注音並擊輸入處理引擎研發:Shiki Suen。
輸入法狀態管理引擎研發:Zonble Yang。
威注音 macOS 程式研發:Shiki Suen, Isaac Xen, Hiraku Wang, 等。
威注音詞庫維護:Shiki Suen。
diff --git a/LICENSE-JPN.txt b/LICENSE-JPN.txt
index 1061f95e..490f836a 100644
--- a/LICENSE-JPN.txt
+++ b/LICENSE-JPN.txt
@@ -2,7 +2,7 @@
vChewing macOS: MIT商標不許可ライセンス (MIT-NTL License)
-ボポモフォエンジン開発:Lukhnos Liu。
+鉄恨ボポモフォエンジン開発:Shiki Suen。
入力状態管理システム開発:Zonble Yang。
macOS 版威注音の開発:Shiki Suen, Isaac Xen, Hiraku Wang, など。
威注音語彙データの維持:Shiki Suen。
diff --git a/LICENSE.txt b/LICENSE.txt
index e37f0d24..803369ca 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -3,7 +3,7 @@ DISCLAIMER: The vChewing project, having no relationship of cooperation or affil
vChewing macOS: MIT-NTL License
© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.
-Mandarin Syllable Composer Engine by Lukhnos Liu.
+Tekkon Syllable Composition Engine by Shiki Suen.
Input State Management Architecture by Zonble Yang.
vChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
vChewing Phrase Database Maintained by Shiki Suen.
diff --git a/README.md b/README.md
index e54d30af..d6221872 100644
--- a/README.md
+++ b/README.md
@@ -68,11 +68,23 @@
小麥注音引擎程式版權(MIT 授權):© 2011-2021 OpenVanilla 專案團隊(Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, 等)。
+威注音專案僅用到小麥注音的下述程式組件:
+
+- 狀態管理引擎 & NSStringUtils & FSEventStreamHelper (by Zonble Yang)。
+
+- 半衰記憶模組,因故障暫時無法啟用 (by Mengjuei Hsieh)。
+
+- 僅供研發人員調試方便而使用的 App 版安裝程式 (by Zonble Yang)。
+
威注音輸入法 macOS 版以 MIT-NTL License 授權釋出 (與 MIT 相容):© 2021-2022 vChewing 專案。
-威注音輸入法 macOS 版程式維護:Shiki Suen。特別感謝 Hiraku Wong 等人的技術協力。
+- 威注音輸入法 macOS 版程式維護:Shiki Suen。特別感謝 Isaac Xen 與 Hiraku Wong 等人的技術協力。
-威注音詞庫由 Shiki Suen 維護,以 3-Clause BSD License 授權釋出。其中的詞頻數據[由 NAER 授權用於非商業用途](https://twitter.com/ShikiSuen/status/1479329302713831424)。
+- 鐵恨注音並擊處理引擎:Shiki Suen (MIT-NTL License)。
+
+- 天權星語彙處理引擎:Shiki Suen (MIT-NTL License),針對「Lukhnos Liu 用 C++ 寫的 Gramambular」用 Swift 徹底重寫而成。
+
+- 威注音詞庫由 Shiki Suen 維護,以 3-Clause BSD License 授權釋出。其中的詞頻數據[由 NAER 授權用於非商業用途](https://twitter.com/ShikiSuen/status/1479329302713831424)。
使用者可自由使用、散播本軟體,惟散播時必須完整保留版權聲明及軟體授權、且一旦經過修改便不可以再繼續使用威注音的產品名稱。
diff --git a/Source/3rdParty/OVMandarin/Composer.hh b/Source/3rdParty/OVMandarin/Composer.hh
deleted file mode 100644
index fa49864f..00000000
--- a/Source/3rdParty/OVMandarin/Composer.hh
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2011 and onwards The OpenVanilla Project (MIT License).
-// All possible vChewing-specific modifications are of:
-// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
-/*
-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:
-
-1. The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-2. No trademark license is granted to use the trade names, trademarks, service
-marks, or product names of Contributor, except as required to fulfill notice
-requirements above.
-
-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.
-*/
-
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface Composer : NSObject
-+ (BOOL)chkKeyValidity:(UniChar)charCode;
-+ (BOOL)isBufferEmpty;
-+ (void)clearBuffer;
-+ (void)combineReadingKey:(UniChar)charCode;
-+ (BOOL)hasToneMarker;
-+ (BOOL)hasToneMarkerOnly;
-+ (NSString *)getSyllableComposition;
-+ (void)doBackSpaceToBuffer;
-+ (NSString *)getComposition;
-+ (void)ensureParser;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Source/3rdParty/OVMandarin/Composer.mm b/Source/3rdParty/OVMandarin/Composer.mm
deleted file mode 100644
index 6efb5d08..00000000
--- a/Source/3rdParty/OVMandarin/Composer.mm
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2011 and onwards The OpenVanilla Project (MIT License).
-// All possible vChewing-specific modifications are of:
-// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
-/*
-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:
-
-1. The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-2. No trademark license is granted to use the trade names, trademarks, service
-marks, or product names of Contributor, except as required to fulfill notice
-requirements above.
-
-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.
-*/
-
-#import "Composer.hh"
-#import "Mandarin.h"
-#import "vChewing-Swift.h"
-
-static Mandarin::BopomofoReadingBuffer *PhoneticBuffer;
-
-@implementation Composer
-
-+ (BOOL)chkKeyValidity:(UniChar)charCode
-{
- return PhoneticBuffer->isValidKey((char)charCode);
-}
-
-+ (BOOL)isBufferEmpty
-{
- return PhoneticBuffer->isEmpty();
-}
-
-+ (void)clearBuffer
-{
- PhoneticBuffer->clear();
-}
-
-+ (void)combineReadingKey:(UniChar)charCode
-{
- PhoneticBuffer->combineKey((char)charCode);
-}
-
-+ (BOOL)hasToneMarker
-{
- return PhoneticBuffer->hasToneMarker();
-}
-
-+ (BOOL)hasToneMarkerOnly
-{
- return PhoneticBuffer->hasToneMarkerOnly();
-}
-
-+ (NSString *)getSyllableComposition
-{
- return [NSString stringWithUTF8String:PhoneticBuffer->syllable().composedString().c_str()];
-}
-
-+ (void)doBackSpaceToBuffer
-{
- PhoneticBuffer->backspace();
-}
-
-+ (NSString *)getComposition
-{
- return [NSString stringWithUTF8String:PhoneticBuffer->composedString().c_str()];
-}
-
-+ (void)ensureParser
-{
- if (PhoneticBuffer)
- {
- switch (mgrPrefs.mandarinParser)
- {
- case MandarinParserOfStandard:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::StandardLayout());
- break;
- case MandarinParserOfEten:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::ETenLayout());
- break;
- case MandarinParserOfHsu:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::HsuLayout());
- break;
- case MandarinParserOfEen26:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::ETen26Layout());
- break;
- case MandarinParserOfIBM:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::IBMLayout());
- break;
- case MandarinParserOfMiTAC:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::MiTACLayout());
- break;
- case MandarinParserOfFakeSeigyou:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::FakeSeigyouLayout());
- break;
- case MandarinParserOfHanyuPinyin:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::HanyuPinyinLayout());
- break;
- default:
- PhoneticBuffer->setKeyboardLayout(Mandarin::BopomofoKeyboardLayout::StandardLayout());
- mgrPrefs.mandarinParser = MandarinParserOfStandard;
- }
- PhoneticBuffer->clear();
- }
- else
- {
- PhoneticBuffer = new Mandarin::BopomofoReadingBuffer(Mandarin::BopomofoKeyboardLayout::StandardLayout());
- }
-}
-
-@end
diff --git a/Source/3rdParty/OVMandarin/Mandarin.cpp b/Source/3rdParty/OVMandarin/Mandarin.cpp
deleted file mode 100644
index 4d4cb9a9..00000000
--- a/Source/3rdParty/OVMandarin/Mandarin.cpp
+++ /dev/null
@@ -1,1226 +0,0 @@
-// Copyright (c) 2011 and onwards The OpenVanilla Project (MIT License).
-// All possible vChewing-specific modifications are of:
-// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
-/*
-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:
-
-1. The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-2. No trademark license is granted to use the trade names, trademarks, service
-marks, or product names of Contributor, except as required to fulfill notice
-requirements above.
-
-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.
-*/
-
-#include "Mandarin.h"
-
-#include
-#include
-
-namespace Mandarin
-{
-
-class PinyinParseHelper
-{
- public:
- static const bool ConsumePrefix(std::string &target, const std::string &prefix)
- {
- if (target.length() < prefix.length())
- {
- return false;
- }
-
- if (target.substr(0, prefix.length()) == prefix)
- {
- target = target.substr(prefix.length(), target.length() - prefix.length());
- return true;
- }
-
- return false;
- }
-};
-
-class BopomofoCharacterMap
-{
- public:
- static const BopomofoCharacterMap &SharedInstance();
-
- std::map componentToCharacter;
- std::map characterToComponent;
-
- protected:
- BopomofoCharacterMap();
-};
-
-const BPMF BPMF::FromHanyuPinyin(const std::string &str)
-{
- if (!str.length())
- {
- return BPMF();
- }
-
- std::string pinyin = str;
- transform(pinyin.begin(), pinyin.end(), pinyin.begin(), ::tolower);
-
- BPMF::Component firstComponent = 0;
- BPMF::Component secondComponent = 0;
- BPMF::Component thirdComponent = 0;
- BPMF::Component toneComponent = 0;
-
- // lookup consonants and consume them
- bool independentConsonant = false;
-
- // the y exceptions fist
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yuan"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::AN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ying"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yung"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yong"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yue"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::E;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yun"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "you"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::OU;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "yu"))
- {
- secondComponent = BPMF::UE;
- }
-
- // try the first character
- char c = pinyin.length() ? pinyin[0] : 0;
- switch (c)
- {
- case 'b':
- firstComponent = BPMF::B;
- pinyin = pinyin.substr(1);
- break;
- case 'p':
- firstComponent = BPMF::P;
- pinyin = pinyin.substr(1);
- break;
- case 'm':
- firstComponent = BPMF::M;
- pinyin = pinyin.substr(1);
- break;
- case 'f':
- firstComponent = BPMF::F;
- pinyin = pinyin.substr(1);
- break;
- case 'd':
- firstComponent = BPMF::D;
- pinyin = pinyin.substr(1);
- break;
- case 't':
- firstComponent = BPMF::T;
- pinyin = pinyin.substr(1);
- break;
- case 'n':
- firstComponent = BPMF::N;
- pinyin = pinyin.substr(1);
- break;
- case 'l':
- firstComponent = BPMF::L;
- pinyin = pinyin.substr(1);
- break;
- case 'g':
- firstComponent = BPMF::G;
- pinyin = pinyin.substr(1);
- break;
- case 'k':
- firstComponent = BPMF::K;
- pinyin = pinyin.substr(1);
- break;
- case 'h':
- firstComponent = BPMF::H;
- pinyin = pinyin.substr(1);
- break;
- case 'j':
- firstComponent = BPMF::J;
- pinyin = pinyin.substr(1);
- break;
- case 'q':
- firstComponent = BPMF::Q;
- pinyin = pinyin.substr(1);
- break;
- case 'x':
- firstComponent = BPMF::X;
- pinyin = pinyin.substr(1);
- break;
-
- // special hanlding for w and y
- case 'w':
- secondComponent = BPMF::U;
- pinyin = pinyin.substr(1);
- break;
- case 'y':
- if (!secondComponent && !thirdComponent)
- {
- secondComponent = BPMF::I;
- }
- pinyin = pinyin.substr(1);
- break;
- }
-
- // then we try ZH, CH, SH, R, Z, C, S (in that order)
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "zh"))
- {
- firstComponent = BPMF::ZH;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ch"))
- {
- firstComponent = BPMF::CH;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "sh"))
- {
- firstComponent = BPMF::SH;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "r"))
- {
- firstComponent = BPMF::R;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "z"))
- {
- firstComponent = BPMF::Z;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "c"))
- {
- firstComponent = BPMF::C;
- independentConsonant = true;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "s"))
- {
- firstComponent = BPMF::S;
- independentConsonant = true;
- }
-
- // consume exceptions first: (ien, in), (iou, iu), (uen, un), (veng, iong),
- // (ven, vn), (uei, ui), ung but longer sequence takes precedence
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "veng"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "iong"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ing"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ien"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "iou"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::OU;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "uen"))
- {
- secondComponent = BPMF::U;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ven"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "uei"))
- {
- secondComponent = BPMF::U;
- thirdComponent = BPMF::EI;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ung"))
- {
- // f exception
- if (firstComponent == BPMF::F)
- {
- thirdComponent = BPMF::ENG;
- }
- else
- {
- secondComponent = BPMF::U;
- thirdComponent = BPMF::ENG;
- }
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ong"))
- {
- // f exception
- if (firstComponent == BPMF::F)
- {
- thirdComponent = BPMF::ENG;
- }
- else
- {
- secondComponent = BPMF::U;
- thirdComponent = BPMF::ENG;
- }
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "un"))
- {
- if (firstComponent == BPMF::J || firstComponent == BPMF::Q || firstComponent == BPMF::X)
- {
- secondComponent = BPMF::UE;
- }
- else
- {
- secondComponent = BPMF::U;
- }
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "iu"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::OU;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "in"))
- {
- secondComponent = BPMF::I;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "vn"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ui"))
- {
- secondComponent = BPMF::U;
- thirdComponent = BPMF::EI;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ue"))
- {
- secondComponent = BPMF::UE;
- thirdComponent = BPMF::E;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, u8"ü"))
- {
- secondComponent = BPMF::UE;
- }
-
- // then consume the middle component...
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "i"))
- {
- secondComponent = independentConsonant ? 0 : BPMF::I;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "u"))
- {
- if (firstComponent == BPMF::J || firstComponent == BPMF::Q || firstComponent == BPMF::X)
- {
- secondComponent = BPMF::UE;
- }
- else
- {
- secondComponent = BPMF::U;
- }
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "v"))
- {
- secondComponent = BPMF::UE;
- }
-
- // the vowels, longer sequence takes precedence
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ang"))
- {
- thirdComponent = BPMF::ANG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "eng"))
- {
- thirdComponent = BPMF::ENG;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "err"))
- {
- thirdComponent = BPMF::ERR;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ai"))
- {
- thirdComponent = BPMF::AI;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ei"))
- {
- thirdComponent = BPMF::EI;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ao"))
- {
- thirdComponent = BPMF::AO;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "ou"))
- {
- thirdComponent = BPMF::OU;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "an"))
- {
- thirdComponent = BPMF::AN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "en"))
- {
- thirdComponent = BPMF::EN;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "er"))
- {
- thirdComponent = BPMF::ERR;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "a"))
- {
- thirdComponent = BPMF::A;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "o"))
- {
- thirdComponent = BPMF::O;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "e"))
- {
- if (secondComponent)
- {
- thirdComponent = BPMF::E;
- }
- else
- {
- thirdComponent = BPMF::ER;
- }
- }
-
- // at last!
- if (0)
- {
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "1"))
- {
- toneComponent = BPMF::Tone1;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "2"))
- {
- toneComponent = BPMF::Tone2;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "3"))
- {
- toneComponent = BPMF::Tone3;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "4"))
- {
- toneComponent = BPMF::Tone4;
- }
- else if (PinyinParseHelper::ConsumePrefix(pinyin, "5"))
- {
- toneComponent = BPMF::Tone5;
- }
-
- return BPMF(firstComponent | secondComponent | thirdComponent | toneComponent);
-}
-
-const std::string BPMF::HanyuPinyinString(bool includesTone, bool useVForUUmlaut) const
-{
- std::string consonant, middle, vowel, tone;
-
- Component cc = consonantComponent(), mvc = middleVowelComponent(), vc = vowelComponent();
- bool hasNoMVCOrVC = !(mvc || vc);
-
- switch (cc)
- {
- case B:
- consonant = "b";
- break;
- case P:
- consonant = "p";
- break;
- case M:
- consonant = "m";
- break;
- case F:
- consonant = "f";
- break;
- case D:
- consonant = "d";
- break;
- case T:
- consonant = "t";
- break;
- case N:
- consonant = "n";
- break;
- case L:
- consonant = "l";
- break;
- case G:
- consonant = "g";
- break;
- case K:
- consonant = "k";
- break;
- case H:
- consonant = "h";
- break;
- case J:
- consonant = "j";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case Q:
- consonant = "q";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case X:
- consonant = "x";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case ZH:
- consonant = "zh";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case CH:
- consonant = "ch";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case SH:
- consonant = "sh";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case R:
- consonant = "r";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case Z:
- consonant = "z";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case C:
- consonant = "c";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- case S:
- consonant = "s";
- if (hasNoMVCOrVC)
- middle = "i";
- break;
- }
-
- switch (mvc)
- {
- case I:
- if (!cc)
- {
- consonant = "y";
- }
-
- middle = (!vc || cc) ? "i" : "";
- break;
- case U:
- if (!cc)
- {
- consonant = "w";
- }
- middle = (!vc || cc) ? "u" : "";
- break;
- case UE:
- if (!cc)
- {
- consonant = "y";
- }
-
- if ((cc == N || cc == L) && vc != E)
- {
- middle = useVForUUmlaut ? "v" : "ü";
- }
- else
- {
- middle = "u";
- }
-
- break;
- }
-
- switch (vc)
- {
- case A:
- vowel = "a";
- break;
- case O:
- vowel = "o";
- break;
- case ER:
- vowel = "e";
- break;
- case E:
- vowel = "e";
- break;
- case AI:
- vowel = "ai";
- break;
- case EI:
- vowel = "ei";
- break;
- case AO:
- vowel = "ao";
- break;
- case OU:
- vowel = "ou";
- break;
- case AN:
- vowel = "an";
- break;
- case EN:
- vowel = "en";
- break;
- case ANG:
- vowel = "ang";
- break;
- case ENG:
- vowel = "eng";
- break;
- case ERR:
- vowel = "er";
- break;
- }
-
- // combination rules
-
- // ueng -> ong, but note "weng"
- if ((mvc == U || mvc == UE) && vc == ENG)
- {
- middle = "";
- vowel = (cc == J || cc == Q || cc == X) ? "iong" : ((!cc && mvc == U) ? "eng" : "ong");
- }
-
- // ien, uen, üen -> in, un, ün ; but note "wen", "yin" and "yun"
- if (mvc && vc == EN)
- {
- if (cc)
- {
- vowel = "n";
- }
- else
- {
- if (mvc == UE)
- {
- vowel = "n"; // yun
- }
- else if (mvc == U)
- {
- vowel = "en"; // wen
- }
- else
- {
- vowel = "in"; // yin
- }
- }
- }
-
- // iou -> iu
- if (cc && mvc == I && vc == OU)
- {
- middle = "";
- vowel = "iu";
- }
-
- // ieng -> ing
- if (mvc == I && vc == ENG)
- {
- middle = "";
- vowel = "ing";
- }
-
- // uei -> ui
- if (cc && mvc == U && vc == EI)
- {
- middle = "";
- vowel = "ui";
- }
-
- if (includesTone)
- {
- switch (toneMarkerComponent())
- {
- case Tone2:
- tone = "2";
- break;
- case Tone3:
- tone = "3";
- break;
- case Tone4:
- tone = "4";
- break;
- case Tone5:
- tone = "5";
- break;
- }
- }
-
- return consonant + middle + vowel + tone;
-}
-
-const BPMF BPMF::FromComposedString(const std::string &str)
-{
- BPMF syllable;
- auto iter = str.begin();
- while (iter != str.end())
- {
- // This is a naive implementation and we bail early at anything we don't
- // recognize. A sound implementation would require to either use a trie for
- // the Bopomofo character map or to split the input by codepoints. This
- // suffices for now.
-
- // Illegal.
- if (!(*iter & 0x80))
- {
- break;
- }
-
- size_t utf8_length = -1;
-
- // These are the code points for the tone markers.
- if ((*iter & (0x80 | 0x40)) && !(*iter & 0x20))
- {
- utf8_length = 2;
- }
- else if ((*iter & (0x80 | 0x40 | 0x20)) && !(*iter & 0x10))
- {
- utf8_length = 3;
- }
- else
- {
- // Illegal.
- break;
- }
-
- if (iter + (utf8_length - 1) == str.end())
- {
- break;
- }
-
- std::string component = std::string(iter, iter + utf8_length);
- const std::map &charToComp =
- BopomofoCharacterMap::SharedInstance().characterToComponent;
- std::map::const_iterator result = charToComp.find(component);
- if (result == charToComp.end())
- {
- break;
- }
- else
- {
- syllable += BPMF((*result).second);
- }
- iter += utf8_length;
- }
- return syllable;
-}
-
-const std::string BPMF::composedString() const
-{
- std::string result;
-#define APPEND(c) \
- if (syllable_ & c) \
- result += (*BopomofoCharacterMap::SharedInstance().componentToCharacter.find(syllable_ & c)).second
- APPEND(ConsonantMask);
- APPEND(MiddleVowelMask);
- APPEND(VowelMask);
- APPEND(ToneMarkerMask);
-#undef APPEND
- return result;
-}
-
-const BopomofoCharacterMap &BopomofoCharacterMap::SharedInstance()
-{
- static BopomofoCharacterMap *map = new BopomofoCharacterMap();
- return *map;
-}
-
-BopomofoCharacterMap::BopomofoCharacterMap()
-{
- characterToComponent[u8"ㄅ"] = BPMF::B;
- characterToComponent[u8"ㄆ"] = BPMF::P;
- characterToComponent[u8"ㄇ"] = BPMF::M;
- characterToComponent[u8"ㄈ"] = BPMF::F;
- characterToComponent[u8"ㄉ"] = BPMF::D;
- characterToComponent[u8"ㄊ"] = BPMF::T;
- characterToComponent[u8"ㄋ"] = BPMF::N;
- characterToComponent[u8"ㄌ"] = BPMF::L;
- characterToComponent[u8"ㄎ"] = BPMF::K;
- characterToComponent[u8"ㄍ"] = BPMF::G;
- characterToComponent[u8"ㄏ"] = BPMF::H;
- characterToComponent[u8"ㄐ"] = BPMF::J;
- characterToComponent[u8"ㄑ"] = BPMF::Q;
- characterToComponent[u8"ㄒ"] = BPMF::X;
- characterToComponent[u8"ㄓ"] = BPMF::ZH;
- characterToComponent[u8"ㄔ"] = BPMF::CH;
- characterToComponent[u8"ㄕ"] = BPMF::SH;
- characterToComponent[u8"ㄖ"] = BPMF::R;
- characterToComponent[u8"ㄗ"] = BPMF::Z;
- characterToComponent[u8"ㄘ"] = BPMF::C;
- characterToComponent[u8"ㄙ"] = BPMF::S;
- characterToComponent[u8"ㄧ"] = BPMF::I;
- characterToComponent[u8"ㄨ"] = BPMF::U;
- characterToComponent[u8"ㄩ"] = BPMF::UE;
- characterToComponent[u8"ㄚ"] = BPMF::A;
- characterToComponent[u8"ㄛ"] = BPMF::O;
- characterToComponent[u8"ㄜ"] = BPMF::ER;
- characterToComponent[u8"ㄝ"] = BPMF::E;
- characterToComponent[u8"ㄞ"] = BPMF::AI;
- characterToComponent[u8"ㄟ"] = BPMF::EI;
- characterToComponent[u8"ㄠ"] = BPMF::AO;
- characterToComponent[u8"ㄡ"] = BPMF::OU;
- characterToComponent[u8"ㄢ"] = BPMF::AN;
- characterToComponent[u8"ㄣ"] = BPMF::EN;
- characterToComponent[u8"ㄤ"] = BPMF::ANG;
- characterToComponent[u8"ㄥ"] = BPMF::ENG;
- characterToComponent[u8"ㄦ"] = BPMF::ERR;
- characterToComponent[u8"ˊ"] = BPMF::Tone2;
- characterToComponent[u8"ˇ"] = BPMF::Tone3;
- characterToComponent[u8"ˋ"] = BPMF::Tone4;
- characterToComponent[u8"˙"] = BPMF::Tone5;
-
- for (std::map::iterator iter = characterToComponent.begin();
- iter != characterToComponent.end(); ++iter)
- componentToCharacter[(*iter).second] = (*iter).first;
-}
-
-#define ASSIGNKEY1(m, vec, k, val) m[k] = (vec.clear(), vec.push_back((BPMF::Component)val), vec)
-#define ASSIGNKEY2(m, vec, k, val1, val2) \
- m[k] = (vec.clear(), vec.push_back((BPMF::Component)val1), vec.push_back((BPMF::Component)val2), vec)
-#define ASSIGNKEY3(m, vec, k, val1, val2, val3) \
- m[k] = (vec.clear(), vec.push_back((BPMF::Component)val1), vec.push_back((BPMF::Component)val2), \
- vec.push_back((BPMF::Component)val3), vec)
-
-static BopomofoKeyboardLayout *CreateStandardLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, '1', BPMF::B);
- ASSIGNKEY1(ktcm, vec, 'q', BPMF::P);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::M);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::F);
- ASSIGNKEY1(ktcm, vec, '2', BPMF::D);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::T);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::N);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::L);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::G);
- ASSIGNKEY1(ktcm, vec, 'd', BPMF::K);
- ASSIGNKEY1(ktcm, vec, 'c', BPMF::H);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::J);
- ASSIGNKEY1(ktcm, vec, 'f', BPMF::Q);
- ASSIGNKEY1(ktcm, vec, 'v', BPMF::X);
- ASSIGNKEY1(ktcm, vec, '5', BPMF::ZH);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::CH);
- ASSIGNKEY1(ktcm, vec, 'g', BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::R);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::Z);
- ASSIGNKEY1(ktcm, vec, 'h', BPMF::C);
- ASSIGNKEY1(ktcm, vec, 'n', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::I);
- ASSIGNKEY1(ktcm, vec, 'j', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'm', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, '8', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'k', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, ',', BPMF::E);
- ASSIGNKEY1(ktcm, vec, '9', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::EI);
- ASSIGNKEY1(ktcm, vec, 'l', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, '.', BPMF::OU);
- ASSIGNKEY1(ktcm, vec, '0', BPMF::AN);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::EN);
- ASSIGNKEY1(ktcm, vec, ';', BPMF::ANG);
- ASSIGNKEY1(ktcm, vec, '/', BPMF::ENG);
- ASSIGNKEY1(ktcm, vec, '-', BPMF::ERR);
- ASSIGNKEY1(ktcm, vec, '3', BPMF::Tone3);
- ASSIGNKEY1(ktcm, vec, '4', BPMF::Tone4);
- ASSIGNKEY1(ktcm, vec, '6', BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, '7', BPMF::Tone5);
-
- return new BopomofoKeyboardLayout(ktcm, "Standard");
-}
-
-static BopomofoKeyboardLayout *CreateIBMLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, '1', BPMF::B);
- ASSIGNKEY1(ktcm, vec, '2', BPMF::P);
- ASSIGNKEY1(ktcm, vec, '3', BPMF::M);
- ASSIGNKEY1(ktcm, vec, '4', BPMF::F);
- ASSIGNKEY1(ktcm, vec, '5', BPMF::D);
- ASSIGNKEY1(ktcm, vec, '6', BPMF::T);
- ASSIGNKEY1(ktcm, vec, '7', BPMF::N);
- ASSIGNKEY1(ktcm, vec, '8', BPMF::L);
- ASSIGNKEY1(ktcm, vec, '9', BPMF::G);
- ASSIGNKEY1(ktcm, vec, '0', BPMF::K);
- ASSIGNKEY1(ktcm, vec, '-', BPMF::H);
- ASSIGNKEY1(ktcm, vec, 'q', BPMF::J);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::Q);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::X);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::ZH);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::CH);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::R);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::Z);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::C);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::I);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'd', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, 'f', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'g', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'h', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, 'j', BPMF::E);
- ASSIGNKEY1(ktcm, vec, 'k', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, 'l', BPMF::EI);
- ASSIGNKEY1(ktcm, vec, ';', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::OU);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::AN);
- ASSIGNKEY1(ktcm, vec, 'c', BPMF::EN);
- ASSIGNKEY1(ktcm, vec, 'v', BPMF::ANG);
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::ENG);
- ASSIGNKEY1(ktcm, vec, 'n', BPMF::ERR);
- ASSIGNKEY1(ktcm, vec, 'm', BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, ',', BPMF::Tone3);
- ASSIGNKEY1(ktcm, vec, '.', BPMF::Tone4);
- ASSIGNKEY1(ktcm, vec, '/', BPMF::Tone5);
-
- return new BopomofoKeyboardLayout(ktcm, "IBM");
-}
-
-static BopomofoKeyboardLayout *CreateMiTACLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, '1', BPMF::Tone5);
- ASSIGNKEY1(ktcm, vec, '2', BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, '3', BPMF::Tone3);
- ASSIGNKEY1(ktcm, vec, '4', BPMF::Tone4);
- ASSIGNKEY1(ktcm, vec, '5', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, '6', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, '7', BPMF::AN);
- ASSIGNKEY1(ktcm, vec, '8', BPMF::EN);
- ASSIGNKEY1(ktcm, vec, '9', BPMF::ANG);
- ASSIGNKEY1(ktcm, vec, '0', BPMF::ENG);
- ASSIGNKEY1(ktcm, vec, '-', BPMF::ERR);
- ASSIGNKEY1(ktcm, vec, ';', BPMF::E);
- ASSIGNKEY1(ktcm, vec, ',', BPMF::ZH);
- ASSIGNKEY1(ktcm, vec, '.', BPMF::CH);
- ASSIGNKEY1(ktcm, vec, '/', BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::B);
- ASSIGNKEY1(ktcm, vec, 'c', BPMF::C);
- ASSIGNKEY1(ktcm, vec, 'd', BPMF::D);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, 'f', BPMF::F);
- ASSIGNKEY1(ktcm, vec, 'g', BPMF::G);
- ASSIGNKEY1(ktcm, vec, 'h', BPMF::H);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::EI);
- ASSIGNKEY1(ktcm, vec, 'j', BPMF::J);
- ASSIGNKEY1(ktcm, vec, 'k', BPMF::K);
- ASSIGNKEY1(ktcm, vec, 'l', BPMF::L);
- ASSIGNKEY1(ktcm, vec, 'm', BPMF::M);
- ASSIGNKEY1(ktcm, vec, 'n', BPMF::N);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::P);
- ASSIGNKEY1(ktcm, vec, 'q', BPMF::Q);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::R);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::T);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::OU);
- ASSIGNKEY1(ktcm, vec, 'v', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::X);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::I);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::Z);
-
- return new BopomofoKeyboardLayout(ktcm, "MiTAC");
-}
-
-static BopomofoKeyboardLayout *CreateETenLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::B);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::P);
- ASSIGNKEY1(ktcm, vec, 'm', BPMF::M);
- ASSIGNKEY1(ktcm, vec, 'f', BPMF::F);
- ASSIGNKEY1(ktcm, vec, 'd', BPMF::D);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::T);
- ASSIGNKEY1(ktcm, vec, 'n', BPMF::N);
- ASSIGNKEY1(ktcm, vec, 'l', BPMF::L);
- ASSIGNKEY1(ktcm, vec, 'v', BPMF::G);
- ASSIGNKEY1(ktcm, vec, 'k', BPMF::K);
- ASSIGNKEY1(ktcm, vec, 'h', BPMF::H);
- ASSIGNKEY1(ktcm, vec, 'g', BPMF::J);
- ASSIGNKEY1(ktcm, vec, '7', BPMF::Q);
- ASSIGNKEY1(ktcm, vec, 'c', BPMF::X);
- ASSIGNKEY1(ktcm, vec, ',', BPMF::ZH);
- ASSIGNKEY1(ktcm, vec, '.', BPMF::CH);
- ASSIGNKEY1(ktcm, vec, '/', BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'j', BPMF::R);
- ASSIGNKEY1(ktcm, vec, ';', BPMF::Z);
- ASSIGNKEY1(ktcm, vec, '\'', BPMF::C);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::I);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::E);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, 'q', BPMF::EI);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::OU);
- ASSIGNKEY1(ktcm, vec, '8', BPMF::AN);
- ASSIGNKEY1(ktcm, vec, '9', BPMF::EN);
- ASSIGNKEY1(ktcm, vec, '0', BPMF::ANG);
- ASSIGNKEY1(ktcm, vec, '-', BPMF::ENG);
- ASSIGNKEY1(ktcm, vec, '=', BPMF::ERR);
- ASSIGNKEY1(ktcm, vec, '2', BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, '3', BPMF::Tone3);
- ASSIGNKEY1(ktcm, vec, '4', BPMF::Tone4);
- ASSIGNKEY1(ktcm, vec, '1', BPMF::Tone5);
-
- return new BopomofoKeyboardLayout(ktcm, "ETen");
-}
-
-static BopomofoKeyboardLayout *CreateHsuLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::B);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::P);
- ASSIGNKEY2(ktcm, vec, 'm', BPMF::M, BPMF::AN);
- ASSIGNKEY2(ktcm, vec, 'f', BPMF::F, BPMF::Tone3);
- ASSIGNKEY2(ktcm, vec, 'd', BPMF::D, BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::T);
- ASSIGNKEY2(ktcm, vec, 'n', BPMF::N, BPMF::EN);
- ASSIGNKEY3(ktcm, vec, 'l', BPMF::L, BPMF::ENG, BPMF::ERR);
- ASSIGNKEY2(ktcm, vec, 'g', BPMF::G, BPMF::ER);
- ASSIGNKEY2(ktcm, vec, 'k', BPMF::K, BPMF::ANG);
- ASSIGNKEY2(ktcm, vec, 'h', BPMF::H, BPMF::O);
- ASSIGNKEY3(ktcm, vec, 'j', BPMF::J, BPMF::ZH, BPMF::Tone4);
- ASSIGNKEY2(ktcm, vec, 'v', BPMF::Q, BPMF::CH);
- ASSIGNKEY2(ktcm, vec, 'c', BPMF::X, BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::R);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::Z);
- ASSIGNKEY2(ktcm, vec, 'a', BPMF::C, BPMF::EI);
- ASSIGNKEY2(ktcm, vec, 's', BPMF::S, BPMF::Tone5);
- ASSIGNKEY2(ktcm, vec, 'e', BPMF::I, BPMF::E);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::OU);
-
- return new BopomofoKeyboardLayout(ktcm, "Hsu");
-}
-
-static BopomofoKeyboardLayout *CreateETen26Layout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::B);
- ASSIGNKEY2(ktcm, vec, 'p', BPMF::P, BPMF::OU);
- ASSIGNKEY2(ktcm, vec, 'm', BPMF::M, BPMF::AN);
- ASSIGNKEY2(ktcm, vec, 'f', BPMF::F, BPMF::Tone2);
- ASSIGNKEY2(ktcm, vec, 'd', BPMF::D, BPMF::Tone5);
- ASSIGNKEY2(ktcm, vec, 't', BPMF::T, BPMF::ANG);
- ASSIGNKEY2(ktcm, vec, 'n', BPMF::N, BPMF::EN);
- ASSIGNKEY2(ktcm, vec, 'l', BPMF::L, BPMF::ENG);
- ASSIGNKEY2(ktcm, vec, 'v', BPMF::G, BPMF::Q);
- ASSIGNKEY2(ktcm, vec, 'k', BPMF::K, BPMF::Tone4);
- ASSIGNKEY2(ktcm, vec, 'h', BPMF::H, BPMF::ERR);
- ASSIGNKEY2(ktcm, vec, 'g', BPMF::ZH, BPMF::J);
- ASSIGNKEY2(ktcm, vec, 'c', BPMF::SH, BPMF::X);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::CH);
- ASSIGNKEY2(ktcm, vec, 'j', BPMF::R, BPMF::Tone3);
- ASSIGNKEY2(ktcm, vec, 'q', BPMF::Z, BPMF::EI);
- ASSIGNKEY2(ktcm, vec, 'w', BPMF::C, BPMF::E);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::I);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::U);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::A);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::AO);
-
- return new BopomofoKeyboardLayout(ktcm, "ETen26");
-}
-
-static BopomofoKeyboardLayout *CreateFakeSeigyouLayout()
-{
- std::vector vec;
- BopomofoKeyToComponentMap ktcm;
-
- ASSIGNKEY1(ktcm, vec, '1', BPMF::Tone5);
- ASSIGNKEY1(ktcm, vec, '2', BPMF::B);
- ASSIGNKEY1(ktcm, vec, '3', BPMF::D);
- ASSIGNKEY1(ktcm, vec, '4', BPMF::I);
- ASSIGNKEY1(ktcm, vec, '5', BPMF::U);
- ASSIGNKEY1(ktcm, vec, '6', BPMF::ZH);
- ASSIGNKEY1(ktcm, vec, '7', BPMF::UE);
- ASSIGNKEY1(ktcm, vec, '8', BPMF::A);
- ASSIGNKEY1(ktcm, vec, '9', BPMF::AI);
- ASSIGNKEY1(ktcm, vec, '0', BPMF::AN);
- ASSIGNKEY1(ktcm, vec, '-', BPMF::ERR);
- ASSIGNKEY1(ktcm, vec, ';', BPMF::ANG);
- ASSIGNKEY1(ktcm, vec, ',', BPMF::E);
- ASSIGNKEY1(ktcm, vec, '.', BPMF::OU);
- ASSIGNKEY1(ktcm, vec, '/', BPMF::ENG);
- ASSIGNKEY1(ktcm, vec, 'a', BPMF::Tone3);
- ASSIGNKEY1(ktcm, vec, 'b', BPMF::X);
- ASSIGNKEY1(ktcm, vec, 'c', BPMF::L);
- ASSIGNKEY1(ktcm, vec, 'd', BPMF::N);
- ASSIGNKEY1(ktcm, vec, 'e', BPMF::T);
- ASSIGNKEY1(ktcm, vec, 'f', BPMF::K);
- ASSIGNKEY1(ktcm, vec, 'g', BPMF::Q);
- ASSIGNKEY1(ktcm, vec, 'h', BPMF::SH);
- ASSIGNKEY1(ktcm, vec, 'i', BPMF::O);
- ASSIGNKEY1(ktcm, vec, 'j', BPMF::C);
- ASSIGNKEY1(ktcm, vec, 'k', BPMF::ER);
- ASSIGNKEY1(ktcm, vec, 'l', BPMF::AO);
- ASSIGNKEY1(ktcm, vec, 'm', BPMF::S);
- ASSIGNKEY1(ktcm, vec, 'n', BPMF::R);
- ASSIGNKEY1(ktcm, vec, 'o', BPMF::EI);
- ASSIGNKEY1(ktcm, vec, 'p', BPMF::EN);
- ASSIGNKEY1(ktcm, vec, 'q', BPMF::Tone2);
- ASSIGNKEY1(ktcm, vec, 'r', BPMF::G);
- ASSIGNKEY1(ktcm, vec, 's', BPMF::M);
- ASSIGNKEY1(ktcm, vec, 't', BPMF::J);
- ASSIGNKEY1(ktcm, vec, 'u', BPMF::Z);
- ASSIGNKEY1(ktcm, vec, 'v', BPMF::H);
- ASSIGNKEY1(ktcm, vec, 'w', BPMF::P);
- ASSIGNKEY1(ktcm, vec, 'x', BPMF::F);
- ASSIGNKEY1(ktcm, vec, 'y', BPMF::CH);
- ASSIGNKEY1(ktcm, vec, 'z', BPMF::Tone4);
-
- return new BopomofoKeyboardLayout(ktcm, "FakeSeigyou");
-}
-
-static BopomofoKeyboardLayout *CreateHanyuPinyinLayout()
-{
- BopomofoKeyToComponentMap ktcm;
- return new BopomofoKeyboardLayout(ktcm, "HanyuPinyin");
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::StandardLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateStandardLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::ETenLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateETenLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::HsuLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateHsuLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::ETen26Layout()
-{
- static BopomofoKeyboardLayout *layout = CreateETen26Layout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::IBMLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateIBMLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::MiTACLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateMiTACLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::FakeSeigyouLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateFakeSeigyouLayout();
- return layout;
-}
-
-const BopomofoKeyboardLayout *BopomofoKeyboardLayout::HanyuPinyinLayout()
-{
- static BopomofoKeyboardLayout *layout = CreateHanyuPinyinLayout();
- return layout;
-}
-
-} // namespace Mandarin
diff --git a/Source/3rdParty/OVMandarin/Mandarin.h b/Source/3rdParty/OVMandarin/Mandarin.h
deleted file mode 100644
index 50ae8718..00000000
--- a/Source/3rdParty/OVMandarin/Mandarin.h
+++ /dev/null
@@ -1,587 +0,0 @@
-// Copyright (c) 2011 and onwards The OpenVanilla Project (MIT License).
-// All possible vChewing-specific modifications are of:
-// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
-/*
-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:
-
-1. The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-2. No trademark license is granted to use the trade names, trademarks, service
-marks, or product names of Contributor, except as required to fulfill notice
-requirements above.
-
-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.
-*/
-
-#ifndef MANDARIN_H_
-#define MANDARIN_H_
-
-#include
-#include
-
-
+
+
- McBopomofo Engine by Mengjuei Hsieh, Lukhnos Liu, Zonble Yang, et al.
-vChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.
-vChewing Phrase Database Maintained by Shiki Suen.
@@ -67,7 +65,7 @@ vChewing Phrase Database Maintained by Shiki Suen.
-
+
@@ -121,17 +119,17 @@ DQ
-
+
-
-
+
+
-
+
-
+
@@ -151,7 +149,7 @@ DQ
-
+
diff --git a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib
index 54548cc0..c0a57c04 100644
--- a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib
+++ b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib
@@ -759,7 +759,6 @@
-
diff --git a/Source/WindowNIBs/en.lproj/frmAboutWindow.strings b/Source/WindowNIBs/en.lproj/frmAboutWindow.strings
index 1d0d5e01..a05b24a3 100644
--- a/Source/WindowNIBs/en.lproj/frmAboutWindow.strings
+++ b/Source/WindowNIBs/en.lproj/frmAboutWindow.strings
@@ -23,5 +23,5 @@
/* Class = "NSTextFieldCell"; title = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project."; ObjectID = "lblCopyright"; */
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
-"lblCredits.title" = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine.";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
+"lblCredits.title" = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine.";
diff --git a/Source/WindowNIBs/ja.lproj/frmAboutWindow.strings b/Source/WindowNIBs/ja.lproj/frmAboutWindow.strings
index 1ff90c89..4ae9cb84 100644
--- a/Source/WindowNIBs/ja.lproj/frmAboutWindow.strings
+++ b/Source/WindowNIBs/ja.lproj/frmAboutWindow.strings
@@ -23,5 +23,5 @@
/* Class = "NSTextFieldCell"; title = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project."; ObjectID = "lblCopyright"; */
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
-"lblCredits.title" = "ボポモフォエンジン開発:Lukhnos Liu。\n入力状態管理システム開発:Zonble Yang。\nmacOS 版威注音の開発:Shiki Suen, Isaac Xen, Hiraku Wang, など。\n威注音語彙データの維持:Shiki Suen。\nMegrez 辞書処理エンジン:Shiki Suen(Lukhnos の Gramambular C++ エンジンを Swift で再開発したものである)。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
+"lblCredits.title" = "鉄恨ボポモフォエンジン開発:Shiki Suen。\n入力状態管理システム開発:Zonble Yang。\nmacOS 版威注音の開発:Shiki Suen, Isaac Xen, Hiraku Wang, など。\n威注音語彙データの維持:Shiki Suen。\nMegrez 辞書処理エンジン:Shiki Suen(Lukhnos の Gramambular C++ エンジンを Swift で再開発したものである)。";
diff --git a/Source/WindowNIBs/zh-Hans.lproj/frmAboutWindow.strings b/Source/WindowNIBs/zh-Hans.lproj/frmAboutWindow.strings
index d9bf31a9..cc8903c3 100644
--- a/Source/WindowNIBs/zh-Hans.lproj/frmAboutWindow.strings
+++ b/Source/WindowNIBs/zh-Hans.lproj/frmAboutWindow.strings
@@ -23,5 +23,5 @@
/* Class = "NSTextFieldCell"; title = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project."; ObjectID = "lblCopyright"; */
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
-"lblCredits.title" = "注音拼音输入处理引擎研发:Lukhnos Liu。\n输入法状态管理引擎研发:Zonble Yang。\n威注音 macOS 程式研发:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音词库维护:Shiki Suen。\n天权星语汇引擎:Shiki Suen,用 Swift 将 Lukhnos 的 C++ Gramambular 重写而得。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
+"lblCredits.title" = "铁恨注音并击输入处理引擎研发:Shiki Suen。\n输入法状态管理引擎研发:Zonble Yang。\n威注音 macOS 程式研发:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音词库维护:Shiki Suen。\n天权星语汇引擎:Shiki Suen,用 Swift 将 Lukhnos 的 C++ Gramambular 重写而得。";
diff --git a/Source/WindowNIBs/zh-Hant.lproj/frmAboutWindow.strings b/Source/WindowNIBs/zh-Hant.lproj/frmAboutWindow.strings
index e4bd24be..58f38111 100644
--- a/Source/WindowNIBs/zh-Hant.lproj/frmAboutWindow.strings
+++ b/Source/WindowNIBs/zh-Hant.lproj/frmAboutWindow.strings
@@ -23,5 +23,5 @@
/* Class = "NSTextFieldCell"; title = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project."; ObjectID = "lblCopyright"; */
// "lblCopyright.title" = "© 2011-2022 OpenVanilla Project & © 2021-2022 vChewing Project.";
-/* Class = "NSTextFieldCell"; title = "Mandarin Syllable Composer Engine by Lukhnos Liu.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
-"lblCredits.title" = "注音拼音輸入處理引擎研發:Lukhnos Liu。\n輸入法狀態管理引擎研發:Zonble Yang。\n威注音 macOS 程式研發:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音詞庫維護:Shiki Suen。\n天權星語彙引擎:Shiki Suen,用 Swift 將 Lukhnos 的 C++ Gramambular 重寫而得。";
+/* Class = "NSTextFieldCell"; title = "Tekkon Syllable Composition Engine by Shiki Suen.\nInput State Management Architecture by Zonble Yang.\nvChewing macOS Development: Shiki Suen, Isaac Xen, Hiraku Wang, etc.\nvChewing Phrase Database Maintained by Shiki Suen.\nMegrez is a rewritten unigram engine by Shiki Suen using Swift, replacing Lukhnos' C++ Gramambular engine."; ObjectID = "lblCredits"; */
+"lblCredits.title" = "鐵恨注音並擊輸入處理引擎研發:Shiki Suen。\n輸入法狀態管理引擎研發:Zonble Yang。\n威注音 macOS 程式研發:Shiki Suen, Isaac Xen, Hiraku Wang, 等。\n威注音詞庫維護:Shiki Suen。\n天權星語彙引擎:Shiki Suen,用 Swift 將 Lukhnos 的 C++ Gramambular 重寫而得。";
diff --git a/Update-Info.plist b/Update-Info.plist
index 3b5600ae..8e23f3f1 100644
--- a/Update-Info.plist
+++ b/Update-Info.plist
@@ -3,9 +3,9 @@
CFBundleShortVersionString
- 1.5.6
+ 1.5.7
CFBundleVersion
- 1956
+ 1957
UpdateInfoEndpoint
https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist
UpdateInfoSite
diff --git a/vChewing.pkgproj b/vChewing.pkgproj
index 77218f6c..5b1183d0 100644
--- a/vChewing.pkgproj
+++ b/vChewing.pkgproj
@@ -726,7 +726,7 @@
USE_HFS+_COMPRESSION
VERSION
- 1.5.6
+ 1.5.7
TYPE
0
diff --git a/vChewing.xcodeproj/project.pbxproj b/vChewing.xcodeproj/project.pbxproj
index f8bb64b8..2dbab490 100644
--- a/vChewing.xcodeproj/project.pbxproj
+++ b/vChewing.xcodeproj/project.pbxproj
@@ -25,7 +25,6 @@
5B38F5A2281E2E49007D5F5D /* 0_Megrez.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0D4F1615FC0EB100ABF4B3 /* 0_Megrez.swift */; };
5B38F5A3281E2E49007D5F5D /* 3_Span.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0D4F1C15FC0EB100ABF4B3 /* 3_Span.swift */; };
5B38F5A4281E2E49007D5F5D /* 5_LanguageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0D4F1915FC0EB100ABF4B3 /* 5_LanguageModel.swift */; };
- 5B407153281F94E6009C24CB /* Composer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B407152281F94E6009C24CB /* Composer.mm */; };
5B40730C281672610023DFFF /* lmAssociates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B407309281672610023DFFF /* lmAssociates.swift */; };
5B40730D281672610023DFFF /* lmReplacements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B40730A281672610023DFFF /* lmReplacements.swift */; };
5B5E535227EF261400C6AA1E /* IME.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5E535127EF261400C6AA1E /* IME.swift */; };
@@ -70,6 +69,7 @@
5BA9FD4927FEF3C9002DE248 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD3C27FEF3C8002DE248 /* Section.swift */; };
5BA9FD4A27FEF3C9002DE248 /* PreferencesTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD3D27FEF3C8002DE248 /* PreferencesTabViewController.swift */; };
5BA9FD8B28006B41002DE248 /* VDKComboBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD8A28006B41002DE248 /* VDKComboBox.swift */; };
+ 5BAA8FBE282CAF380066C406 /* SyllableComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA8FBD282CAF380066C406 /* SyllableComposer.swift */; };
5BAD0CD527D701F6003D127F /* vChewingKeyLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */; };
5BAEFAD028012565001F42C9 /* mgrLangModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAEFACF28012565001F42C9 /* mgrLangModel.swift */; };
5BB802DA27FABA8300CF1C19 /* ctlInputMethod_Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */; };
@@ -98,7 +98,6 @@
5BE78BD927B3775B005EA1BE /* ctlAboutWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BE78BD827B37750005EA1BE /* ctlAboutWindow.swift */; };
5BE78BDD27B3776D005EA1BE /* frmAboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE78BDA27B37764005EA1BE /* frmAboutWindow.xib */; };
5BF8423127BAA942008E7E4C /* vChewingKanjiConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF8423027BAA942008E7E4C /* vChewingKanjiConverter.swift */; };
- 6A0D4F4515FC0EB100ABF4B3 /* Mandarin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A0D4F2015FC0EB100ABF4B3 /* Mandarin.cpp */; };
6A187E2616004C5900466B2E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6A187E2816004C5900466B2E /* MainMenu.xib */; };
6A225A1F23679F2600F685C6 /* NotarizedArchives in Resources */ = {isa = PBXBuildFile; fileRef = 6A225A1E23679F2600F685C6 /* NotarizedArchives */; };
6A2E40F6253A69DA00D1AE1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; };
@@ -199,8 +198,6 @@
5B2DB17127AF8771006D874E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = Data/Makefile; sourceTree = ""; };
5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = vChewingKeyLayout.bundle; sourceTree = ""; };
5B3133BE280B229700A4A505 /* KeyHandler_States.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = KeyHandler_States.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
- 5B407151281F94E6009C24CB /* Composer.hh */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Composer.hh; sourceTree = ""; };
- 5B407152281F94E6009C24CB /* Composer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Composer.mm; sourceTree = ""; };
5B407309281672610023DFFF /* lmAssociates.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = lmAssociates.swift; sourceTree = ""; usesTabs = 0; };
5B40730A281672610023DFFF /* lmReplacements.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = lmReplacements.swift; sourceTree = ""; usesTabs = 0; };
5B5E535127EF261400C6AA1E /* IME.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = IME.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
@@ -246,6 +243,7 @@
5BA9FD3C27FEF3C8002DE248 /* Section.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = Section.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
5BA9FD3D27FEF3C8002DE248 /* PreferencesTabViewController.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = PreferencesTabViewController.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
5BA9FD8A28006B41002DE248 /* VDKComboBox.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = VDKComboBox.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
+ 5BAA8FBD282CAF380066C406 /* SyllableComposer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyllableComposer.swift; sourceTree = ""; };
5BAEFACF28012565001F42C9 /* mgrLangModel.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = mgrLangModel.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = ctlInputMethod_Menu.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = ""; };
@@ -303,8 +301,6 @@
6A0D4F1C15FC0EB100ABF4B3 /* 3_Span.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = 3_Span.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
6A0D4F1D15FC0EB100ABF4B3 /* 6_Unigram.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = 6_Unigram.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
6A0D4F1E15FC0EB100ABF4B3 /* 1_Walker.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = 1_Walker.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
- 6A0D4F2015FC0EB100ABF4B3 /* Mandarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = Mandarin.cpp; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
- 6A0D4F2115FC0EB100ABF4B3 /* Mandarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Mandarin.h; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
6A15B32421A51F2300B92CD3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
6A15B32521A51F2300B92CD3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
6A225A1E23679F2600F685C6 /* NotarizedArchives */ = {isa = PBXFileReference; lastKnownFileType = folder; path = NotarizedArchives; sourceTree = ""; };
@@ -315,10 +311,6 @@
6ACA41EF15FC1D9000935EF6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
6ACA41F215FC1D9000935EF6 /* Installer-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Installer-Info.plist"; path = "Installer/Installer-Info.plist"; sourceTree = SOURCE_ROOT; };
6ACA41F315FC1D9000935EF6 /* Installer-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Installer-Prefix.pch"; path = "Installer/Installer-Prefix.pch"; sourceTree = SOURCE_ROOT; };
- 6ACC3D402793701600F1B140 /* ParselessPhraseDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = ParselessPhraseDB.cpp; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
- 6ACC3D412793701600F1B140 /* ParselessPhraseDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ParselessPhraseDB.h; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
- 6ACC3D422793701600F1B140 /* ParselessLM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = ParselessLM.cpp; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
- 6ACC3D432793701600F1B140 /* ParselessLM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ParselessLM.h; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
D427A9BF25ED28CC005D43E0 /* vChewing-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "vChewing-Bridging-Header.h"; sourceTree = ""; tabWidth = 4; usesTabs = 0; };
D427F76B278CA1BA004A2160 /* AppDelegate.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = AppDelegate.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
D456576D279E4F7B00DF6BC9 /* InputHandler.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = InputHandler.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; };
@@ -403,24 +395,12 @@
children = (
5B949BD72816DC4400D87B5D /* LineReader */,
5B707CE627D9F43E0099EF99 /* OpenCCBridge */,
- 5B62A30227AE733500A19448 /* OVMandarin */,
5BA9FCEA27FED652002DE248 /* SindreSorhus */,
5BA9FD8C28006BA7002DE248 /* VDKComboBox */,
);
path = 3rdParty;
sourceTree = "";
};
- 5B62A30227AE733500A19448 /* OVMandarin */ = {
- isa = PBXGroup;
- children = (
- 6A0D4F2015FC0EB100ABF4B3 /* Mandarin.cpp */,
- 6A0D4F2115FC0EB100ABF4B3 /* Mandarin.h */,
- 5B407151281F94E6009C24CB /* Composer.hh */,
- 5B407152281F94E6009C24CB /* Composer.mm */,
- );
- path = OVMandarin;
- sourceTree = "";
- };
5B62A31E27AE74E400A19448 /* SFX */ = {
isa = PBXGroup;
children = (
@@ -443,6 +423,7 @@
5B61B0C9280BEFD4002E3CFA /* KeyHandler_Misc.swift */,
5B3133BE280B229700A4A505 /* KeyHandler_States.swift */,
5B62A33727AE79CD00A19448 /* NSStringUtils.swift */,
+ 5BAA8FBD282CAF380066C406 /* SyllableComposer.swift */,
5BF8423027BAA942008E7E4C /* vChewingKanjiConverter.swift */,
);
path = ControllerModules;
@@ -501,10 +482,6 @@
5B62A32527AE758000A19448 /* OldFileReferences */ = {
isa = PBXGroup;
children = (
- 6ACC3D422793701600F1B140 /* ParselessLM.cpp */,
- 6ACC3D432793701600F1B140 /* ParselessLM.h */,
- 6ACC3D402793701600F1B140 /* ParselessPhraseDB.cpp */,
- 6ACC3D412793701600F1B140 /* ParselessPhraseDB.h */,
D47F7DD2278C1263002F9DD7 /* UserOverrideModel.cpp */,
D47F7DD1278C1263002F9DD7 /* UserOverrideModel.h */,
);
@@ -1111,7 +1088,6 @@
5B62A33827AE79CD00A19448 /* NSStringUtils.swift in Sources */,
5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */,
5BA9FD4927FEF3C9002DE248 /* Section.swift in Sources */,
- 5B407153281F94E6009C24CB /* Composer.mm in Sources */,
5BA9FD3E27FEF3C8002DE248 /* Utilities.swift in Sources */,
5BA9FD1127FEDB6B002DE248 /* ctlPrefUI.swift in Sources */,
5B38F59C281E2E49007D5F5D /* 2_Grid.swift in Sources */,
@@ -1120,12 +1096,12 @@
5B62A33227AE792F00A19448 /* InputSourceHelper.swift in Sources */,
5B5E535227EF261400C6AA1E /* IME.swift in Sources */,
5B62A34927AE7CD900A19448 /* TooltipController.swift in Sources */,
- 6A0D4F4515FC0EB100ABF4B3 /* Mandarin.cpp in Sources */,
5B61B0CA280BEFD4002E3CFA /* KeyHandler_Misc.swift in Sources */,
5B38F59A281E2E49007D5F5D /* 6_Unigram.swift in Sources */,
5B38F5A0281E2E49007D5F5D /* 1_Walker.swift in Sources */,
5B62A34827AE7CD900A19448 /* ctlCandidateVertical.swift in Sources */,
5BA9FD4027FEF3C8002DE248 /* Localization.swift in Sources */,
+ 5BAA8FBE282CAF380066C406 /* SyllableComposer.swift in Sources */,
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */,
5BBBB77A27AEDC690023B93A /* clsSFX.swift in Sources */,
5BA9FD4727FEF3C9002DE248 /* PreferencesStyleController.swift in Sources */,
@@ -1332,7 +1308,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
@@ -1355,7 +1331,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
@@ -1388,7 +1364,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -1407,7 +1383,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
@@ -1522,7 +1498,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -1557,7 +1533,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1589,7 +1565,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
@@ -1619,7 +1595,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1702,7 +1678,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
@@ -1727,7 +1703,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1754,7 +1730,7 @@
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 1956;
+ CURRENT_PROJECT_VERSION = 1957;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -1774,7 +1750,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
- MARKETING_VERSION = 1.5.6;
+ MARKETING_VERSION = 1.5.7;
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";