#53 - Ignoring diacritics

This commit is contained in:
Simon Cambier
2022-06-04 18:59:19 +02:00
parent f679f3bde9
commit ca808502eb
3 changed files with 31 additions and 2 deletions

View File

@@ -10,6 +10,7 @@ import {
import { import {
extractHeadingsFromCache, extractHeadingsFromCache,
getAliasesFromMetadata, getAliasesFromMetadata,
removeDiacritics,
stringsToRegex, stringsToRegex,
stripMarkdownCharacters, stripMarkdownCharacters,
wait, wait,
@@ -48,6 +49,8 @@ export async function initGlobalSearchIndex(): Promise<void> {
resetNotesCache() resetNotesCache()
minisearchInstance = new MiniSearch({ minisearchInstance = new MiniSearch({
tokenize, tokenize,
processTerm: term =>
settings.ignoreDiacritics ? removeDiacritics(term) : term,
idField: 'path', idField: 'path',
fields: [ fields: [
'basename', 'basename',

View File

@@ -11,6 +11,7 @@ interface WeightingSettings {
export interface OmnisearchSettings extends WeightingSettings { export interface OmnisearchSettings extends WeightingSettings {
respectExcluded: boolean respectExcluded: boolean
reindexInRealTime: boolean reindexInRealTime: boolean
ignoreDiacritics: boolean
showIndexingNotices: boolean showIndexingNotices: boolean
showShortName: boolean showShortName: boolean
CtrlJK: boolean CtrlJK: boolean
@@ -68,6 +69,19 @@ export class SettingsTab extends PluginSettingTab {
}), }),
) )
// Ignore diacritics
// new Setting(containerEl)
// .setName('Ignore diacritics')
// .setDesc(
// 'Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky". Needs a restart to take effect.',
// )
// .addToggle(toggle =>
// toggle.setValue(settings.ignoreDiacritics).onChange(async v => {
// settings.ignoreDiacritics = v
// await saveSettings(this.plugin)
// }),
// )
// #endregion Behavior // #endregion Behavior
// #region User Interface // #region User Interface
@@ -129,7 +143,9 @@ export class SettingsTab extends PluginSettingTab {
new Setting(containerEl).setName('Shortcuts').setHeading() new Setting(containerEl).setName('Shortcuts').setHeading()
new Setting(containerEl) new Setting(containerEl)
.setName('Use [Ctrl/Cmd]+j/k to navigate up/down in the results, if Vim mode is enabled') .setName(
'Use [Ctrl/Cmd]+j/k to navigate up/down in the results, if Vim mode is enabled',
)
.addToggle(toggle => .addToggle(toggle =>
toggle.setValue(settings.CtrlJK).onChange(async v => { toggle.setValue(settings.CtrlJK).onChange(async v => {
settings.CtrlJK = v settings.CtrlJK = v
@@ -138,7 +154,9 @@ export class SettingsTab extends PluginSettingTab {
) )
new Setting(containerEl) new Setting(containerEl)
.setName('Use [Ctrl/Cmd]+n/p to navigate up/down in the results, if Vim mode is enabled') .setName(
'Use [Ctrl/Cmd]+n/p to navigate up/down in the results, if Vim mode is enabled',
)
.addToggle(toggle => .addToggle(toggle =>
toggle.setValue(settings.CtrlNP).onChange(async v => { toggle.setValue(settings.CtrlNP).onChange(async v => {
settings.CtrlNP = v settings.CtrlNP = v
@@ -163,6 +181,7 @@ export class SettingsTab extends PluginSettingTab {
export const DEFAULT_SETTINGS: OmnisearchSettings = { export const DEFAULT_SETTINGS: OmnisearchSettings = {
respectExcluded: true, respectExcluded: true,
reindexInRealTime: false, reindexInRealTime: false,
ignoreDiacritics: true,
showIndexingNotices: false, showIndexingNotices: false,
showShortName: false, showShortName: false,

View File

@@ -143,3 +143,10 @@ export function getAliasesFromMetadata(
.map(s => (s ? s.trim() : s)) .map(s => (s ? s.trim() : s))
.filter(s => !!s) .filter(s => !!s)
} }
/**
* https://stackoverflow.com/a/37511463
*/
export function removeDiacritics(str: string): string {
return str.normalize('NFD').replace(/\p{Diacritic}/gu, '')
}