diff options
author | Hakan Sandell <hakan.sandell@home.se> | 2010-10-03 14:16:13 +0200 |
---|---|---|
committer | Hakan Sandell <hakan.sandell@home.se> | 2010-10-03 14:16:13 +0200 |
commit | 7cceaa7443c80b526a6bbad32b6cbdf5d759fd39 (patch) | |
tree | 37b75aab8bf88ad11745c8abe37ec6ebb8d68e8c /inc/fulltext.php | |
parent | 831c10d03192413b75ee2be21fb314e0797fdc23 (diff) | |
parent | c1e6807d8013592efafd00472f75ea08dc7347ec (diff) | |
download | rpg-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.php | 24 |
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; } } |