54
54
#define SUNPINYIN_USERDATA_DIR_PREFIX ".sunpinyin"
57
struct CSimplifiedChinesePolicy : public IConfigurable
57
struct CSimplifiedChinesePolicy : public IConfigurable {
59
58
CSimplifiedChinesePolicy ();
61
bool loadResources ();
63
CIMIContext* createContext ();
64
void destroyContext (CIMIContext *context);
66
void setPunctMapping (string_pairs punc_map)
67
{m_getFullPunctOp.initPunctMap (punc_map);}
69
string_pairs getDefaultPunctMapping () const;
71
void enableFullSymbol (bool v=true) {m_bEnableFullSymbol = v;}
72
void enableFullPunct (bool v=true) {m_bEnableFullPunct = v;}
74
void setDataDir (const std::string& data_dir)
75
{m_data_dir = data_dir;}
77
void setUserDataDir (const std::string& user_data_dir)
78
{m_user_data_dir = user_data_dir;}
80
virtual bool onConfigChanged (const COptionEvent& event);
62
CIMIContext* createContext();
63
void destroyContext(CIMIContext *context);
65
void setPunctMapping(string_pairs punc_map)
66
{ m_getFullPunctOp.initPunctMap(punc_map); }
68
string_pairs getDefaultPunctMapping() const;
70
void enableFullSymbol(bool v = true) { m_bEnableFullSymbol = v; }
71
void enableFullPunct(bool v = true) { m_bEnableFullPunct = v; }
73
void setDataDir(const std::string& data_dir)
74
{ m_data_dir = data_dir; }
76
void setUserDataDir(const std::string& user_data_dir)
77
{ m_user_data_dir = user_data_dir; }
79
virtual bool onConfigChanged(const COptionEvent& event);
82
81
template<class> friend class SingletonHolder;
85
~CSimplifiedChinesePolicy () {}
87
bool createDirectory (char *path);
88
bool saveUserHistory ();
91
CBigramHistory m_historyCache;
95
bool m_bEnableFullSymbol;
96
CGetFullSymbolOp m_getFullSymbolOp;
97
bool m_bEnableFullPunct;
98
CGetFullPunctOp m_getFullPunctOp;
99
std::string m_data_dir;
100
std::string m_user_data_dir;
83
protected: ~CSimplifiedChinesePolicy () {}
85
bool createDirectory(char *path);
86
bool saveUserHistory();
89
CBigramHistory m_historyCache;
93
bool m_bEnableFullSymbol;
94
CGetFullSymbolOp m_getFullSymbolOp;
95
bool m_bEnableFullPunct;
96
CGetFullPunctOp m_getFullPunctOp;
97
std::string m_data_dir;
98
std::string m_user_data_dir;
102
CUserDict m_userDict;
100
CUserDict m_userDict;
105
103
typedef SingletonHolder<CSimplifiedChinesePolicy> ASimplifiedChinesePolicy;
107
struct CQuanpinSchemePolicy : IConfigurable
105
struct CQuanpinSchemePolicy : IConfigurable {
111
IPySegmentor* createPySegmentor ()
113
CQuanpinSegmentor *pseg = new CQuanpinSegmentor ();
114
pseg->setGetFuzzySyllablesOp (&m_getFuzzySyllablesOp);
115
pseg->setGetCorrectionPairOp (&m_getCorrectionPairOp);
116
pseg->setGetFuzzySegmentsOp (&m_getFuzzySegmentsOp);
108
IPySegmentor* createPySegmentor(){
109
CQuanpinSegmentor *pseg = new CQuanpinSegmentor();
110
pseg->setGetFuzzySyllablesOp(&m_getFuzzySyllablesOp);
111
pseg->setGetCorrectionPairOp(&m_getCorrectionPairOp);
112
pseg->setGetFuzzySegmentsOp(&m_getFuzzySegmentsOp);
120
void setFuzzyForwarding (bool enable_fuzzies=true, bool enable_simpler_initials=true)
122
m_getFuzzySyllablesOp.setEnableFuzzies (enable_fuzzies);
123
m_getFuzzySyllablesOp.setEnableSimplerInitials (enable_simpler_initials);
116
void setFuzzyForwarding(bool enable_fuzzies = true,
117
bool enable_simpler_initials = true){
118
m_getFuzzySyllablesOp.setEnableFuzzies(enable_fuzzies);
119
m_getFuzzySyllablesOp.setEnableSimplerInitials(enable_simpler_initials);
126
void clearFuzzyPinyinPairs ()
127
{m_getFuzzySyllablesOp.clearFuzzyMap();}
129
void setFuzzyPinyinPairs (const string_pairs& pairs, bool duplex = true)
130
{m_getFuzzySyllablesOp.initFuzzyMap (pairs, duplex);}
132
void setAutoCorrecting (bool v=true)
133
{m_getCorrectionPairOp.setEnable (v);}
135
void setAutoCorrectionPairs (const string_pairs& pairs)
136
{m_getCorrectionPairOp.setCorrectionPairs (pairs);}
138
void setFuzzySegmentation (bool v=true)
139
{m_getFuzzySegmentsOp.setEnable (v);}
141
void setInnerFuzzySegmentation (bool v=true)
142
{m_getFuzzySegmentsOp.setInnerFuzzyEnable (v);}
122
void clearFuzzyPinyinPairs()
123
{ m_getFuzzySyllablesOp.clearFuzzyMap(); }
125
void setFuzzyPinyinPairs(const string_pairs& pairs, bool duplex = true)
126
{ m_getFuzzySyllablesOp.initFuzzyMap(pairs, duplex); }
128
void setAutoCorrecting(bool v = true)
129
{ m_getCorrectionPairOp.setEnable(v); }
131
void setAutoCorrectionPairs(const string_pairs& pairs)
132
{ m_getCorrectionPairOp.setCorrectionPairs(pairs); }
134
void setFuzzySegmentation(bool v = true)
135
{ m_getFuzzySegmentsOp.setEnable(v); }
137
void setInnerFuzzySegmentation(bool v = true)
138
{ m_getFuzzySegmentsOp.setInnerFuzzyEnable(v); }
144
140
virtual bool onConfigChanged(const COptionEvent& event);
146
142
template<class> friend class SingletonHolder;
149
~CQuanpinSchemePolicy () {}
144
protected: ~CQuanpinSchemePolicy () {}
151
146
CGetFuzzySyllablesOp<CPinyinData> m_getFuzzySyllablesOp;
152
CGetCorrectionPairOp m_getCorrectionPairOp;
153
CGetFuzzySegmentsOp m_getFuzzySegmentsOp;
147
CGetCorrectionPairOp m_getCorrectionPairOp;
148
CGetFuzzySegmentsOp m_getFuzzySegmentsOp;
156
151
typedef SingletonHolder<CQuanpinSchemePolicy> AQuanpinSchemePolicy;
158
struct CShuangpinSchemePolicy : public IConfigurable
153
struct CShuangpinSchemePolicy : public IConfigurable {
161
155
CShuangpinSchemePolicy();
163
IPySegmentor* createPySegmentor ()
165
CShuangpinSegmentor *pseg = new CShuangpinSegmentor (m_shuangpinType);
166
pseg->setGetFuzzySyllablesOp (&m_getFuzzySyllablesOp);
157
IPySegmentor* createPySegmentor(){
158
CShuangpinSegmentor *pseg = new CShuangpinSegmentor(m_shuangpinType);
159
pseg->setGetFuzzySyllablesOp(&m_getFuzzySyllablesOp);
170
void setShuangpinType (EShuangpinType t) {m_shuangpinType = t;}
163
void setShuangpinType(EShuangpinType t) { m_shuangpinType = t; }
172
void setFuzzyForwarding (bool enable_fuzzies=true, bool enable_simpler_initials=true)
174
m_getFuzzySyllablesOp.setEnableFuzzies (enable_fuzzies);
175
m_getFuzzySyllablesOp.setEnableSimplerInitials (enable_simpler_initials);
165
void setFuzzyForwarding(bool enable_fuzzies = true,
166
bool enable_simpler_initials = true){
167
m_getFuzzySyllablesOp.setEnableFuzzies(enable_fuzzies);
168
m_getFuzzySyllablesOp.setEnableSimplerInitials(enable_simpler_initials);
178
void clearFuzzyPinyinPairs ()
179
{m_getFuzzySyllablesOp.clearFuzzyMap();}
171
void clearFuzzyPinyinPairs()
172
{ m_getFuzzySyllablesOp.clearFuzzyMap(); }
181
void setFuzzyPinyinPairs (const string_pairs& pairs, bool duplex = true)
182
{m_getFuzzySyllablesOp.initFuzzyMap (pairs, duplex);}
174
void setFuzzyPinyinPairs(const string_pairs& pairs, bool duplex = true)
175
{ m_getFuzzySyllablesOp.initFuzzyMap(pairs, duplex); }
184
177
virtual bool onConfigChanged(const COptionEvent& event);
186
179
template<class> friend class SingletonHolder;
188
~CShuangpinSchemePolicy () {}
180
protected: ~CShuangpinSchemePolicy () {}
190
EShuangpinType m_shuangpinType;
182
EShuangpinType m_shuangpinType;
191
183
CGetFuzzySyllablesOp<CPinyinData> m_getFuzzySyllablesOp;
194
186
typedef SingletonHolder<CShuangpinSchemePolicy> AShuangpinSchemePolicy;
196
struct CHunpinSchemePolicy: public IConfigurable
188
struct CHunpinSchemePolicy : public IConfigurable {
199
190
CHunpinSchemePolicy();
201
IPySegmentor* createPySegmentor ()
203
CHunpinSegmentor *pseg = new CHunpinSegmentor (m_shuangpinType);
204
pseg->setGetFuzzySyllablesOp (&m_getFuzzySyllablesOp);
192
IPySegmentor* createPySegmentor(){
193
CHunpinSegmentor *pseg = new CHunpinSegmentor(m_shuangpinType);
194
pseg->setGetFuzzySyllablesOp(&m_getFuzzySyllablesOp);
208
void setShuangpinType (EShuangpinType t) {m_shuangpinType = t;}
210
void setFuzzyForwarding (bool enable_fuzzies=true, bool enable_simpler_initials=true)
212
m_getFuzzySyllablesOp.setEnableFuzzies (enable_fuzzies);
213
m_getFuzzySyllablesOp.setEnableSimplerInitials (enable_simpler_initials);
198
void setShuangpinType(EShuangpinType t) { m_shuangpinType = t; }
200
void setFuzzyForwarding(bool enable_fuzzies = true,
201
bool enable_simpler_initials = true){
202
m_getFuzzySyllablesOp.setEnableFuzzies(enable_fuzzies);
203
m_getFuzzySyllablesOp.setEnableSimplerInitials(enable_simpler_initials);
216
void clearFuzzyPinyinPairs ()
217
{m_getFuzzySyllablesOp.clearFuzzyMap();}
219
void setFuzzyPinyinPairs (const string_pairs& pairs, bool duplex = true)
220
{m_getFuzzySyllablesOp.initFuzzyMap (pairs, duplex);}
206
void clearFuzzyPinyinPairs()
207
{ m_getFuzzySyllablesOp.clearFuzzyMap(); }
209
void setFuzzyPinyinPairs(const string_pairs& pairs, bool duplex = true)
210
{ m_getFuzzySyllablesOp.initFuzzyMap(pairs, duplex); }
222
212
virtual bool onConfigChanged(const COptionEvent& event);
224
214
template<class> friend class SingletonHolder;
226
~CHunpinSchemePolicy () {}
228
EShuangpinType m_shuangpinType;
215
protected: ~CHunpinSchemePolicy () {}
217
EShuangpinType m_shuangpinType;
229
218
CGetFuzzySyllablesOp<CPinyinData> m_getFuzzySyllablesOp;
232
221
typedef SingletonHolder<CHunpinSchemePolicy> AHunpinSchemePolicy;
234
struct CClassicStylePolicy : public IConfigurable
236
CIMIView* createView () {return new CIMIClassicView ();}
223
struct CClassicStylePolicy : public IConfigurable {
224
CIMIView* createView() { return new CIMIClassicView(); }
238
226
template<class> friend class SingletonHolder;
240
~CClassicStylePolicy () {}
227
protected: ~CClassicStylePolicy () {}
243
230
typedef SingletonHolder<CClassicStylePolicy> AClassicStylePolicy;
245
struct ISunpinyinProfile
247
virtual CIMIView* createProfile () = 0;
248
virtual void destroyProfile (CIMIView *) = 0;
232
struct ISunpinyinProfile {
233
virtual CIMIView* createProfile() = 0;
234
virtual void destroyProfile(CIMIView *) = 0;
249
235
virtual ~ISunpinyinProfile () {};
252
template <class LanguagePolicy, class PinyinSchemePolicy, class InputStylePolicy>
238
template <class LanguagePolicy, class PinyinSchemePolicy,
239
class InputStylePolicy>
253
240
class CSunpinyinProfile : public ISunpinyinProfile
256
CSunpinyinProfile () : m_langPolicy(LanguagePolicy::instance()),
243
CSunpinyinProfile () : m_langPolicy(LanguagePolicy::instance()),
257
244
m_pySchemePolicy(PinyinSchemePolicy::instance()),
258
m_inputStylePolicy(InputStylePolicy::instance())
245
m_inputStylePolicy(InputStylePolicy::instance())
261
248
/* profile by itself is a profile, so we are creating a session here? */
262
virtual CIMIView* createProfile ()
264
if (!m_langPolicy.loadResources ())
249
virtual CIMIView* createProfile(){
250
if (!m_langPolicy.loadResources())
267
IPySegmentor* pseg = m_pySchemePolicy.createPySegmentor ();
253
IPySegmentor* pseg = m_pySchemePolicy.createPySegmentor();
268
254
if (pseg == NULL)
271
CIMIContext *pic = m_langPolicy.createContext ();
272
CIMIView* pview = m_inputStylePolicy.createView ();
273
pview->attachIC (pic);
274
pview->setPySegmentor (pseg);
257
CIMIContext *pic = m_langPolicy.createContext();
258
CIMIView* pview = m_inputStylePolicy.createView();
259
pview->attachIC(pic);
260
pview->setPySegmentor(pseg);
279
virtual void destroyProfile(CIMIView* pview)
265
virtual void destroyProfile(CIMIView* pview){
282
267
LanguagePolicy::instance().destroyContext(pview->getIC());
283
268
delete pview->getPySegmentor();