Skip to content

Commit ef16371

Browse files
committed
Merge branch 'ignore-diacritics'
2 parents 52622e6 + e0fcdb1 commit ef16371

22 files changed

+255
-45
lines changed

dist/fuse.basic.cjs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ var BasicOptions = {
313313
// When `true`, the algorithm continues searching to the end of the input even if a perfect
314314
// match is found before the end of the same input.
315315
isCaseSensitive: false,
316+
// When `true`, the algorithm will ignore diacritics (accents) in comparisons
317+
ignoreDiacritics: false,
316318
// When true, the matching function will continue to the end of a search pattern even if
317319
includeScore: false,
318320
// List of properties that will be searched. This also supports nested properties.
@@ -812,6 +814,12 @@ function createPatternAlphabet(pattern) {
812814
return mask;
813815
}
814816

817+
var stripDiacritics = String.prototype.normalize ? function (str) {
818+
return str.normalize('NFD').replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g, '');
819+
} : function (str) {
820+
return str;
821+
};
822+
815823
var BitapSearch = /*#__PURE__*/function () {
816824
function BitapSearch(pattern) {
817825
var _this = this;
@@ -830,6 +838,8 @@ var BitapSearch = /*#__PURE__*/function () {
830838
minMatchCharLength = _ref$minMatchCharLeng === void 0 ? Config.minMatchCharLength : _ref$minMatchCharLeng,
831839
_ref$isCaseSensitive = _ref.isCaseSensitive,
832840
isCaseSensitive = _ref$isCaseSensitive === void 0 ? Config.isCaseSensitive : _ref$isCaseSensitive,
841+
_ref$ignoreDiacritics = _ref.ignoreDiacritics,
842+
ignoreDiacritics = _ref$ignoreDiacritics === void 0 ? Config.ignoreDiacritics : _ref$ignoreDiacritics,
833843
_ref$ignoreLocation = _ref.ignoreLocation,
834844
ignoreLocation = _ref$ignoreLocation === void 0 ? Config.ignoreLocation : _ref$ignoreLocation;
835845
_classCallCheck(this, BitapSearch);
@@ -841,9 +851,12 @@ var BitapSearch = /*#__PURE__*/function () {
841851
findAllMatches: findAllMatches,
842852
minMatchCharLength: minMatchCharLength,
843853
isCaseSensitive: isCaseSensitive,
854+
ignoreDiacritics: ignoreDiacritics,
844855
ignoreLocation: ignoreLocation
845856
};
846-
this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();
857+
pattern = isCaseSensitive ? pattern : pattern.toLowerCase();
858+
pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;
859+
this.pattern = pattern;
847860
this.chunks = [];
848861
if (!this.pattern.length) {
849862
return;
@@ -877,10 +890,10 @@ var BitapSearch = /*#__PURE__*/function () {
877890
value: function searchIn(text) {
878891
var _this$options = this.options,
879892
isCaseSensitive = _this$options.isCaseSensitive,
893+
ignoreDiacritics = _this$options.ignoreDiacritics,
880894
includeMatches = _this$options.includeMatches;
881-
if (!isCaseSensitive) {
882-
text = text.toLowerCase();
883-
}
895+
text = isCaseSensitive ? text : text.toLowerCase();
896+
text = ignoreDiacritics ? stripDiacritics(text) : text;
884897

885898
// Exact match
886899
if (this.pattern === text) {

dist/fuse.basic.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@
317317
// When `true`, the algorithm continues searching to the end of the input even if a perfect
318318
// match is found before the end of the same input.
319319
isCaseSensitive: false,
320+
// When `true`, the algorithm will ignore diacritics (accents) in comparisons
321+
ignoreDiacritics: false,
320322
// When true, the matching function will continue to the end of a search pattern even if
321323
includeScore: false,
322324
// List of properties that will be searched. This also supports nested properties.
@@ -816,6 +818,12 @@
816818
return mask;
817819
}
818820

821+
var stripDiacritics = String.prototype.normalize ? function (str) {
822+
return str.normalize('NFD').replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g, '');
823+
} : function (str) {
824+
return str;
825+
};
826+
819827
var BitapSearch = /*#__PURE__*/function () {
820828
function BitapSearch(pattern) {
821829
var _this = this;
@@ -834,6 +842,8 @@
834842
minMatchCharLength = _ref$minMatchCharLeng === void 0 ? Config.minMatchCharLength : _ref$minMatchCharLeng,
835843
_ref$isCaseSensitive = _ref.isCaseSensitive,
836844
isCaseSensitive = _ref$isCaseSensitive === void 0 ? Config.isCaseSensitive : _ref$isCaseSensitive,
845+
_ref$ignoreDiacritics = _ref.ignoreDiacritics,
846+
ignoreDiacritics = _ref$ignoreDiacritics === void 0 ? Config.ignoreDiacritics : _ref$ignoreDiacritics,
837847
_ref$ignoreLocation = _ref.ignoreLocation,
838848
ignoreLocation = _ref$ignoreLocation === void 0 ? Config.ignoreLocation : _ref$ignoreLocation;
839849
_classCallCheck(this, BitapSearch);
@@ -845,9 +855,12 @@
845855
findAllMatches: findAllMatches,
846856
minMatchCharLength: minMatchCharLength,
847857
isCaseSensitive: isCaseSensitive,
858+
ignoreDiacritics: ignoreDiacritics,
848859
ignoreLocation: ignoreLocation
849860
};
850-
this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();
861+
pattern = isCaseSensitive ? pattern : pattern.toLowerCase();
862+
pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;
863+
this.pattern = pattern;
851864
this.chunks = [];
852865
if (!this.pattern.length) {
853866
return;
@@ -881,10 +894,10 @@
881894
value: function searchIn(text) {
882895
var _this$options = this.options,
883896
isCaseSensitive = _this$options.isCaseSensitive,
897+
ignoreDiacritics = _this$options.ignoreDiacritics,
884898
includeMatches = _this$options.includeMatches;
885-
if (!isCaseSensitive) {
886-
text = text.toLowerCase();
887-
}
899+
text = isCaseSensitive ? text : text.toLowerCase();
900+
text = ignoreDiacritics ? stripDiacritics(text) : text;
888901

889902
// Exact match
890903
if (this.pattern === text) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy