/* * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd. * * 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. */ #include "nj_lib.h" #include "nj_err.h" #include "nj_ext.h" #include "nj_dic.h" static NJ_INT16 set_previous_selection(NJ_CLASS *iwnn, NJ_RESULT *result); static NJ_INT16 set_learn_word_info(NJ_CLASS *iwnn, NJ_LEARN_WORD_INFO *lword, NJ_RESULT *result); NJ_EXTERN NJ_INT16 njx_select(NJ_CLASS *iwnn, NJ_RESULT *r_result) { NJ_INT16 ret; NJ_DIC_SET *dics; if (iwnn == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SELECT, NJ_ERR_PARAM_ENV_NULL); } dics = &(iwnn->dic_set); if (dics->rHandle[NJ_MODE_TYPE_HENKAN] == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SELECT, NJ_ERR_NO_RULEDIC); } if ( r_result != NULL ) { ret = set_previous_selection(iwnn, r_result); if (ret < 0) { return ret; } } else { set_previous_selection(iwnn, NULL); } return 0; } NJ_EXTERN NJ_INT16 njx_init(NJ_CLASS *iwnn) { if (iwnn == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_INIT, NJ_ERR_PARAM_ENV_NULL); } set_previous_selection(iwnn, NULL); return 0; } NJ_EXTERN NJ_INT16 njx_get_candidate(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *buf, NJ_UINT16 buf_size) { NJ_INT16 ret; if (iwnn == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_PARAM_ENV_NULL); } if (result == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_PARAM_RESULT_NULL); } if ((buf == NULL) || (buf_size == 0)) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_BUFFER_NOT_ENOUGH); } switch (NJ_GET_RESULT_OP(result->operation_id)) { case NJ_OP_SEARCH: ret = njd_get_candidate(iwnn, result, buf, buf_size); break; default: ret = NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_CANDIDATE, NJ_ERR_INVALID_RESULT); break; } return ret; } NJ_EXTERN NJ_INT16 njx_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *buf, NJ_UINT16 buf_size) { NJ_INT16 ret; if (iwnn == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_PARAM_ENV_NULL); } if (result == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_PARAM_RESULT_NULL); } if ((buf == NULL) || (buf_size == 0)) { return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_BUFFER_NOT_ENOUGH); } switch (NJ_GET_RESULT_OP(result->operation_id)) { case NJ_OP_SEARCH: ret = njd_get_stroke(iwnn, result, buf, buf_size); break; default: ret = NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_STROKE, NJ_ERR_INVALID_RESULT); break; } return ret; } static NJ_INT16 set_previous_selection(NJ_CLASS *iwnn, NJ_RESULT *result) { NJ_INT16 ret; NJ_PREVIOUS_SELECTION_INFO *prev_info = &(iwnn->previous_selection); if (result == NULL) { prev_info->count = 0; } else { ret = set_learn_word_info(iwnn, &(prev_info->selection_data), result); if (ret < 0) { return ret; } prev_info->count = 1; } return 0; } static NJ_INT16 set_learn_word_info(NJ_CLASS *iwnn, NJ_LEARN_WORD_INFO *lword, NJ_RESULT *result) { NJ_INT16 ret; NJ_DIC_SET *dics = &(iwnn->dic_set); #if 0 ret = njx_get_stroke(iwnn, result, lword->yomi, sizeof(lword->yomi)); if (ret < 0) { return ret; } lword->yomi_len = (NJ_UINT8)ret; ret = njx_get_candidate(iwnn, result, lword->hyouki, sizeof(lword->hyouki)); if (ret < 0) { return ret; } lword->hyouki_len = (NJ_UINT8)ret; #else lword->yomi[0] = 0x0000; lword->yomi_len = 0; lword->hyouki[0] = 0x0000; lword->hyouki_len = 0; #endif lword->f_hinsi = NJ_GET_FPOS_FROM_STEM(&(result->word)); lword->stem_b_hinsi = NJ_GET_BPOS_FROM_STEM(&(result->word)); lword->b_hinsi = NJ_GET_BPOS_FROM_STEM(&(result->word)); ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_F); if ((ret != 0) && (lword->f_hinsi == (NJ_UINT16)ret)) { ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_F); if (ret != 0) { lword->f_hinsi = (NJ_UINT16)ret; } } ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_B); if ((ret != 0) && (lword->b_hinsi == (NJ_UINT16)ret)) { ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_B); if (ret != 0) { lword->b_hinsi = (NJ_UINT16)ret; } } ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_TANKANJI_B); if ((ret != 0) && (lword->stem_b_hinsi == (NJ_UINT16)ret)) { ret = njd_r_get_hinsi(dics->rHandle[NJ_MODE_TYPE_HENKAN], NJ_HINSI_CHIMEI_B); if (ret != 0) { lword->stem_b_hinsi = (NJ_UINT16)ret; } } return 0; }