diff -Nur senna.orig/lib/index.c senna.patch.for-rev6/lib/index.c --- senna.orig/lib/index.c 2005-04-04 16:20:25.000000000 +0900 +++ senna.patch.for-rev6/lib/index.c 2005-04-05 05:31:12.000000000 +0900 @@ -392,22 +392,22 @@ inline static sen_rc token_info_build(sen_index *i, const char *query, token_info **tis, uint32_t *n) { - sen_chop *ng; + sen_ngram *ng; token_info *ti; sen_id tid; sen_rc rc = sen_other_error; - ng = sen_chop_open(i->lex, query, 0); - tid = sen_chop_next(ng); + ng = sen_ngram_open(i->lex, query, 0); + tid = sen_ngram_next(ng); switch (ng->status) { - case sen_chop_doing : + case sen_ngram_doing : ti = token_info_open(i, sen_sym_key(i->lex, tid), ng->pos, EXPAND_SUFFIX); break; - case sen_chop_done : + case sen_ngram_done : ti = token_info_open(i, sen_sym_key(i->lex, tid), ng->pos, EXPAND_PREFIX|EXPAND_SUFFIX); break; - case sen_chop_not_found : + case sen_ngram_not_found : ti = token_info_open(i, ng->str, 0, EXPAND_PREFIX|EXPAND_SUFFIX); break; default : @@ -416,13 +416,13 @@ if (!ti) { goto exit ; } tis[(*n)++] = ti; sen_log("%d:%s", ng->pos, sen_sym_key(i->lex, tid)); - while (ng->status == sen_chop_doing) { - tid = sen_chop_next(ng); + while (ng->status == sen_ngram_doing) { + tid = sen_ngram_next(ng); switch (ng->status) { - case sen_chop_doing : + case sen_ngram_doing : ti = token_info_open(i, sen_sym_key(i->lex, tid), ng->pos, EXPAND_NONE); break; - case sen_chop_done : + case sen_ngram_done : ti = token_info_open(i, sen_sym_key(i->lex, tid), ng->pos, EXPAND_PREFIX); break; default : @@ -435,7 +435,7 @@ } rc = sen_success; exit : - sen_chop_close(ng); + sen_ngram_close(ng); return rc; } @@ -599,7 +599,8 @@ { int hint; sen_set *h; - sen_chop *ng; + //sen_chop *ng; + sen_ngram *ng; sen_set_cursor *c; sen_inv_updspec **u; sen_id rid, tid, *tp; @@ -608,6 +609,7 @@ rid = sen_sym_add(i->keys, key); h = sen_set_open(sizeof(sen_id), sizeof(sen_inv_updspec *), 0); + /* ng = sen_chop_open(i->lex, value, 1); while (!ng->status) { if ((tid = sen_chop_next(ng))) { @@ -618,6 +620,18 @@ } } sen_chop_close(ng); + */ + ng = sen_ngram_open(i->lex, value, 1); + while (!ng->status) { + if ((tid = sen_ngram_next(ng))) { + sen_set_add(h, &tid, (void **) &u); + if (!*u) { *u = sen_inv_updspec_open(0, rid, 1); } + // sen_log("(%s) %d", sen_sym_key(i->lex, tid), sen_chop_boundary_info(ng)); + sen_inv_updspec_add(*u, ng->pos, 0, sen_ngram_boundary_info(ng)); + } + } + sen_ngram_close(ng); + c = sen_set_cursor_open(h); while (sen_set_cursor_next(c, (void **)&tp, (void **) &u)) { if (*tp < 1) { @@ -649,7 +663,7 @@ // sen_log("deleting(%s)", value); if (!(rid = sen_sym_get(i->keys, key))) { return sen_invalid_argument; } h = sen_set_open(sizeof(sen_id), sizeof(sen_inv_updspec *), 0); - ng = sen_ngram_open(i->lex, value, 0); + ng = sen_ngram_open(i->lex, value, 1); while (!ng->status) { if ((tid = sen_ngram_next(ng))) { sen_set_add(h, &tid, (void **) &u);