From fc7d74385fb9903154942ebe49be23c344c831e4 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Thu, 16 Feb 2023 11:25:15 +0100 Subject: [PATCH] Don't replace an eol by a whitespace when the last char is a Katakana-Hiragana diacritic --- test/pdfs/.gitignore | 1 + test/pdfs/issue16063.pdf | Bin 0 -> 58483 bytes test/unit/pdf_find_controller_spec.js | 36 +++++++++++++++++ web/pdf_find_controller.js | 53 +++++++++++++++++++------- 4 files changed, 76 insertions(+), 14 deletions(-) create mode 100755 test/pdfs/issue16063.pdf diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 17b77b87e..5ea4bb2de 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -574,3 +574,4 @@ !bug1815476.pdf !issue16021.pdf !bug1770750.pdf +!issue16063.pdf diff --git a/test/pdfs/issue16063.pdf b/test/pdfs/issue16063.pdf new file mode 100755 index 0000000000000000000000000000000000000000..36ddfd9e19b8b108c9f83e3a63bd26c98aac5dbb GIT binary patch literal 58483 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%0Dn`M+NZk06g`0C+-$j- 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 literal 0 HcmV?d00001 diff --git a/test/unit/pdf_find_controller_spec.js b/test/unit/pdf_find_controller_spec.js index 22c83defb..215cfbd7b 100644 --- a/test/unit/pdf_find_controller_spec.js +++ b/test/unit/pdf_find_controller_spec.js @@ -818,4 +818,40 @@ describe("pdf_find_controller", function () { }, }); }); + + it("performs a search in a text with some Hiragana diacritics at the end of a line", async function () { + const { eventBus, pdfFindController } = await initPdfFindController( + "issue16063.pdf" + ); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "行うことができる速結端子", + }, + matchesPerPage: [1], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[63]], + pageMatchesLength: [[12]], + }); + + await testSearch({ + eventBus, + pdfFindController, + state: { + query: "デュプレックス", + }, + matchesPerPage: [1], + selectedMatch: { + pageIndex: 0, + matchIndex: 0, + }, + pageMatches: [[205]], + pageMatchesLength: [[7]], + }); + }); }); diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 3af01326c..f4617e6f9 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -136,7 +136,8 @@ function normalize(text) { // 3040-309F: Hiragana // 30A0-30FF: Katakana const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])"; - const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|(${CJK}\\n)|(\\n)`; + const HKDiacritics = "(?:\u3099|\u309A)"; + const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\n)|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|(${CJK}\\n)|(\\n)`; if (syllablePositions.length === 0) { // Most of the syllables belong to Hangul so there are no need @@ -198,7 +199,7 @@ function normalize(text) { normalized = normalized.replace( normalizationRegex, - (match, p1, p2, p3, p4, p5, p6, p7, i) => { + (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => { i -= shiftOrigin; if (p1) { // Maybe fractions or quotations mark... @@ -227,8 +228,32 @@ function normalize(text) { } if (p3) { - const hasTrailingDashEOL = p3.endsWith("\n"); - const len = hasTrailingDashEOL ? p3.length - 2 : p3.length; + // We've a Katakana-Hiragana diacritic followed by a \n so don't replace + // the \n by a whitespace. + hasDiacritics = true; + + // Diacritic. + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + ++rawDiacriticsIndex; + } else { + // i is the position of the first diacritic + // so (i - 1) is the position for the letter before. + positions.push([i - 1 - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + } + + // End-of-line. + positions.push([i - shift + 1, shift]); + shiftOrigin += 1; + eol += 1; + + return p3.charAt(0); + } + + if (p4) { + const hasTrailingDashEOL = p4.endsWith("\n"); + const len = hasTrailingDashEOL ? p4.length - 2 : p4.length; // Diacritics. hasDiacritics = true; @@ -248,19 +273,19 @@ function normalize(text) { if (hasTrailingDashEOL) { // Diacritics are followed by a -\n. - // See comments in `if (p4)` block. + // See comments in `if (p5)` block. i += len - 1; positions.push([i - shift + 1, 1 + shift]); shift += 1; shiftOrigin += 1; eol += 1; - return p3.slice(0, len); + return p4.slice(0, len); } - return p3; + return p4; } - if (p4) { + if (p5) { // "X-\n" is removed because an hyphen at the end of a line // with not a space before is likely here to mark a break // in a word. @@ -269,19 +294,19 @@ function normalize(text) { shift += 1; shiftOrigin += 1; eol += 1; - return p4.charAt(0); + return p5.charAt(0); } - if (p5) { + if (p6) { // An ideographic at the end of a line doesn't imply adding an extra // white space. positions.push([i - shift + 1, shift]); shiftOrigin += 1; eol += 1; - return p5.charAt(0); + return p6.charAt(0); } - if (p6) { + if (p7) { // eol is replaced by space: "foo\nbar" is likely equivalent to // "foo bar". positions.push([i - shift + 1, shift - 1]); @@ -291,7 +316,7 @@ function normalize(text) { return " "; } - // p7 + // p8 if (i + eol === syllablePositions[syllableIndex]?.[1]) { // A syllable (1 char) is replaced with several chars (n) so // newCharsLen = n - 1. @@ -303,7 +328,7 @@ function normalize(text) { shift -= newCharLen; shiftOrigin += newCharLen; } - return p7; + return p8; } );