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

« back to all changes in this revision

Viewing changes to src/ime-core/imi_uiobjects.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
50
50
{
51
51
}
52
52
 
53
 
CPreEditString::CPreEditString() 
54
 
    : m_caret(0), m_candi_start(0), m_wstr(), m_charTypes()
 
53
CPreEditString::CPreEditString()
 
54
    : m_caret(0), m_candi_start(0), m_charTypes()
55
55
{
56
56
    m_charTypes.reserve(MAX_STRING_LEN_CANDI_PREEDIT);
57
57
}
81
81
int
82
82
CPreEditString::charTypeAt(int idx) const
83
83
{
84
 
    return (idx < 0 || idx >= m_charTypes.size())?(DONTCARE_CHAR):(m_charTypes[idx]);
 
84
    if (idx < 0 || idx >= (int) m_charTypes.size()) {
 
85
        return DONTCARE_CHAR;
 
86
    }
 
87
    return m_charTypes[idx];
85
88
}
86
89
 
87
90
int
132
135
{
133
136
}
134
137
 
135
 
CCandidateList::CCandidateList() 
136
 
    : m_candiStrings(), m_candiTypes(), m_candiCharTypeVecs(),
137
 
      m_first(0), m_total(0)
 
138
CCandidateList::CCandidateList()
 
139
    : m_total(0), m_first(0), m_size(0)
138
140
{
139
141
}
140
142
 
175
177
int
176
178
CCandidateList::candiType(unsigned item) const
177
179
{
178
 
    return (item >= m_candiTypes.size())?(NORMAL_WORD):(m_candiTypes[item]);
 
180
    return (item >= m_candiTypes.size()) ? (NORMAL_WORD) : (m_candiTypes[item]);
179
181
}
180
182
 
181
183
int
182
184
CCandidateList::candiSize(unsigned item) const
183
185
{
184
 
    return (item >= m_candiStrings.size())?(0):(m_candiStrings[item].size());
 
186
    return (item >= m_candiStrings.size()) ? (0) : (m_candiStrings[item].size());
185
187
}
186
188
 
187
189
const TWCHAR*
188
190
CCandidateList::candiString(unsigned item) const
189
191
{
190
 
    return (item >= m_candiStrings.size())?(NULL):(m_candiStrings[item].c_str());
 
192
    return (item >=
 
193
            m_candiStrings.size()) ? (NULL) : (m_candiStrings[item].c_str());
191
194
}
192
195
 
193
196
int
203
206
CCandidateList::candiCharTypeAt(unsigned item, unsigned idx) const
204
207
{
205
208
    int sz = candiCharTypeSizeAt(item);
206
 
    return (idx >= sz)?(DONTCARE_CHAR):(m_candiCharTypeVecs[item][idx]);
 
209
    if ((int) idx >= sz) {
 
210
        return DONTCARE_CHAR;
 
211
    }
 
212
    return m_candiCharTypeVecs[item][idx];
207
213
}
208
214
 
209
215
void
210
216
CCandidateList::clear()
211
217
{
212
 
    m_first = m_total = 0;
 
218
    m_size = m_first = m_total = 0;
213
219
    m_candiStrings.clear();
214
220
    m_candiTypes.clear();
215
221
    m_candiCharTypeVecs.clear();
 
222
    m_candiUserIndex.clear();
 
223
    m_candiStringsIndex.clear();
216
224
}
217
225
 
218
226
void
219
 
CCandidateList::reserve(int count)
 
227
CCandidateList::setSize(int count)
220
228
{
221
 
    m_candiStrings.reserve(count);
222
 
    m_candiTypes.reserve(count);
223
 
    m_candiCharTypeVecs.reserve(count);
 
229
    m_size = count;
224
230
}
225
231
 
226
232
ICandidateList::CCandiStrings &
240
246
{
241
247
    return m_candiCharTypeVecs;
242
248
}
 
249
 
 
250
void
 
251
CCandidateList::pushBackCandidate(wstring wstr, int type, int userIdx)
 
252
{
 
253
    if (m_candiStringsIndex.find(wstr) == m_candiStringsIndex.end()) {
 
254
        m_candiStringsIndex.insert(std::make_pair(wstr, m_candiStrings.size()));
 
255
        m_candiStrings.push_back(wstr);
 
256
        m_candiTypes.push_back(type);
 
257
        m_candiUserIndex.push_back(userIdx);
 
258
    }
 
259
}
 
260
 
 
261
void
 
262
CCandidateList::insertCandidate(wstring wstr, int type, int rank, int userIdx)
 
263
{
 
264
    if (rank > (int) m_candiStrings.size()) {
 
265
        rank = m_candiStrings.size();
 
266
    }
 
267
    if (m_candiStringsIndex.find(wstr) == m_candiStringsIndex.end()) {
 
268
        m_candiStringsIndex.insert(std::make_pair(wstr, m_candiStrings.size()));
 
269
        insertCandidateNoDedup(wstr, type, rank, userIdx);
 
270
    } else {
 
271
        int idx = m_candiStringsIndex[wstr];
 
272
        if (rank >= idx) {
 
273
            return;
 
274
        }
 
275
        m_candiStringsIndex[wstr] = rank;
 
276
        m_candiStrings.erase(m_candiStrings.begin() + idx);
 
277
        m_candiTypes.erase(m_candiTypes.begin() + idx);
 
278
        m_candiUserIndex.erase(m_candiUserIndex.begin() + idx);
 
279
        m_candiStrings.insert(m_candiStrings.begin() + rank, wstr);
 
280
        m_candiTypes.insert(m_candiTypes.begin() + rank, type);
 
281
        m_candiUserIndex.insert(m_candiUserIndex.begin() + rank, userIdx);
 
282
    }
 
283
}
 
284
 
 
285
void
 
286
CCandidateList::insertCandidateNoDedup(wstring wstr, int type, int rank,
 
287
                                       int userIdx)
 
288
{
 
289
    m_candiStrings.insert(m_candiStrings.begin() + rank, wstr);
 
290
    m_candiTypes.insert(m_candiTypes.begin() + rank, type);
 
291
    m_candiUserIndex.insert(m_candiUserIndex.begin() + rank, userIdx);
 
292
}
 
293
 
 
294
void
 
295
CCandidateList::shrinkList()
 
296
{
 
297
    if ((int) m_candiStrings.size() > m_first) {
 
298
        m_candiStrings.erase(m_candiStrings.begin(),
 
299
                             m_candiStrings.begin() + m_first);
 
300
        m_candiTypes.erase(m_candiTypes.begin(),
 
301
                           m_candiTypes.begin() + m_first);
 
302
        m_candiUserIndex.erase(m_candiUserIndex.begin(),
 
303
                               m_candiUserIndex.begin() + m_first);
 
304
    }
 
305
 
 
306
    if ((int) m_candiStrings.size() > m_size) {
 
307
        m_candiStrings.erase(m_candiStrings.begin() + m_size,
 
308
                             m_candiStrings.end());
 
309
        m_candiTypes.erase(m_candiTypes.begin() + m_size,
 
310
                           m_candiTypes.end());
 
311
        m_candiUserIndex.erase(m_candiUserIndex.begin() + m_size,
 
312
                               m_candiUserIndex.end());
 
313
    }
 
314
}