1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_lib.h" 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_err.h" 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_ext.h" 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_dic.h" 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "njd.h" 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define NJ_DIC_UNCOMP_EXT_HEADER_SIZE 0x002C 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define CREATE_DIC_TYPE_USER 0 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define GET_HYOKI_INDEX_OFFSET(cnt) \ 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_LEARN_DIC_HEADER_SIZE + NJ_INDEX_SIZE * ((cnt)+1)) 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define GET_DATA_AREA_OFFSET(cnt) \ 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_LEARN_DIC_HEADER_SIZE + NJ_INDEX_SIZE * ((cnt)+1) * 2) 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define GET_EXT_DATA_AREA_OFFSET(cnt) \ 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_LEARN_DIC_HEADER_SIZE + NJ_INDEX_SIZE * ((cnt)+1) * 2 + LEARN_DIC_QUE_SIZE * (cnt)) 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define MIN_SIZE_OF_USER_DIC \ 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_LEARN_DIC_HEADER_SIZE + NJ_USER_QUE_SIZE + 2 * (NJ_INDEX_SIZE * (1+1)) + 4) 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define GET_MAX_WORD_NUM_IN_USER_DIC(size) \ 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (((size) - NJ_LEARN_DIC_HEADER_SIZE - (2 * NJ_INDEX_SIZE) - 4) \ 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project / (NJ_USER_QUE_SIZE + 2 * NJ_INDEX_SIZE)) 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 check_search_cursor(NJ_CLASS *iwnn, NJ_CURSOR *cursor); 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_UINT8 comp_flg, NJ_UINT8 *exit_flag); 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic void set_operation_id(NJ_SEARCH_LOCATION *dicinfo, NJ_UINT8 reverse, NJ_RESULT *result); 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 get_word_and_search_next_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result, NJ_UINT8 comp_flg); 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 njd_check_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle); 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 check_search_cursor(NJ_CLASS *iwnn, NJ_CURSOR *cursor) { 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 i; 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_DIC_INFO *dicinfo; 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SEARCH_LOCATION_SET *loctset; 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.ds == NULL) { 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_DIC_NULL); 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (i = 0; i < NJ_MAX_DIC; i++) { 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset = &(cursor->loctset[i]); 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dicinfo = &(cursor->cond.ds->dic[i]); 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_init_search_location_set(loctset); 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (dicinfo->handle != NULL) { 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ( 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (dicinfo->dic_freq[NJ_MODE_TYPE_HENKAN].high > DIC_FREQ_HIGH) ) { 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_DIC_FREQ_INVALID); 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.handle = dicinfo->handle; 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.type = dicinfo->type; 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.current_info = 0x10; 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.status = NJ_ST_SEARCH_NO_INIT; 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->dic_freq = dicinfo->dic_freq[NJ_MODE_TYPE_HENKAN]; 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.yomi == NULL) { 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_YOMI_NULL); 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.ylen > NJ_MAX_LEN) { 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_YOMI_TOO_LONG); 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.operation == NJ_CUR_OP_LINK) { 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if (cursor->cond.kanji != NULL) { 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (nj_strlen(cursor->cond.kanji) > NJ_MAX_RESULT_LEN) { 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_CANDIDATE_TOO_LONG); 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (cursor->cond.operation) { 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_CUR_OP_COMP: 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_CUR_OP_FORE: 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_CUR_OP_LINK: 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_OPERATION); 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (cursor->cond.mode) { 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_CUR_MODE_FREQ: 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_CUR_MODE_YOMI: 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_MODE); 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_UINT8 comp_flg, 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 *exit_flag) { 125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 dic_type; 126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 i; 127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret = 0; 128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 flag = 0; 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SEARCH_LOCATION_SET *loctset; 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *exit_flag = 1; 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (i = 0; i < NJ_MAX_DIC; i++) { 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset = &(cursor->loctset[i]); 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (loctset->loct.handle == NULL) { 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project continue; 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = NJ_GET_DIC_TYPE_EX(loctset->loct.type, loctset->loct.handle); 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#ifdef IWNN_ERR_CHECK 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (iwnn->err_check_flg == 12) { 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = 0x11111111; 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#endif 146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dic_type) { 147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_search_word(&cursor->cond, loctset); 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_search_word(iwnn, &cursor->cond, loctset, comp_flg); 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_f_search_word(&cursor->cond, loctset); 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_SEARCH_WORD, NJ_ERR_DIC_TYPE_INVALID); 166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret == 0) { 171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((GET_LOCATION_STATUS(loctset->loct.status) == NJ_ST_SEARCH_END) 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project && (*exit_flag == 1)) { 173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *exit_flag = 0; 174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.status = NJ_ST_SEARCH_END; 177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project flag = 1; 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *exit_flag = 0; 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return flag; 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 get_word_and_search_next_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result, 187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 comp_flg) { 188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret = -1; 189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT32 i, next, first; 190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_WORD tmp_word; 191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_RESULT tmp_result; 192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR tmp_stroke[NJ_MAX_LEN + NJ_TERM_LEN]; 193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR result_stroke[NJ_MAX_LEN + NJ_TERM_LEN]; 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT32 j, max_len = 0; 195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 dic_type; 196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SEARCH_LOCATION_SET *loctset; 197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project next = -1; 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project first= 0; 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_init_word(&tmp_word); 203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result->word = tmp_word; 205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tmp_result.word = tmp_word; 206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (i = 0; i < NJ_MAX_DIC; i++) { 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset = &(cursor->loctset[i]); 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((loctset->loct.handle == NULL) || 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (GET_LOCATION_STATUS(loctset->loct.status) == NJ_ST_SEARCH_END) || 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (GET_LOCATION_STATUS(loctset->loct.status) == NJ_ST_SEARCH_END_EXT)) { 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project continue; 213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = NJ_GET_DIC_TYPE_EX(loctset->loct.type, loctset->loct.handle); 216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dic_type) { 218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tmp_word.yomi = cursor->cond.yomi; 225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tmp_word.stem.info1 = cursor->cond.ylen; 226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tmp_result.word.yomi = cursor->cond.yomi; 227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project tmp_result.word.stem.info1 = cursor->cond.ylen; 228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.status |= SET_LOCATION_OPERATION(cursor->cond.operation); 234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.mode == NJ_CUR_MODE_FREQ) { 235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((cursor->cond.ds->mode & (NJ_CACHE_MODE_VALID)) && 236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (cursor->cond.ds->dic[i].srhCache != NULL) && 237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_GET_AIMAI_FROM_SCACHE(cursor->cond.ds->dic[i].srhCache)) && 238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (cursor->cond.operation == NJ_CUR_OP_FORE)) { 239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project first = 1; 240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_word_data(iwnn, cursor->cond.ds, loctset, (NJ_UINT16)i, &tmp_result.word); 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_stroke(iwnn, &tmp_result, tmp_stroke, sizeof(tmp_stroke)); 247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret <= 0) { 248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((ret == 0) || (NJ_GET_ERR_CODE(ret) == NJ_ERR_BUFFER_NOT_ENOUGH)) { 249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_GET_WORD_AND_SEARCH_NEXT_WORD, NJ_ERR_INVALID_RESULT); 250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (j = 0; j < cursor->cond.ylen; j++) { 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.yomi[j] != tmp_stroke[j]) { 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dic_type) { 261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_search_word(&cursor->cond, loctset); 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_search_word(iwnn, &cursor->cond, loctset, comp_flg); 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_GET_WORD_AND_SEARCH_NEXT_WORD, NJ_ERR_DIC_TYPE_INVALID); 277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_word_data(iwnn, cursor->cond.ds, loctset, (NJ_UINT16)i, &tmp_result.word); 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project j = cursor->cond.ylen; 288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((j > max_len) || 291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((j == max_len) && (loctset->cache_freq > result->word.stem.hindo)) || 292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (next == -1)) { 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project set_operation_id(&(loctset->loct), 0, result); 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result->word = tmp_result.word; 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project next = i; 299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project max_len = j; 300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_word_data(iwnn, cursor->cond.ds, loctset, (NJ_UINT16)i, &(tmp_result.word)); 305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_stroke(iwnn, &tmp_result, tmp_stroke, sizeof(tmp_stroke)); 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret <= 0) { 312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((ret == 0) || (NJ_GET_ERR_CODE(ret) == NJ_ERR_BUFFER_NOT_ENOUGH)) { 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_GET_WORD_AND_SEARCH_NEXT_WORD, NJ_ERR_INVALID_RESULT); 314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((next == -1) || (nj_strcmp(result_stroke, tmp_stroke) > 0)) { 319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project set_operation_id(&(loctset->loct), 0, result); 321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result->word = tmp_result.word; 323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project next = i; 325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project nj_strcpy(result_stroke, tmp_stroke); 326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (next == -1) { 332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset = &(cursor->loctset[next]); 336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((!first) || 337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((loctset->loct.handle != NULL) && 338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (cursor->cond.ds->dic[next].srhCache == NULL))) { 339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = NJ_GET_DIC_TYPE_EX(loctset->loct.type, loctset->loct.handle); 340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 342053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dic_type) { 343053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_search_word(&cursor->cond, loctset); 350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_search_word(iwnn, &cursor->cond, loctset, comp_flg); 355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_f_search_word(&cursor->cond, loctset); 359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_GET_WORD_AND_SEARCH_NEXT_WORD, NJ_ERR_DIC_TYPE_INVALID); 363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret < 0) { 367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 1; 370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_get_word_data(NJ_CLASS *iwnn, NJ_DIC_SET *dicset, NJ_SEARCH_LOCATION_SET *loctset, NJ_UINT16 dic_idx, NJ_WORD *word) { 373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret = 0; 374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 dic_type; 375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (GET_LOCATION_STATUS(loctset->loct.status) == NJ_ST_SEARCH_END) { 379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (loctset->loct.handle == NULL) { 383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_WORD_DATA, NJ_ERR_DIC_TYPE_INVALID); 384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dic_type = NJ_GET_DIC_TYPE_EX(loctset->loct.type, loctset->loct.handle); 387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dic_type) { 389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_get_word(loctset, word); 396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 400053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_get_word(iwnn, loctset, word); 401053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_f_get_word(loctset, word); 405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_WORD_DATA, NJ_ERR_DIC_TYPE_INVALID); 409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic void set_operation_id(NJ_SEARCH_LOCATION *dicinfo, NJ_UINT8 reverse, NJ_RESULT *result) { 414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 dictype; 415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 type; 416053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 417053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (dicinfo->handle == NULL) { 418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 419053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_DIC_STATIC; 420053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return; 421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 422053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 423053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_GET_DIC_TYPE_EX(NJ_GET_DIC_INFO(dicinfo), dicinfo->handle); 424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (type) { 427053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 428053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 429053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 430053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 432053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_DIC_STATIC; 435053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 436053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 437053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_DIC_CUSTOMIZE; 440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_DIC_USER; 444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 445053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 446053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 448053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_DIC_STATIC; 449053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 450053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 452053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project result->operation_id = 453053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (NJ_UINT16)((NJ_UINT16)NJ_OP_SEARCH | (NJ_UINT16)NJ_FUNC_SEARCH | dictype); 454053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 455053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 456053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 njd_search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_UINT8 comp_flg, 457053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 *exit_flag) { 458053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret; 459053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 460053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 461053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = check_search_cursor(iwnn, cursor); 462053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret != 0) { 463053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 464053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 465053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 466053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return search_word(iwnn, cursor, comp_flg, exit_flag); 467053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 468053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 469053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 njd_get_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result, 470053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 comp_flg) { 471053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 472053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret; 473053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 474053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = get_word_and_search_next_word(iwnn, cursor, result, comp_flg); 476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 477053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 478053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 480053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_get_stroke(NJ_CLASS *iwnn, NJ_RESULT *result, NJ_CHAR *stroke, NJ_UINT16 size) { 481053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret = 0; 482053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 len; 483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 dictype; 484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (result->word.stem.loc.handle == NULL) { 487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_INVALID_RESULT); 488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_GET_DIC_TYPE_EX(result->word.stem.loc.type, result->word.stem.loc.handle); 491053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dictype) { 493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 495053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 496053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 497053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 498053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (GET_LOCATION_OPERATION(result->word.stem.loc.status) != NJ_CUR_OP_COMP) { 500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_get_stroke(&result->word, stroke, size); 501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 502053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project len = NJ_GET_YLEN_FROM_STEM(&result->word); 503053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 504053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (size < ((len + NJ_TERM_LEN) * sizeof(NJ_CHAR))) { 505053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, 506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_ERR_BUFFER_NOT_ENOUGH); 507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (len == 0) { 509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, 510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_ERR_INVALID_RESULT); 511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project nj_strncpy(stroke, result->word.yomi, len); 513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *(stroke + len) = NJ_CHAR_NUL; 514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return len; 515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 518053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_get_stroke(iwnn, &result->word, stroke, size); 521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_f_get_stroke(&result->word, stroke, size); 525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 528053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_DIC_TYPE_INVALID); 529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret == 0) { 532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_STROKE, NJ_ERR_INVALID_RESULT); 533053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_get_candidate(NJ_CLASS *iwnn, NJ_RESULT *result, 539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR *candidate, NJ_UINT16 size) { 540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret = 0; 541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 dictype; 542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 544053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (result->word.stem.loc.handle == NULL) { 545053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_CANDIDATE, NJ_ERR_INVALID_RESULT); 546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 547053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dictype = NJ_GET_DIC_TYPE_EX(result->word.stem.loc.type, result->word.stem.loc.handle); 549053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 550053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (dictype) { 551053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FORECONV: 557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_b_get_candidate(&result->word, candidate, size); 558053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 559053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 560053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_INCOMPRESS: 562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_l_get_candidate(iwnn, &result->word, candidate, size); 563053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 564053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 566053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_f_get_candidate(&result->word, candidate, size); 567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 569053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 570053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_CANDIDATE, NJ_ERR_DIC_TYPE_INVALID); 571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret == 0) { 574053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_GET_CANDIDATE, NJ_ERR_INVALID_RESULT); 575053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectstatic NJ_INT16 njd_check_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle) { 581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 *addr; 582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 datasize, extsize; 583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 version; 584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT32 type; 585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr = handle; 588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (NJ_INT32_READ(addr) != NJ_DIC_IDENTIFIER) { 591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 593053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 594053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 595053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 596053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project version = NJ_INT32_READ(addr); 597053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((version != NJ_DIC_VERSION1) && (version != NJ_DIC_VERSION2) && 598053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (version != NJ_DIC_VERSION2_1) && (version != NJ_DIC_VERSION3)) { 599053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 600053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 601053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project type = NJ_INT32_READ(addr); 605053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 606053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 607053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 608053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project datasize = NJ_INT32_READ(addr); 609053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 610053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 611053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 612053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project extsize = NJ_INT32_READ(addr); 613053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 614053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 615053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (NJ_INT32_READ(addr) > (NJ_MAX_LEN * sizeof(NJ_CHAR))) { 617053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 618053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 619053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += sizeof(NJ_UINT32); 620053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 621053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 622053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (NJ_INT32_READ(addr) > (NJ_MAX_RESULT_LEN * sizeof(NJ_CHAR))) { 623053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 624053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 625053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 626053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 627053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project addr += (extsize + datasize); 628053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (NJ_INT32_READ(addr) != NJ_DIC_IDENTIFIER) { 629053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 630053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 631053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 632053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 633053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (type) { 634053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 635053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_JIRITSU: 636053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_FZK: 637053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_TANKANJI: 638053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_CUSTOM_COMPRESS: 639053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_STDFORE: 640053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 641053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (version != (NJ_UINT32)NJ_DIC_VERSION2) { 642053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 643053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 644053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 645053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 646053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_RULE: 647053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 648053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (version != (NJ_UINT32)NJ_DIC_VERSION2_1) { 649053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 650053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 651053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 652053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 653053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_YOMINASHI: 654053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 655053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (version != (NJ_UINT32)NJ_DIC_VERSION1) { 656053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 657053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 658053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 659053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 660053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_DIC_TYPE_USER: 661053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 662053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (version != (NJ_UINT32)NJ_DIC_VERSION2) { 663053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_FORMAT_INVALID); 664053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 665053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return njd_l_check_dic(iwnn, handle); 666053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 667053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 668053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJD_CHECK_DIC, NJ_ERR_DIC_TYPE_INVALID); 669053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 670053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 671053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 672053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 673053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 674053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_EXTERN NJ_INT16 njx_search_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor) { 675053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 676053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_SEARCH_CACHE *pCache; 677053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_CHAR *p_yomi, *p_key; 678053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 initst, inited; 679053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 clrcnt, diccnt; 680053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 kw_len; 681053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 cacheOverKeyPtr; 682053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 683053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 exit_flag; 684053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT8 cnt; 685053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_DIC_HANDLE dhdl; 686053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_PREVIOUS_SELECTION_INFO *prev_info = &(iwnn->previous_selection); 687053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 688053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 689053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (iwnn == NULL) { 690053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SEARCH_WORD, NJ_ERR_PARAM_ENV_NULL); 691053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 692053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor == NULL) { 693053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_SEARCH_WORD, NJ_ERR_PARAM_CURSOR_NULL); 694053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 695053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 696053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 697053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.fore = NULL; 698053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.foreSize = 0; 699053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.foreFlag = 0; 700053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.rear = NULL; 701053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.rearSize = 0; 702053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.rearFlag = 0; 703053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 704053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 705053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.yomi == NULL) { 706053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_YOMI_NULL); 707053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 708053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.ylen = nj_strlen(cursor->cond.yomi); 709053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.yclen = nj_charlen(cursor->cond.yomi); 710053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 711053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 712053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor->cond.ds == NULL) { 713053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_PARAM_DIC_NULL); 714053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 715053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 716053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 717053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.ds->mode = NJ_CACHE_MODE_VALID; 718053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 719053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project p_yomi = cursor->cond.yomi; 720053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project p_key = cursor->cond.ds->keyword; 721053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 722053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (clrcnt = 0; clrcnt < cursor->cond.yclen; clrcnt++) { 723053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (nj_charncmp(p_yomi, p_key, 1) != 0) { 724053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 725053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 726053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project p_yomi += NJ_CHAR_LEN(p_yomi); 727053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project p_key += NJ_CHAR_LEN(p_key); 728053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 729053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (clrcnt != 0) { 730053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project initst = clrcnt + 1; 731053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 732053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project initst = 0; 733053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 734053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 735053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project kw_len = nj_charlen(cursor->cond.ds->keyword); 736053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (kw_len >= cursor->cond.yclen) { 737053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project inited = kw_len + 1; 738053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 739053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project inited = cursor->cond.yclen + 1; 740053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 741053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 742053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (diccnt = 0; diccnt < NJ_MAX_DIC; diccnt++) { 743053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project pCache = cursor->cond.ds->dic[diccnt].srhCache; 744053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (pCache != NULL) { 745053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 746053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (NJ_GET_CACHEOVER_FROM_SCACHE(pCache)) { 747053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 748053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (cacheOverKeyPtr = 0; cacheOverKeyPtr < kw_len; cacheOverKeyPtr++) { 749053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (pCache->keyPtr[cacheOverKeyPtr] == pCache->keyPtr[cacheOverKeyPtr + 1] ) { 750053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 751053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 752053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 753053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cacheOverKeyPtr++; 754053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 755053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 756053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cacheOverKeyPtr < initst) { 757053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clrcnt = cacheOverKeyPtr; 758053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 759053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project clrcnt = initst; 760053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 761053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (; clrcnt < inited; clrcnt++) { 762053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project pCache->keyPtr[clrcnt] = 0x0000; 763053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 764053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 765053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (clrcnt = 1; clrcnt < inited; clrcnt++ ) { 766053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((pCache->keyPtr[clrcnt - 1] > pCache->keyPtr[clrcnt]) && 767053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (pCache->keyPtr[clrcnt] != 0)) { 768053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_CACHE_BROKEN); 769053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 770053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 771053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UNSET_CACHEOVER_TO_SCACHE(pCache); 772053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 773053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (clrcnt = initst; clrcnt < inited; clrcnt++) { 774053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project pCache->keyPtr[clrcnt] = 0x0000; 775053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 776053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 777053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (clrcnt = 1; clrcnt < inited; clrcnt++ ) { 778053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((pCache->keyPtr[clrcnt - 1] > pCache->keyPtr[clrcnt]) && 779053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (pCache->keyPtr[clrcnt] != 0)) { 780053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_CACHE_BROKEN); 781053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 782053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 783053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 784053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 785053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 786053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 787053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 788053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project nj_strcpy(cursor->cond.ds->keyword, cursor->cond.yomi); 789053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 790053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (cnt = 0; cnt < NJ_MAX_DIC; cnt++) { 791053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project dhdl = cursor->cond.ds->dic[cnt].handle; 792053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 793053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (dhdl != NULL) { 794053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((cursor->cond.ds->dic[cnt].dic_freq[NJ_MODE_TYPE_HENKAN].base 795053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project > cursor->cond.ds->dic[cnt].dic_freq[NJ_MODE_TYPE_HENKAN].high)) { 796053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_CHECK_SEARCH_CURSOR, NJ_ERR_DIC_FREQ_INVALID); 797053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 798053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 799053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 800053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 801053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if( prev_info->count == 0 ) { 802053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project cursor->cond.hinsi.yominasi_fore = NULL; 803053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 804053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int prev_hinsi = prev_info->selection_data.b_hinsi; 805053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 806053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 807053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_connect(cursor->cond.ds->rHandle[NJ_MODE_TYPE_HENKAN], prev_hinsi, 808053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 0, &(cursor->cond.hinsi.yominasi_fore)); 809053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project njd_r_get_count(cursor->cond.ds->rHandle[NJ_MODE_TYPE_HENKAN], 810053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project &(cursor->cond.hinsi.foreSize), &(cursor->cond.hinsi.rearSize)); 811053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 812053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 813053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return njd_search_word(iwnn, cursor, 0, &exit_flag); 814053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 815053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 816053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 817053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_EXTERN NJ_INT16 njx_get_word(NJ_CLASS *iwnn, NJ_CURSOR *cursor, NJ_RESULT *result) { 818053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_INT16 ret; 819053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 820053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 821053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 822053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (iwnn == NULL) { 823053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_WORD, NJ_ERR_PARAM_ENV_NULL); 824053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 825053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (cursor == NULL) { 826053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_WORD, NJ_ERR_PARAM_CURSOR_NULL); 827053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 828053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (result == NULL) { 829053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_GET_WORD, NJ_ERR_PARAM_RESULT_NULL); 830053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 831053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 832053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = njd_get_word(iwnn, cursor, result, 0); 833053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 834053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 835053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 836053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 837053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 838053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 839053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_EXTERN NJ_INT16 njx_check_dic(NJ_CLASS *iwnn, NJ_DIC_HANDLE handle, NJ_UINT8 restore, NJ_UINT32 size) { 840053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 841053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 842053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (iwnn == NULL) { 843053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_CHECK_DIC, NJ_ERR_PARAM_ENV_NULL); 844053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 845053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 846053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (handle == NULL) { 847053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_CHECK_DIC, NJ_ERR_DIC_HANDLE_NULL); 848053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 849053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 850053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 851053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 852053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (size <= NJ_DIC_COMMON_HEADER_SIZE) { 853053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_CHECK_DIC, NJ_ERR_AREASIZE_INVALID); 854053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 855053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 856053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 857053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 858053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (size != (NJ_DIC_COMMON_HEADER_SIZE 859053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project + NJ_INT32_READ(handle + NJ_DIC_POS_DATA_SIZE) 860053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project + NJ_INT32_READ(handle + NJ_DIC_POS_EXT_SIZE))) { 861053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return NJ_SET_ERR_VAL(NJ_FUNC_NJ_CHECK_DIC, NJ_ERR_AREASIZE_INVALID); 862053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 863053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 864053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return njd_check_dic(iwnn, handle); 865053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 866053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 867053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_init_search_location_set(NJ_SEARCH_LOCATION_SET* loctset) 868053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 869053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 870053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->cache_freq = 0; 871053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->dic_freq.base = 0; 872053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->dic_freq.high = 0; 873053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.type = NJ_DIC_H_TYPE_NORMAL; 874053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.handle = NULL; 875053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.current_info = 0x10; 876053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.current = 0; 877053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.top = 0; 878053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.bottom = 0; 879053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.current_cache = 0; 880053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project loctset->loct.status = NJ_ST_SEARCH_NO_INIT; 881053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 882053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 1; 883053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 884053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 885053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_init_word(NJ_WORD* word) 886053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project{ 887053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 888053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->yomi = NULL; 889053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.info1 = 0; 890053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.info2 = 0; 891053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.hindo = 0; 892053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->fzk.info1 = 0; 893053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->fzk.info2 = 0; 894053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->fzk.hindo = 0; 895053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 896053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.handle = NULL; 897053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.type = NJ_DIC_H_TYPE_NORMAL; 898053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.current = 0; 899053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.top = 0; 900053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.bottom = 0; 901053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.current_cache= 0; 902053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.current_info = 0x10; 903053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project word->stem.loc.status = NJ_ST_SEARCH_NO_INIT; 904053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 905053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 1; 906053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 907