2
2
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4
4
* Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
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:
17
17
* NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
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.
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.
38
38
#ifdef HAVE_CONFIG_H
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()
56
56
m_charTypes.reserve(MAX_STRING_LEN_CANDI_PREEDIT);
176
178
CCandidateList::candiType(unsigned item) const
178
return (item >= m_candiTypes.size())?(NORMAL_WORD):(m_candiTypes[item]);
180
return (item >= m_candiTypes.size()) ? (NORMAL_WORD) : (m_candiTypes[item]);
182
184
CCandidateList::candiSize(unsigned item) const
184
return (item >= m_candiStrings.size())?(0):(m_candiStrings[item].size());
186
return (item >= m_candiStrings.size()) ? (0) : (m_candiStrings[item].size());
188
190
CCandidateList::candiString(unsigned item) const
190
return (item >= m_candiStrings.size())?(NULL):(m_candiStrings[item].c_str());
193
m_candiStrings.size()) ? (NULL) : (m_candiStrings[item].c_str());
203
206
CCandidateList::candiCharTypeAt(unsigned item, unsigned idx) const
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;
212
return m_candiCharTypeVecs[item][idx];
210
216
CCandidateList::clear()
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();
219
CCandidateList::reserve(int count)
227
CCandidateList::setSize(int count)
221
m_candiStrings.reserve(count);
222
m_candiTypes.reserve(count);
223
m_candiCharTypeVecs.reserve(count);
226
232
ICandidateList::CCandiStrings &
241
247
return m_candiCharTypeVecs;
251
CCandidateList::pushBackCandidate(wstring wstr, int type, int userIdx)
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);
262
CCandidateList::insertCandidate(wstring wstr, int type, int rank, int userIdx)
264
if (rank > (int) m_candiStrings.size()) {
265
rank = m_candiStrings.size();
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);
271
int idx = m_candiStringsIndex[wstr];
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);
286
CCandidateList::insertCandidateNoDedup(wstring wstr, int type, int rank,
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);
295
CCandidateList::shrinkList()
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);
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,
311
m_candiUserIndex.erase(m_candiUserIndex.begin() + m_size,
312
m_candiUserIndex.end());