Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright (C) 2008,2009  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