~ubuntu-branches/ubuntu/raring/sunpinyin/raring

« back to all changes in this revision

Viewing changes to src/ime-core/imi_options.cpp

  • Committer: Package Import Robot
  • Author(s): YunQiang Su
  • Date: 2012-03-30 15:31:55 UTC
  • mfrom: (1.1.3) (1.2.7 sid)
  • Revision ID: package-import@ubuntu.com-20120330153155-qgls77sogzgtg9zp
Tags: 2.0.3+git20120222-1
* Team upload: git snapshot 20120222.
   - fix breaks if LDFLAGS in environment contains
       multiple words (Closese #646001).
   - rm patches merged to upstream:
       append-os-environ-toenv.patch
       fix-ftbfs-on-sh.patch
       remove-10-candidate-words-limitation.patch
   - refresh disable-lm-dict-compile.patch.
* Bump stardard version to 3.9.3: no modify needed.
* add libsunpinyin3-dbg and python-sunpinyin packages.
* debian/compat to 9, multiarch it.
* rewrite debian/rules with dh 7 format.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 
 * 
 
3
 *
4
4
 * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
5
 
 * 
 
5
 *
6
6
 * The contents of this file are subject to the terms of either the GNU Lesser
7
7
 * General Public License Version 2.1 only ("LGPL") or the Common Development and
8
8
 * Distribution License ("CDDL")(collectively, the "License"). You may not use this
9
9
 * file except in compliance with the License. You can obtain a copy of the CDDL at
10
10
 * http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at
11
 
 * http://www.opensource.org/licenses/lgpl-license.php. See the License for the 
 
11
 * http://www.opensource.org/licenses/lgpl-license.php. See the License for the
12
12
 * specific language governing permissions and limitations under the License. When
13
13
 * distributing the software, include this License Header Notice in each file and
14
14
 * include the full text of the License in the License file as well as the
15
15
 * following notice:
16
 
 * 
 
16
 *
17
17
 * NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
18
18
 * (CDDL)
19
19
 * For Covered Software in this distribution, this License shall be governed by the
21
21
 * Any litigation relating to this License shall be subject to the jurisdiction of
22
22
 * the Federal Courts of the Northern District of California and the state courts
23
23
 * of the State of California, with venue lying in Santa Clara County, California.
24
 
 * 
 
24
 *
25
25
 * Contributor(s):
26
 
 * 
 
26
 *
27
27
 * If you wish your version of this file to be governed by only the CDDL or only
28
28
 * the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to
29
29
 * include this software in this distribution under the [CDDL or LGPL Version 2.1]
32
32
 * Version 2.1, or to extend the choice of license to its licensees as provided
33
33
 * above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL
34
34
 * Version 2 license, then the option applies only if the new code is made subject
35
 
 * to such option by the copyright holder. 
 
35
 * to such option by the copyright holder.
36
36
 */
37
37
 
38
38
#ifdef HAVE_CONFIG_H
65
65
        return m_bLoaded;
66
66
 
67
67
    bool suc = true;
68
 
    std::string data_dir  = m_data_dir.size()? m_data_dir: SUNPINYIN_DATA_DIR;
69
 
    std::string lm_path   = data_dir + "/lm_sc.t3g";
 
68
    std::string data_dir = m_data_dir.size() ? m_data_dir : SUNPINYIN_DATA_DIR;
 
69
    std::string lm_path = data_dir + "/lm_sc.t3g";
70
70
    std::string dict_path = data_dir + "/pydict_sc.bin";
71
71
 
72
 
    suc &= m_coreData.loadResource (lm_path.c_str(), dict_path.c_str());
 
72
    suc &= m_coreData.loadResource(lm_path.c_str(), dict_path.c_str());
73
73
 
74
74
    if (!m_user_data_dir.size()) {
75
75
        char path[256];
76
 
        const char *home = getenv ("HOME");
77
 
        snprintf (path, sizeof(path), "%s/%s", home, SUNPINYIN_USERDATA_DIR_PREFIX);
 
76
        const char *home = getenv("HOME");
 
77
        snprintf(path,
 
78
                 sizeof(path),
 
79
                 "%s/%s",
 
80
                 home,
 
81
                 SUNPINYIN_USERDATA_DIR_PREFIX);
78
82
        m_user_data_dir = path;
79
83
    }
80
84
 
81
 
    char * tmp = strdup (m_user_data_dir.c_str());
82
 
    suc &= createDirectory (tmp);
83
 
    free (tmp);
84
 
    
 
85
    char * tmp = strdup(m_user_data_dir.c_str());
 
86
    createDirectory(tmp);
 
87
    free(tmp);
 
88
 
85
89
    std::string history_path = m_user_data_dir + "/history";
86
 
    suc &= m_historyCache.loadFromFile (history_path.c_str());
87
 
    
 
90
    suc &= m_historyCache.loadFromFile(history_path.c_str());
 
91
 
88
92
    std::string user_dict_path = m_user_data_dir + "/userdict";
89
 
    suc &= m_userDict.load (user_dict_path.c_str());
90
 
    
 
93
    suc &= m_userDict.load(user_dict_path.c_str());
 
94
 
91
95
    m_bTried = true;
92
96
    return m_bLoaded = suc;
93
97
}
95
99
CIMIContext *
96
100
CSimplifiedChinesePolicy::createContext()
97
101
{
98
 
    CIMIContext* pic = new CIMIContext ();
99
 
    pic->setCoreData (&m_coreData);
100
 
    pic->setHistoryMemory (&m_historyCache);
101
 
    pic->setUserDict (&m_userDict);
102
 
 
103
 
    pic->setCharsetLevel (m_csLevel);
104
 
 
105
 
    pic->setFullSymbolForwarding (m_bEnableFullSymbol);
106
 
    pic->setGetFullSymbolOp (&m_getFullSymbolOp);
107
 
 
108
 
    pic->setFullPunctForwarding (m_bEnableFullPunct);
109
 
    pic->setGetFullPunctOp (&m_getFullPunctOp);
 
102
    CIMIContext* pic = new CIMIContext();
 
103
    pic->setCoreData(&m_coreData);
 
104
    pic->setHistoryMemory(&m_historyCache);
 
105
    pic->setUserDict(&m_userDict);
 
106
 
 
107
    pic->setCharsetLevel(m_csLevel);
 
108
 
 
109
    pic->setFullSymbolForwarding(m_bEnableFullSymbol);
 
110
    pic->setGetFullSymbolOp(&m_getFullSymbolOp);
 
111
 
 
112
    pic->setFullPunctForwarding(m_bEnableFullPunct);
 
113
    pic->setGetFullPunctOp(&m_getFullPunctOp);
110
114
    return pic;
111
115
}
112
116
 
