From d8795f9f8f260d52515c8bd741fea6497dd5f2e9 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Tue, 11 Apr 2023 20:57:26 +0200 Subject: [PATCH] Fix search of numbers inside fractions --- test/unit/pdf_find_controller_spec.js | 60 +++++++++++++++++++++++++++ web/pdf_find_controller.js | 13 +++++- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/test/unit/pdf_find_controller_spec.js b/test/unit/pdf_find_controller_spec.js index 4db369abf..4f0607fb1 100644 --- a/test/unit/pdf_find_controller_spec.js +++ b/test/unit/pdf_find_controller_spec.js @@ -381,6 +381,66 @@ describe("pdf_find_controller", function () { pageMatches: [[27, 54]], pageMatchesLength: [[1, 1]], }); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "1", + }, + matchesPerPage: [3], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[27, 54, 55]], + pageMatchesLength: [[1, 1, 1]], + }); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "2", + }, + matchesPerPage: [2], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[27, 54]], + pageMatchesLength: [[1, 1]], + }); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "1/", + }, + matchesPerPage: [3], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[27, 54, 55]], + pageMatchesLength: [[1, 1, 1]], + }); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "1/21", + }, + matchesPerPage: [1], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[54]], + pageMatchesLength: [[2]], + }); }); it("performs a normal search, where the text with diacritics is normalized", async function () { diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 6a316d50e..2d6746eda 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -350,8 +350,10 @@ function getOriginalIndex(diffs, pos, len) { return [pos, len]; } + // First char in the new string. const start = pos; - const end = pos + len; + // Last char in the new string. + const end = pos + len - 1; let i = binarySearchFirstItem(diffs, x => x[0] >= start); if (diffs[i][0] > start) { --i; @@ -362,7 +364,14 @@ function getOriginalIndex(diffs, pos, len) { --j; } - return [start + diffs[i][1], len + diffs[j][1] - diffs[i][1]]; + // First char in the old string. + const oldStart = start + diffs[i][1]; + + // Last char in the old string. + const oldEnd = end + diffs[j][1]; + const oldLen = oldEnd + 1 - oldStart; + + return [oldStart, oldLen]; } /**