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#ifndef PINYINIME_INCLUDE_ANDPYIME_H__ 18#define PINYINIME_INCLUDE_ANDPYIME_H__ 19 20#include <stdlib.h> 21#include "./dictdef.h" 22 23#ifdef __cplusplus 24extern "C" { 25#endif 26 27 namespace ime_pinyin { 28 29 /** 30 * Open the decoder engine via the system and user dictionary file names. 31 * 32 * @param fn_sys_dict The file name of the system dictionary. 33 * @param fn_usr_dict The file name of the user dictionary. 34 * @return true if open the decoder engine successfully. 35 */ 36 bool im_open_decoder(const char *fn_sys_dict, const char *fn_usr_dict); 37 38 /** 39 * Open the decoder engine via the system dictionary FD and user dictionary 40 * file name. Because on Android, the system dictionary is embedded in the 41 * whole application apk file. 42 * 43 * @param sys_fd The file in which the system dictionary is embedded. 44 * @param start_offset The starting position of the system dictionary in the 45 * file sys_fd. 46 * @param length The length of the system dictionary in the file sys_fd, 47 * counted in byte. 48 * @return true if succeed. 49 */ 50 bool im_open_decoder_fd(int sys_fd, long start_offset, long length, 51 const char *fn_usr_dict); 52 53 /** 54 * Close the decoder engine. 55 */ 56 void im_close_decoder(); 57 58 /** 59 * Set maximum limitations for decoding. If this function is not called, 60 * default values will be used. For example, due to screen size limitation, 61 * the UI engine of the IME can only show a certain number of letters(input) 62 * to decode, and a certain number of Chinese characters(output). If after 63 * user adds a new letter, the input or the output string is longer than the 64 * limitations, the engine will discard the recent letter. 65 * 66 * @param max_sps_len Maximum length of the spelling string(Pinyin string). 67 * @max_hzs_len Maximum length of the decoded Chinese character string. 68 */ 69 void im_set_max_lens(size_t max_sps_len, size_t max_hzs_len); 70 71 /** 72 * Flush cached data to persistent memory. Because at runtime, in order to 73 * achieve best performance, some data is only store in memory. 74 */ 75 void im_flush_cache(); 76 77 /** 78 * Use a spelling string(Pinyin string) to search. The engine will try to do 79 * an incremental search based on its previous search result, so if the new 80 * string has the same prefix with the previous one stored in the decoder, 81 * the decoder will only continue the search from the end of the prefix. 82 * If the caller needs to do a brand new search, please call im_reset_search() 83 * first. Calling im_search() is equivalent to calling im_add_letter() one by 84 * one. 85 * 86 * @param sps_buf The spelling string buffer to decode. 87 * @param sps_len The length of the spelling string buffer. 88 * @return The number of candidates. 89 */ 90 size_t im_search(const char* sps_buf, size_t sps_len); 91 92 /** 93 * Make a delete operation in the current search result, and make research if 94 * necessary. 95 * 96 * @param pos The posistion of char in spelling string to delete, or the 97 * position of spelling id in result string to delete. 98 * @param is_pos_in_splid Indicate whether the pos parameter is the position 99 * in the spelling string, or the position in the result spelling id string. 100 * @return The number of candidates. 101 */ 102 size_t im_delsearch(size_t pos, bool is_pos_in_splid, 103 bool clear_fixed_this_step); 104 105 /** 106 * Reset the previous search result. 107 */ 108 void im_reset_search(); 109 110 /** 111 * Add a Pinyin letter to the current spelling string kept by decoder. If the 112 * decoder fails in adding the letter, it will do nothing. im_get_sps_str() 113 * can be used to get the spelling string kept by decoder currently. 114 * 115 * @param ch The letter to add. 116 * @return The number of candidates. 117 */ 118 size_t im_add_letter(char ch); 119 120 /** 121 * Get the spelling string kept by the decoder. 122 * 123 * @param decoded_len Used to return how many characters in the spelling 124 * string is successfully parsed. 125 * @return The spelling string kept by the decoder. 126 */ 127 const char *im_get_sps_str(size_t *decoded_len); 128 129 /** 130 * Get a candidate(or choice) string. 131 * 132 * @param cand_id The id to get a candidate. Started from 0. Usually, id 0 133 * is a sentence-level candidate. 134 * @param cand_str The buffer to store the candidate. 135 * @param max_len The maximum length of the buffer. 136 * @return cand_str if succeeds, otherwise NULL. 137 */ 138 char16* im_get_candidate(size_t cand_id, char16* cand_str, 139 size_t max_len); 140 141 /** 142 * Get the segmentation information(the starting positions) of the spelling 143 * string. 144 * 145 * @param spl_start Used to return the starting posistions. 146 * @return The number of spelling ids. If it is L, there will be L+1 valid 147 * elements in spl_start, and spl_start[L] is the posistion after the end of 148 * the last spelling id. 149 */ 150 size_t im_get_spl_start_pos(const uint16 *&spl_start); 151 152 /** 153 * Choose a candidate and make it fixed. If the candidate does not match 154 * the end of all spelling ids, new candidates will be provided from the 155 * first unfixed position. If the candidate matches the end of the all 156 * spelling ids, there will be only one new candidates, or the whole fixed 157 * sentence. 158 * 159 * @param cand_id The id of candidate to select and make it fixed. 160 * @return The number of candidates. If after the selection, the whole result 161 * string has been fixed, there will be only one candidate. 162 */ 163 size_t im_choose(size_t cand_id); 164 165 /** 166 * Cancel the last selection, or revert the last operation of im_choose(). 167 * 168 * @return The number of candidates. 169 */ 170 size_t im_cancel_last_choice(); 171 172 /** 173 * Get the number of fixed spelling ids, or Chinese characters. 174 * 175 * @return The number of fixed spelling ids, of Chinese characters. 176 */ 177 size_t im_get_fixed_len(); 178 179 /** 180 * Cancel the input state and reset the search workspace. 181 */ 182 bool im_cancel_input(); 183 184 /** 185 * Get prediction candiates based on the given fixed Chinese string as the 186 * history. 187 * 188 * @param his_buf The history buffer to do the prediction. It should be ended 189 * with '\0'. 190 * @param pre_buf Used to return prediction result list. 191 * @return The number of predicted result string. 192 */ 193 size_t im_get_predicts(const char16 *his_buf, 194 char16 (*&pre_buf)[kMaxPredictSize + 1]); 195 196 /** 197 * Enable Shengmus in ShouZiMu mode. 198 */ 199 void im_enable_shm_as_szm(bool enable); 200 201 /** 202 * Enable Yunmus in ShouZiMu mode. 203 */ 204 void im_enable_ym_as_szm(bool enable); 205} 206 207#ifdef __cplusplus 208} 209#endif 210 211#endif // PINYINIME_INCLUDE_ANDPYIME_H__ 212