X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fextract.c;h=ca6d01267309f3db72f8ad848b8c7546c3c9b6fc;hp=02ee66044636807aca0a31d7b8c5e054f215eee4;hb=94bf7abfff6a30fab5567d8275db14122ed01822;hpb=1285f0f6eeb151a62b69d8d3381c54ace03e55d4 diff --git a/index/extract.c b/index/extract.c index 02ee660..ca6d012 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.183 2005-05-31 13:01:36 adam Exp $ +/* $Id: extract.c,v 1.184 2005-06-07 11:36:38 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -1473,6 +1473,42 @@ void extract_add_it_key (ZebraHandle zh, keys->buf_used = dst - keys->buf; } +ZEBRA_RES zebra_snippets_rec_keys(ZebraHandle zh, struct recKeys *reckeys, + zebra_snippets *snippets) +{ + void *decode_handle = iscz1_start(); + int off = 0; + int seqno = 0; + NMEM nmem = nmem_create(); + + yaz_log(YLOG_LOG, "zebra_rec_keys_snippets buf=%p sz=%d", reckeys->buf, + reckeys->buf_used); + assert(reckeys->buf); + while (off < reckeys->buf_used) + { + const char *src = reckeys->buf + off; + struct it_key key; + char *dst = (char*) &key; + char dst_buf[IT_MAX_WORD]; + char *dst_term = dst_buf; + + iscz1_decode(decode_handle, &dst, &src); + assert(key.len <= 4 && key.len > 2); + + seqno = (int) key.mem[key.len-1]; + + zebra_term_untrans_iconv(zh, nmem, src[0], &dst_term, src+1); + zebra_snippets_append(snippets, seqno, key.mem[0], dst_term); + while (*src++) + ; + off = src - reckeys->buf; + nmem_reset(nmem); + } + nmem_destroy(nmem); + iscz1_stop(decode_handle); + return ZEBRA_OK; +} + void print_rec_keys(ZebraHandle zh, struct recKeys *reckeys) { void *decode_handle = iscz1_start();