diff options
Diffstat (limited to 'src/backend/tsearch/ts_parse.c')
-rw-r--r-- | src/backend/tsearch/ts_parse.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index 0634f54a71b..6202eb444de 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tsearch/ts_parse.c,v 1.8 2008/05/16 16:31:01 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/tsearch/ts_parse.c,v 1.9 2008/10/17 18:05:19 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -583,8 +583,11 @@ text * generateHeadline(HeadlineParsedText *prs) { text *out; - int len = 128; char *ptr; + int len = 128; + int numfragments = 0; + int2 infrag = 0; + HeadlineWordEntry *wrd = prs->words; out = (text *) palloc(len); @@ -592,7 +595,7 @@ generateHeadline(HeadlineParsedText *prs) while (wrd - prs->words < prs->curwords) { - while (wrd->len + prs->stopsellen + prs->startsellen + (ptr - ((char *) out)) >= len) + while (wrd->len + prs->stopsellen + prs->startsellen + prs->fragdelimlen + (ptr - ((char *) out)) >= len) { int dist = ptr - ((char *) out); @@ -603,6 +606,20 @@ generateHeadline(HeadlineParsedText *prs) if (wrd->in && !wrd->repeated) { + if (!infrag) + { + + /* start of a new fragment */ + infrag = 1; + numfragments ++; + /* add a fragment delimitor if this is after the first one */ + if (numfragments > 1) + { + memcpy(ptr, prs->fragdelim, prs->fragdelimlen); + ptr += prs->fragdelimlen; + } + + } if (wrd->replace) { *ptr = ' '; @@ -625,7 +642,11 @@ generateHeadline(HeadlineParsedText *prs) } } else if (!wrd->repeated) + { + if (infrag) + infrag = 0; pfree(wrd->word); + } wrd++; } |