aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeodor Sigaev <teodor@sigaev.ru>2009-01-15 18:17:12 +0000
committerTeodor Sigaev <teodor@sigaev.ru>2009-01-15 18:17:12 +0000
commitb7394a6e6e76606c777741d157e6098c63d3a169 (patch)
tree23730cc4db4a80873ac46d2d692f9173d1069e88
parent696dbd873d05b7b8d095969eccf53e4333153c46 (diff)
downloadpostgresql-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.out6
-rw-r--r--contrib/tsearch2/ts_cfg.c2
-rw-r--r--contrib/tsearch2/ts_cfg.h3
-rw-r--r--contrib/tsearch2/wparser_def.c12
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 &nbsp;</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;