#53 - Ignoring diacritics
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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, '')
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user