17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifndef PINYINIME_INCLUDE_ANDPYIME_H__ 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#define PINYINIME_INCLUDE_ANDPYIME_H__ 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include <stdlib.h> 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include "./dictdef.h" 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifdef __cplusplus 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectextern "C" { 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project namespace ime_pinyin { 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Open the decoder engine via the system and user dictionary file names. 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param fn_sys_dict The file name of the system dictionary. 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param fn_usr_dict The file name of the user dictionary. 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return true if open the decoder engine successfully. 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project bool im_open_decoder(const char *fn_sys_dict, const char *fn_usr_dict); 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Open the decoder engine via the system dictionary FD and user dictionary 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * file name. Because on Android, the system dictionary is embedded in the 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * whole application apk file. 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param sys_fd The file in which the system dictionary is embedded. 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param start_offset The starting position of the system dictionary in the 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * file sys_fd. 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param length The length of the system dictionary in the file sys_fd, 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * counted in byte. 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return true if succeed. 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project bool im_open_decoder_fd(int sys_fd, long start_offset, long length, 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project const char *fn_usr_dict); 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Close the decoder engine. 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_close_decoder(); 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Set maximum limitations for decoding. If this function is not called, 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * default values will be used. For example, due to screen size limitation, 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * the UI engine of the IME can only show a certain number of letters(input) 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * to decode, and a certain number of Chinese characters(output). If after 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * user adds a new letter, the input or the output string is longer than the 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations, the engine will discard the recent letter. 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param max_sps_len Maximum length of the spelling string(Pinyin string). 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @max_hzs_len Maximum length of the decoded Chinese character string. 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_set_max_lens(size_t max_sps_len, size_t max_hzs_len); 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Flush cached data to persistent memory. Because at runtime, in order to 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * achieve best performance, some data is only store in memory. 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_flush_cache(); 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Use a spelling string(Pinyin string) to search. The engine will try to do 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * an incremental search based on its previous search result, so if the new 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * string has the same prefix with the previous one stored in the decoder, 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * the decoder will only continue the search from the end of the prefix. 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * If the caller needs to do a brand new search, please call im_reset_search() 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * first. Calling im_search() is equivalent to calling im_add_letter() one by 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * one. 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param sps_buf The spelling string buffer to decode. 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param sps_len The length of the spelling string buffer. 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of candidates. 897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_search(const char* sps_buf, size_t sps_len); 917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Make a delete operation in the current search result, and make research if 947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * necessary. 957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param pos The posistion of char in spelling string to delete, or the 977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * position of spelling id in result string to delete. 987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param is_pos_in_splid Indicate whether the pos parameter is the position 997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * in the spelling string, or the position in the result spelling id string. 1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of candidates. 1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_delsearch(size_t pos, bool is_pos_in_splid, 1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project bool clear_fixed_this_step); 1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Reset the previous search result. 1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_reset_search(); 1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Add a Pinyin letter to the current spelling string kept by decoder. If the 1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * decoder fails in adding the letter, it will do nothing. im_get_sps_str() 1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * can be used to get the spelling string kept by decoder currently. 1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param ch The letter to add. 1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of candidates. 1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_add_letter(char ch); 1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Get the spelling string kept by the decoder. 1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param decoded_len Used to return how many characters in the spelling 1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * string is successfully parsed. 1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The spelling string kept by the decoder. 1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project const char *im_get_sps_str(size_t *decoded_len); 1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Get a candidate(or choice) string. 1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param cand_id The id to get a candidate. Started from 0. Usually, id 0 1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * is a sentence-level candidate. 1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param cand_str The buffer to store the candidate. 1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param max_len The maximum length of the buffer. 1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return cand_str if succeeds, otherwise NULL. 1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project char16* im_get_candidate(size_t cand_id, char16* cand_str, 1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t max_len); 1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Get the segmentation information(the starting positions) of the spelling 1437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * string. 1447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param spl_start Used to return the starting posistions. 1467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of spelling ids. If it is L, there will be L+1 valid 1477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * elements in spl_start, and spl_start[L] is the posistion after the end of 1487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * the last spelling id. 1497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_get_spl_start_pos(const uint16 *&spl_start); 1517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Choose a candidate and make it fixed. If the candidate does not match 1547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * the end of all spelling ids, new candidates will be provided from the 1557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * first unfixed position. If the candidate matches the end of the all 1567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * spelling ids, there will be only one new candidates, or the whole fixed 1577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * sentence. 1587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param cand_id The id of candidate to select and make it fixed. 1607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of candidates. If after the selection, the whole result 1617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * string has been fixed, there will be only one candidate. 1627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_choose(size_t cand_id); 1647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Cancel the last selection, or revert the last operation of im_choose(). 1677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of candidates. 1697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_cancel_last_choice(); 1717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Get the number of fixed spelling ids, or Chinese characters. 1747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of fixed spelling ids, of Chinese characters. 1767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_get_fixed_len(); 1787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Cancel the input state and reset the search workspace. 1817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project bool im_cancel_input(); 1837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Get prediction candiates based on the given fixed Chinese string as the 1867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * history. 1877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 1887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param his_buf The history buffer to do the prediction. It should be ended 1897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * with '\0'. 1907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @param pre_buf Used to return prediction result list. 1917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * @return The number of predicted result string. 1927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t im_get_predicts(const char16 *his_buf, 1947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project char16 (*&pre_buf)[kMaxPredictSize + 1]); 1957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 1977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Enable Shengmus in ShouZiMu mode. 1987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 1997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_enable_shm_as_szm(bool enable); 2007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project /** 2027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Enable Yunmus in ShouZiMu mode. 2037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 2047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project void im_enable_ym_as_szm(bool enable); 2057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 2067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifdef __cplusplus 2087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 2097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif 2107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif // PINYINIME_INCLUDE_ANDPYIME_H__ 212