diff --git a/Installer/Resources/ja.lproj/MainMenu.strings b/Installer/Resources/ja.lproj/MainMenu.strings index 868cab26..3c49deb2 100644 --- a/Installer/Resources/ja.lproj/MainMenu.strings +++ b/Installer/Resources/ja.lproj/MainMenu.strings @@ -42,7 +42,7 @@ "593.title" = "取消"; /* Class = "NSTextFieldCell"; title = "3-Clause BSD License:"; ObjectID = "AVS-ih-FXM"; */ -"AVS-ih-FXM.title" = "3条項BSDライセンス (3-Clause BSD License):"; +"AVS-ih-FXM.title" = "MIT商標不許可ライセンス (MIT-NTL License):"; /* Class = "NSTextFieldCell"; title = "vChewing for macOS"; ObjectID = "GNc-8S-1VG"; */ "GNc-8S-1VG.title" = "vChewing for macOS"; diff --git a/Installer/Resources/zh-Hans.lproj/MainMenu.strings b/Installer/Resources/zh-Hans.lproj/MainMenu.strings index b6086729..1f52fb43 100644 --- a/Installer/Resources/zh-Hans.lproj/MainMenu.strings +++ b/Installer/Resources/zh-Hans.lproj/MainMenu.strings @@ -42,7 +42,7 @@ "593.title" = "取消安装"; /* Class = "NSTextFieldCell"; title = "MIT-NTL License:"; ObjectID = "AVS-ih-FXM"; */ -"AVS-ih-FXM.title" = "麻理去商标授权合约 (3-Clause BSD License):"; +"AVS-ih-FXM.title" = "麻理去商标授权合约 (MIT-NTL License):"; /* Class = "NSTextFieldCell"; title = "vChewing for macOS"; ObjectID = "GNc-8S-1VG"; */ "GNc-8S-1VG.title" = "vChewing for macOS"; diff --git a/Installer/Resources/zh-Hant.lproj/MainMenu.strings b/Installer/Resources/zh-Hant.lproj/MainMenu.strings index 5890ada1..86d7dcd9 100644 --- a/Installer/Resources/zh-Hant.lproj/MainMenu.strings +++ b/Installer/Resources/zh-Hant.lproj/MainMenu.strings @@ -42,7 +42,7 @@ "593.title" = "取消安裝"; /* Class = "NSTextFieldCell"; title = "MIT-NTL License:"; ObjectID = "AVS-ih-FXM"; */ -"AVS-ih-FXM.title" = "麻理去商標授權合約 (3-Clause BSD License):"; +"AVS-ih-FXM.title" = "麻理去商標授權合約 (MIT-NTL License):"; /* Class = "NSTextFieldCell"; title = "vChewing for macOS"; ObjectID = "GNc-8S-1VG"; */ "GNc-8S-1VG.title" = "vChewing for macOS"; diff --git a/Source/3rdParty/OVMandarin/Mandarin.cpp b/Source/3rdParty/OVMandarin/Mandarin.cpp index 813012a2..d1f6d08e 100644 --- a/Source/3rdParty/OVMandarin/Mandarin.cpp +++ b/Source/3rdParty/OVMandarin/Mandarin.cpp @@ -549,329 +549,6 @@ const std::string BPMF::HanyuPinyinString(bool includesTone, return consonant + middle + vowel + tone; } -const std::string BPMF::PHTString(bool includesTone) const { - std::string consonant, middle, vowel, tone; - - Component cc = consonantComponent(), mvc = middleVowelComponent(), - vc = vowelComponent(); - bool hasNoMVCOrVC = !(mvc || vc); - - switch (cc) { - case B: - consonant = "p"; - break; - case P: - consonant = "ph"; - break; - case M: - consonant = "m"; - break; - case F: - consonant = "f"; - break; - case D: - consonant = "t"; - break; - case T: - consonant = "th"; - break; - case N: - consonant = "n"; - break; - case L: - consonant = "l"; - break; - case G: - consonant = "k"; - break; - case K: - consonant = "kh"; - break; - case H: - consonant = "h"; - break; - case J: - consonant = "ch"; - if (mvc != I) middle = "i"; - break; - case Q: - consonant = "chh"; - if (mvc != I) middle = "i"; - break; - case X: - consonant = "hs"; - if (mvc != I) middle = "i"; - break; - case ZH: - consonant = "ch"; - if (hasNoMVCOrVC) middle = "i"; - break; - case CH: - consonant = "chh"; - 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 = "ts"; - if (hasNoMVCOrVC) middle = "i"; - break; - case C: - consonant = "tsh"; - if (hasNoMVCOrVC) middle = "i"; - break; - case S: - consonant = "s"; - if (hasNoMVCOrVC) middle = "i"; - break; - } - - switch (mvc) { - case I: - middle = "i"; - break; - case U: - middle = "u"; - break; - case UE: - middle = "uu"; - break; - } - - switch (vc) { - case A: - vowel = "a"; - break; - case O: - vowel = "o"; - break; - case ER: - vowel = "e"; - break; - case E: - vowel = (!(cc || mvc)) ? "eh" : "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 = "err"; - break; - } - - // ieng -> ing - if (mvc == I && vc == ENG) { - middle = ""; - vowel = "ing"; - } - - // zh/ch + i without third component -> append h - if (cc == BPMF::ZH || cc == BPMF::CH) { - if (!mvc && !vc) { - vowel = "h"; - } - } - - 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::FromPHT(const std::string& str) { - if (!str.length()) { - return BPMF(); - } - - std::string pht = str; - transform(pht.begin(), pht.end(), pht.begin(), ::tolower); - - BPMF::Component firstComponent = 0; - BPMF::Component secondComponent = 0; - BPMF::Component thirdComponent = 0; - BPMF::Component toneComponent = 0; - -#define IF_CONSUME1(k, v) \ -else if (PinyinParseHelper::ConsumePrefix(pht, k)) { \ -firstComponent = v; \ -} - - // consume the first part - if (0) { - } - IF_CONSUME1("ph", BPMF::P) - IF_CONSUME1("p", BPMF::B) - IF_CONSUME1("m", BPMF::M) - IF_CONSUME1("f", BPMF::F) - IF_CONSUME1("th", BPMF::T) - IF_CONSUME1("n", BPMF::N) - IF_CONSUME1("l", BPMF::L) - IF_CONSUME1("kh", BPMF::K) - IF_CONSUME1("k", BPMF::G) - IF_CONSUME1("chh", BPMF::Q) - IF_CONSUME1("ch", BPMF::J) - IF_CONSUME1("hs", BPMF::X) - IF_CONSUME1("sh", BPMF::SH) - IF_CONSUME1("r", BPMF::R) - IF_CONSUME1("tsh", BPMF::C) - IF_CONSUME1("ts", BPMF::Z) - IF_CONSUME1("s", BPMF::S) - IF_CONSUME1("t", BPMF::D) - IF_CONSUME1("h", BPMF::H) - -#define IF_CONSUME2(k, v) \ -else if (PinyinParseHelper::ConsumePrefix(pht, k)) { \ -secondComponent = v; \ -} - // consume the second part - if (0) { - } else if (PinyinParseHelper::ConsumePrefix(pht, "ing")) { - secondComponent = BPMF::I; - thirdComponent = BPMF::ENG; - } else if (PinyinParseHelper::ConsumePrefix(pht, "ih")) { - if (firstComponent == BPMF::J) { - firstComponent = BPMF::ZH; - } else if (firstComponent == BPMF::Q) { - firstComponent = BPMF::CH; - } - } - IF_CONSUME2("i", BPMF::I) - IF_CONSUME2("uu", BPMF::UE) - IF_CONSUME2("u", BPMF::U) - -#undef IF_CONSUME1 -#undef IF_CONSUME2 - - // the vowels, longer sequence takes precedence - if (0) { - } else if (PinyinParseHelper::ConsumePrefix(pht, "ang")) { - thirdComponent = BPMF::ANG; - } else if (PinyinParseHelper::ConsumePrefix(pht, "eng")) { - thirdComponent = BPMF::ENG; - } else if (PinyinParseHelper::ConsumePrefix(pht, "err")) { - thirdComponent = BPMF::ERR; - } else if (PinyinParseHelper::ConsumePrefix(pht, "ai")) { - thirdComponent = BPMF::AI; - } else if (PinyinParseHelper::ConsumePrefix(pht, "ei")) { - thirdComponent = BPMF::EI; - } else if (PinyinParseHelper::ConsumePrefix(pht, "ao")) { - thirdComponent = BPMF::AO; - } else if (PinyinParseHelper::ConsumePrefix(pht, "ou")) { - thirdComponent = BPMF::OU; - } else if (PinyinParseHelper::ConsumePrefix(pht, "an")) { - thirdComponent = BPMF::AN; - } else if (PinyinParseHelper::ConsumePrefix(pht, "en")) { - thirdComponent = BPMF::EN; - } else if (PinyinParseHelper::ConsumePrefix(pht, "er")) { - thirdComponent = BPMF::ERR; - } else if (PinyinParseHelper::ConsumePrefix(pht, "a")) { - thirdComponent = BPMF::A; - } else if (PinyinParseHelper::ConsumePrefix(pht, "o")) { - thirdComponent = BPMF::O; - } else if (PinyinParseHelper::ConsumePrefix(pht, "eh")) { - thirdComponent = BPMF::E; - } else if (PinyinParseHelper::ConsumePrefix(pht, "e")) { - if (secondComponent) { - thirdComponent = BPMF::E; - } else { - thirdComponent = BPMF::ER; - } - } - - // fix ch/chh mappings - Component corresponding = 0; - if (firstComponent == BPMF::J) { - corresponding = BPMF::ZH; - } else if (firstComponent == BPMF::Q) { - corresponding = BPMF::CH; - } - - if (corresponding) { - if (secondComponent == BPMF::I && !thirdComponent) { - // if the second component is I and there's no third component, we use the - // corresponding part firstComponent = corresponding; - } else if (secondComponent == BPMF::U) { - // if second component is U, we use the corresponding part - firstComponent = corresponding; - } else if (!secondComponent) { - // if there's no second component, it must be a corresponding part - firstComponent = corresponding; - } - } - - if (secondComponent == BPMF::I) { - // fixes a few impossible occurances - switch (firstComponent) { - case BPMF::ZH: - case BPMF::CH: - case BPMF::SH: - case BPMF::R: - case BPMF::Z: - case BPMF::C: - case BPMF::S: - secondComponent = 0; - } - } - - // at last! - if (0) { - } else if (PinyinParseHelper::ConsumePrefix(pht, "1")) { - toneComponent = BPMF::Tone1; - } else if (PinyinParseHelper::ConsumePrefix(pht, "2")) { - toneComponent = BPMF::Tone2; - } else if (PinyinParseHelper::ConsumePrefix(pht, "3")) { - toneComponent = BPMF::Tone3; - } else if (PinyinParseHelper::ConsumePrefix(pht, "4")) { - toneComponent = BPMF::Tone4; - } else if (PinyinParseHelper::ConsumePrefix(pht, "5")) { - toneComponent = BPMF::Tone5; - } - - return BPMF(firstComponent | secondComponent | thirdComponent | - toneComponent); -} - const BPMF BPMF::FromComposedString(const std::string& str) { BPMF syllable; auto iter = str.begin(); @@ -1258,9 +935,59 @@ static BopomofoKeyboardLayout* CreateETen26Layout() { 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"); @@ -1296,6 +1023,11 @@ const BopomofoKeyboardLayout* BopomofoKeyboardLayout::MiTACLayout() { return layout; } +const BopomofoKeyboardLayout* BopomofoKeyboardLayout::FakeSeigyouLayout() { + static BopomofoKeyboardLayout* layout = CreateFakeSeigyouLayout(); + return layout; +} + const BopomofoKeyboardLayout* BopomofoKeyboardLayout::HanyuPinyinLayout() { static BopomofoKeyboardLayout* layout = CreateHanyuPinyinLayout(); return layout; diff --git a/Source/3rdParty/OVMandarin/Mandarin.h b/Source/3rdParty/OVMandarin/Mandarin.h index 50be17cf..bb0ec5de 100644 --- a/Source/3rdParty/OVMandarin/Mandarin.h +++ b/Source/3rdParty/OVMandarin/Mandarin.h @@ -46,12 +46,6 @@ public: // TO DO: Support accented vowels const std::string HanyuPinyinString(bool includesTone, bool useVForUUmlaut) const; - // const std::string HanyuPinyinString(bool includesTone, bool useVForUUmlaut, - // bool composeAccentedVowel) const; - - // PHT = Pai-hua-tsi - static const BopomofoSyllable FromPHT(const std::string& str); - const std::string PHTString(bool includesTone) const; static const BopomofoSyllable FromComposedString(const std::string& str); const std::string composedString() const; @@ -140,38 +134,6 @@ syllable_ = (syllable_ & ~mask) | (another.syllable_ & mask); \ return *this; } - uint16_t absoluteOrder() const { - // turn BPMF syllable into a 4*14*4*22 number - return (uint16_t)(syllable_ & ConsonantMask) + - (uint16_t)((syllable_ & MiddleVowelMask) >> 5) * 22 + - (uint16_t)((syllable_ & VowelMask) >> 7) * 22 * 4 + - (uint16_t)((syllable_ & ToneMarkerMask) >> 11) * 22 * 4 * 14; - } - - const std::string absoluteOrderString() const { - // 5*14*4*22 = 6160, we use a 79*79 encoding to represent that - uint16_t order = absoluteOrder(); - char low = 48 + static_cast(order % 79); - char high = 48 + static_cast(order / 79); - std::string result(2, ' '); - result[0] = low; - result[1] = high; - return result; - } - - static BopomofoSyllable FromAbsoluteOrder(uint16_t order) { - return BopomofoSyllable((order % 22) | ((order / 22) % 4) << 5 | - ((order / (22 * 4)) % 14) << 7 | - ((order / (22 * 4 * 14)) % 5) << 11); - } - - static BopomofoSyllable FromAbsoluteOrderString(const std::string& str) { - if (str.length() != 2) return BopomofoSyllable(); - - return FromAbsoluteOrder((uint16_t)(str[1] - 48) * 79 + - (uint16_t)(str[0] - 48)); - } - friend std::ostream& operator<<(std::ostream& stream, const BopomofoSyllable& syllable); @@ -214,6 +176,7 @@ public: static const BopomofoKeyboardLayout* ETen26Layout(); static const BopomofoKeyboardLayout* IBMLayout(); static const BopomofoKeyboardLayout* MiTACLayout(); + static const BopomofoKeyboardLayout* FakeSeigyouLayout(); static const BopomofoKeyboardLayout* HanyuPinyinLayout(); BopomofoKeyboardLayout(const BopomofoKeyToComponentMap& ktcm, @@ -498,10 +461,6 @@ public: return BopomofoKeyboardLayout::StandardLayout()->keySequenceFromSyllable(syllable_); } - const std::string absoluteOrderQueryString() const { - return syllable_.absoluteOrderString(); - } - bool hasToneMarker() const { return syllable_.hasToneMarker(); } protected: diff --git a/Source/Data b/Source/Data index 2c41e514..680243f6 160000 --- a/Source/Data +++ b/Source/Data @@ -1 +1 @@ -Subproject commit 2c41e514d64ef4fa9f92c619904b2b34a14ec847 +Subproject commit 680243f6ed8f90cf71f17232eadc1c07aab43648 diff --git a/Source/Modules/ControllerModules/AppleKeyboardConverter.swift b/Source/Modules/ControllerModules/AppleKeyboardConverter.swift new file mode 100644 index 00000000..187ffb4c --- /dev/null +++ b/Source/Modules/ControllerModules/AppleKeyboardConverter.swift @@ -0,0 +1,175 @@ +// Copyright (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 Cocoa + +@objc class AppleKeyboardConverter: NSObject { + @objc class func isDynamicBaseKeyboardLayoutEnabled() -> Bool { + switch Preferences.basisKeyboardLayout { + case "com.apple.keylayout.ZhuyinBopomofo": + return true + case "com.apple.keylayout.ZhuyinEten": + return true + default: + return false + } + } + // 處理 Apple 注音鍵盤佈局類型 + @objc class func cnvApple2ABC(_ charCode: UniChar) -> UniChar { + var charCode = charCode + // 在按鍵資訊被送往 OVMandarin 之前,先轉換為可以被 OVMandarin 正常處理的資訊。 + if self.isDynamicBaseKeyboardLayoutEnabled() { + // 保證 Apple 大千佈局內的符號鍵正常工作 + if charCode == 45 && (Preferences.basisKeyboardLayout == "com.apple.keylayout.ZhuyinBopomofo") { charCode = UniChar(96) } + if charCode == 183 && (Preferences.basisKeyboardLayout == "com.apple.keylayout.ZhuyinEten") { charCode = UniChar(96) } + // 注音鍵群。 + if (charCode == 12573) {charCode = UniChar(44)} + if (charCode == 12582) {charCode = UniChar(45)} + if (charCode == 12577) {charCode = UniChar(46)} + if (charCode == 12581) {charCode = UniChar(47)} + if (charCode == 12578) {charCode = UniChar(48)} + if (charCode == 12549) {charCode = UniChar(49)} + if (charCode == 12553) {charCode = UniChar(50)} + if (charCode == 711) {charCode = UniChar(51)} + if (charCode == 715) {charCode = UniChar(52)} + if (charCode == 12563) {charCode = UniChar(53)} + if (charCode == 714) {charCode = UniChar(54)} + if (charCode == 729) {charCode = UniChar(55)} + if (charCode == 12570) {charCode = UniChar(56)} + if (charCode == 12574) {charCode = UniChar(57)} + if (charCode == 12580) {charCode = UniChar(59)} + if (charCode == 12551) {charCode = UniChar(97)} + if (charCode == 12566) {charCode = UniChar(98)} + if (charCode == 12559) {charCode = UniChar(99)} + if (charCode == 12558) {charCode = UniChar(100)} + if (charCode == 12557) {charCode = UniChar(101)} + if (charCode == 12561) {charCode = UniChar(102)} + if (charCode == 12565) {charCode = UniChar(103)} + if (charCode == 12568) {charCode = UniChar(104)} + if (charCode == 12571) {charCode = UniChar(105)} + if (charCode == 12584) {charCode = UniChar(106)} + if (charCode == 12572) {charCode = UniChar(107)} + if (charCode == 12576) {charCode = UniChar(108)} + if (charCode == 12585) {charCode = UniChar(109)} + if (charCode == 12569) {charCode = UniChar(110)} + if (charCode == 12575) {charCode = UniChar(111)} + if (charCode == 12579) {charCode = UniChar(112)} + if (charCode == 12550) {charCode = UniChar(113)} + if (charCode == 12560) {charCode = UniChar(114)} + if (charCode == 12555) {charCode = UniChar(115)} + if (charCode == 12564) {charCode = UniChar(116)} + if (charCode == 12583) {charCode = UniChar(117)} + if (charCode == 12562) {charCode = UniChar(118)} + if (charCode == 12554) {charCode = UniChar(119)} + if (charCode == 12556) {charCode = UniChar(120)} + if (charCode == 12567) {charCode = UniChar(121)} + if (charCode == 12552) {charCode = UniChar(122)} + // 除了數字鍵區以外的標點符號。 + if (charCode == 12289) {charCode = UniChar(92)} + if (charCode == 12300) {charCode = UniChar(91)} + if (charCode == 12301) {charCode = UniChar(93)} + if (charCode == 12302) {charCode = UniChar(123)} + if (charCode == 12303) {charCode = UniChar(125)} + if (charCode == 65292) {charCode = UniChar(60)} + if (charCode == 12290) {charCode = UniChar(62)} + // 摁了 SHIFT 之後的數字區的符號。 + if (charCode == 65281) {charCode = UniChar(33)} + if (charCode == 65312) {charCode = UniChar(64)} + if (charCode == 65283) {charCode = UniChar(35)} + if (charCode == 65284) {charCode = UniChar(36)} + if (charCode == 65285) {charCode = UniChar(37)} + if (charCode == 65087) {charCode = UniChar(94)} + if (charCode == 65286) {charCode = UniChar(38)} + if (charCode == 65290) {charCode = UniChar(42)} + if (charCode == 65288) {charCode = UniChar(40)} + if (charCode == 65289) {charCode = UniChar(41)} + } + return charCode + } + + @objc class func cnvStringApple2ABC(_ strProcessed: String) -> String { + var strProcessed = strProcessed + if self.isDynamicBaseKeyboardLayoutEnabled() { + // 保證 Apple 大千佈局內的符號鍵正常工作 + if (strProcessed == "-" && Preferences.basisKeyboardLayout == "com.apple.keylayout.ZhuyinBopomofo") { strProcessed = "`" } + if (strProcessed == "·" && Preferences.basisKeyboardLayout == "com.apple.keylayout.ZhuyinEten") { strProcessed = "`" } + // 注音鍵群。 + if (strProcessed == "ㄝ") {strProcessed = ","} + if (strProcessed == "ㄦ") {strProcessed = "-"} + if (strProcessed == "ㄡ") {strProcessed = "."} + if (strProcessed == "ㄥ") {strProcessed = "/"} + if (strProcessed == "ㄢ") {strProcessed = "0"} + if (strProcessed == "ㄅ") {strProcessed = "1"} + if (strProcessed == "ㄉ") {strProcessed = "2"} + if (strProcessed == "ˇ") {strProcessed = "3"} + if (strProcessed == "ˋ") {strProcessed = "4"} + if (strProcessed == "ㄓ") {strProcessed = "5"} + if (strProcessed == "ˊ") {strProcessed = "6"} + if (strProcessed == "˙") {strProcessed = "7"} + if (strProcessed == "ㄚ") {strProcessed = "8"} + if (strProcessed == "ㄞ") {strProcessed = "9"} + if (strProcessed == "ㄤ") {strProcessed = ";"} + if (strProcessed == "ㄇ") {strProcessed = "a"} + if (strProcessed == "ㄖ") {strProcessed = "b"} + if (strProcessed == "ㄏ") {strProcessed = "c"} + if (strProcessed == "ㄎ") {strProcessed = "d"} + if (strProcessed == "ㄍ") {strProcessed = "e"} + if (strProcessed == "ㄑ") {strProcessed = "f"} + if (strProcessed == "ㄕ") {strProcessed = "g"} + if (strProcessed == "ㄘ") {strProcessed = "h"} + if (strProcessed == "ㄛ") {strProcessed = "i"} + if (strProcessed == "ㄨ") {strProcessed = "j"} + if (strProcessed == "ㄜ") {strProcessed = "k"} + if (strProcessed == "ㄠ") {strProcessed = "l"} + if (strProcessed == "ㄩ") {strProcessed = "m"} + if (strProcessed == "ㄙ") {strProcessed = "n"} + if (strProcessed == "ㄟ") {strProcessed = "o"} + if (strProcessed == "ㄣ") {strProcessed = "p"} + if (strProcessed == "ㄆ") {strProcessed = "q"} + if (strProcessed == "ㄐ") {strProcessed = "r"} + if (strProcessed == "ㄋ") {strProcessed = "s"} + if (strProcessed == "ㄔ") {strProcessed = "t"} + if (strProcessed == "ㄧ") {strProcessed = "u"} + if (strProcessed == "ㄒ") {strProcessed = "v"} + if (strProcessed == "ㄊ") {strProcessed = "w"} + if (strProcessed == "ㄌ") {strProcessed = "x"} + if (strProcessed == "ㄗ") {strProcessed = "y"} + if (strProcessed == "ㄈ") {strProcessed = "z"} + // 除了數字鍵區以外的標點符號。 + if (strProcessed == "、") {strProcessed = "\\"} + if (strProcessed == "「") {strProcessed = "["} + if (strProcessed == "」") {strProcessed = "]"} + if (strProcessed == "『") {strProcessed = "{"} + if (strProcessed == "』") {strProcessed = "}"} + if (strProcessed == ",") {strProcessed = "<"} + if (strProcessed == "。") {strProcessed = ">"} + // 摁了 SHIFT 之後的數字區的符號。 + if (strProcessed == "!") {strProcessed = "!"} + if (strProcessed == "@") {strProcessed = "@"} + if (strProcessed == "#") {strProcessed = "#"} + if (strProcessed == "$") {strProcessed = "$"} + if (strProcessed == "%") {strProcessed = "%"} + if (strProcessed == "︿") {strProcessed = "^"} + if (strProcessed == "&") {strProcessed = "&"} + if (strProcessed == "*") {strProcessed = "*"} + if (strProcessed == "(") {strProcessed = "("} + if (strProcessed == ")") {strProcessed = ")"} + } + return strProcessed + } +} diff --git a/Source/Modules/ControllerModules/KeyHandler.mm b/Source/Modules/ControllerModules/KeyHandler.mm index 6adc3665..9956694b 100644 --- a/Source/Modules/ControllerModules/KeyHandler.mm +++ b/Source/Modules/ControllerModules/KeyHandler.mm @@ -185,6 +185,9 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; case KeyboardLayoutMiTAC: _bpmfReadingBuffer->setKeyboardLayout(BopomofoKeyboardLayout::MiTACLayout()); break; + case KeyboardLayoutFakeSeigyou: + _bpmfReadingBuffer->setKeyboardLayout(BopomofoKeyboardLayout::FakeSeigyouLayout()); + break; case KeyboardLayoutHanyuPinyin: _bpmfReadingBuffer->setKeyboardLayout(BopomofoKeyboardLayout::HanyuPinyinLayout()); break; @@ -198,9 +201,14 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; { size_t cursorIndex = [self _actualCandidateCursorIndex]; string stringValue = [value UTF8String]; - _builder->grid().fixNodeSelectedCandidate(cursorIndex, stringValue); + NodeAnchor selectedNode = _builder->grid().fixNodeSelectedCandidate(cursorIndex, stringValue); if (!Preferences.useSCPCTypingMode) { // 不要針對逐字選字模式啟用臨時半衰記憶模型。 - _userOverrideModel->observe(_walkedNodes, cursorIndex, stringValue, [[NSDate date] timeIntervalSince1970]); + // If the length of the readings and the characters do not match, + // it often means it is a special symbol and it should not be stored + // in the user override model. + if (selectedNode.spanningLength == [value count]) { + _userOverrideModel->observe(_walkedNodes, cursorIndex, stringValue, [[NSDate date] timeIntervalSince1970]); + } } [self _walk]; @@ -482,6 +490,9 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; // MARK: Enter if (charCode == 13) { + if ([input isControlHold]) { + return [self _handleCtrlEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback]; + } return [self _handleEnterWithState:state stateCallback:stateCallback errorCallback:errorCallback]; } @@ -783,6 +794,24 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; return YES; } +- (BOOL)_handleCtrlEnterWithState:(InputState *)state stateCallback:(void (^)(InputState *))stateCallback errorCallback:(void (^)(void))errorCallback +{ + if (![state isKindOfClass:[InputStateInputting class]]) { + return NO; + } + + NSArray *readings = [self _currentReadings]; + NSString *composingBuffer = [readings componentsJoinedByString:@"-"]; + + [self clear]; + + InputStateCommitting *committing = [[InputStateCommitting alloc] initWithPoppedText:composingBuffer]; + stateCallback(committing); + InputStateEmpty *empty = [[InputStateEmpty alloc] init]; + stateCallback(empty); + return YES; +} + - (BOOL)_handleEnterWithState:(InputState *)state stateCallback:(void (^)(InputState *))stateCallback errorCallback:(void (^)(void))errorCallback { if (![state isKindOfClass:[InputStateInputting class]]) { @@ -914,6 +943,8 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; { NSString *inputText = input.inputText; UniChar charCode = input.charCode; + NSString *char2Print = [NSString stringWithCharacters:&charCode length:1]; + NSLog(@"vChewingCandidateKeyDebug: %@", char2Print); VTCandidateController *gCurrentCandidateController = [self.delegate candidateControllerForKeyHandler:self]; BOOL cancelCandidateKey = (charCode == 27) || (charCode == 8) || [input isDelete]; diff --git a/Source/Modules/ControllerModules/KeyHandlerInput.swift b/Source/Modules/ControllerModules/KeyHandlerInput.swift index 4e0b2a22..a83eaab3 100644 --- a/Source/Modules/ControllerModules/KeyHandlerInput.swift +++ b/Source/Modules/ControllerModules/KeyHandlerInput.swift @@ -48,13 +48,15 @@ class KeyHandlerInput: NSObject { @objc private (set) var emacsKey: vChewingEmacsKey @objc init(inputText: String?, keyCode: UInt16, charCode: UInt16, flags: NSEvent.ModifierFlags, isVerticalMode: Bool, inputTextIgnoringModifiers: String? = nil) { + let inputText = AppleKeyboardConverter.cnvStringApple2ABC(inputText ?? "") + let inputTextIgnoringModifiers = AppleKeyboardConverter.cnvStringApple2ABC(inputTextIgnoringModifiers ?? inputText) self.inputText = inputText - self.inputTextIgnoringModifiers = inputTextIgnoringModifiers ?? inputText + self.inputTextIgnoringModifiers = inputTextIgnoringModifiers self.keyCode = keyCode - self.charCode = charCode + self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode) self.flags = flags useVerticalMode = isVerticalMode - emacsKey = EmacsKeyHelper.detect(charCode: charCode, flags: flags) + emacsKey = EmacsKeyHelper.detect(charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags) cursorForwardKey = useVerticalMode ? .down : .right cursorBackwardKey = useVerticalMode ? .up : .left extraChooseCandidateKey = useVerticalMode ? .left : .down @@ -64,8 +66,8 @@ class KeyHandlerInput: NSObject { } @objc init(event: NSEvent, isVerticalMode: Bool) { - inputText = event.characters - inputTextIgnoringModifiers = event.charactersIgnoringModifiers + inputText = AppleKeyboardConverter.cnvStringApple2ABC(event.characters ?? "") + inputTextIgnoringModifiers = AppleKeyboardConverter.cnvStringApple2ABC(event.charactersIgnoringModifiers ?? "") keyCode = event.keyCode flags = event.modifierFlags useVerticalMode = isVerticalMode @@ -76,8 +78,8 @@ class KeyHandlerInput: NSObject { let first = inputText[inputText.startIndex].utf16.first! return first }() - self.charCode = charCode - emacsKey = EmacsKeyHelper.detect(charCode: charCode, flags: event.modifierFlags) + self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode) + emacsKey = EmacsKeyHelper.detect(charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: event.modifierFlags) cursorForwardKey = useVerticalMode ? .down : .right cursorBackwardKey = useVerticalMode ? .up : .left extraChooseCandidateKey = useVerticalMode ? .left : .down @@ -87,6 +89,9 @@ class KeyHandlerInput: NSObject { } override var description: String { + charCode = AppleKeyboardConverter.cnvApple2ABC(charCode) + inputText = AppleKeyboardConverter.cnvStringApple2ABC(inputText ?? "") + inputTextIgnoringModifiers = AppleKeyboardConverter.cnvStringApple2ABC(inputTextIgnoringModifiers ?? "") return "<\(super.description) inputText:\(String(describing: inputText)), inputTextIgnoringModifiers:\(String(describing: inputTextIgnoringModifiers)) charCode:\(charCode), keyCode:\(keyCode), flags:\(flags), cursorForwardKey:\(cursorForwardKey), cursorBackwardKey:\(cursorBackwardKey), extraChooseCandidateKey:\(extraChooseCandidateKey), absorbedArrowKey:\(absorbedArrowKey), verticalModeOnlyChooseCandidateKey:\(verticalModeOnlyChooseCandidateKey), emacsKey:\(emacsKey), useVerticalMode:\(useVerticalMode)>" } @@ -199,6 +204,7 @@ class KeyHandlerInput: NSObject { class EmacsKeyHelper: NSObject { @objc static func detect(charCode: UniChar, flags: NSEvent.ModifierFlags) -> vChewingEmacsKey { + let charCode = AppleKeyboardConverter.cnvApple2ABC(charCode) if flags.contains(.control) { return vChewingEmacsKey(rawValue: charCode) ?? .none } diff --git a/Source/Modules/IMEModules/PreferencesModule.swift b/Source/Modules/IMEModules/PreferencesModule.swift index f81ddd3a..6cc51025 100644 --- a/Source/Modules/IMEModules/PreferencesModule.swift +++ b/Source/Modules/IMEModules/PreferencesModule.swift @@ -156,6 +156,7 @@ struct ComposingBufferSize { case eten26 = 3 case IBM = 4 case MiTAC = 5 + case FakeSeigyou = 6 case hanyuPinyin = 10 var name: String { @@ -172,6 +173,8 @@ struct ComposingBufferSize { return "IBM" case .MiTAC: return "MiTAC" + case .FakeSeigyou: + return "FakeSeigyou" case .hanyuPinyin: return "HanyuPinyin" } @@ -336,10 +339,10 @@ struct ComposingBufferSize { (KeyboardLayout(rawValue: self.keyboardLayout) ?? KeyboardLayout.standard).name } - @UserDefault(key: kBasisKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.US") + @UserDefault(key: kBasisKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.ZhuyinBopomofo") @objc static var basisKeyboardLayout: String - @UserDefault(key: kFunctionKeyKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.US") + @UserDefault(key: kFunctionKeyKeyboardLayoutPreference, defaultValue: "com.apple.keylayout.ZhuyinBopomofo") @objc static var functionKeyboardLayout: String @UserDefault(key: kFunctionKeyKeyboardLayoutOverrideIncludeShift, defaultValue: false) diff --git a/Source/Modules/IMEModules/ctlInputMethod.swift b/Source/Modules/IMEModules/ctlInputMethod.swift index b0e549aa..c4f97a12 100644 --- a/Source/Modules/IMEModules/ctlInputMethod.swift +++ b/Source/Modules/IMEModules/ctlInputMethod.swift @@ -20,7 +20,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH import Cocoa import InputMethodKit -extension Bool { +private extension Bool { var state: NSControl.StateValue { self ? .on : .off } @@ -30,11 +30,14 @@ private let kMinKeyLabelSize: CGFloat = 10 private var gCurrentCandidateController: CandidateController? +private extension CandidateController { + static let horizontal = HorizontalCandidateController() + static let vertical = VerticalCandidateController() +} + @objc(ctlInputMethod) class ctlInputMethod: IMKInputController { - private static let horizontalCandidateController = HorizontalCandidateController() - private static let verticalCandidateController = VerticalCandidateController() private static let tooltipController = TooltipController() // MARK: - @@ -183,11 +186,6 @@ class ctlInputMethod: IMKInputController { let attributes: [AnyHashable: Any]? = (client as? IMKTextInput)?.attributes(forCharacterIndex: 0, lineHeightRectangle: &textFrame) let useVerticalMode = (attributes?["IMKTextOrientation"] as? NSNumber)?.intValue == 0 || false - if (client as? IMKTextInput)?.bundleIdentifier() == "com.apple.Terminal" && - NSStringFromClass(client.self as! AnyClass) == "IPMDServerClientWrapper" { - currentDeferredClient = client - } - let input = KeyHandlerInput(event: event, isVerticalMode: useVerticalMode) let result = keyHandler.handle(input: input, state: state) { newState in @@ -241,7 +239,7 @@ class ctlInputMethod: IMKInputController { private func open(userFileAt path: String) { func checkIfUserFilesExist() -> Bool { if !mgrLangModel.checkIfUserLanguageModelFilesExist() { - let content = String(format: NSLocalizedString("Please check the permission of at \"%@\".", comment: ""), mgrLangModel.dataFolderPath) + let content = String(format: NSLocalizedString("Please check the permission at \"%@\".", comment: ""), mgrLangModel.dataFolderPath) ctlNonModalAlertWindow.shared.show(title: NSLocalizedString("Unable to create the user phrase file.", comment: ""), content: content, confirmButtonTitle: NSLocalizedString("OK", comment: ""), cancelButtonTitle: nil, cancelAsDefault: false, delegate: nil) return false } @@ -329,15 +327,6 @@ extension ctlInputMethod { if buffer.isEmpty { return } - // if it's Terminal, we don't commit at the first call (the client of which will not be IPMDServerClientWrapper) - // then we defer the update in the next runloop round -- so that the composing buffer is not - // meaninglessly flushed, an annoying bug in Terminal.app since Mac OS X 10.5 - if (client as? IMKTextInput)?.bundleIdentifier() == "com.apple.Terminal" && NSStringFromClass(client.self as! AnyClass) != "IPMDServerClientWrapper" { - let innerCurrentDeferredClient = currentDeferredClient - DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) { - (innerCurrentDeferredClient as? IMKTextInput)?.insertText(buffer, replacementRange: NSRange(location: NSNotFound, length: NSNotFound)) - } - } (client as? IMKTextInput)?.insertText(buffer, replacementRange: NSRange(location: NSNotFound, length: NSNotFound)) } @@ -464,20 +453,37 @@ extension ctlInputMethod { private func show(candidateWindowWith state: InputState, client: Any!) { let useVerticalMode: Bool = { + var useVerticalMode = false + var candidates: [String] = [] if let state = state as? InputState.ChoosingCandidate { - return state.useVerticalMode + useVerticalMode = state.useVerticalMode + candidates = state.candidates } else if let state = state as? InputState.AssociatedPhrases { - return state.useVerticalMode + useVerticalMode = state.useVerticalMode + candidates = state.candidates + } + if useVerticalMode == true { + return true + } + candidates.sort { + return $0.count > $1.count + } + // If there is a candidate which is too long, we use the vertical + // candidate list window automatically. + if candidates.first?.count ?? 0 > 8 { + // return true // 禁用這一項。威注音回頭會換候選窗格。 } return false }() + + gCurrentCandidateController?.delegate = nil if useVerticalMode { - gCurrentCandidateController = ctlInputMethod.verticalCandidateController + gCurrentCandidateController = .vertical } else if Preferences.useHorizontalCandidateList { - gCurrentCandidateController = ctlInputMethod.horizontalCandidateController + gCurrentCandidateController = .horizontal } else { - gCurrentCandidateController = ctlInputMethod.verticalCandidateController + gCurrentCandidateController = .vertical } // set the attributes for the candidate panel (which uses NSAttributedString) @@ -551,7 +557,7 @@ extension ctlInputMethod { extension ctlInputMethod: KeyHandlerDelegate { func candidateController(for keyHandler: KeyHandler) -> Any { - gCurrentCandidateController ?? ctlInputMethod.verticalCandidateController + gCurrentCandidateController ?? .vertical } func keyHandler(_ keyHandler: KeyHandler, didSelectCandidateAt index: Int, candidateController controller: Any) { diff --git a/Source/Modules/LanguageParsers/Gramambular/Grid.h b/Source/Modules/LanguageParsers/Gramambular/Grid.h index 91ede675..8872cfae 100644 --- a/Source/Modules/LanguageParsers/Gramambular/Grid.h +++ b/Source/Modules/LanguageParsers/Gramambular/Grid.h @@ -40,11 +40,11 @@ namespace Taiyan { vector nodesEndingAt(size_t inLocation); vector nodesCrossingOrEndingAt(size_t inLocation); - // "Freeze" the node with the unigram that represents the selected canditate value. + // "Freeze" the node with the unigram that represents the selected candidate value. // After this, the node that contains the unigram will always be evaluated to that // unigram, while all other overlapping nodes will be reset to their initial state // (that is, if any of those nodes were "frozen" or fixed, they will be unfrozen.) - void fixNodeSelectedCandidate(size_t location, const string& value); + NodeAnchor fixNodeSelectedCandidate(size_t location, const string& value); // Similar to fixNodeSelectedCandidate, but instead of "freezing" the node, only // boost the unigram that represents the value with an overriding score. This @@ -64,7 +64,7 @@ namespace Taiyan { } inline void Grid::insertNode(const Node& inNode, size_t inLocation, size_t inSpanningLength) - { + { if (inLocation >= m_spans.size()) { size_t diff = inLocation - m_spans.size() + 1; @@ -156,7 +156,7 @@ namespace Taiyan { if (i + span.maximumLength() >= inLocation) { - for (size_t j = 1, m = span.maximumLength(); j <= m ; j++) { + for (size_t j = 1, m = span.maximumLength(); j <= m ; j++) { if (i + j < inLocation) { continue; @@ -180,9 +180,10 @@ namespace Taiyan { } // For nodes found at the location, fix their currently-selected candidate using the supplied string value. - inline void Grid::fixNodeSelectedCandidate(size_t location, const string& value) + inline NodeAnchor Grid::fixNodeSelectedCandidate(size_t location, const string& value) { vector nodes = nodesCrossingOrEndingAt(location); + NodeAnchor node; for (auto nodeAnchor : nodes) { auto candidates = nodeAnchor.node->candidates(); @@ -192,10 +193,12 @@ namespace Taiyan { for (size_t i = 0, c = candidates.size(); i < c; ++i) { if (candidates[i].value == value) { const_cast(nodeAnchor.node)->selectCandidateAtIndex(i); - break; + node = nodeAnchor; + break;; } } } + return node; } inline void Grid::overrideNodeScoreForSelectedCandidate(size_t location, const string& value, float overridingScore) @@ -254,7 +257,7 @@ namespace Taiyan { sst << "EOS;" << endl; sst << "}"; return sst.str(); - } + } } } diff --git a/Source/Modules/LanguageParsers/Gramambular/Node.h b/Source/Modules/LanguageParsers/Gramambular/Node.h index 0e560c38..bf9e568f 100644 --- a/Source/Modules/LanguageParsers/Gramambular/Node.h +++ b/Source/Modules/LanguageParsers/Gramambular/Node.h @@ -43,6 +43,7 @@ namespace Taiyan { const string& key() const; double score() const; + // double scoreForCandidate(string &candidate) const; // Prevents the override model to remember symbols with scode -X or lower. const KeyValuePair currentKeyValue() const; double highestUnigramScore() const; @@ -190,6 +191,17 @@ namespace Taiyan { return m_score; } + // Prevents the override model to remember symbols with scode -X or lower. +// inline double Node::scoreForCandidate(string &candidate) const +// { +// for (auto unigram : m_unigrams) { +// if (unigram.keyValue.value == candidate) { +// return unigram.score; +// } +// } +// return 0.0; +// } + inline double Node::highestUnigramScore() const { if (m_unigrams.empty()) { return 0.0; diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index 30b77319..be8b7293 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -18,7 +18,7 @@ "Edit User Phrases…" = "Edit User Phrases…"; "Reload User Phrases" = "Reload User Phrases"; "Unable to create the user phrase file." = "Unable to create the user phrase file."; -"Please check the permission of at \"%@\"." = "Please check the permission of at \"%@\"."; +"Please check the permission at \"%@\"." = "Please check the permission at \"%@\"."; "Edit Excluded Phrases" = "Edit Excluded Phrases…"; "Half-Width Punctuation Mode" = "Half-Width Punctuation Mode"; "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; @@ -46,7 +46,8 @@ "zh-Hans" = "Simplified Chinese"; "zh-Hant" = "Traditional Chinese"; "ja" = "Japanese"; -"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo"; +"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo (Standard)"; +"Apple Zhuyin Eten" = "Apple Zhuyin Eten"; // The followings are the category names used in the Symbol menu. "catCommonSymbols" = "CommonSymbols"; diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Info.plist b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Info.plist new file mode 100644 index 00000000..98fa6b2a --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Info.plist @@ -0,0 +1,57 @@ + + + + + CFBundleIdentifier + org.atelierInmu.vChewing.keyLayouts + CFBundleName + vChewingKeyLayout + CFBundleVersion + 1.0 + KLInfo_Zhuyin Dachen + + TICapsLockLanguageSwitchCapable + + TISInputSourceID + org.atelierInmu.vChewing.keyLayouts.zhuyindachen + TISIntendedLanguage + zh-Hanb + + KLInfo_Zhuyin ETen + + TICapsLockLanguageSwitchCapable + + TISInputSourceID + org.atelierInmu.vChewing.keyLayouts.zhuyineten + TISIntendedLanguage + zh-Hanb + + KLInfo_Zhuyin IBM + + TICapsLockLanguageSwitchCapable + + TISInputSourceID + org.atelierInmu.vChewing.keyLayouts.zhuyinibm + TISIntendedLanguage + zh-Hanb + + KLInfo_Zhuyin MiTAC + + TICapsLockLanguageSwitchCapable + + TISInputSourceID + org.atelierInmu.vChewing.keyLayouts.zhuyinmitac + TISIntendedLanguage + zh-Hanb + + KLInfo_Zhuyin Seigyou + + TICapsLockLanguageSwitchCapable + + TISInputSourceID + org.atelierInmu.vChewing.keyLayouts.zhuyinseigyou + TISIntendedLanguage + zh-Hanb + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Dachen.keylayout b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Dachen.keylayout new file mode 100644 index 00000000..bf901502 --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Dachen.keylayout @@ -0,0 +1,1127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin ETen.keylayout b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin ETen.keylayout new file mode 100644 index 00000000..98ba181c --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin ETen.keylayout @@ -0,0 +1,1127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin IBM.keylayout b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin IBM.keylayout new file mode 100644 index 00000000..e0b3d15c --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin IBM.keylayout @@ -0,0 +1,1127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin MiTAC.keylayout b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin MiTAC.keylayout new file mode 100644 index 00000000..2a670716 --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin MiTAC.keylayout @@ -0,0 +1,1127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Seigyou.keylayout b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Seigyou.keylayout new file mode 100644 index 00000000..bc6032ad --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/Zhuyin Seigyou.keylayout @@ -0,0 +1,1127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/zh.lproj/InfoPlist.strings b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/zh.lproj/InfoPlist.strings new file mode 100644 index 00000000..08c98689 Binary files /dev/null and b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/Resources/zh.lproj/InfoPlist.strings differ diff --git a/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/version.plist b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/version.plist new file mode 100644 index 00000000..01aeeea3 --- /dev/null +++ b/Source/Resources/KeyLayouts/vChewingKeyLayout.bundle/Contents/version.plist @@ -0,0 +1,12 @@ + + + + + BuildVersion + 22M2 + ProjectName + vChewingKeyLayout + SourceVersion + + + diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index cbdb3f0e..be8b7293 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -18,7 +18,7 @@ "Edit User Phrases…" = "Edit User Phrases…"; "Reload User Phrases" = "Reload User Phrases"; "Unable to create the user phrase file." = "Unable to create the user phrase file."; -"Please check the permission of at \"%@\"." = "Please check the permission of at \"%@\"."; +"Please check the permission at \"%@\"." = "Please check the permission at \"%@\"."; "Edit Excluded Phrases" = "Edit Excluded Phrases…"; "Half-Width Punctuation Mode" = "Half-Width Punctuation Mode"; "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; @@ -46,12 +46,13 @@ "zh-Hans" = "Simplified Chinese"; "zh-Hant" = "Traditional Chinese"; "ja" = "Japanese"; -"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo"; +"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo (Standard)"; +"Apple Zhuyin Eten" = "Apple Zhuyin Eten"; // The followings are the category names used in the Symbol menu. "catCommonSymbols" = "CommonSymbols"; -"catHoriBrackets" = "HoriBrackets"; -"catVertBrackets" = "VertBrackets"; +"catHoriBrackets" = "HorizontalBrackets"; +"catVertBrackets" = "VerticalBrackets"; "catGreekLetters" = "GreekLetters"; "catMathSymbols" = "MathSymbols"; "catCurrencyUnits" = "CurrencyUnits"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index 0737caca..c0917b8a 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -18,14 +18,14 @@ "Edit User Phrases…" = "ユーザー辞書を編集…"; "Reload User Phrases" = "ユーザー辞書を再び読込む"; "Unable to create the user phrase file." = "ユーザー辞書ファイルの作成は失敗しました。"; -"Please check the permission of at \"%@\"." = "「%@」に書き出す権限は不足らしい。"; +"Please check the permission at \"%@\"." = "「%@」に書き出す権限は不足らしい。"; "Edit Excluded Phrases" = "辞書条目排除表を編集…"; "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." = "「%@」は既存語彙である。"; -"Edit Phrase Replacement Table" = "言葉置換表を編集…"; +"Edit Phrase Replacement Table…" = "言葉置換表を編集…"; "Use Phrase Replacement" = "言葉置換機能"; "Candidates keys cannot be empty." = "言選り用キー陣列に何かキーをご登録ください。"; "Candidate keys can only contain ASCII characters like alphanumerals." = "言選り用キー陣列にはASCII文字だけをご登録ください(英数など)。"; @@ -46,7 +46,8 @@ "zh-Hans" = "簡體中国語"; "zh-Hant" = "繁體中国語"; "ja" = "和語"; -"Apple Zhuyin Bopomofo" = "Apple 注音ボポモフォ配列"; +"Apple Zhuyin Bopomofo" = "Apple 注音ボポモフォ配列(大千標準)"; +"Apple Zhuyin Bopomofo" = "Apple 注音ボポモフォ配列(倚天伝統)"; // The followings are the category names used in the Symbol menu. "catCommonSymbols" = "常用"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index 99908093..75577658 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -18,7 +18,7 @@ "Edit User Phrases…" = "编辑自订语汇…"; "Reload User Phrases" = "重载自订语汇"; "Unable to create the user phrase file." = "无法创建自订语汇档案。"; -"Please check the permission of at \"%@\"." = "请检查此处的存取权限:\"%@\"."; +"Please check the permission at \"%@\"." = "请检查此处的存取权限:\"%@\"."; "Edit Excluded Phrases" = "编辑要滤除的语汇…"; "Half-Width Punctuation Mode" = "半角标点模式"; "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字数不足以自订语汇。"; @@ -38,7 +38,7 @@ "Per-Char Select Mode" = "仿真逐字选字输入"; "CNS11643 Mode" = "全字库模式"; "Per-Char Associated Phrases" = "逐字选字联想模式"; -"Open User Data Folder" = "开启使用者数据夹"; +"Open User Data Folder" = "开启使用者资料夹"; "Edit Associated Phrases…" = "编辑联想词…"; "Reboot vChewing…" = "重新启动输入法…"; "auto" = "与系统设定一致"; @@ -46,7 +46,8 @@ "zh-Hans" = "简体中文"; "zh-Hant" = "繁体中文"; "ja" = "和文"; -"Apple Zhuyin Bopomofo" = "Apple 注音键盘布局"; +"Apple Zhuyin Bopomofo" = "Apple 标准注音键盘布局"; +"Apple Zhuyin Eten" = "Apple 倚天注音键盘布局"; // The followings are the category names used in the Symbol menu. "catCommonSymbols" = "常用"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index de536115..bbb98b51 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -18,7 +18,7 @@ "Edit User Phrases…" = "編輯自訂語彙…"; "Reload User Phrases" = "重載自訂語彙"; "Unable to create the user phrase file." = "無法創建自訂語彙檔案。"; -"Please check the permission of at \"%@\"." = "請檢查此處的存取權限:\"%@\"."; +"Please check the permission at \"%@\"." = "請檢查此處的存取權限:\"%@\"."; "Edit Excluded Phrases" = "編輯要濾除的語彙…"; "Half-Width Punctuation Mode" = "半形標點模式"; "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字數不足以自訂語彙。"; @@ -46,7 +46,8 @@ "zh-Hans" = "簡體中文"; "zh-Hant" = "繁體中文"; "ja" = "和文"; -"Apple Zhuyin Bopomofo" = "Apple 注音鍵盤佈局"; +"Apple Zhuyin Bopomofo" = "Apple 標準注音鍵盤佈局"; +"Apple Zhuyin Eten" = "Apple 倚天注音鍵盤佈局"; // The followings are the category names used in the Symbol menu. "catCommonSymbols" = "常用"; diff --git a/Source/WindowControllers/ctlPrefWindow.swift b/Source/WindowControllers/ctlPrefWindow.swift index aa93d365..8670a263 100644 --- a/Source/WindowControllers/ctlPrefWindow.swift +++ b/Source/WindowControllers/ctlPrefWindow.swift @@ -72,6 +72,16 @@ extension RangeReplaceableCollection where Element: Hashable { basisKeyboardLayoutButton.menu?.removeAllItems() + let menuItem_AppleZhuyinBopomofo = NSMenuItem() + menuItem_AppleZhuyinBopomofo.title = String(format: NSLocalizedString("Apple Zhuyin Bopomofo", comment: "")) + menuItem_AppleZhuyinBopomofo.representedObject = String("com.apple.keylayout.ZhuyinBopomofo") + basisKeyboardLayoutButton.menu?.addItem(menuItem_AppleZhuyinBopomofo) + + let menuItem_AppleZhuyinEten = NSMenuItem() + menuItem_AppleZhuyinEten.title = String(format: NSLocalizedString("Apple Zhuyin Eten", comment: "")) + menuItem_AppleZhuyinEten.representedObject = String("com.apple.keylayout.ZhuyinEten") + basisKeyboardLayoutButton.menu?.addItem(menuItem_AppleZhuyinEten) + let basisKeyboardLayoutID = Preferences.basisKeyboardLayout for source in list { @@ -132,10 +142,12 @@ extension RangeReplaceableCollection where Element: Hashable { basisKeyboardLayoutButton.menu?.addItem(menuItem) } - let menuItem = NSMenuItem() - menuItem.title = String(format: NSLocalizedString("Apple Zhuyin Bopomofo", comment: "")) - menuItem.representedObject = String("com.apple.keylayout.ZhuyinBopomofo") - basisKeyboardLayoutButton.menu?.addItem(menuItem) + if (basisKeyboardLayoutID == "com.apple.keylayout.ZhuyinBopomofo") { + chosenBaseKeyboardLayoutItem = menuItem_AppleZhuyinBopomofo + } else if basisKeyboardLayoutID == "com.apple.keylayout.ZhuyinEten" { + chosenBaseKeyboardLayoutItem = menuItem_AppleZhuyinEten + } + basisKeyboardLayoutButton.select(chosenBaseKeyboardLayoutItem ?? usKeyboardLayoutItem) selectionKeyComboBox.usesDataSource = false diff --git a/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib index 08218d8b..ebc63d2b 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib +++ b/Source/WindowNIBs/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib @@ -596,6 +596,7 @@ + @@ -626,6 +627,22 @@ + + + + + + + + Regarding On-Screen Keyboard Viewer Support: + + Since v1.3.2, vChewing supports on-screen keyboard by supporting "Apple Zhuyin Bopomofo" and "Apple Zhuyin Eten" alphanumeric layout. Theoreotically, these two dynamic layouts work with all types of Apple physical keyboards, and you can report failure cases through macOS Feedback Assistant app if macOS built-in Zhuyin / Eten-Zhuyin Input Method fails from working with your non-US keyboard. + + HOWEVER, choosing such dynamic alphanumeric layouts REQUIRING THAT you have to choose the Bopomofo layout above to Standard (Microsoft / Dachen) since the Bopomofo / Eten layout support in this case is already finished by the macOS system. + + + + @@ -640,9 +657,12 @@ + + + diff --git a/Source/WindowNIBs/Source/WindowNIBs/en.lproj/frmPrefWindow.strings b/Source/WindowNIBs/Source/WindowNIBs/en.lproj/frmPrefWindow.strings index 0eebc9c6..18444261 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/en.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/Source/WindowNIBs/en.lproj/frmPrefWindow.strings @@ -6,7 +6,7 @@ "5.title" = "OtherViews"; /* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */ -"6.title" = "Standard"; +"6.title" = "Microsoft, Dachen, Wang, etc."; /* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */ "7.title" = "ETen"; @@ -92,6 +92,9 @@ /* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */ "7fV-x8-WHQ.title" = "MiTAC"; +/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */ +"27F-8T-FkQ.title" = "Fake Seigyou (similar to JinYei)"; + /* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */ "1AW-xf-c2f.label" = "Keyboard"; @@ -193,3 +196,6 @@ /* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */ "xrE-8T-WKO.label" = "Advanced"; + +/* Class = "NSTextFieldCell"; title = "Regarding On-Screen Keyboard Support:"; ObjectID = "wQ9-px-b07"; */ +"wQ9-px-b07.title" = "Regarding On-Screen Keyboard Viewer Support:\n\n\tSince v1.3.2, vChewing supports on-screen keyboard by supporting \"Apple Zhuyin Bopomofo\" and \"Apple Zhuyin Eten\" alphanumeric layout. Theoreotically, these two dynamic layouts work with all types of Apple physical keyboards, and you can report failure cases through macOS Feedback Assistant app if macOS built-in Zhuyin / Eten-Zhuyin Input Method fails from working with your non-US keyboard.\n\n\tHOWEVER, choosing such dynamic alphanumeric layouts REQUIRING THAT you have to choose the Bopomofo layout above to Standard (Microsoft / Dachen) since the Bopomofo / Eten layout support in this case is already finished by the macOS system."; diff --git a/Source/WindowNIBs/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings b/Source/WindowNIBs/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings index 1bc1ba72..a7aca5dd 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings @@ -92,6 +92,9 @@ /* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */ "7fV-x8-WHQ.title" = "神通"; +/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */ +"27F-8T-FkQ.title" = "偽精業"; + /* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */ "1AW-xf-c2f.label" = "キーボード"; @@ -193,3 +196,6 @@ /* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */ "xrE-8T-WKO.label" = "詳細"; + +/* Class = "NSTextFieldCell"; title = "Regarding On-Screen Keyboard Support:"; ObjectID = "wQ9-px-b07"; */ +"wQ9-px-b07.title" = "macOS 内蔵のキーボードビューアについて:\n\n\t威注音は v1.3.2 版にて macOS 内蔵のキーボードビューアをサポートし始めたが、「Apple Zhuyin Bopomofo」と「Apple Zhuyin Eten」この2つダイナミック英数キーボード配列をサポートしたためである。基本的には、この機能は全ての言語の Apple キーボードと一緒に動けるはず。macOS 内蔵の注音入力と倚天注音入力が支障なく使える限り(支障があったら Feedback Assistant.app で Apple にご報告を)、この2つダイナミック英数キーボード配列も威注音で作動できるだと考えられる。\n\n\tだが、もし、ダイナミック英数キーボード配列を起用すると、今のこの画面の上の「注音キーボード配列」を標準配列にしなければならぬこと。なぜなら、この場合、倚天などの注音配列のサポート役割は macOS である。"; diff --git a/Source/WindowNIBs/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings b/Source/WindowNIBs/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings index 72f334d4..95542870 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings @@ -92,6 +92,9 @@ /* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */ "7fV-x8-WHQ.title" = "神通"; +/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */ +"27F-8T-FkQ.title" = "伪精业"; + /* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */ "1AW-xf-c2f.label" = "键盘"; @@ -162,13 +165,13 @@ "f2j-xD-4xK.title" = "敲 ESC 键以清空整个输入缓冲区"; /* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */ -"f8i-69-zxm.title" = "自动重新加载变更过的使用者数据内容"; +"f8i-69-zxm.title" = "自动重新加载变更过的使用者资料内容"; /* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */ "iRg-wx-Nx2.title" = "变更候选字窗的字型大小。"; /* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */ -"j48-5a-cEs.title" = "请指定在使用者数据重载时要启用的功能。"; +"j48-5a-cEs.title" = "请指定在使用者资料重载时要启用的功能。"; /* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */ "jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1"; @@ -193,3 +196,6 @@ /* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */ "xrE-8T-WKO.label" = "进阶"; + +/* Class = "NSTextFieldCell"; title = "Regarding On-Screen Keyboard Support:"; ObjectID = "wQ9-px-b07"; */ +"wQ9-px-b07.title" = "关于 macOS 内建萤幕模拟键盘支援:\n\n\t自 v1.3.2 版开始,威注音支援 macOS 内建的萤幕小键盘。该功能是借由对「Apple 标准注音键盘布局」与「Apple 倚天注音键盘布局」这两个动态英数键盘布局来完成的。理论上来讲,这两个动态英数键盘布局应该可以与所有语种的 Apple 物理键盘相容。如果有不相容的情况的话,macOS 内建的注音与倚天注音输入法一定也会有相同的故障(可以借由 Feedback Assistant.app 向 Apple 反馈这种键盘布局问题)。\n\n\t然而,如果您启用了这种动态英数键盘布局的话,请将当前画面顶端的注音键盘布局设为「微软/大千……」,因为对诸如倚天等异种键盘的支援已经交给 macOS 系统来事先完成了。"; diff --git a/Source/WindowNIBs/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings b/Source/WindowNIBs/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings index fb104a04..7ed57551 100644 --- a/Source/WindowNIBs/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings @@ -92,6 +92,9 @@ /* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */ "7fV-x8-WHQ.title" = "神通"; +/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */ +"27F-8T-FkQ.title" = "偽精業"; + /* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */ "1AW-xf-c2f.label" = "鍵盤"; @@ -193,3 +196,6 @@ /* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */ "xrE-8T-WKO.label" = "進階"; + +/* Class = "NSTextFieldCell"; title = "Regarding On-Screen Keyboard Support:"; ObjectID = "wQ9-px-b07"; */ +"wQ9-px-b07.title" = "關於 macOS 內建螢幕模擬鍵盤支援:\n\n\t自 v1.3.2 版開始,威注音支援 macOS 內建的螢幕小鍵盤。該功能是藉由對「Apple 標準注音鍵盤佈局」與「Apple 倚天注音鍵盤佈局」這兩個動態英數鍵盤佈局來完成的。理論上來講,這兩個動態英數鍵盤佈局應該可以與所有語種的 Apple 物理鍵盤相容。如果有不相容的情況的話,macOS 內建的注音與倚天注音輸入法一定也會有相同的故障(可以藉由 Feedback Assistant.app 向 Apple 反饋這種鍵盤佈局問題)。\n\n\t然而,如果您啟用了這種動態英數鍵盤佈局的話,請將當前畫面頂端的注音鍵盤佈局設為「微軟/大千……」,因為對諸如倚天等異種鍵盤的支援已經交給 macOS 系統來事先完成了。"; diff --git a/Update-Info.plist b/Update-Info.plist index aef70bc4..f9605297 100644 --- a/Update-Info.plist +++ b/Update-Info.plist @@ -7,8 +7,8 @@ UpdateInfoSite https://gitee.com/vchewing/vChewing-macOS CFBundleVersion - 1920 + 1921 CFBundleShortVersionString - 1.3.1 + 1.3.2 diff --git a/UserPhraseEditor/Resources/zh-Hans.lproj/Main.strings b/UserPhraseEditor/Resources/zh-Hans.lproj/Main.strings index cb0bcd14..06580987 100644 --- a/UserPhraseEditor/Resources/zh-Hans.lproj/Main.strings +++ b/UserPhraseEditor/Resources/zh-Hans.lproj/Main.strings @@ -341,8 +341,8 @@ /* Class = "NSMenuItem"; title = "显示工具列"; ObjectID = "snW-S8-Cw5"; */ "snW-S8-Cw5.title" = "显示工具列"; -/* Class = "NSMenuItem"; title = "数据侦测器"; ObjectID = "tRr-pd-1PS"; */ -"tRr-pd-1PS.title" = "数据侦测器"; +/* Class = "NSMenuItem"; title = "资料侦测器"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "资料侦测器"; /* Class = "NSMenuItem"; title = "开启近期的档案"; ObjectID = "tXI-mr-wws"; */ "tXI-mr-wws.title" = "开启近期的档案"; diff --git a/vChewing.xcodeproj/project.pbxproj b/vChewing.xcodeproj/project.pbxproj index 1fafa1db..f8481110 100644 --- a/vChewing.xcodeproj/project.pbxproj +++ b/vChewing.xcodeproj/project.pbxproj @@ -8,8 +8,10 @@ /* Begin PBXBuildFile section */ 5B0AF8B527B2C8290096FE54 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0AF8B427B2C8290096FE54 /* StringExtension.swift */; }; + 5B11328927B94CFB00E58451 /* AppleKeyboardConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B11328827B94CFB00E58451 /* AppleKeyboardConverter.swift */; }; 5B2DB16F27AF6891006D874E /* data-chs.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5B2DB16D27AF6891006D874E /* data-chs.txt */; }; 5B2DB17027AF6891006D874E /* data-cht.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5B2DB16E27AF6891006D874E /* data-cht.txt */; }; + 5B30F11327BA568800484E24 /* vChewingKeyLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */; }; 5B62A31727AE73A700A19448 /* unzip.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A30927AE73A700A19448 /* unzip.m */; }; 5B62A31827AE73A700A19448 /* zip.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A30A27AE73A700A19448 /* zip.m */; }; 5B62A31927AE73A700A19448 /* ioapi.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B62A30B27AE73A700A19448 /* ioapi.m */; }; @@ -137,9 +139,11 @@ 5B05A47F27AFF84200437698 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/frmAboutWindow.strings; sourceTree = ""; }; 5B0AF8B427B2C8290096FE54 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; }; 5B0CF37F27AD476E00784B08 /* SwiftyOpenCC */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SwiftyOpenCC; path = Packages/SwiftyOpenCC; sourceTree = ""; }; + 5B11328827B94CFB00E58451 /* AppleKeyboardConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleKeyboardConverter.swift; sourceTree = ""; }; 5B2DB16D27AF6891006D874E /* data-chs.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "data-chs.txt"; path = "Data/data-chs.txt"; sourceTree = ""; }; 5B2DB16E27AF6891006D874E /* data-cht.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "data-cht.txt"; path = "Data/data-cht.txt"; sourceTree = ""; }; 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 = ""; }; 5B62A30927AE73A700A19448 /* unzip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = unzip.m; sourceTree = ""; }; 5B62A30A27AE73A700A19448 /* zip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = zip.m; sourceTree = ""; }; 5B62A30B27AE73A700A19448 /* ioapi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ioapi.m; sourceTree = ""; }; @@ -296,6 +300,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 5B30F10727BA501900484E24 /* KeyLayouts */ = { + isa = PBXGroup; + children = ( + 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */, + ); + path = KeyLayouts; + sourceTree = ""; + }; 5B62A30127AE732800A19448 /* 3rdParty */ = { isa = PBXGroup; children = ( @@ -361,6 +373,7 @@ 5B62A31F27AE74E900A19448 /* ControllerModules */ = { isa = PBXGroup; children = ( + 5B11328827B94CFB00E58451 /* AppleKeyboardConverter.swift */, D4E569DA27A34CC100AC2CEF /* KeyHandler.h */, D4E569DB27A34CC100AC2CEF /* KeyHandler.mm */, D456576D279E4F7B00DF6BC9 /* KeyHandlerInput.swift */, @@ -449,6 +462,7 @@ 5B62A33027AE78E500A19448 /* Resources */ = { isa = PBXGroup; children = ( + 5B30F10727BA501900484E24 /* KeyLayouts */, 6A0D4EEE15FC0DA600ABF4B3 /* Images */, 5BBBB76E27AED70B0023B93A /* MenuIcons */, 5BBBB75C27AED54C0023B93A /* SoundFiles */, @@ -854,6 +868,7 @@ 5BBBB77627AED70B0023B93A /* MenuIcon-TCVIM.png in Resources */, 6A187E2616004C5900466B2E /* MainMenu.xib in Resources */, 5BBBB75F27AED54C0023B93A /* Beep.m4a in Resources */, + 5B30F11327BA568800484E24 /* vChewingKeyLayout.bundle in Resources */, 5B2DB16F27AF6891006D874E /* data-chs.txt in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -930,6 +945,7 @@ D47F7DCE278BFB57002F9DD7 /* ctlPrefWindow.swift in Sources */, D47D73AC27A6CAE600255A50 /* AssociatedPhrases.mm in Sources */, 5B62A34A27AE7CD900A19448 /* NotifierController.swift in Sources */, + 5B11328927B94CFB00E58451 /* AppleKeyboardConverter.swift in Sources */, 5B62A31827AE73A700A19448 /* zip.m in Sources */, 5B62A32E27AE78B000A19448 /* CNSLM.mm in Sources */, D41355DB278E6D17005E5CBD /* vChewingLM.mm in Sources */, @@ -1141,7 +1157,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEBUG_INFORMATION_FORMAT = dwarf; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -1163,7 +1179,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1196,7 +1212,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1213,7 +1229,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1327,7 +1343,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -1361,7 +1377,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1393,7 +1409,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1421,7 +1437,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1504,7 +1520,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -1529,7 +1545,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1557,7 +1573,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1920; + CURRENT_PROJECT_VERSION = 1921; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1576,7 +1592,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.3.1; + MARKETING_VERSION = 1.3.2; PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "";