diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-15 18:17:12 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-15 18:17:12 +0000 |
commit | b7394a6e6e76606c777741d157e6098c63d3a169 (patch) | |
tree | 23730cc4db4a80873ac46d2d692f9173d1069e88 | |
parent | 696dbd873d05b7b8d095969eccf53e4333153c46 (diff) | |
download | postgresql-b7394a6e6e76606c777741d157e6098c63d3a169.tar.gz postgresql-b7394a6e6e76606c777741d157e6098c63d3a169.zip |
Fix URL generation in headline. Only tag lexeme will be replaced by space.
Per http://archives.postgresql.org/pgsql-bugs/2008-12/msg00013.php
-rw-r--r-- | contrib/tsearch2/expected/tsearch2.out | 6 | ||||
-rw-r--r-- | contrib/tsearch2/ts_cfg.c | 2 | ||||
-rw-r--r-- | contrib/tsearch2/ts_cfg.h | 3 | ||||
-rw-r--r-- | contrib/tsearch2/wparser_def.c | 12 |
4 files changed, 13 insertions, 10 deletions
diff --git a/contrib/tsearch2/expected/tsearch2.out b/contrib/tsearch2/expected/tsearch2.out index 78c12c52354..0fbb36e8b2b 100644 --- a/contrib/tsearch2/expected/tsearch2.out +++ b/contrib/tsearch2/expected/tsearch2.out @@ -2149,15 +2149,15 @@ ff-bg </body> </html>', to_tsquery('sea&foo'), 'HighlightAll=true'); - headline -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + headline +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ <html> <!-- some comment --> <body> <b>Sea</b> view wow <u><b>foo</b> bar</u> <i>qq</i> <a href="http://www.google.com/foo.bar.html" target="_blank">YES </a> - ff-bg +ff-bg <script> document.write(15); </script> diff --git a/contrib/tsearch2/ts_cfg.c b/contrib/tsearch2/ts_cfg.c index 1d5fef81370..ed1e3973fdb 100644 --- a/contrib/tsearch2/ts_cfg.c +++ b/contrib/tsearch2/ts_cfg.c @@ -520,7 +520,7 @@ genhl(HLPRSTEXT * prs) *ptr = ' '; ptr++; } - else + else if (!wrd->skip) { if (wrd->selected) { diff --git a/contrib/tsearch2/ts_cfg.h b/contrib/tsearch2/ts_cfg.h index e000233178d..325459ead61 100644 --- a/contrib/tsearch2/ts_cfg.h +++ b/contrib/tsearch2/ts_cfg.h @@ -50,7 +50,8 @@ typedef struct in:1, replace:1, repeated:1, - unused:4, + skip:1, + unused:3, type:8, len:16; char *word; diff --git a/contrib/tsearch2/wparser_def.c b/contrib/tsearch2/wparser_def.c index 947c22fc519..12318f02cea 100644 --- a/contrib/tsearch2/wparser_def.c +++ b/contrib/tsearch2/wparser_def.c @@ -72,11 +72,11 @@ prsd_end(PG_FUNCTION_ARGS) #define COMPLEXTOKEN(x) ( (x)==5 || (x)==15 || (x)==16 || (x)==17 ) #define ENDPUNCTOKEN(x) ( (x)==12 ) - #define TS_IDIGNORE(x) ( (x)==13 || (x)==14 || (x)==12 || (x)==23 ) -#define HLIDIGNORE(x) ( (x)==5 || (x)==13 || (x)==15 || (x)==16 || (x)==17 ) +#define HLIDREPLACE(x) ( (x)==13 ) +#define HLIDSKIP(x) ( (x)==5 || (x)==15 || (x)==16 || (x)==17 ) #define HTMLHLIDIGNORE(x) ( (x)==5 || (x)==15 || (x)==16 || (x)==17 ) -#define NONWORDTOKEN(x) ( (x)==12 || HLIDIGNORE(x) ) +#define NONWORDTOKEN(x) ( (x)==12 || HLIDREPLACE(x) || HLIDSKIP(x) ) #define NOENDTOKEN(x) ( NONWORDTOKEN(x) || (x)==7 || (x)==8 || (x)==20 || (x)==21 || (x)==22 || TS_IDIGNORE(x) ) typedef struct @@ -366,13 +366,15 @@ prsd_headline(PG_FUNCTION_ARGS) prs->words[i].selected = 1; if (highlight == 0) { - if (HLIDIGNORE(prs->words[i].type)) + if (HLIDREPLACE(prs->words[i].type)) prs->words[i].replace = 1; + else if (HLIDSKIP(prs->words[i].type)) + prs->words[i].skip = 1; } else { if (HTMLHLIDIGNORE(prs->words[i].type)) - prs->words[i].replace = 1; + prs->words[i].skip = 1; } prs->words[i].in = (prs->words[i].repeated) ? 0 : 1; |