| /* |
| * 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; |
| |
| } |