Bugfix: Correctly calculate the end offset of search context snippets

This commit is contained in:
Starbeamrainbowlabs 2018-09-29 13:27:17 +01:00
parent 284b404946
commit 24775724d1
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
4 changed files with 7 additions and 8 deletions

View File

@ -32,6 +32,7 @@ This file holds the changelog for Pepperminty Wiki. This is the master list of t
- The search redirector will now check both the specified page name and the page name in Title Case - The search redirector will now check both the specified page name and the page name in Title Case
- Improve help text description of image captions displayed alongside images - Improve help text description of image captions displayed alongside images
- Fixed the page history page - it should now display all page revisions in valid HTML - Fixed the page history page - it should now display all page revisions in valid HTML
- Fixed another bug in the search context generator
## Changed ## Changed
- Password hashing has been overhauled! A totally new-and-different system is being used now, so you'll need to rehash all your passwords. - Password hashing has been overhauled! A totally new-and-different system is being used now, so you'll need to rehash all your passwords.

View File

@ -407,7 +407,7 @@ if($settings->sessionprefix == "auto")
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
/** The version of Pepperminty Wiki currently running. */ /** The version of Pepperminty Wiki currently running. */
$version = "v0.17-dev"; $version = "v0.17-dev";
$commit = "39c8f48019599cc00e919d5c699e0c01c7278ef4"; $commit = "284b4049460887b0b40b2f73e7db9158e5bc1ef0";
/// Environment /// /// Environment ///
/** Holds information about the current request environment. */ /** Holds information about the current request environment. */
$env = new stdClass(); $env = new stdClass();
@ -1478,7 +1478,7 @@ class page_renderer
{all-pages-datalist}"; {all-pages-datalist}";
/** /**
* A specially minified content template that doesn't include the navbar and * A specially minified content template that doesn't include the navbar and
* other elements not suiltable for printing. * other elements not suitable for printing.
* @var string * @var string
* @package core * @package core
*/ */
@ -4550,7 +4550,7 @@ class search
} }
foreach($newindex as $nterm => $entry) foreach($newindex as $nterm => $entry)
{ {
if(!isset($oldindex[$nterm]) or // If this world is new if(!isset($oldindex[$nterm]) or // If this word is new
$newindex[$nterm] !== $oldindex[$nterm]) // If this word has changed $newindex[$nterm] !== $oldindex[$nterm]) // If this word has changed
$changed[$nterm] = $newindex[$nterm]; $changed[$nterm] = $newindex[$nterm];
} }
@ -4783,7 +4783,6 @@ class search
// todo remove items if the rank is below a threshold // todo remove items if the rank is below a threshold
} }
// todo sort by rank here
uasort($matching_pages, function($a, $b) { uasort($matching_pages, function($a, $b) {
if($a["rank"] == $b["rank"]) return 0; if($a["rank"] == $b["rank"]) return 0;
return ($a["rank"] < $b["rank"]) ? +1 : -1; return ($a["rank"] < $b["rank"]) ? +1 : -1;
@ -4836,7 +4835,7 @@ class search
for($i = 0; $i < $matches_count; $i++) { for($i = 0; $i < $matches_count; $i++) {
$next_context = [ $next_context = [
"from" => max(0, $matches[$i][1] - $settings->search_characters_context), "from" => max(0, $matches[$i][1] - $settings->search_characters_context),
"to" => min($sourceLength, $matches[$i][1] + count($matches[0]) + $settings->search_characters_context) "to" => min($sourceLength, $matches[$i][1] + mb_strlen($matches[$i][0]) + $settings->search_characters_context)
]; ];
if(end($contexts) !== false && end($contexts)["to"] > $next_context["from"]) { if(end($contexts) !== false && end($contexts)["to"] > $next_context["from"]) {

View File

@ -104,7 +104,7 @@
"author": "Starbeamrainbowlabs", "author": "Starbeamrainbowlabs",
"description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.", "description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
"id": "feature-search", "id": "feature-search",
"lastupdate": 1530443634, "lastupdate": 1538223927,
"optional": false "optional": false
}, },
{ {

View File

@ -904,7 +904,6 @@ class search
// todo remove items if the rank is below a threshold // todo remove items if the rank is below a threshold
} }
// todo sort by rank here
uasort($matching_pages, function($a, $b) { uasort($matching_pages, function($a, $b) {
if($a["rank"] == $b["rank"]) return 0; if($a["rank"] == $b["rank"]) return 0;
return ($a["rank"] < $b["rank"]) ? +1 : -1; return ($a["rank"] < $b["rank"]) ? +1 : -1;
@ -957,7 +956,7 @@ class search
for($i = 0; $i < $matches_count; $i++) { for($i = 0; $i < $matches_count; $i++) {
$next_context = [ $next_context = [
"from" => max(0, $matches[$i][1] - $settings->search_characters_context), "from" => max(0, $matches[$i][1] - $settings->search_characters_context),
"to" => min($sourceLength, $matches[$i][1] + count($matches[0]) + $settings->search_characters_context) "to" => min($sourceLength, $matches[$i][1] + mb_strlen($matches[$i][0]) + $settings->search_characters_context)
]; ];
if(end($contexts) !== false && end($contexts)["to"] > $next_context["from"]) { if(end($contexts) !== false && end($contexts)["to"] > $next_context["from"]) {