xref: /OK3568_Linux_fs/app/forlinx/flapp/src/keyboard/pinyin/share/pinyinime.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <stdlib.h>
18 #include "../include/pinyinime.h"
19 #include "../include/dicttrie.h"
20 #include "../include/matrixsearch.h"
21 #include "../include/spellingtrie.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27   using namespace ime_pinyin;
28 
29   // The maximum number of the prediction items.
30   static const size_t kMaxPredictNum = 500;
31 
32   // Used to search Pinyin string and give the best candidate.
33   MatrixSearch* matrix_search = NULL;
34 
35   char16 predict_buf[kMaxPredictNum][kMaxPredictSize + 1];
36 
im_open_decoder(const char * fn_sys_dict,const char * fn_usr_dict)37   bool im_open_decoder(const char *fn_sys_dict, const char *fn_usr_dict) {
38     if (NULL != matrix_search)
39       delete matrix_search;
40 
41     matrix_search = new MatrixSearch();
42     if (NULL == matrix_search) {
43       return false;
44     }
45 
46     return matrix_search->init(fn_sys_dict, fn_usr_dict);
47   }
48 
im_open_decoder_fd(int sys_fd,long start_offset,long length,const char * fn_usr_dict)49   bool im_open_decoder_fd(int sys_fd, long start_offset, long length,
50                           const char *fn_usr_dict) {
51     if (NULL != matrix_search)
52       delete matrix_search;
53 
54     matrix_search = new MatrixSearch();
55     if (NULL == matrix_search)
56       return false;
57 
58     return matrix_search->init_fd(sys_fd, start_offset, length, fn_usr_dict);
59   }
60 
im_close_decoder()61   void im_close_decoder() {
62     if (NULL != matrix_search) {
63       matrix_search->close();
64       delete matrix_search;
65     }
66     matrix_search = NULL;
67   }
68 
im_set_max_lens(size_t max_sps_len,size_t max_hzs_len)69   void im_set_max_lens(size_t max_sps_len, size_t max_hzs_len) {
70     if (NULL != matrix_search) {
71       matrix_search->set_max_lens(max_sps_len, max_hzs_len);
72     }
73   }
74 
im_flush_cache()75   void im_flush_cache() {
76     if (NULL != matrix_search)
77       matrix_search->flush_cache();
78   }
79 
80   // To be updated.
im_search(const char * pybuf,size_t pylen)81   size_t im_search(const char* pybuf, size_t pylen) {
82     if (NULL == matrix_search)
83       return 0;
84 
85     matrix_search->search(pybuf, pylen);
86     return matrix_search->get_candidate_num();
87   }
88 
im_delsearch(size_t pos,bool is_pos_in_splid,bool clear_fixed_this_step)89   size_t im_delsearch(size_t pos, bool is_pos_in_splid,
90                       bool clear_fixed_this_step) {
91     if (NULL == matrix_search)
92       return 0;
93     matrix_search->delsearch(pos, is_pos_in_splid, clear_fixed_this_step);
94     return matrix_search->get_candidate_num();
95   }
96 
im_reset_search()97   void im_reset_search() {
98     if (NULL == matrix_search)
99       return;
100 
101     matrix_search->reset_search();
102   }
103 
104   // To be removed
im_add_letter(char ch)105   size_t im_add_letter(char ch) {
106     return 0;
107   }
108 
im_get_sps_str(size_t * decoded_len)109   const char* im_get_sps_str(size_t *decoded_len) {
110     if (NULL == matrix_search)
111       return NULL;
112 
113     return matrix_search->get_pystr(decoded_len);
114   }
115 
im_get_candidate(size_t cand_id,char16 * cand_str,size_t max_len)116   char16* im_get_candidate(size_t cand_id, char16* cand_str,
117                         size_t max_len) {
118     if (NULL == matrix_search)
119       return NULL;
120 
121     return matrix_search->get_candidate(cand_id, cand_str, max_len);
122   }
123 
im_get_spl_start_pos(const uint16 * & spl_start)124   size_t im_get_spl_start_pos(const uint16 *&spl_start) {
125     if (NULL == matrix_search)
126       return 0;
127 
128     return matrix_search->get_spl_start(spl_start);
129   }
130 
im_choose(size_t choice_id)131   size_t im_choose(size_t choice_id) {
132     if (NULL == matrix_search)
133       return 0;
134 
135     return matrix_search->choose(choice_id);
136   }
137 
im_cancel_last_choice()138   size_t im_cancel_last_choice() {
139     if (NULL == matrix_search)
140       return 0;
141 
142     return matrix_search->cancel_last_choice();
143   }
144 
im_get_fixed_len()145   size_t im_get_fixed_len() {
146     if (NULL == matrix_search)
147       return 0;
148 
149     return matrix_search->get_fixedlen();
150   }
151 
152   // To be removed
im_cancel_input()153   bool im_cancel_input() {
154     return true;
155   }
156 
157 
im_get_predicts(const char16 * his_buf,char16 (* & pre_buf)[kMaxPredictSize+1])158   size_t im_get_predicts(const char16 *his_buf,
159                          char16 (*&pre_buf)[kMaxPredictSize + 1]) {
160     if (NULL == his_buf)
161       return 0;
162 
163     size_t fixed_len = utf16_strlen(his_buf);
164     const char16 *fixed_ptr = his_buf;
165     if (fixed_len > kMaxPredictSize) {
166       fixed_ptr += fixed_len - kMaxPredictSize;
167       fixed_len = kMaxPredictSize;
168     }
169 
170     pre_buf = predict_buf;
171     return matrix_search->get_predicts(his_buf, pre_buf, kMaxPredictNum);
172   }
173 
im_enable_shm_as_szm(bool enable)174   void im_enable_shm_as_szm(bool enable) {
175     SpellingTrie &spl_trie = SpellingTrie::get_instance();
176     spl_trie.szm_enable_shm(enable);
177   }
178 
im_enable_ym_as_szm(bool enable)179   void im_enable_ym_as_szm(bool enable) {
180     SpellingTrie &spl_trie = SpellingTrie::get_instance();
181     spl_trie.szm_enable_ym(enable);
182   }
183 
im_init_user_dictionary(const char * fn_usr_dict)184   void im_init_user_dictionary(const char *fn_usr_dict) {
185     if (!matrix_search)
186         return;
187     matrix_search->flush_cache();
188     matrix_search->init_user_dictionary(fn_usr_dict);
189   }
190 
im_is_user_dictionary_enabled(void)191   bool im_is_user_dictionary_enabled(void) {
192     return NULL != matrix_search ? matrix_search->is_user_dictionary_enabled() : false;
193   }
194 
195 #ifdef __cplusplus
196 }
197 #endif
198