char unicode_prev(struct unicode_parser* parser) { if (parser->current.ptr == parser->current.str) return 0; // Try to move to previous symbol parser->next = parser->current; parser->current = parser->prev; utf8_prev(&parser->prev); unicode_decode(parser); return 1; }
/** * @ingroup hanjadictionary * @brief 한자 사전에서 앞부분이 매치되는 키를 가진 엔트리를 찾는 함수 * @param table 한자 사전 object * @param key 찾을 키, UTF-8 인코딩 * @return 찾은 결과를 HanjaList object로 리턴한다. 찾은 것이 없거나 에러가 * 있으면 NULL을 리턴한다. * * @a key 값과 같거나 앞부분이 같은 키를 가진 엔트리를 검색한다. * 그리고 key를 뒤에서부터 한자씩 줄여가면서 검색을 계속한다. * 예로 들면 "삼국사기"를 검색하면 "삼국사기", "삼국사", "삼국", "삼"을 * 각각 모두 검색한다. * 리턴된 결과는 다 사용하고 나면 반드시 hanja_list_delete() 함수로 free해야 * 한다. */ HanjaList* hanja_table_match_prefix(const HanjaTable* table, const char *key) { char* p; char* newkey; HanjaList* ret = NULL; if (key == NULL || key[0] == '\0' || table == NULL) return NULL; newkey = strdup(key); if (newkey == NULL) return NULL; p = strchr(newkey, '\0'); while (newkey[0] != '\0') { hanja_table_match(table, newkey, &ret); p = utf8_prev(newkey, p); p[0] = '\0'; } free(newkey); return ret; }