File: pinyinime.h

package info (click to toggle)
libgooglepinyin 0.1.2-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 7,640 kB
  • ctags: 841
  • sloc: cpp: 8,256; ansic: 200; makefile: 13
file content (211 lines) | stat: -rw-r--r-- 7,268 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef PINYINIME_INCLUDE_ANDPYIME_H__
#define PINYINIME_INCLUDE_ANDPYIME_H__

#include <stdlib.h>
#include "./dictdef.h"

#ifdef __cplusplus
extern "C" {
#endif

  namespace ime_pinyin {

  /**
   * Open the decoder engine via the system and user dictionary file names.
   *
   * @param fn_sys_dict The file name of the system dictionary.
   * @param fn_usr_dict The file name of the user dictionary.
   * @return true if open the decoder engine successfully.
   */
  bool im_open_decoder(const char *fn_sys_dict, const char *fn_usr_dict);

  /**
   * Open the decoder engine via the system dictionary FD and user dictionary
   * file name. Because on Android, the system dictionary is embedded in the
   * whole application apk file.
   *
   * @param sys_fd The file in which the system dictionary is embedded.
   * @param start_offset The starting position of the system dictionary in the
   * file sys_fd.
   * @param length The length of the system dictionary in the file sys_fd,
   * counted in byte.
   * @return true if succeed.
   */
  bool im_open_decoder_fd(int sys_fd, long start_offset, long length,
                          const char *fn_usr_dict);

  /**
   * Close the decoder engine.
   */
  void im_close_decoder();

  /**
   * Set maximum limitations for decoding. If this function is not called,
   * default values will be used. For example, due to screen size limitation,
   * the UI engine of the IME can only show a certain number of letters(input)
   * to decode, and a certain number of Chinese characters(output). If after
   * user adds a new letter, the input or the output string is longer than the
   * limitations, the engine will discard the recent letter.
   *
   * @param max_sps_len Maximum length of the spelling string(Pinyin string).
   * @max_hzs_len Maximum length of the decoded Chinese character string.
   */
  void im_set_max_lens(size_t max_sps_len, size_t max_hzs_len);

  /**
   * Flush cached data to persistent memory. Because at runtime, in order to
   * achieve best performance, some data is only store in memory.
   */
  void im_flush_cache();

  /**
   * Use a spelling string(Pinyin string) to search. The engine will try to do
   * an incremental search based on its previous search result, so if the new
   * string has the same prefix with the previous one stored in the decoder,
   * the decoder will only continue the search from the end of the prefix.
   * If the caller needs to do a brand new search, please call im_reset_search()
   * first. Calling im_search() is equivalent to calling im_add_letter() one by
   * one.
   *
   * @param sps_buf The spelling string buffer to decode.
   * @param sps_len The length of the spelling string buffer.
   * @return The number of candidates.
   */
  size_t im_search(const char* sps_buf, size_t sps_len);

  /**
   * Make a delete operation in the current search result, and make research if
   * necessary.
   *
   * @param pos The posistion of char in spelling string to delete, or the
   * position of spelling id in result string to delete.
   * @param is_pos_in_splid Indicate whether the pos parameter is the position
   * in the spelling string, or the position in the result spelling id string.
   * @return The number of candidates.
   */
  size_t im_delsearch(size_t pos, bool is_pos_in_splid,
                      bool clear_fixed_this_step);

  /**
   * Reset the previous search result.
   */
  void im_reset_search();

  /**
   * Add a Pinyin letter to the current spelling string kept by decoder. If the
   * decoder fails in adding the letter, it will do nothing. im_get_sps_str()
   * can be used to get the spelling string kept by decoder currently.
   *
   * @param ch The letter to add.
   * @return The number of candidates.
   */
  size_t im_add_letter(char ch);

  /**
   * Get the spelling string kept by the decoder.
   *
   * @param decoded_len Used to return how many characters in the spelling
   * string is successfully parsed.
   * @return The spelling string kept by the decoder.
   */
  const char *im_get_sps_str(size_t *decoded_len);

  /**
   * Get a candidate(or choice) string.
   *
   * @param cand_id The id to get a candidate. Started from 0. Usually, id 0
   * is a sentence-level candidate.
   * @param cand_str The buffer to store the candidate.
   * @param max_len The maximum length of the buffer.
   * @return cand_str if succeeds, otherwise NULL.
   */
  char16* im_get_candidate(size_t cand_id, char16* cand_str,
                           size_t max_len);

  /**
   * Get the segmentation information(the starting positions) of the spelling
   * string.
   *
   * @param spl_start Used to return the starting posistions.
   * @return The number of spelling ids. If it is L, there will be L+1 valid
   * elements in spl_start, and spl_start[L] is the posistion after the end of
   * the last spelling id.
   */
  size_t im_get_spl_start_pos(const uint16 *&spl_start);

  /**
   * Choose a candidate and make it fixed. If the candidate does not match
   * the end of all spelling ids, new candidates will be provided from the
   * first unfixed position. If the candidate matches the end of the all
   * spelling ids, there will be only one new candidates, or the whole fixed
   * sentence.
   *
   * @param cand_id The id of candidate to select and make it fixed.
   * @return The number of candidates. If after the selection, the whole result
   * string has been fixed, there will be only one candidate.
   */
  size_t im_choose(size_t cand_id);

  /**
   * Cancel the last selection, or revert the last operation of im_choose().
   *
   * @return The number of candidates.
   */
  size_t im_cancel_last_choice();

  /**
   * Get the number of fixed spelling ids, or Chinese characters.
   *
   * @return The number of fixed spelling ids, of Chinese characters.
   */
  size_t im_get_fixed_len();

  /**
   * Cancel the input state and reset the search workspace.
   */
  bool im_cancel_input();

  /**
   * Get prediction candiates based on the given fixed Chinese string as the
   * history.
   *
   * @param his_buf The history buffer to do the prediction. It should be ended
   * with '\0'.
   * @param pre_buf Used to return prediction result list.
   * @return The number of predicted result string.
   */
  size_t im_get_predicts(const char16 *his_buf,
                         char16 (*&pre_buf)[kMaxPredictSize + 1]);

  /**
   * Enable Shengmus in ShouZiMu mode.
   */
  void im_enable_shm_as_szm(bool enable);

  /**
   * Enable Yunmus in ShouZiMu mode.
   */
  void im_enable_ym_as_szm(bool enable);
}

#ifdef __cplusplus
}
#endif

#endif  // PINYINIME_INCLUDE_ANDPYIME_H__