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
22typedef signed char    NJ_INT8;
23typedef unsigned char  NJ_UINT8;
24typedef signed short   NJ_INT16;
25typedef unsigned short NJ_UINT16;
26typedef signed long    NJ_INT32;
27typedef unsigned long  NJ_UINT32;
28
29typedef 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
41typedef 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
51typedef 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
109typedef NJ_UINT8 * NJ_DIC_HANDLE;
110
111typedef struct {
112    NJ_UINT16 base;
113    NJ_UINT16 high;
114} NJ_DIC_FREQ;
115
116typedef 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
125typedef 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
143typedef 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
159typedef 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
172typedef 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
179typedef 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
211typedef 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
223typedef struct {
224    NJ_HINDO           cache_freq;
225    NJ_DIC_FREQ        dic_freq;
226    NJ_SEARCH_LOCATION loct;
227} NJ_SEARCH_LOCATION_SET;
228
229typedef struct {
230    NJ_SEARCH_CONDITION cond;
231    NJ_SEARCH_LOCATION_SET loctset[NJ_MAX_DIC];
232} NJ_CURSOR;
233
234
235typedef 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
267typedef 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
301typedef 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
323typedef 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
343NJ_EXTERN NJ_INT16 njx_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR  *buf, NJ_UINT16 buf_size);
344NJ_EXTERN NJ_INT16 njx_get_candidate(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR  *buf, NJ_UINT16 buf_size);
345NJ_EXTERN NJ_INT16 njx_search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor);
346NJ_EXTERN NJ_INT16 njx_get_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result);
347NJ_EXTERN NJ_INT16 njx_check_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle, NJ_UINT8 restore, NJ_UINT32 size);
348NJ_EXTERN NJ_INT16 njx_add_word(NJ_CLASS *iwnn, NJ_WORD_INFO *word, NJ_UINT8 type, NJ_UINT8 connect);
349NJ_EXTERN NJ_INT16 njx_delete_word(NJ_CLASS *iwnn, NJ_RESULT *result);
350NJ_EXTERN NJ_INT16 njx_create_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle, NJ_INT8 type, NJ_UINT32 size);
351
352NJ_EXTERN NJ_INT16 njx_init(NJ_CLASS *iwnn);
353NJ_EXTERN NJ_INT16 njx_select(NJ_CLASS *iwnn, NJ_RESULT *r_result);
354
355#endif
356