Shiki: CHS Input Mode && WINNT351 Input Style, etc.
- Enabled WINNT351 legacy phonetic Input Style as an option in the vChewing Preferences, not a standalone IME with a standalone language model. - Unsealed Simplified Chinese Input Mode. It's finally back. - Rebranded the Formosa module into "Taiyan", the man who invented the Chinese Zhuyin (Bopomofo) symbols.
This commit is contained in:
parent
74d05cc462
commit
fa0d7c2c9d
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -238,24 +239,37 @@
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mzw-F2-aAQ">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mzw-F2-aAQ">
|
||||||
<rect key="frame" x="19" y="61.5" width="423" height="16"/>
|
<rect key="frame" x="19" y="61.5" width="423" height="16"/>
|
||||||
<buttonCell key="cell" type="check" title="Stop farting (when typed phonetic combination is invalid, etc.)" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="ArK-Vk-OoT">
|
<buttonCell key="cell" type="check" title="Emulating Windows NT 3.51 legacy phonetic typing experience" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="ArK-Vk-OoT">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="clickedWhetherIMEShouldNotFartToggleAction:" target="-1" id="ieE-Xb-JtL"/>
|
<binding destination="32" name="value" keyPath="values.UseWinNT351BPMF" id="7Of-X3-D03"/>
|
||||||
<binding destination="32" name="value" keyPath="values.ShouldNotFartInLieuOfBeep" id="7Of-X3-D03"/>
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pYB-E5-4Nv">
|
||||||
|
<rect key="frame" x="19" y="40.5" width="423" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Stop farting (when typed phonetic combination is invalid, etc.)" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="62u-jY-BRh">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="clickedWhetherIMEShouldNotFartToggleAction:" target="-1" id="bUl-EZ-USn"/>
|
||||||
|
<binding destination="32" name="value" keyPath="values.ShouldNotFartInLieuOfBeep" id="EOH-Pc-8Hk"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="5IL-zZ-CL9" firstAttribute="leading" secondItem="mzw-F2-aAQ" secondAttribute="leading" id="1Ly-qx-Gu3"/>
|
<constraint firstItem="5IL-zZ-CL9" firstAttribute="leading" secondItem="mzw-F2-aAQ" secondAttribute="leading" id="1Ly-qx-Gu3"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="top" secondItem="brd-6J-saN" secondAttribute="top" constant="14.5" id="3t1-EX-nuL"/>
|
<constraint firstItem="Yaj-QY-7xV" firstAttribute="top" secondItem="brd-6J-saN" secondAttribute="top" constant="14.5" id="3t1-EX-nuL"/>
|
||||||
|
<constraint firstItem="pYB-E5-4Nv" firstAttribute="top" secondItem="mzw-F2-aAQ" secondAttribute="bottom" constant="6" symbolic="YES" id="6Dg-ES-9nm"/>
|
||||||
|
<constraint firstItem="pYB-E5-4Nv" firstAttribute="leading" secondItem="mzw-F2-aAQ" secondAttribute="leading" id="L9L-Lj-gmk"/>
|
||||||
<constraint firstItem="5IL-zZ-CL9" firstAttribute="top" secondItem="Yaj-QY-7xV" secondAttribute="bottom" constant="6" symbolic="YES" id="MeX-CD-9FN"/>
|
<constraint firstItem="5IL-zZ-CL9" firstAttribute="top" secondItem="Yaj-QY-7xV" secondAttribute="bottom" constant="6" symbolic="YES" id="MeX-CD-9FN"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="trailing" secondItem="5IL-zZ-CL9" secondAttribute="trailing" id="S0v-Op-wDh"/>
|
<constraint firstItem="Yaj-QY-7xV" firstAttribute="trailing" secondItem="5IL-zZ-CL9" secondAttribute="trailing" id="S0v-Op-wDh"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="Yaj-QY-7xV" secondAttribute="trailing" constant="20" symbolic="YES" id="UKC-jH-d9A"/>
|
<constraint firstAttribute="trailing" secondItem="Yaj-QY-7xV" secondAttribute="trailing" constant="20" symbolic="YES" id="UKC-jH-d9A"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="leading" secondItem="brd-6J-saN" secondAttribute="leading" constant="20" symbolic="YES" id="YeI-ie-7B9"/>
|
<constraint firstItem="Yaj-QY-7xV" firstAttribute="leading" secondItem="brd-6J-saN" secondAttribute="leading" constant="20" symbolic="YES" id="YeI-ie-7B9"/>
|
||||||
<constraint firstItem="mzw-F2-aAQ" firstAttribute="top" secondItem="5IL-zZ-CL9" secondAttribute="bottom" constant="6" symbolic="YES" id="hC7-fa-qhc"/>
|
<constraint firstItem="mzw-F2-aAQ" firstAttribute="top" secondItem="5IL-zZ-CL9" secondAttribute="bottom" constant="6" symbolic="YES" id="hC7-fa-qhc"/>
|
||||||
|
<constraint firstItem="pYB-E5-4Nv" firstAttribute="trailing" secondItem="mzw-F2-aAQ" secondAttribute="trailing" id="tD3-Pz-Qhz"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="leading" secondItem="5IL-zZ-CL9" secondAttribute="leading" id="tjY-PG-4Kz"/>
|
<constraint firstItem="Yaj-QY-7xV" firstAttribute="leading" secondItem="5IL-zZ-CL9" secondAttribute="leading" id="tjY-PG-4Kz"/>
|
||||||
<constraint firstItem="5IL-zZ-CL9" firstAttribute="trailing" secondItem="mzw-F2-aAQ" secondAttribute="trailing" id="xg7-MH-hSW"/>
|
<constraint firstItem="5IL-zZ-CL9" firstAttribute="trailing" secondItem="mzw-F2-aAQ" secondAttribute="trailing" id="xg7-MH-hSW"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include "KeyValuePair.h"
|
#include "KeyValuePair.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
class Bigram {
|
class Bigram {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "Grid.h"
|
#include "Grid.h"
|
||||||
#include "LanguageModel.h"
|
#include "LanguageModel.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "NodeAnchor.h"
|
#include "NodeAnchor.h"
|
||||||
#include "Span.h"
|
#include "Span.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
|
|
||||||
class Grid {
|
class Grid {
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "Bigram.h"
|
#include "Bigram.h"
|
||||||
#include "Unigram.h"
|
#include "Unigram.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "LanguageModel.h"
|
#include "LanguageModel.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
class NodeAnchor {
|
class NodeAnchor {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
class Span {
|
class Span {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "KeyValuePair.h"
|
#include "KeyValuePair.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
class Unigram {
|
class Unigram {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "Grid.h"
|
#include "Grid.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
|
||||||
using namespace Formosa::Gramambular;
|
using namespace Taiyan::Gramambular;
|
||||||
|
|
||||||
FastLM::FastLM()
|
FastLM::FastLM()
|
||||||
: fd(-1)
|
: fd(-1)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
// format, and we use mmap and zero-out the separators and line feeds
|
// format, and we use mmap and zero-out the separators and line feeds
|
||||||
// to avoid creating new string objects; the parser is a simple DFA
|
// to avoid creating new string objects; the parser is a simple DFA
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Gramambular {
|
namespace Gramambular {
|
||||||
class FastLM : public LanguageModel
|
class FastLM : public LanguageModel
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
namespace vChewing {
|
namespace vChewing {
|
||||||
|
|
||||||
using namespace Formosa::Gramambular;
|
using namespace Taiyan::Gramambular;
|
||||||
|
|
||||||
class UserOverrideModel {
|
class UserOverrideModel {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -94,19 +94,19 @@ void UserPhrasesLM::dump()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<Formosa::Gramambular::Bigram> UserPhrasesLM::bigramsForKeys(const std::string& preceedingKey, const std::string& key)
|
const std::vector<Taiyan::Gramambular::Bigram> UserPhrasesLM::bigramsForKeys(const std::string& preceedingKey, const std::string& key)
|
||||||
{
|
{
|
||||||
return std::vector<Formosa::Gramambular::Bigram>();
|
return std::vector<Taiyan::Gramambular::Bigram>();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<Formosa::Gramambular::Unigram> UserPhrasesLM::unigramsForKey(const std::string& key)
|
const std::vector<Taiyan::Gramambular::Unigram> UserPhrasesLM::unigramsForKey(const std::string& key)
|
||||||
{
|
{
|
||||||
std::vector<Formosa::Gramambular::Unigram> v;
|
std::vector<Taiyan::Gramambular::Unigram> v;
|
||||||
auto iter = keyRowMap.find(key);
|
auto iter = keyRowMap.find(key);
|
||||||
if (iter != keyRowMap.end()) {
|
if (iter != keyRowMap.end()) {
|
||||||
const std::vector<Row>& rows = iter->second;
|
const std::vector<Row>& rows = iter->second;
|
||||||
for (const auto& row : rows) {
|
for (const auto& row : rows) {
|
||||||
Formosa::Gramambular::Unigram g;
|
Taiyan::Gramambular::Unigram g;
|
||||||
g.keyValue.key = row.key;
|
g.keyValue.key = row.key;
|
||||||
g.keyValue.value = row.value;
|
g.keyValue.value = row.value;
|
||||||
g.score = 0.0;
|
g.score = 0.0;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
namespace vChewing {
|
namespace vChewing {
|
||||||
|
|
||||||
class UserPhrasesLM : public Formosa::Gramambular::LanguageModel
|
class UserPhrasesLM : public Taiyan::Gramambular::LanguageModel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UserPhrasesLM();
|
UserPhrasesLM();
|
||||||
|
@ -26,8 +26,8 @@ public:
|
||||||
void close();
|
void close();
|
||||||
void dump();
|
void dump();
|
||||||
|
|
||||||
virtual const std::vector<Formosa::Gramambular::Bigram> bigramsForKeys(const std::string& preceedingKey, const std::string& key);
|
virtual const std::vector<Taiyan::Gramambular::Bigram> bigramsForKeys(const std::string& preceedingKey, const std::string& key);
|
||||||
virtual const std::vector<Formosa::Gramambular::Unigram> unigramsForKey(const std::string& key);
|
virtual const std::vector<Taiyan::Gramambular::Unigram> unigramsForKey(const std::string& key);
|
||||||
virtual bool hasUnigramsForKey(const std::string& key);
|
virtual bool hasUnigramsForKey(const std::string& key);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
namespace vChewing {
|
namespace vChewing {
|
||||||
|
|
||||||
using namespace Formosa::Gramambular;
|
using namespace Taiyan::Gramambular;
|
||||||
|
|
||||||
class vChewingLM : public LanguageModel {
|
class vChewingLM : public LanguageModel {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "OVUTF8Helper.h"
|
#include "OVUTF8Helper.h"
|
||||||
#include "OVWildcard.h"
|
#include "OVWildcard.h"
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Mandarin {
|
namespace Mandarin {
|
||||||
|
|
||||||
using namespace OpenVanilla;
|
using namespace OpenVanilla;
|
||||||
|
@ -991,4 +991,4 @@ const BopomofoKeyboardLayout* BopomofoKeyboardLayout::HanyuPinyinLayout()
|
||||||
|
|
||||||
|
|
||||||
} // namespace Mandarin
|
} // namespace Mandarin
|
||||||
} // namespace Formosa
|
} // namespace Taiyan
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace Formosa {
|
namespace Taiyan {
|
||||||
namespace Mandarin {
|
namespace Mandarin {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ private let kShouldNotFartInLieuOfBeep = "ShouldNotFartInLieuOfBeep"
|
||||||
private let kCheckUpdateAutomatically = "CheckUpdateAutomatically"
|
private let kCheckUpdateAutomatically = "CheckUpdateAutomatically"
|
||||||
private let kCandidateListTextSize = "CandidateListTextSize"
|
private let kCandidateListTextSize = "CandidateListTextSize"
|
||||||
private let kChooseCandidateUsingSpaceKey = "ChooseCandidateUsingSpaceKey"
|
private let kChooseCandidateUsingSpaceKey = "ChooseCandidateUsingSpaceKey"
|
||||||
|
private let kUseWinNT351BPMF = "UseWinNT351BPMF"
|
||||||
private let kSelectPhraseAfterCursorAsCandidate = "SelectPhraseAfterCursorAsCandidate"
|
private let kSelectPhraseAfterCursorAsCandidate = "SelectPhraseAfterCursorAsCandidate"
|
||||||
private let kUseHorizontalCandidateList = "UseHorizontalCandidateList"
|
private let kUseHorizontalCandidateList = "UseHorizontalCandidateList"
|
||||||
private let kChineseConversionEnabledKey = "ChineseConversionEnabled"
|
private let kChineseConversionEnabledKey = "ChineseConversionEnabled"
|
||||||
|
@ -38,6 +39,11 @@ private let kPhraseReplacementEnabledKey = "PhraseReplacementEnabled"
|
||||||
UserDefaults.standard.set(Preferences.chooseCandidateUsingSpace, forKey: kChooseCandidateUsingSpaceKey)
|
UserDefaults.standard.set(Preferences.chooseCandidateUsingSpace, forKey: kChooseCandidateUsingSpaceKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 預設禁用 WinNT351 風格的注音選字模式(就是每個字都要選的那種),所以設成 false
|
||||||
|
if UserDefaults.standard.object(forKey: kUseWinNT351BPMF) == nil {
|
||||||
|
UserDefaults.standard.set(Preferences.useWinNT351BPMF, forKey: kUseWinNT351BPMF)
|
||||||
|
}
|
||||||
|
|
||||||
// 預設漢音風格選字,所以要設成 0
|
// 預設漢音風格選字,所以要設成 0
|
||||||
if UserDefaults.standard.object(forKey: kSelectPhraseAfterCursorAsCandidate) == nil {
|
if UserDefaults.standard.object(forKey: kSelectPhraseAfterCursorAsCandidate) == nil {
|
||||||
UserDefaults.standard.set(Preferences.selectPhraseAfterCursorAsCandidate, forKey: kSelectPhraseAfterCursorAsCandidate)
|
UserDefaults.standard.set(Preferences.selectPhraseAfterCursorAsCandidate, forKey: kSelectPhraseAfterCursorAsCandidate)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
// the reading buffer that takes user input
|
// the reading buffer that takes user input
|
||||||
Formosa::Mandarin::BopomofoReadingBuffer* _bpmfReadingBuffer;
|
Taiyan::Mandarin::BopomofoReadingBuffer* _bpmfReadingBuffer;
|
||||||
|
|
||||||
// language model
|
// language model
|
||||||
vChewing::vChewingLM *_languageModel;
|
vChewing::vChewingLM *_languageModel;
|
||||||
|
@ -27,10 +27,10 @@
|
||||||
vChewing::UserOverrideModel *_userOverrideModel;
|
vChewing::UserOverrideModel *_userOverrideModel;
|
||||||
|
|
||||||
// the grid (lattice) builder for the unigrams (and bigrams)
|
// the grid (lattice) builder for the unigrams (and bigrams)
|
||||||
Formosa::Gramambular::BlockReadingBuilder* _builder;
|
Taiyan::Gramambular::BlockReadingBuilder* _builder;
|
||||||
|
|
||||||
// latest walked path (trellis) using the Viterbi algorithm
|
// latest walked path (trellis) using the Viterbi algorithm
|
||||||
std::vector<Formosa::Gramambular::NodeAnchor> _walkedNodes;
|
std::vector<Taiyan::Gramambular::NodeAnchor> _walkedNodes;
|
||||||
|
|
||||||
// user override model
|
// user override model
|
||||||
vChewing::UserOverrideModel *_uom;
|
vChewing::UserOverrideModel *_uom;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "InputMethodController.h"
|
#import "InputMethodController.h"
|
||||||
|
#include <objc/objc.h>
|
||||||
#import <fstream>
|
#import <fstream>
|
||||||
#import <iostream>
|
#import <iostream>
|
||||||
#import <set>
|
#import <set>
|
||||||
|
@ -17,8 +18,8 @@
|
||||||
|
|
||||||
// C++ namespace usages
|
// C++ namespace usages
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Formosa::Mandarin;
|
using namespace Taiyan::Mandarin;
|
||||||
using namespace Formosa::Gramambular;
|
using namespace Taiyan::Gramambular;
|
||||||
using namespace vChewing;
|
using namespace vChewing;
|
||||||
using namespace OpenVanilla;
|
using namespace OpenVanilla;
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
|
||||||
_bpmfReadingBuffer = new BopomofoReadingBuffer(BopomofoKeyboardLayout::StandardLayout());
|
_bpmfReadingBuffer = new BopomofoReadingBuffer(BopomofoKeyboardLayout::StandardLayout());
|
||||||
|
|
||||||
// create the lattice builder
|
// create the lattice builder
|
||||||
_languageModel = [LanguageModelManager languageModelBopomofo];
|
_languageModel = [LanguageModelManager languageModelCoreCHT];
|
||||||
_languageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
|
_languageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
|
||||||
_userOverrideModel = [LanguageModelManager userOverrideModel];
|
_userOverrideModel = [LanguageModelManager userOverrideModel];
|
||||||
|
|
||||||
|
@ -151,17 +152,12 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
|
||||||
|
|
||||||
[menu addItem:[NSMenuItem separatorItem]]; // ------------------------------
|
[menu addItem:[NSMenuItem separatorItem]]; // ------------------------------
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS) {
|
[menu addItemWithTitle:NSLocalizedString(@"Edit User Phrases", @"") action:@selector(openUserPhrases:) keyEquivalent:@""];
|
||||||
NSMenuItem *editExcludedPhrasesItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Edit Excluded Phrases", @"") action:@selector(openExcludedPhrasesSimpBopomofo:) keyEquivalent:@""];
|
if (optionKeyPressed) {
|
||||||
[menu addItem:editExcludedPhrasesItem];
|
[menu addItemWithTitle:NSLocalizedString(@"Edit Excluded Phrases", @"") action:@selector(openExcludedPhrases:) keyEquivalent:@""];
|
||||||
}
|
[menu addItemWithTitle:NSLocalizedString(@"Edit Phrase Replacement Table", @"") action:@selector(openPhraseReplacement:) keyEquivalent:@""];
|
||||||
else {
|
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"Edit User Phrases", @"") action:@selector(openUserPhrases:) keyEquivalent:@""];
|
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"Edit Excluded Phrases", @"") action:@selector(openExcludedPhrasesvChewing:) keyEquivalent:@""];
|
|
||||||
if (optionKeyPressed) {
|
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"Edit Phrase Replacement Table", @"") action:@selector(openPhraseReplacementvChewing:) keyEquivalent:@""];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[menu addItemWithTitle:NSLocalizedString(@"Reload User Phrases", @"") action:@selector(reloadUserPhrases:) keyEquivalent:@""];
|
[menu addItemWithTitle:NSLocalizedString(@"Reload User Phrases", @"") action:@selector(reloadUserPhrases:) keyEquivalent:@""];
|
||||||
|
|
||||||
[menu addItem:[NSMenuItem separatorItem]]; // ------------------------------
|
[menu addItem:[NSMenuItem separatorItem]]; // ------------------------------
|
||||||
|
@ -248,14 +244,15 @@ static double FindHighestScore(const vector<NodeAnchor>& nodes, double epsilon)
|
||||||
|
|
||||||
if ([value isKindOfClass:[NSString class]] && [value isEqual:kBopomofoModeIdentifierCHS]) {
|
if ([value isKindOfClass:[NSString class]] && [value isEqual:kBopomofoModeIdentifierCHS]) {
|
||||||
newInputMode = kBopomofoModeIdentifierCHS;
|
newInputMode = kBopomofoModeIdentifierCHS;
|
||||||
newLanguageModel = [LanguageModelManager languageModelSimpBopomofo];
|
newLanguageModel = [LanguageModelManager languageModelCoreCHS];
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
newInputMode = kBopomofoModeIdentifierCHT;
|
newInputMode = kBopomofoModeIdentifierCHT;
|
||||||
newLanguageModel = [LanguageModelManager languageModelBopomofo];
|
newLanguageModel = [LanguageModelManager languageModelCoreCHT];
|
||||||
newLanguageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 自 Preferences 模組讀入自訂語彙置換功能開關狀態。
|
||||||
|
newLanguageModel->setPhraseReplacementEnabled(Preferences.phraseReplacementEnabled);
|
||||||
|
|
||||||
// Only apply the changes if the value is changed
|
// Only apply the changes if the value is changed
|
||||||
if (![_inputMode isEqualToString:newInputMode]) {
|
if (![_inputMode isEqualToString:newInputMode]) {
|
||||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||||
|
@ -650,8 +647,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
[self popOverflowComposingTextAndWalk:client];
|
[self popOverflowComposingTextAndWalk:client];
|
||||||
|
|
||||||
// get user override model suggestion
|
// get user override model suggestion
|
||||||
string overrideValue = (_inputMode == kBopomofoModeIdentifierCHS) ? "" :
|
string overrideValue = _userOverrideModel->suggest(_walkedNodes, _builder->cursorIndex(), [[NSDate date] timeIntervalSince1970]);
|
||||||
_userOverrideModel->suggest(_walkedNodes, _builder->cursorIndex(), [[NSDate date] timeIntervalSince1970]);
|
|
||||||
|
|
||||||
if (!overrideValue.empty()) {
|
if (!overrideValue.empty()) {
|
||||||
size_t cursorIndex = [self actualCandidateCursorIndex];
|
size_t cursorIndex = [self actualCandidateCursorIndex];
|
||||||
|
@ -663,11 +659,14 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
// then update the text
|
// then update the text
|
||||||
_bpmfReadingBuffer->clear();
|
_bpmfReadingBuffer->clear();
|
||||||
[self updateClientComposingBuffer:client];
|
[self updateClientComposingBuffer:client];
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS) {
|
// 模擬 WINNT 351 ㄅ半注音,就是每個漢字都自動要選字的那種注音。
|
||||||
|
// 嚴格來講不能算純正的ㄅ半注音,畢竟候選字的順序不可能會像當年那樣了。
|
||||||
|
// 如果簡體中文用戶不知道ㄅ半注音是什麼的話,拿全拼輸入法來比喻恐怕比較恰當。
|
||||||
|
if (Preferences.useWinNT351BPMF) {
|
||||||
[self _showCandidateWindowUsingVerticalMode:useVerticalMode client:client];
|
[self _showCandidateWindowUsingVerticalMode:useVerticalMode client:client];
|
||||||
}
|
}
|
||||||
|
|
||||||
// and tells the client that the key is consumed
|
// and tells the client that the key is consumed
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
@ -965,7 +964,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
}
|
}
|
||||||
[self updateClientComposingBuffer:client];
|
[self updateClientComposingBuffer:client];
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS && _bpmfReadingBuffer->isEmpty()) {
|
if (Preferences.useWinNT351BPMF && _bpmfReadingBuffer->isEmpty()) {
|
||||||
[self collectCandidates];
|
[self collectCandidates];
|
||||||
if ([_candidates count] == 1) {
|
if ([_candidates count] == 1) {
|
||||||
[self commitComposition:client];
|
[self commitComposition:client];
|
||||||
|
@ -983,14 +982,14 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
{
|
{
|
||||||
BOOL cancelCandidateKey =
|
BOOL cancelCandidateKey =
|
||||||
(charCode == 27) ||
|
(charCode == 27) ||
|
||||||
((_inputMode == kBopomofoModeIdentifierCHS) &&
|
(Preferences.useWinNT351BPMF &&
|
||||||
(charCode == 8 || keyCode == kDeleteKeyCode));
|
(charCode == 8 || keyCode == kDeleteKeyCode));
|
||||||
|
|
||||||
if (cancelCandidateKey) {
|
if (cancelCandidateKey) {
|
||||||
gCurrentCandidateController.visible = NO;
|
gCurrentCandidateController.visible = NO;
|
||||||
[_candidates removeAllObjects];
|
[_candidates removeAllObjects];
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS) {
|
if (Preferences.useWinNT351BPMF) {
|
||||||
_builder->clear();
|
_builder->clear();
|
||||||
_walkedNodes.clear();
|
_walkedNodes.clear();
|
||||||
[_composingBuffer setString:@""];
|
[_composingBuffer setString:@""];
|
||||||
|
@ -1147,7 +1146,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS) {
|
if (Preferences.useWinNT351BPMF) {
|
||||||
string layout = [self _currentLayout];
|
string layout = [self _currentLayout];
|
||||||
string customPunctuation = string("_punctuation_") + layout + string(1, (char)charCode);
|
string customPunctuation = string("_punctuation_") + layout + string(1, (char)charCode);
|
||||||
string punctuation = string("_punctuation_") + string(1, (char)charCode);
|
string punctuation = string("_punctuation_") + string(1, (char)charCode);
|
||||||
|
@ -1316,7 +1315,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
gCurrentCandidateController.keyLabels = keyLabels;
|
gCurrentCandidateController.keyLabels = keyLabels;
|
||||||
[self collectCandidates];
|
[self collectCandidates];
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS && [_candidates count] == 1) {
|
if (Preferences.useWinNT351BPMF && [_candidates count] == 1) {
|
||||||
[self commitComposition:client];
|
[self commitComposition:client];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1493,7 +1492,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
- (void)togglePhraseReplacementEnabled:(id)sender
|
- (void)togglePhraseReplacementEnabled:(id)sender
|
||||||
{
|
{
|
||||||
BOOL enabled = [Preferences tooglePhraseReplacementEnabled];
|
BOOL enabled = [Preferences tooglePhraseReplacementEnabled];
|
||||||
vChewingLM *lm = [LanguageModelManager languageModelBopomofo];
|
vChewingLM *lm = [LanguageModelManager languageModelCoreCHT];
|
||||||
lm->setPhraseReplacementEnabled(enabled);
|
lm->setPhraseReplacementEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1532,12 +1531,12 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
[self _openUserFile:[LanguageModelManager excludedPhrasesDataPathSimpBopomofo]];
|
[self _openUserFile:[LanguageModelManager excludedPhrasesDataPathSimpBopomofo]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)openExcludedPhrasesvChewing:(id)sender
|
- (void)openExcludedPhrases:(id)sender
|
||||||
{
|
{
|
||||||
[self _openUserFile:[LanguageModelManager excludedPhrasesDataPathBopomofo]];
|
[self _openUserFile:[LanguageModelManager excludedPhrasesDataPathBopomofo]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)openPhraseReplacementvChewing:(id)sender
|
- (void)openPhraseReplacement:(id)sender
|
||||||
{
|
{
|
||||||
[self _openUserFile:[LanguageModelManager phraseReplacementDataPathBopomofo]];
|
[self _openUserFile:[LanguageModelManager phraseReplacementDataPathBopomofo]];
|
||||||
}
|
}
|
||||||
|
@ -1580,7 +1579,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
|
|
||||||
size_t cursorIndex = [self actualCandidateCursorIndex];
|
size_t cursorIndex = [self actualCandidateCursorIndex];
|
||||||
_builder->grid().fixNodeSelectedCandidate(cursorIndex, selectedValue);
|
_builder->grid().fixNodeSelectedCandidate(cursorIndex, selectedValue);
|
||||||
if (_inputMode != kBopomofoModeIdentifierCHS) {
|
if (!Preferences.useWinNT351BPMF) {
|
||||||
_userOverrideModel->observe(_walkedNodes, cursorIndex, selectedValue, [[NSDate date] timeIntervalSince1970]);
|
_userOverrideModel->observe(_walkedNodes, cursorIndex, selectedValue, [[NSDate date] timeIntervalSince1970]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1589,7 +1588,7 @@ NS_INLINE size_t max(size_t a, size_t b) { return a > b ? a : b; }
|
||||||
[self walk];
|
[self walk];
|
||||||
[self updateClientComposingBuffer:_currentCandidateClient];
|
[self updateClientComposingBuffer:_currentCandidateClient];
|
||||||
|
|
||||||
if (_inputMode == kBopomofoModeIdentifierCHS) {
|
if (Preferences.useWinNT351BPMF) {
|
||||||
[self commitComposition:_currentCandidateClient];
|
[self commitComposition:_currentCandidateClient];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
@property (class, readonly, nonatomic) NSString *excludedPhrasesDataPathBopomofo;
|
@property (class, readonly, nonatomic) NSString *excludedPhrasesDataPathBopomofo;
|
||||||
@property (class, readonly, nonatomic) NSString *excludedPhrasesDataPathSimpBopomofo;
|
@property (class, readonly, nonatomic) NSString *excludedPhrasesDataPathSimpBopomofo;
|
||||||
@property (class, readonly, nonatomic) NSString *phraseReplacementDataPathBopomofo;
|
@property (class, readonly, nonatomic) NSString *phraseReplacementDataPathBopomofo;
|
||||||
@property (class, readonly, nonatomic) vChewing::vChewingLM *languageModelBopomofo;
|
@property (class, readonly, nonatomic) vChewing::vChewingLM *languageModelCoreCHT;
|
||||||
@property (class, readonly, nonatomic) vChewing::vChewingLM *languageModelSimpBopomofo;
|
@property (class, readonly, nonatomic) vChewing::vChewingLM *languageModelCoreCHS;
|
||||||
@property (class, readonly, nonatomic) vChewing::UserOverrideModel *userOverrideModel;
|
@property (class, readonly, nonatomic) vChewing::UserOverrideModel *userOverrideModel;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -14,15 +14,15 @@
|
||||||
#import "OVUTF8Helper.h"
|
#import "OVUTF8Helper.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Formosa::Gramambular;
|
using namespace Taiyan::Gramambular;
|
||||||
using namespace vChewing;
|
using namespace vChewing;
|
||||||
using namespace OpenVanilla;
|
using namespace OpenVanilla;
|
||||||
|
|
||||||
static const int kUserOverrideModelCapacity = 500;
|
static const int kUserOverrideModelCapacity = 500;
|
||||||
static const double kObservedOverrideHalflife = 5400.0; // 1.5 hr.
|
static const double kObservedOverrideHalflife = 5400.0; // 1.5 hr.
|
||||||
|
|
||||||
vChewingLM gLanguageModelBopomofo;
|
vChewingLM glanguageModelCoreCHT;
|
||||||
vChewingLM gLanguageModelSimpBopomofo;
|
vChewingLM glanguageModelCoreCHS;
|
||||||
UserOverrideModel gUserOverrideModel(kUserOverrideModelCapacity, kObservedOverrideHalflife);
|
UserOverrideModel gUserOverrideModel(kUserOverrideModelCapacity, kObservedOverrideHalflife);
|
||||||
|
|
||||||
@implementation LanguageModelManager
|
@implementation LanguageModelManager
|
||||||
|
@ -36,19 +36,19 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
|
||||||
|
|
||||||
+ (void)loadDataModels
|
+ (void)loadDataModels
|
||||||
{
|
{
|
||||||
LTLoadLanguageModelFile(@"data-cht", gLanguageModelBopomofo);
|
LTLoadLanguageModelFile(@"data-cht", glanguageModelCoreCHT);
|
||||||
LTLoadLanguageModelFile(@"data-chs", gLanguageModelSimpBopomofo);
|
LTLoadLanguageModelFile(@"data-chs", glanguageModelCoreCHS);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)loadUserPhrases
|
+ (void)loadUserPhrases
|
||||||
{
|
{
|
||||||
gLanguageModelBopomofo.loadUserPhrases([[self userPhrasesDataPathBopomofo] UTF8String], [[self excludedPhrasesDataPathBopomofo] UTF8String]);
|
glanguageModelCoreCHT.loadUserPhrases([[self userPhrasesDataPathBopomofo] UTF8String], [[self excludedPhrasesDataPathBopomofo] UTF8String]);
|
||||||
gLanguageModelSimpBopomofo.loadUserPhrases(NULL, [[self excludedPhrasesDataPathSimpBopomofo] UTF8String]);
|
glanguageModelCoreCHS.loadUserPhrases(NULL, [[self excludedPhrasesDataPathSimpBopomofo] UTF8String]);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)loadUserPhraseReplacement
|
+ (void)loadUserPhraseReplacement
|
||||||
{
|
{
|
||||||
gLanguageModelBopomofo.loadPhraseReplacementMap([[self phraseReplacementDataPathBopomofo] UTF8String]);
|
glanguageModelCoreCHT.loadPhraseReplacementMap([[self phraseReplacementDataPathBopomofo] UTF8String]);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (BOOL)checkIfUserDataFolderExists
|
+ (BOOL)checkIfUserDataFolderExists
|
||||||
|
@ -183,14 +183,14 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing
|
||||||
return [[self dataFolderPath] stringByAppendingPathComponent:@"phrases-replacement.txt"];
|
return [[self dataFolderPath] stringByAppendingPathComponent:@"phrases-replacement.txt"];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (vChewingLM *)languageModelBopomofo
|
+ (vChewingLM *)languageModelCoreCHT
|
||||||
{
|
{
|
||||||
return &gLanguageModelBopomofo;
|
return &glanguageModelCoreCHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (vChewingLM *)languageModelSimpBopomofo
|
+ (vChewingLM *)languageModelCoreCHS
|
||||||
{
|
{
|
||||||
return &gLanguageModelSimpBopomofo;
|
return &glanguageModelCoreCHS;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (vChewing::UserOverrideModel *)userOverrideModel
|
+ (vChewing::UserOverrideModel *)userOverrideModel
|
||||||
|
|
|
@ -20,6 +20,7 @@ private let kChooseCandidateUsingSpaceKey = "ChooseCandidateUsingSpaceKey"
|
||||||
private let kChineseConversionEnabledKey = "ChineseConversionEnabled"
|
private let kChineseConversionEnabledKey = "ChineseConversionEnabled"
|
||||||
private let kHalfWidthPunctuationEnabledKey = "HalfWidthPunctuationEnable"
|
private let kHalfWidthPunctuationEnabledKey = "HalfWidthPunctuationEnable"
|
||||||
private let kEscToCleanInputBufferKey = "EscToCleanInputBuffer"
|
private let kEscToCleanInputBufferKey = "EscToCleanInputBuffer"
|
||||||
|
private let kUseWinNT351BPMF = "UseWinNT351BPMF"
|
||||||
private let kShouldNotFartInLieuOfBeep = "ShouldNotFartInLieuOfBeep"
|
private let kShouldNotFartInLieuOfBeep = "ShouldNotFartInLieuOfBeep"
|
||||||
|
|
||||||
private let kCandidateTextFontName = "CandidateTextFontName"
|
private let kCandidateTextFontName = "CandidateTextFontName"
|
||||||
|
@ -193,6 +194,9 @@ struct ComposingBufferSize {
|
||||||
@UserDefault(key: kChooseCandidateUsingSpaceKey, defaultValue: true)
|
@UserDefault(key: kChooseCandidateUsingSpaceKey, defaultValue: true)
|
||||||
@objc static var chooseCandidateUsingSpace: Bool
|
@objc static var chooseCandidateUsingSpace: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: kUseWinNT351BPMF, defaultValue: false)
|
||||||
|
@objc static var useWinNT351BPMF: Bool
|
||||||
|
|
||||||
@UserDefault(key: kShouldNotFartInLieuOfBeep, defaultValue: true)
|
@UserDefault(key: kShouldNotFartInLieuOfBeep, defaultValue: true)
|
||||||
@objc static var shouldNotFartInLieuOfBeep: Bool
|
@objc static var shouldNotFartInLieuOfBeep: Bool
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ extension RangeReplaceableCollection where Element: Hashable {
|
||||||
@IBAction func clickedWhetherIMEShouldNotFartToggleAction(_ sender: Any) {
|
@IBAction func clickedWhetherIMEShouldNotFartToggleAction(_ sender: Any) {
|
||||||
clsSFX.beep()
|
clsSFX.beep()
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func changeSelectionKeyAction(_ sender: Any) {
|
@IBAction func changeSelectionKeyAction(_ sender: Any) {
|
||||||
guard let keys = (sender as AnyObject).stringValue?.trimmingCharacters(in: .whitespacesAndNewlines).charDeDuplicate else {
|
guard let keys = (sender as AnyObject).stringValue?.trimmingCharacters(in: .whitespacesAndNewlines).charDeDuplicate else {
|
||||||
return
|
return
|
||||||
|
|
|
@ -98,11 +98,14 @@
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
||||||
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
|
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
||||||
|
"62u-jY-BRh.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
||||||
"9DS-Rc-TXq.title" = "UI language setting:";
|
"9DS-Rc-TXq.title" = "UI language setting:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "ArK-Vk-OoT"; */
|
/* Class = "NSButtonCell"; title = "Emulating Windows NT 3.51 legacy phonetic typing experience"; ObjectID = "ArK-Vk-OoT"; */
|
||||||
"ArK-Vk-OoT.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
"ArK-Vk-OoT.title" = "Emulating Windows NT 3.51 legacy phonetic typing experience";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
||||||
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
||||||
|
|
|
@ -98,11 +98,14 @@
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
||||||
"2pS-nv-te4.title" = "选择您所偏好的用来选字的按键组合。";
|
"2pS-nv-te4.title" = "选择您所偏好的用来选字的按键组合。";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
||||||
|
"62u-jY-BRh.title" = "不要放屁 // 例:当输入的音韵有误时,等";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
||||||
"9DS-Rc-TXq.title" = "介面语言设定:";
|
"9DS-Rc-TXq.title" = "介面语言设定:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "ArK-Vk-OoT"; */
|
/* Class = "NSButtonCell"; title = "Emulating Windows NT 3.51 legacy phonetic typing experience"; ObjectID = "ArK-Vk-OoT"; */
|
||||||
"ArK-Vk-OoT.title" = "不要放屁 // 例:当输入的音韵有误时,等。";
|
"ArK-Vk-OoT.title" = "模拟 Windows NT 3.51 注音逐字选字输入风格";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
||||||
"BSK-bH-Gct.title" = "自动将繁体中文字转换为康熙字";
|
"BSK-bH-Gct.title" = "自动将繁体中文字转换为康熙字";
|
||||||
|
|
|
@ -98,11 +98,14 @@
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
||||||
"2pS-nv-te4.title" = "選擇您所偏好的用來選字的按鍵組合。";
|
"2pS-nv-te4.title" = "選擇您所偏好的用來選字的按鍵組合。";
|
||||||
|
|
||||||
|
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
||||||
|
"62u-jY-BRh.title" = "不要放屁 // 例:當輸入的音韻有誤時,等";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
||||||
"9DS-Rc-TXq.title" = "介面語言設定:";
|
"9DS-Rc-TXq.title" = "介面語言設定:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "ArK-Vk-OoT"; */
|
/* Class = "NSButtonCell"; title = "Emulating Windows NT 3.51 legacy phonetic typing experience"; ObjectID = "ArK-Vk-OoT"; */
|
||||||
"ArK-Vk-OoT.title" = "不要放屁 // 例:當輸入的音韻有誤時,等。";
|
"ArK-Vk-OoT.title" = "模擬 Windows NT 3.51 注音逐字選字輸入風格";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
||||||
"BSK-bH-Gct.title" = "自動將繁體中文字轉換為康熙字";
|
"BSK-bH-Gct.title" = "自動將繁體中文字轉換為康熙字";
|
||||||
|
|
|
@ -87,10 +87,10 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
5B000FC1278495AD004F02AC /* SimpBopomofo.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = SimpBopomofo.tiff; sourceTree = "<group>"; };
|
5B000FC1278495AD004F02AC /* SimpBopomofo.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = SimpBopomofo.tiff; sourceTree = "<group>"; };
|
||||||
5B000FC2278495AD004F02AC /* SimpBopomofo@2x.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "SimpBopomofo@2x.tiff"; sourceTree = "<group>"; };
|
5B000FC2278495AD004F02AC /* SimpBopomofo@2x.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "SimpBopomofo@2x.tiff"; sourceTree = "<group>"; };
|
||||||
5B054058278787710083EF4A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Source/en.lproj/preferences.strings; sourceTree = "<group>"; };
|
|
||||||
5B19584E27888F5D00FAEB14 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
5B19584E27888F5D00FAEB14 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
||||||
5B19584F27888F5F00FAEB14 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
5B19584F27888F5F00FAEB14 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
||||||
5B19585127888F6B00FAEB14 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
5B19585127888F6B00FAEB14 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
||||||
|
5B4213762796CD0A0089FCF5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Source/en.lproj/preferences.strings; sourceTree = "<group>"; };
|
||||||
5B42B63E27876FDC00BB9B9F /* UserOverrideModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserOverrideModel.cpp; sourceTree = "<group>"; };
|
5B42B63E27876FDC00BB9B9F /* UserOverrideModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserOverrideModel.cpp; sourceTree = "<group>"; };
|
||||||
5B42B63F27876FDC00BB9B9F /* UserOverrideModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserOverrideModel.h; sourceTree = "<group>"; };
|
5B42B63F27876FDC00BB9B9F /* UserOverrideModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserOverrideModel.h; sourceTree = "<group>"; };
|
||||||
5B42B64127877D6500BB9B9F /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Source/zh-Hans.lproj/preferences.strings"; sourceTree = "<group>"; };
|
5B42B64127877D6500BB9B9F /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Source/zh-Hans.lproj/preferences.strings"; sourceTree = "<group>"; };
|
||||||
|
@ -207,22 +207,6 @@
|
||||||
6A225A212367A1D700F685C6 /* ArchiveUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveUtil.h; sourceTree = "<group>"; };
|
6A225A212367A1D700F685C6 /* ArchiveUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveUtil.h; sourceTree = "<group>"; };
|
||||||
6A225A222367A1D700F685C6 /* ArchiveUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArchiveUtil.m; sourceTree = "<group>"; };
|
6A225A222367A1D700F685C6 /* ArchiveUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArchiveUtil.m; sourceTree = "<group>"; };
|
||||||
6A2E40F5253A69DA00D1AE1D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
6A2E40F5253A69DA00D1AE1D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||||
6A38BBE215FC117A00A8A51F /* BIG5toUTF8.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = BIG5toUTF8.pl; sourceTree = "<group>"; };
|
|
||||||
6A38BBE315FC117A00A8A51F /* build4wlist.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = build4wlist.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBE415FC117A00A8A51F /* buildFreq.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildFreq.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBE515FC117A00A8A51F /* cook.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = cook.py; sourceTree = "<group>"; };
|
|
||||||
6A38BBE615FC117A00A8A51F /* cook.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = cook.rb; sourceTree = "<group>"; };
|
|
||||||
6A38BBE715FC117A00A8A51F /* count.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = count.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBE815FC117A00A8A51F /* count.occurrence.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = count.occurrence.c; sourceTree = "<group>"; };
|
|
||||||
6A38BBE915FC117A00A8A51F /* count.occurrence.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = count.occurrence.pl; sourceTree = "<group>"; };
|
|
||||||
6A38BBEA15FC117A00A8A51F /* count.occurrence.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = count.occurrence.py; sourceTree = "<group>"; };
|
|
||||||
6A38BBEB15FC117A00A8A51F /* countphrase.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = countphrase.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBEC15FC117A00A8A51F /* filter.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = filter.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBED15FC117A00A8A51F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
|
||||||
6A38BBEE15FC117A00A8A51F /* randomShuffle.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = randomShuffle.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBEF15FC117A00A8A51F /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
|
||||||
6A38BBF015FC117A00A8A51F /* typocorrection.bash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = typocorrection.bash; sourceTree = "<group>"; };
|
|
||||||
6A38BBF115FC117A00A8A51F /* utf8length.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = utf8length.pl; sourceTree = "<group>"; };
|
|
||||||
6A38BBF615FC117A00A8A51F /* data-cht.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "data-cht.txt"; sourceTree = "<group>"; };
|
6A38BBF615FC117A00A8A51F /* data-cht.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "data-cht.txt"; sourceTree = "<group>"; };
|
||||||
6A38BBFA15FC117A00A8A51F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
6A38BBFA15FC117A00A8A51F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
6A38BC2715FC158A00A8A51F /* InputMethodKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InputMethodKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/InputMethodKit.framework; sourceTree = DEVELOPER_DIR; };
|
6A38BC2715FC158A00A8A51F /* InputMethodKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InputMethodKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/InputMethodKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
@ -513,7 +497,6 @@
|
||||||
6A38BBDD15FC115800A8A51F /* Data */ = {
|
6A38BBDD15FC115800A8A51F /* Data */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
6A38BBE115FC117A00A8A51F /* bin */,
|
|
||||||
6A38BBF615FC117A00A8A51F /* data-cht.txt */,
|
6A38BBF615FC117A00A8A51F /* data-cht.txt */,
|
||||||
5BC3FB82278492DE0022E99A /* data-chs.txt */,
|
5BC3FB82278492DE0022E99A /* data-chs.txt */,
|
||||||
6A38BBFA15FC117A00A8A51F /* Makefile */,
|
6A38BBFA15FC117A00A8A51F /* Makefile */,
|
||||||
|
@ -521,29 +504,6 @@
|
||||||
path = Data;
|
path = Data;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
6A38BBE115FC117A00A8A51F /* bin */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
6A38BBE215FC117A00A8A51F /* BIG5toUTF8.pl */,
|
|
||||||
6A38BBE315FC117A00A8A51F /* build4wlist.bash */,
|
|
||||||
6A38BBE415FC117A00A8A51F /* buildFreq.bash */,
|
|
||||||
6A38BBE515FC117A00A8A51F /* cook.py */,
|
|
||||||
6A38BBE615FC117A00A8A51F /* cook.rb */,
|
|
||||||
6A38BBE715FC117A00A8A51F /* count.bash */,
|
|
||||||
6A38BBE815FC117A00A8A51F /* count.occurrence.c */,
|
|
||||||
6A38BBE915FC117A00A8A51F /* count.occurrence.pl */,
|
|
||||||
6A38BBEA15FC117A00A8A51F /* count.occurrence.py */,
|
|
||||||
6A38BBEB15FC117A00A8A51F /* countphrase.bash */,
|
|
||||||
6A38BBEC15FC117A00A8A51F /* filter.bash */,
|
|
||||||
6A38BBED15FC117A00A8A51F /* Makefile */,
|
|
||||||
6A38BBEE15FC117A00A8A51F /* randomShuffle.bash */,
|
|
||||||
6A38BBEF15FC117A00A8A51F /* README */,
|
|
||||||
6A38BBF015FC117A00A8A51F /* typocorrection.bash */,
|
|
||||||
6A38BBF115FC117A00A8A51F /* utf8length.pl */,
|
|
||||||
);
|
|
||||||
path = bin;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
6ACA41E715FC1D9000935EF6 /* Installer */ = {
|
6ACA41E715FC1D9000935EF6 /* Installer */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -834,7 +794,7 @@
|
||||||
6A15B32721A51F2300B92CD3 /* Base */,
|
6A15B32721A51F2300B92CD3 /* Base */,
|
||||||
5B42B64127877D6500BB9B9F /* zh-Hans */,
|
5B42B64127877D6500BB9B9F /* zh-Hans */,
|
||||||
5B42B64227877D7700BB9B9F /* zh-Hant */,
|
5B42B64227877D7700BB9B9F /* zh-Hant */,
|
||||||
5B054058278787710083EF4A /* en */,
|
5B4213762796CD0A0089FCF5 /* en */,
|
||||||
);
|
);
|
||||||
name = preferences.xib;
|
name = preferences.xib;
|
||||||
path = ..;
|
path = ..;
|
||||||
|
|
Loading…
Reference in New Issue