Skip to content

Commit 2ab6405

Browse files
committed
feat: add more characters to support additional languages
1 parent 7607844 commit 2ab6405

1 file changed

Lines changed: 89 additions & 9 deletions

File tree

Flow.Launcher.Infrastructure/StringMatcher.cs

Lines changed: 89 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ public MatchResult FuzzyMatch(string query, string stringToCompare, MatchOption
184184
// in order to do so we need to verify all previous chars are part of the pattern
185185
var startIndexToVerify = compareStringIndex - currentQuerySubstringCharacterIndex;
186186

187-
if (AllPreviousCharsMatched(startIndexToVerify, currentQuerySubstringCharacterIndex,
188-
fullStringToCompare, currentQuerySubstring))
187+
if (AllPreviousCharsMatched(startIndexToVerify, currentQuerySubstringCharacterIndex,
188+
fullStringToCompare, currentQuerySubstring))
189189
{
190190
matchFoundInPreviousLoop = true;
191191

@@ -259,27 +259,106 @@ public MatchResult FuzzyMatch(string query, string stringToCompare, MatchOption
259259

260260
private static readonly Dictionary<char, char> AccentMap = new()
261261
{
262-
['á'] = 'a', ['à'] = 'a', ['ã'] = 'a', ['â'] = 'a', ['ä'] = 'a', ['å'] = 'a',
263-
['é'] = 'e', ['è'] = 'e', ['ê'] = 'e', ['ë'] = 'e',
264-
['í'] = 'i', ['ì'] = 'i', ['î'] = 'i', ['ï'] = 'i',
265-
['ó'] = 'o', ['ò'] = 'o', ['õ'] = 'o', ['ô'] = 'o', ['ö'] = 'o',
266-
['ú'] = 'u', ['ù'] = 'u', ['û'] = 'u', ['ü'] = 'u',
262+
['á'] = 'a',
263+
['à'] = 'a',
264+
['ã'] = 'a',
265+
['â'] = 'a',
266+
['ä'] = 'a',
267+
['å'] = 'a',
268+
['ā'] = 'a',
269+
['ă'] = 'a',
270+
['ą'] = 'a',
271+
['é'] = 'e',
272+
['è'] = 'e',
273+
['ê'] = 'e',
274+
['ë'] = 'e',
275+
['ē'] = 'e',
276+
['ĕ'] = 'e',
277+
['ė'] = 'e',
278+
['ę'] = 'e',
279+
['ě'] = 'e',
280+
['í'] = 'i',
281+
['ì'] = 'i',
282+
['î'] = 'i',
283+
['ï'] = 'i',
284+
['ī'] = 'i',
285+
['ĭ'] = 'i',
286+
['į'] = 'i',
287+
['ı'] = 'i',
288+
['ó'] = 'o',
289+
['ò'] = 'o',
290+
['õ'] = 'o',
291+
['ô'] = 'o',
292+
['ö'] = 'o',
293+
['ø'] = 'o',
294+
['ō'] = 'o',
295+
['ŏ'] = 'o',
296+
['ő'] = 'o',
297+
['ú'] = 'u',
298+
['ù'] = 'u',
299+
['û'] = 'u',
300+
['ü'] = 'u',
301+
['ū'] = 'u',
302+
['ŭ'] = 'u',
303+
['ů'] = 'u',
304+
['ű'] = 'u',
305+
['ų'] = 'u',
267306
['ç'] = 'c',
307+
['ć'] = 'c',
308+
['ĉ'] = 'c',
309+
['ċ'] = 'c',
310+
['č'] = 'c',
268311
['ñ'] = 'n',
269-
['ý'] = 'y', ['ÿ'] = 'y'
312+
['ń'] = 'n',
313+
['ņ'] = 'n',
314+
['ň'] = 'n',
315+
['ŋ'] = 'n',
316+
['ý'] = 'y',
317+
['ÿ'] = 'y',
318+
['ŷ'] = 'y',
319+
['ś'] = 's',
320+
['ŝ'] = 's',
321+
['ş'] = 's',
322+
['š'] = 's',
323+
['ß'] = 's',
324+
['ź'] = 'z',
325+
['ż'] = 'z',
326+
['ž'] = 'z',
327+
['ł'] = 'l',
328+
['ď'] = 'd',
329+
['đ'] = 'd',
330+
['ĝ'] = 'g',
331+
['ğ'] = 'g',
332+
['ġ'] = 'g',
333+
['ģ'] = 'g',
334+
['ĥ'] = 'h',
335+
['ħ'] = 'h',
336+
['ĵ'] = 'j',
337+
['ķ'] = 'k',
338+
['ŕ'] = 'r',
339+
['ř'] = 'r',
340+
['ţ'] = 't',
341+
['ť'] = 't',
342+
['ŧ'] = 't',
343+
['æ'] = 'a',
344+
['œ'] = 'o'
270345
};
346+
271347
public static string Normalize(string value)
272348
{
273349
if (string.IsNullOrEmpty(value)) return value;
274350
char[] arrayFromPool = null;
275-
Span<char> buffer = value.Length <= 512 ? stackalloc char[value.Length] : (arrayFromPool = ArrayPool<char>.Shared.Rent(value.Length));
351+
Span<char> buffer = value.Length <= 512
352+
? stackalloc char[value.Length]
353+
: (arrayFromPool = ArrayPool<char>.Shared.Rent(value.Length));
276354
try
277355
{
278356
for (int i = 0; i < value.Length; i++)
279357
{
280358
var c = char.ToLowerInvariant(value[i]);
281359
buffer[i] = AccentMap.TryGetValue(c, out var mapped) ? mapped : c;
282360
}
361+
283362
return new string(buffer.Slice(0, value.Length));
284363
}
285364
finally
@@ -288,6 +367,7 @@ public static string Normalize(string value)
288367
ArrayPool<char>.Shared.Return(arrayFromPool);
289368
}
290369
}
370+
291371
private static bool IsAcronym(string stringToCompare, int compareStringIndex)
292372
{
293373
if (IsAcronymChar(stringToCompare, compareStringIndex) ||

0 commit comments

Comments
 (0)