Home | History | Annotate | Download | only in engine
      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 #include "nj_lib.h"
     18 #include "nj_err.h"
     19 #include "nj_ext.h"
     20 #include "nj_dic.h"
     21 
     22 
     23 
     24 static NJ_INT16 set_previous_selection(NJ_CLASS *iwnn, NJ_RESULT *result);
     25 static NJ_INT16 set_learn_word_info(NJ_CLASS *iwnn, NJ_LEARN_WORD_INFO *lword, NJ_RESULT *result);
     26 
     27 
     28 
     29 NJ_EXTERN NJ_INT16 njx_select(NJ_CLASS *iwnn, NJ_RESULT *r_result) {
     30     NJ_INT16 ret;
     31     NJ_DIC_SET *dics;
     32 
     33 
     34     if (iwnn == NULL) {
     35 
     36         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SELECT, NJ_ERR_PARAM_ENV_NULL);
     37     }
     38     dics = &(iwnn->dic_set);
     39 
     40     if (dics->rHandle[NJ_MODE_TYPE_HENKAN] == NULL) {
     41         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SELECT, NJ_ERR_NO_RULEDIC);
     42     }
     43 
     44 
     45     if ( r_result != NULL ) {
     46 
     47         ret = set_previous_selection(iwnn, r_result);
     48         if (ret < 0) {
     49             return ret;
     50         }
     51     } else {
     52 
     53         set_previous_selection(iwnn, NULL);
     54     }
     55     return 0;
     56 }
     57 
     58 NJ_EXTERN NJ_INT16 njx_init(NJ_CLASS *iwnn) {
     59 
     60     if (iwnn == NULL) {
     61 
     62         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_INIT, NJ_ERR_PARAM_ENV_NULL);
     63     }
     64 
     65 
     66     set_previous_selection(iwnn, NULL);
     67     return 0;
     68 }
     69 
     70 NJ_EXTERN NJ_INT16 njx_get_candidate(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *buf, NJ_UINT16 buf_size) {
     71     NJ_INT16 ret;
     72 
     73 
     74     if (iwnn == NULL) {
     75 
     76         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_PARAM_ENV_NULL);
     77     }
     78     if (result == NULL) {
     79         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_PARAM_RESULT_NULL);
     80     }
     81 
     82     if ((buf == NULL) || (buf_size == 0)) {
     83         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_BUFFER_NOT_ENOUGH);
     84     }
     85 
     86     switch (NJ_GET_RESULT_OP(result->operation_id)) {
     87     case NJ_OP_SEARCH:
     88         ret = njd_get_candidate(iwnn, result, buf, buf_size);
     89         break;
     90 
     91     default:
     92 
     93         ret = NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_INVALID_RESULT);
     94         break;
     95     }
     96 
     97     return ret;
     98 }
     99 
    100 NJ_EXTERN NJ_INT16 njx_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *buf, NJ_UINT16 buf_size) {
    101     NJ_INT16 ret;
    102 
    103 
    104     if (iwnn == NULL) {
    105 
    106         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_PARAM_ENV_NULL);
    107     }
    108     if (result == NULL) {
    109         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_PARAM_RESULT_NULL);
    110     }
    111 
    112     if ((buf == NULL) || (buf_size == 0)) {
    113         return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_BUFFER_NOT_ENOUGH);
    114     }
    115 
    116     switch (NJ_GET_RESULT_OP(result->operation_id)) {
    117     case NJ_OP_SEARCH:
    118         ret = njd_get_stroke(iwnn, result, buf, buf_size);
    119         break;
    120 
    121     default:
    122 
    123         ret = NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_INVALID_RESULT);
    124         break;
    125     }
    126     return ret;
    127 }
    128 
    129 
    130 static NJ_INT16 set_previous_selection(NJ_CLASS *iwnn, NJ_RESULT *result) {
    131     NJ_INT16   ret;
    132     NJ_PREVIOUS_SELECTION_INFO *prev_info = &(iwnn->previous_selection);
    133 
    134 
    135     if (result == NULL) {
    136         prev_info->count = 0;
    137    } else {
    138         ret = set_learn_word_info(iwnn, &(prev_info->selection_data), result);
    139         if (ret < 0) {
    140 
    141             return ret;
    142         }
    143 
    144         prev_info->count = 1;
    145     }
    146 
    147     return 0;
    148 }
    149 
    150 static NJ_INT16 set_learn_word_info(NJ_CLASS *iwnn, NJ_LEARN_WORD_INFO *lword, NJ_RESULT *result)
    151 {
    152     NJ_INT16 ret;
    153     NJ_DIC_SET *dics = &(iwnn->dic_set);
    154 
    155 
    156 
    157 #if 0
    158 
    159     ret = njx_get_stroke(iwnn, result, lword->yomi, sizeof(lword->yomi));
    160     if (ret < 0) {
    161         return ret;
    162     }
    163     lword->yomi_len = (NJ_UINT8)ret;
    164     ret = njx_get_candidate(iwnn, result, lword->hyouki, sizeof(lword->hyouki));
    165     if (ret < 0) {
    166         return ret;
    167     }
    168     lword->hyouki_len = (NJ_UINT8)ret;
    169 #else
    170     lword->yomi[0] = 0x0000;
    171     lword->yomi_len = 0;
    172     lword->hyouki[0] = 0x0000;
    173     lword->hyouki_len = 0;
    174 #endif
    175 
    176 
    177     lword->f_hinsi = NJ_GET_FPOS_FROM_STEM(&(result->word));
    178     lword->stem_b_hinsi = NJ_GET_BPOS_FROM_STEM(&(result->word));
    179     lword->b_hinsi = NJ_GET_BPOS_FROM_STEM(&(result->word));
    180 
    181 
    182     ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_F);
    183     if ((ret != 0) && (lword->f_hinsi == (NJ_UINT16)ret)) {
    184         ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_F);
    185         if (ret != 0) {
    186             lword->f_hinsi = (NJ_UINT16)ret;
    187         }
    188     }
    189 
    190 
    191     ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_B);
    192     if ((ret != 0) && (lword->b_hinsi == (NJ_UINT16)ret)) {
    193         ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_B);
    194         if (ret != 0) {
    195             lword->b_hinsi = (NJ_UINT16)ret;
    196         }
    197     }
    198 
    199 
    200     ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_B);
    201     if ((ret != 0) && (lword->stem_b_hinsi == (NJ_UINT16)ret)) {
    202         ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_B);
    203         if (ret != 0) {
    204             lword->stem_b_hinsi = (NJ_UINT16)ret;
    205         }
    206     }
    207 
    208     return 0;
    209 
    210 }
    211