1 /*
2  * Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.
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 #define NJ_VERSION "iWnn Version 1.1.2"
18 
19 #ifndef _NJ_LIB_H_
20 #define _NJ_LIB_H_
21 
22 typedef signed char    NJ_INT8;
23 typedef unsigned char  NJ_UINT8;
24 typedef signed short   NJ_INT16;
25 typedef unsigned short NJ_UINT16;
26 typedef signed long    NJ_INT32;
27 typedef unsigned long  NJ_UINT32;
28 
29 typedef unsigned short   NJ_CHAR;
30 
31 #define NJ_CHAR_NUL  0x0000
32 
33 #define NJ_TERM_LEN  1
34 #define NJ_TERM_SIZE (NJ_TERM_LEN)
35 
36 #ifndef NULL
37 #define NULL 0
38 #endif
39 
40 #ifdef NJ_STACK_CHECK_FILE
41 typedef NJ_VOID VOID;
42 #endif
43 
44 #ifndef NJ_CHAR_WAVE_DASH_BIG
45 #define NJ_CHAR_WAVE_DASH_BIG   0xFF5E
46 #endif
47 #ifndef NJ_CHAR_WAVE_DASH_SMALL
48 #define NJ_CHAR_WAVE_DASH_SMALL 0x007E
49 #endif
50 
51 typedef NJ_INT16 NJ_HINDO;
52 
53 #define NJ_INDEX_SIZE      2
54 
55 #define NJ_LEARN_DIC_HEADER_SIZE   72
56 
57 #ifndef NJ_MAX_DIC
58 #define NJ_MAX_DIC 20
59 #endif
60 
61 #ifndef NJ_MAX_CHARSET
62 #define NJ_MAX_CHARSET 200
63 #endif
64 
65 #ifndef NJ_SEARCH_CACHE_SIZE
66 #define NJ_SEARCH_CACHE_SIZE   200
67 #endif
68 
69 #ifndef NJ_CACHE_VIEW_CNT
70 #define NJ_CACHE_VIEW_CNT       2
71 #endif
72 
73 
74 #ifndef NJ_MAX_RESULT_LEN
75 #define NJ_MAX_RESULT_LEN  50
76 #endif
77 
78 #ifndef NJ_MAX_LEN
79 #define NJ_MAX_LEN          50
80 #endif
81 
82 #ifndef NJ_MAX_KEYWORD
83 #define NJ_MAX_KEYWORD (NJ_MAX_RESULT_LEN + NJ_TERM_LEN)
84 #endif
85 
86 #ifndef NJ_MAX_PHRASE
87 #define NJ_MAX_PHRASE       NJ_MAX_LEN
88 #endif
89 
90 #ifndef NJ_MAX_PHR_CONNECT
91 #define NJ_MAX_PHR_CONNECT      5
92 #endif
93 
94 #ifndef NJ_MAX_USER_LEN
95 #define NJ_MAX_USER_LEN         50
96 #endif
97 
98 #ifndef NJ_MAX_USER_KOUHO_LEN
99 #define NJ_MAX_USER_KOUHO_LEN   50
100 #endif
101 
102 #ifndef NJ_MAX_USER_COUNT
103 #define NJ_MAX_USER_COUNT       100
104 #endif
105 
106 #define NJ_USER_QUE_SIZE        (((NJ_MAX_USER_LEN + NJ_MAX_USER_KOUHO_LEN) * sizeof(NJ_CHAR)) + 5)
107 #define NJ_USER_DIC_SIZE        ((NJ_USER_QUE_SIZE + NJ_INDEX_SIZE + NJ_INDEX_SIZE) * NJ_MAX_USER_COUNT + NJ_INDEX_SIZE  + NJ_INDEX_SIZE + NJ_LEARN_DIC_HEADER_SIZE + 4)
108 
109 typedef NJ_UINT8 * NJ_DIC_HANDLE;
110 
111 typedef struct {
112     NJ_UINT16 base;
113     NJ_UINT16 high;
114 } NJ_DIC_FREQ;
115 
116 typedef struct {
117     NJ_UINT32  current;
118     NJ_UINT32  top;
119     NJ_UINT32  bottom;
120     NJ_UINT8  *node;
121     NJ_UINT8  *now;
122     NJ_UINT16  idx_no;
123 } NJ_CACHE_INFO;
124 
125 typedef struct {
126     NJ_UINT8      statusFlg;
127 #define NJ_STATUSFLG_CACHEOVER ((NJ_UINT8)0x01)
128 #define NJ_STATUSFLG_AIMAI     ((NJ_UINT8)0x02)
129 #define NJ_STATUSFLG_HINDO     ((NJ_UINT8)0x04)
130     NJ_UINT8      viewCnt;
131     NJ_UINT16     keyPtr[NJ_MAX_KEYWORD];
132     NJ_CACHE_INFO storebuff[NJ_SEARCH_CACHE_SIZE];
133 } NJ_SEARCH_CACHE;
134 
135 #define NJ_GET_CACHEOVER_FROM_SCACHE(s) ((s)->statusFlg & NJ_STATUSFLG_CACHEOVER)
136 #define NJ_GET_AIMAI_FROM_SCACHE(s)     ((s)->statusFlg & NJ_STATUSFLG_AIMAI)
137 #define NJ_SET_CACHEOVER_TO_SCACHE(s)   ((s)->statusFlg |= NJ_STATUSFLG_CACHEOVER)
138 #define NJ_SET_AIMAI_TO_SCACHE(s)       ((s)->statusFlg |= NJ_STATUSFLG_AIMAI)
139 #define NJ_UNSET_CACHEOVER_TO_SCACHE(s) ((s)->statusFlg &= ~NJ_STATUSFLG_CACHEOVER)
140 #define NJ_UNSET_AIMAI_TO_SCACHE(s)     ((s)->statusFlg &= ~NJ_STATUSFLG_AIMAI)
141 
142 
143 typedef struct {
144     NJ_UINT8           type;
145 #define NJ_DIC_H_TYPE_NORMAL   0x00
146     NJ_UINT8           limit;
147 
148     NJ_DIC_HANDLE       handle;
149 
150 #define NJ_MODE_TYPE_MAX  1
151 
152     NJ_DIC_FREQ         dic_freq[NJ_MODE_TYPE_MAX];
153 #define NJ_MODE_TYPE_HENKAN  0
154 
155     NJ_SEARCH_CACHE *   srhCache;
156 } NJ_DIC_INFO;
157 
158 
159 typedef struct {
160     NJ_DIC_INFO   dic[NJ_MAX_DIC];
161     NJ_DIC_HANDLE  rHandle[NJ_MODE_TYPE_MAX];
162 
163 
164     NJ_UINT16           mode;
165 #define NJ_CACHE_MODE_NONE          0x0000
166 #define NJ_CACHE_MODE_VALID         0x0001
167 
168 
169     NJ_CHAR             keyword[NJ_MAX_KEYWORD];
170 } NJ_DIC_SET;
171 
172 typedef struct {
173     NJ_UINT16  charset_count;
174     NJ_CHAR    *from[NJ_MAX_CHARSET];
175     NJ_CHAR    *to[NJ_MAX_CHARSET];
176 } NJ_CHARSET;
177 
178 
179 typedef struct {
180 
181     NJ_UINT8 operation;
182 #define NJ_CUR_OP_COMP      0
183 #define NJ_CUR_OP_FORE      1
184 #define NJ_CUR_OP_LINK      2
185 
186     NJ_UINT8 mode;
187 #define NJ_CUR_MODE_FREQ    0
188 #define NJ_CUR_MODE_YOMI    1
189 
190     NJ_DIC_SET *ds;
191 
192     struct {
193         NJ_UINT8 *fore;
194         NJ_UINT16 foreSize;
195         NJ_UINT16 foreFlag;
196         NJ_UINT8 *rear;
197         NJ_UINT16 rearSize;
198         NJ_UINT16 rearFlag;
199         NJ_UINT8 *yominasi_fore;
200     } hinsi;
201 
202     NJ_CHAR  *yomi;
203     NJ_UINT16 ylen;
204     NJ_UINT16 yclen;
205     NJ_CHAR  *kanji;
206 
207     NJ_CHARSET *charset;
208 
209 } NJ_SEARCH_CONDITION;
210 
211 typedef struct {
212     NJ_DIC_HANDLE  handle;
213     NJ_UINT32      current;
214     NJ_UINT32      top;
215     NJ_UINT32      bottom;
216     NJ_UINT32      relation[NJ_MAX_PHR_CONNECT];
217     NJ_UINT8       current_cache;
218     NJ_UINT8       current_info;
219     NJ_UINT8       status;
220     NJ_UINT8       type;
221 } NJ_SEARCH_LOCATION;
222 
223 typedef struct {
224     NJ_HINDO           cache_freq;
225     NJ_DIC_FREQ        dic_freq;
226     NJ_SEARCH_LOCATION loct;
227 } NJ_SEARCH_LOCATION_SET;
228 
229 typedef struct {
230     NJ_SEARCH_CONDITION cond;
231     NJ_SEARCH_LOCATION_SET loctset[NJ_MAX_DIC];
232 } NJ_CURSOR;
233 
234 
235 typedef struct {
236     NJ_UINT8 hinsi_group;
237 #define NJ_HINSI_MEISI          0
238 #define NJ_HINSI_JINMEI         1
239 #define NJ_HINSI_MEISI_NO_CONJ  2
240 #define NJ_HINSI_CHIMEI         2
241 #define NJ_HINSI_KIGOU          3
242 
243     NJ_CHAR  yomi[NJ_MAX_LEN + NJ_TERM_LEN];
244     NJ_CHAR  kouho[NJ_MAX_RESULT_LEN + NJ_TERM_LEN];
245 
246 
247     struct {
248         NJ_UINT16  yomi_len;
249         NJ_UINT16  kouho_len;
250         NJ_UINT32  hinsi;
251         NJ_UINT32  attr;
252         NJ_INT16   freq;
253     } stem;
254 
255 
256     struct {
257         NJ_UINT16  yomi_len;
258         NJ_UINT16  kouho_len;
259         NJ_UINT32  hinsi;
260         NJ_INT16   freq;
261     } fzk;
262 
263     NJ_INT16   connect;
264 
265 } NJ_WORD_INFO;
266 
267 typedef struct {
268     NJ_CHAR  *yomi;
269 
270 
271     struct NJ_STEM {
272         NJ_UINT16  info1;
273         NJ_UINT16  info2;
274         NJ_HINDO   hindo;
275         NJ_SEARCH_LOCATION loc;
276         NJ_UINT8   type;
277     } stem;
278 
279 
280     struct NJ_FZK {
281         NJ_UINT16  info1;
282         NJ_UINT16  info2;
283         NJ_HINDO   hindo;
284     } fzk;
285 } NJ_WORD;
286 
287 #define NJ_GET_FPOS_FROM_STEM(s) ((NJ_UINT16)((s)->stem.info1 >> 7))
288 #define NJ_GET_BPOS_FROM_STEM(s) ((NJ_UINT16)((s)->stem.info2 >> 7))
289 
290 
291 #define NJ_SET_FPOS_TO_STEM(s,v) ((s)->stem.info1 = ((s)->stem.info1 & 0x007F) | (NJ_UINT16)((v) << 7))
292 #define NJ_GET_YLEN_FROM_STEM(s) ((NJ_UINT8)((s)->stem.info1 & 0x7F))
293 #define NJ_GET_KLEN_FROM_STEM(s) ((NJ_UINT8)((s)->stem.info2 & 0x7F))
294 #define NJ_SET_YLEN_TO_STEM(s,v) ((s)->stem.info1 = ((s)->stem.info1 & 0xFF80) | (NJ_UINT16)((v) & 0x7F))
295 #define NJ_SET_BPOS_TO_STEM(s,v) ((s)->stem.info2 = ((s)->stem.info2 & 0x007F) | (NJ_UINT16)((v) << 7))
296 #define NJ_SET_KLEN_TO_STEM(s,v) ((s)->stem.info2 = ((s)->stem.info2 & 0xFF80) | (NJ_UINT16)((v) & 0x7F))
297 
298 #define NJ_GET_YLEN_FROM_FZK(f) ((NJ_UINT8)((f)->fzk.info1 & 0x7F))
299 #define NJ_GET_BPOS_FROM_FZK(f) ((NJ_UINT16)((f)->fzk.info2 >> 7))
300 
301 typedef struct {
302 
303     NJ_UINT16 operation_id;
304 #define NJ_OP_MASK          0x000f
305 #define NJ_GET_RESULT_OP(id) ((id) & NJ_OP_MASK)
306 #define NJ_OP_SEARCH        0x0000
307 
308 #define NJ_FUNC_MASK        0x00f0
309 #define NJ_GET_RESULT_FUNC(id) ((id) & NJ_FUNC_MASK)
310 #define NJ_FUNC_SEARCH              0x0000
311 
312 #define NJ_DIC_MASK                 0xf000
313 #define NJ_GET_RESULT_DIC(id) ((id) & 0xF000)
314 #define NJ_DIC_STATIC               0x1000
315 #define NJ_DIC_CUSTOMIZE            0x2000
316 #define NJ_DIC_LEARN                0x3000
317 #define NJ_DIC_USER                 0x4000
318 
319 
320     NJ_WORD word;
321 } NJ_RESULT;
322 
323 typedef struct {
324     NJ_UINT16  mode;
325 #define NJ_DEFAULT_MODE (NJ_NO_RENBUN|NJ_NO_TANBUN|NJ_RELATION_ON|NJ_YOMINASI_ON)
326     NJ_UINT16  forecast_learn_limit;
327 #define NJ_DEFAULT_FORECAST_LEARN_LIMIT 30
328     NJ_UINT16  forecast_limit;
329 #define NJ_DEFAULT_FORECAST_LIMIT 100
330     NJ_UINT8   char_min;
331 #define NJ_DEFAULT_CHAR_MIN 0
332     NJ_UINT8   char_max;
333 #define NJ_DEFAULT_CHAR_MAX NJ_MAX_LEN
334 } NJ_ANALYZE_OPTION;
335 
336 #define NJ_STATE_MAX_FREQ  1000
337 #define NJ_STATE_MIN_FREQ     0
338 
339 #include "njx_lib.h"
340 
341 #define NJ_EXTERN extern
342 
343 NJ_EXTERN NJ_INT16 njx_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR  *buf, NJ_UINT16 buf_size);
344 NJ_EXTERN NJ_INT16 njx_get_candidate(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR  *buf, NJ_UINT16 buf_size);
345 NJ_EXTERN NJ_INT16 njx_search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor);
346 NJ_EXTERN NJ_INT16 njx_get_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result);
347 NJ_EXTERN NJ_INT16 njx_check_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle, NJ_UINT8 restore, NJ_UINT32 size);
348 NJ_EXTERN NJ_INT16 njx_add_word(NJ_CLASS *iwnn, NJ_WORD_INFO *word, NJ_UINT8 type, NJ_UINT8 connect);
349 NJ_EXTERN NJ_INT16 njx_delete_word(NJ_CLASS *iwnn, NJ_RESULT *result);
350 NJ_EXTERN NJ_INT16 njx_create_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle, NJ_INT8 type, NJ_UINT32 size);
351 
352 NJ_EXTERN NJ_INT16 njx_init(NJ_CLASS *iwnn);
353 NJ_EXTERN NJ_INT16 njx_select(NJ_CLASS *iwnn, NJ_RESULT *r_result);
354 
355 #endif
356