diff --git a/src/strings.js b/src/strings.js index e8582c7..0b0532d 100644 --- a/src/strings.js +++ b/src/strings.js @@ -294,7 +294,7 @@ strings.highlight = function (text, patterns) { let highlightedSnippet = `${prefix.substring( begin)}${infix}${suffix.substring(0, end)}`; const pages = prefix.split('\f' /* page separator */).map((page, index) => index); - const beginMark = highlightedSnippet.lastIndexOf(''); if (beginMark && (!endMark || beginMark > endMark)) { diff --git a/src/strings.test.js b/src/strings.test.js index 6ebb551..daed443 100644 --- a/src/strings.test.js +++ b/src/strings.test.js @@ -133,7 +133,7 @@ test('highlight', () => { }); }); -test('highlight_overlaps', () => { +test('highlight_overlaps_style', () => { const text = "Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici."; const textHighlighted = 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.'; @@ -153,6 +153,56 @@ test('highlight_overlaps', () => { highlightedSnippet: 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ', }; + expect(strings.highlight(text, [pattern])).toEqual({ + snippets: [snippet1, snippet2], text: textHighlighted + }); +}); + +test('highlight_overlaps_begin_tag', () => { + + const text = "Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici."; + const textHighlighted = 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.'; + const pattern = { + regexp: /statio/gims, color: "#fffec8" + }; + const snippet1 = { + matchedText: "statio", + matchedPage: 1, + rawSnippet: 'x xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.', + highlightedSnippet: 'x xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.', + }; + const snippet2 = { + matchedText: "statio", + matchedPage: 1, + rawSnippet: 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ', + }; + + expect(strings.highlight(text, [pattern])).toEqual({ + snippets: [snippet1, snippet2], text: textHighlighted + }); +}); + +test('highlight_overlaps_end_tag', () => { + + const text = "Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici."; + const textHighlighted = 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.'; + const pattern = { + regexp: /statio/gims, color: "#fffec8" + }; + const snippet1 = { + matchedText: "statio", + matchedPage: 1, + rawSnippet: 'x xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.', + highlightedSnippet: 'x xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx stationner ici.', + }; + const snippet2 = { + matchedText: "statio", + matchedPage: 1, + rawSnippet: 'Le stationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx statiostationnement est interdit. Merci de ne pas xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ', + }; + expect(strings.highlight(text, [pattern])).toEqual({ snippets: [snippet1, snippet2], text: textHighlighted });