NJ_INT16 njd_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *stroke, NJ_UINT16 size) { NJ_INT16 ret = 0; NJ_UINT16 len; NJ_UINT32 dictype; if (result->word.stem.loc.handle == NULL) { return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_INVALID_RESULT); } dictype = NJ_GET_DIC_TYPE_EX(result->word.stem.loc.type, result->word.stem.loc.handle); switch (dictype) { case NJ_DIC_TYPE_JIRITSU: case NJ_DIC_TYPE_FZK: case NJ_DIC_TYPE_TANKANJI: case NJ_DIC_TYPE_STDFORE: case NJ_DIC_TYPE_CUSTOM_COMPRESS: case NJ_DIC_TYPE_FORECONV: if (GET_LOCATION_OPERATION(result->word.stem.loc.status) != NJ_CUR_OP_COMP) { ret = njd_b_get_stroke(&result->word, stroke, size); } else { len = NJ_GET_YLEN_FROM_STEM(&result->word); if (size < ((len + NJ_TERM_LEN) * sizeof(NJ_CHAR))) { return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_BUFFER_NOT_ENOUGH); } if (len == 0) { return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_INVALID_RESULT); } nj_strncpy(stroke, result->word.yomi, len); *(stroke + len) = NJ_CHAR_NUL; return len; } break; case NJ_DIC_TYPE_USER: case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: ret = njd_l_get_stroke(iwnn, &result->word, stroke, size); break; case NJ_DIC_TYPE_YOMINASHI: ret = njd_f_get_stroke(&result->word, stroke, size); break; default: return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_DIC_TYPE_INVALID); } if (ret == 0) { return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_INVALID_RESULT); } return ret; }
NJ_INT16 njd_f_get_word(NJ_SEARCH_LOCATION_SET *loctset, NJ_WORD *word) { NJ_UINT8 *data; NJ_CHAR stroke[NJ_MAX_LEN + NJ_TERM_LEN]; NJ_INT16 yomilen, kouholen; if (GET_LOCATION_STATUS(loctset->loct.status) == NJ_ST_SEARCH_END) { return 0; } data = STEM_AREA_TOP_ADDR(loctset->loct.handle) + loctset->loct.current; NJ_SET_YLEN_TO_STEM(word, 1); word->stem.loc = loctset->loct; yomilen = njd_f_get_stroke(word, stroke, sizeof(stroke)); if (yomilen <= 0) { return NJ_SET_ERR_VAL(NJ_FUNC_NJD_F_GET_WORD, NJ_ERR_INVALID_RESULT); } word->stem.info1 = yomilen; word->stem.info1 |= (NJ_UINT16)(DATA_FHINSI(data) << HINSI_OFFSET); word->stem.info2 = (NJ_UINT16)(DATA_BHINSI(data) << HINSI_OFFSET); kouholen = (NJ_UINT16)DATA_CANDIDATE_SIZE(data)/sizeof(NJ_CHAR); if (kouholen == 0) { kouholen = yomilen; } word->stem.info2 |= kouholen; word->stem.hindo = CALCULATE_HINDO(DATA_HINDO(data), loctset->dic_freq.base, loctset->dic_freq.high, YOMINASI_DIC_FREQ_DIV); word->stem.type = 0; return 1; }