summaryrefslogtreecommitdiff
path: root/inc/fulltext.php
diff options
context:
space:
mode:
authorHakan Sandell <hakan.sandell@home.se>2010-10-03 14:16:13 +0200
committerHakan Sandell <hakan.sandell@home.se>2010-10-03 14:16:13 +0200
commit7cceaa7443c80b526a6bbad32b6cbdf5d759fd39 (patch)
tree37b75aab8bf88ad11745c8abe37ec6ebb8d68e8c /inc/fulltext.php
parent831c10d03192413b75ee2be21fb314e0797fdc23 (diff)
parentc1e6807d8013592efafd00472f75ea08dc7347ec (diff)
downloadrpg-7cceaa7443c80b526a6bbad32b6cbdf5d759fd39.tar.gz
rpg-7cceaa7443c80b526a6bbad32b6cbdf5d759fd39.tar.bz2
Merge branch 'master' of git://github.com/splitbrain/dokuwiki
Diffstat (limited to 'inc/fulltext.php')
-rw-r--r--inc/fulltext.php24
1 files changed, 21 insertions, 3 deletions
diff --git a/inc/fulltext.php b/inc/fulltext.php
index e90205e9c..943a5d401 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -313,7 +313,7 @@ function ft_snippet($id,$highlight){
$len = utf8_strlen($text);
// build a regexp from the phrases to highlight
- $re1 = '('.join('|',array_map('preg_quote_cb',array_filter((array) $highlight))).')';
+ $re1 = '('.join('|',array_map('ft_snippet_re_preprocess', array_map('preg_quote_cb',array_filter((array) $highlight)))).')';
$re2 = "$re1.{0,75}(?!\\1)$re1";
$re3 = "$re1.{0,45}(?!\\1)$re1.{0,45}(?!\\1)(?!\\2)$re1";
@@ -387,6 +387,24 @@ function ft_snippet($id,$highlight){
}
/**
+ * Wraps a search term in regex boundary checks.
+ */
+function ft_snippet_re_preprocess($term) {
+ if(substr($term,0,2) == '\\*'){
+ $term = substr($term,2);
+ }else{
+ $term = '\b'.$term;
+ }
+
+ if(substr($term,-2,2) == '\\*'){
+ $term = substr($term,0,-2);
+ }else{
+ $term = $term.'\b';
+ }
+ return $term;
+}
+
+/**
* Combine found documents and sum up their scores
*
* This function is used to combine searched words with a logical
@@ -678,7 +696,7 @@ function ft_queryParser($query){
break;
case 'W+:':
$q['words'][] = $body;
- $q['highlight'][] = str_replace('*', '', $body);
+ $q['highlight'][] = $body;
$q['and'][] = $body; // for backward compatibility
break;
case 'P-:':
@@ -686,7 +704,7 @@ function ft_queryParser($query){
break;
case 'P+:':
$q['phrases'][] = $body;
- $q['highlight'][] = str_replace('*', '', $body);
+ $q['highlight'][] = $body;
break;
}
}