113
117
void
114
 
CSimplifiedChinesePolicy::destroyContext (CIMIContext *context)
 
118
CSimplifiedChinesePolicy::destroyContext(CIMIContext *context)
115
119
{
116
120
    assert(context != NULL);
117
121
    saveUserHistory();
121
125
string_pairs
122
126
CSimplifiedChinesePolicy::getDefaultPunctMapping() const
123
127
{
124
 
    static const char* punc_map [] = { 
125
 
        " ",    " ",
126
 
        ",",    ",",
127
 
        ";",    ";",
128
 
        "!",    "!",
129
 
        "?",    "?",
130
 
        ".",    "。",
131
 
        ":",    ":",
132
 
        "^",    "……",
133
 
        "\\",   "、",
134
 
        "\"",   "“",
135
 
        "\"",   "”",
136
 
        "'",    "‘",
137
 
        "'",    "’",
138
 
        "_",    "——",
139
 
        "<",    "《",
140
 
        ">",    "》",
141
 
        "(",    "(",
142
 
        ")",    ")",
143
 
        "[",    "【",
144
 
        "]",    "】",
145
 
        "{",    "『",
146
 
        "}",    "』",
147
 
        "$",    "¥",
 
128
    static const char* punc_map [] = {
 
129
        " ", " ",
 
130
        ",", ",",
 
131
        ";", ";",
 
132
        "!", "!",
 
133
        "?", "?",
 
134
        ".", "。",
 
135
        ":", ":",
 
136
        "^", "……",
 
137
        "\\", "、",
 
138
        "\"", "“",
 
139
        "\"", "”",
 
140
        "'", "‘",
 
141
        "'", "’",
 
142
        "_", "——",
 
143
        "<", "《",
 
144
        ">", "》",
 
145
        "(", "(",
 
146
        ")", ")",
 
147
        "[", "【",
 
148
        "]", "】",
 
149
        "{", "『",
 
150
        "}", "』",
 
151
        "$", "¥",
148
152
        NULL,
149
153
    };
150
154
 
154
158
    while (*p) {
155
159
        std::string k = *p++;
156
160
        std::string v = *p++;
157
 
        default_punc_map.push_back (std::make_pair(k, v));
 
161
        default_punc_map.push_back(std::make_pair(k, v));
158
162
    }
159
163
    return default_punc_map;
160
164
}
161
165
 
162
166
bool
163
 
CSimplifiedChinesePolicy::onConfigChanged (const COptionEvent& event)
 
167
CSimplifiedChinesePolicy::onConfigChanged(const COptionEvent& event)
164
168
{
165
169
    if (event.name == SYSTEM_DATA_DIR) {
166
170
        setDataDir(event.get_string());
174
178
}
175
179
 
176
180
bool
177
 
CSimplifiedChinesePolicy::saveUserHistory ()
 
181
CSimplifiedChinesePolicy::saveUserHistory()
178
182
{
179
183
    return m_historyCache.saveToFile();
180
184
}
181
185
 
182
186
bool
183
 
CSimplifiedChinesePolicy::createDirectory(char *path) {
 
187
CSimplifiedChinesePolicy::createDirectory(char *path)
 
188
{
184
189
    char *p = path;
185
 
    while ((p = strchr(p+1, '/'))) {
 
190
    while ((p = strchr(p + 1, '/'))) {
186
191
        *p = 0;
187
192
        if (access(path, F_OK) != 0 && mkdir(path, S_IRWXU) != 0) {
188
193
            fprintf(stderr, "mkdir %s: %s\n", path, strerror(errno));
195
200
 
196
201
CShuangpinSchemePolicy::CShuangpinSchemePolicy()
197
202
    : m_shuangpinType(MS2003)
198
 
{}
 
203
{
 
204
}
199
205
 
200
206
bool
201
207
CQuanpinSchemePolicy::onConfigChanged(const COptionEvent& event)
221
227
CShuangpinSchemePolicy::onConfigChanged(const COptionEvent& event)
222
228
{
223
229
    if (event.name == SHUANGPIN_TYPE) {
224
 
        setShuangpinType( (EShuangpinType) event.get_int());
 
230
        setShuangpinType((EShuangpinType)event.get_int());
225
231
        return true;
226
232
    } else if (event.name == QUANPIN_FUZZY_ENABLED) {
227
233
        setFuzzyForwarding(event.get_bool());
238
244
CHunpinSchemePolicy::onConfigChanged(const COptionEvent& event)
239
245
{
240
246
    if (event.name == SHUANGPIN_TYPE) {
241
 
        setShuangpinType( (EShuangpinType) event.get_int());
242
 
                //刷新segmentor狀態
243
 
                COptionEventBus& event_bus = AOptionEventBus::instance();
244
 
                event_bus.publishEvent(COptionEvent(PINYIN_SCHEME, -1));//第二個參數沒有用
 
247
        setShuangpinType((EShuangpinType)event.get_int());
 
248
        //刷新segmentor狀態
 
249
        COptionEventBus& event_bus = AOptionEventBus::instance();
 
250
        event_bus.publishEvent(COptionEvent(PINYIN_SCHEME, -1));        //第二個參數沒有用
245
251
        return true;
246
252
    } else if (event.name == QUANPIN_FUZZY_ENABLED) {
247
253
        setFuzzyForwarding(event.get_bool());
250
256
        setFuzzyPinyinPairs(event.get_string_pair_list());
251
257
        return true;
252
258
    }
253
 
        
 
259
 
254
260
    return false;
255
261
}
256
262
 
257
263
 
258
264
CHunpinSchemePolicy::CHunpinSchemePolicy()
259
 
: m_shuangpinType(MS2003)
260
 
{}
 
265
    : m_shuangpinType(MS2003)
 
266
{
 
267
}