X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=util%2Fsnippet.c;h=0c53b530b42dfa298f70b8d4935eaae6e286cadb;hp=b299e5f84724ad6d51356d6aa3ec2f3e07014fed;hb=1d5d4f08cb84516d75fcb5e6ed4199b6454cccd6;hpb=6988ba91e363565638c27a8d5895ad9afc409e75 diff --git a/util/snippet.c b/util/snippet.c index b299e5f..0c53b53 100644 --- a/util/snippet.c +++ b/util/snippet.c @@ -1,8 +1,5 @@ -/* $Id: snippet.c,v 1.13 2007-08-21 11:06:47 adam Exp $ - Copyright (C) 1995-2007 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 2004-2013 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -20,10 +17,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include #include +#include #include struct zebra_snippets { @@ -105,10 +106,15 @@ void zebra_snippets_log(const zebra_snippets *l, int log_level, int all) zebra_snippet_word *w; for (w = l->front; w; w = w->next) { + WRBUF wr_term = wrbuf_alloc(); + wrbuf_puts_escaped(wr_term, w->term); + if (all || w->mark) yaz_log(log_level, "term='%s'%s mark=%d seqno=" ZINT_FORMAT " ord=%d", - w->term, (w->match && !w->ws ? "*" : ""), w->mark, + wrbuf_cstr(wr_term), + (w->match && !w->ws ? "*" : ""), w->mark, w->seqno, w->ord); + wrbuf_destroy(wr_term); } } @@ -183,7 +189,7 @@ zebra_snippets *zebra_snippets_window(const zebra_snippets *doc, hit_w = hit_w->next) { if (hit_w->ord == ord && hit_w->seqno == doc_w->seqno) - + { match = 1; break; @@ -191,7 +197,7 @@ zebra_snippets *zebra_snippets_window(const zebra_snippets *doc, } zebra_snippets_append_match(result, doc_w->seqno, doc_w->ws, - ord, doc_w->term, + ord, doc_w->term, strlen(doc_w->term), match); } } @@ -209,6 +215,25 @@ static void zebra_snippets_clear(zebra_snippets *sn) } } +const struct zebra_snippet_word *zebra_snippets_lookup( + const zebra_snippets *doc, const zebra_snippets *hit) +{ + const zebra_snippet_word *hit_w; + for (hit_w = zebra_snippets_constlist(hit); hit_w; hit_w = hit_w->next) + { + const zebra_snippet_word *doc_w; + for (doc_w = zebra_snippets_constlist(doc); doc_w; doc_w = doc_w->next) + { + if (doc_w->ord == hit_w->ord && doc_w->seqno == hit_w->seqno + && !doc_w->ws) + { + return doc_w; + } + } + } + return 0; +} + void zebra_snippets_ring(zebra_snippets *doc, const zebra_snippets *hit, int before, int after) { @@ -244,7 +269,7 @@ void zebra_snippets_ring(zebra_snippets *doc, const zebra_snippets *hit, doc_w->mark = 1; break; } - + } /* mark following terms */ if (doc_w) @@ -252,7 +277,7 @@ void zebra_snippets_ring(zebra_snippets *doc, const zebra_snippets *hit, zebra_snippet_word *w = doc_w->next; while (w) if (w->ord == ord - && hit_w->seqno - before < w->seqno + && hit_w->seqno - before < w->seqno && hit_w->seqno + after > w->seqno) { w->mark = 1; @@ -267,7 +292,7 @@ void zebra_snippets_ring(zebra_snippets *doc, const zebra_snippets *hit, zebra_snippet_word *w = doc_w->prev; while (w) if (w->ord == ord - && hit_w->seqno - before < w->seqno + && hit_w->seqno - before < w->seqno && hit_w->seqno + after > w->seqno) { w->mark = 1; @@ -281,10 +306,11 @@ void zebra_snippets_ring(zebra_snippets *doc, const zebra_snippets *hit, } } - + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab