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;
}
Beispiel #2
0
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;
}