Always remove diacritics
This commit is contained in:
parent
42df9465cf
commit
f0c16d5905
|
@ -11,10 +11,7 @@
|
|||
import { onDestroy, onMount, tick } from 'svelte'
|
||||
import { MarkdownView, Platform } from 'obsidian'
|
||||
import ModalContainer from './ModalContainer.svelte'
|
||||
import {
|
||||
LocatorInFileModal,
|
||||
LocatorVaultModal,
|
||||
} from '../components/modals'
|
||||
import { LocatorInFileModal, LocatorVaultModal } from '../components/modals'
|
||||
import ResultItemInFile from './ResultItemInFile.svelte'
|
||||
import { Query } from '../search/query'
|
||||
import { openNote } from '../tools/notes'
|
||||
|
@ -51,8 +48,8 @@
|
|||
$: (async () => {
|
||||
if (searchQuery) {
|
||||
query = new Query(searchQuery, {
|
||||
ignoreDiacritics: plugin.settings.ignoreDiacritics,
|
||||
ignoreArabicDiacritics: plugin.settings.ignoreArabicDiacritics,
|
||||
ignoreDiacritics: true,
|
||||
ignoreArabicDiacritics: true,
|
||||
})
|
||||
note =
|
||||
(
|
||||
|
@ -163,13 +160,13 @@
|
|||
</script>
|
||||
|
||||
<InputSearch
|
||||
plugin="{plugin}"
|
||||
on:input="{e => (searchQuery = e.detail)}"
|
||||
{plugin}
|
||||
on:input={e => (searchQuery = e.detail)}
|
||||
placeholder="Locator - File"
|
||||
initialValue="{previousQuery}">
|
||||
initialValue={previousQuery}>
|
||||
<div class="omnisearch-input-container__buttons">
|
||||
{#if Platform.isMobile}
|
||||
<button on:click="{switchToVaultModal}">Vault search</button>
|
||||
<button on:click={switchToVaultModal}>Vault search</button>
|
||||
{/if}
|
||||
</div>
|
||||
</InputSearch>
|
||||
|
@ -179,15 +176,15 @@
|
|||
{#each groupedOffsets as offset, i}
|
||||
<ResultItemInFile
|
||||
{plugin}
|
||||
offset="{offset}"
|
||||
note="{note}"
|
||||
index="{i}"
|
||||
selected="{i === selectedIndex}"
|
||||
on:mousemove="{_e => (selectedIndex = i)}"
|
||||
on:click="{evt => openSelection(evt.ctrlKey)}"
|
||||
on:auxclick="{evt => {
|
||||
{offset}
|
||||
{note}
|
||||
index={i}
|
||||
selected={i === selectedIndex}
|
||||
on:mousemove={_e => (selectedIndex = i)}
|
||||
on:click={evt => openSelection(evt.ctrlKey)}
|
||||
on:auxclick={evt => {
|
||||
if (evt.button == 1) openSelection(true)
|
||||
}}" />
|
||||
}} />
|
||||
{/each}
|
||||
{:else}
|
||||
<div style="text-align: center;">
|
||||
|
|
|
@ -149,8 +149,8 @@
|
|||
cancelableQuery = null
|
||||
}
|
||||
query = new Query(searchQuery, {
|
||||
ignoreDiacritics: plugin.settings.ignoreDiacritics,
|
||||
ignoreArabicDiacritics: plugin.settings.ignoreArabicDiacritics,
|
||||
ignoreDiacritics: true,
|
||||
ignoreArabicDiacritics: true,
|
||||
})
|
||||
cancelableQuery = cancelable(
|
||||
new Promise(resolve => {
|
||||
|
|
|
@ -331,9 +331,7 @@ export class SearchEngine {
|
|||
results.map(async result => {
|
||||
const doc = await this.plugin.documentsRepository.getDocument(result.id)
|
||||
if (!doc) {
|
||||
console.warn(
|
||||
`Locator - Note "${result.id}" not in the live cache`
|
||||
)
|
||||
console.warn(`Locator - Note "${result.id}" not in the live cache`)
|
||||
countError(true)
|
||||
}
|
||||
return doc
|
||||
|
@ -349,12 +347,7 @@ export class SearchEngine {
|
|||
const title = document?.path.toLowerCase() ?? ''
|
||||
const content = (document?.cleanedContent ?? '').toLowerCase()
|
||||
return exactTerms.every(
|
||||
q =>
|
||||
content.includes(q) ||
|
||||
removeDiacritics(
|
||||
title,
|
||||
this.plugin.settings.ignoreArabicDiacritics
|
||||
).includes(q)
|
||||
q => content.includes(q) || removeDiacritics(title).includes(q)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
@ -524,11 +517,7 @@ export class SearchEngine {
|
|||
}
|
||||
return (doc as any)[fieldName]
|
||||
},
|
||||
processTerm: (term: string) =>
|
||||
(this.plugin.settings.ignoreDiacritics
|
||||
? removeDiacritics(term, this.plugin.settings.ignoreArabicDiacritics)
|
||||
: term
|
||||
).toLowerCase(),
|
||||
processTerm: (term: string) => removeDiacritics(term).toLowerCase(),
|
||||
idField: 'path',
|
||||
fields: [
|
||||
'basename',
|
||||
|
|
|
@ -100,8 +100,6 @@ export function getDefaultSettings(app: App): LocatorSettings {
|
|||
hideExcluded: false,
|
||||
recencyBoost: RecencyCutoff.Disabled,
|
||||
downrankedFoldersFilters: [] as string[],
|
||||
ignoreDiacritics: true,
|
||||
ignoreArabicDiacritics: false,
|
||||
indexedFileTypes: [] as string[],
|
||||
displayTitle: '',
|
||||
PDFIndexing: false,
|
||||
|
|
|
@ -15,33 +15,6 @@ export function injectSettingsDanger(
|
|||
|
||||
new Setting(containerEl).setName('Danger Zone').setHeading()
|
||||
|
||||
// Ignore diacritics
|
||||
new Setting(containerEl)
|
||||
.setName('Ignore diacritics')
|
||||
.setDesc(
|
||||
htmlDescription(`Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky".<br/>
|
||||
⚠️ <span style="color: var(--text-accent)">You probably should <strong>NOT</strong> disable this.</span><br>
|
||||
⚠️ <span style="color: var(--text-accent)">Changing this setting will clear the cache.</span><br>
|
||||
${needsARestart}`)
|
||||
)
|
||||
.addToggle(toggle =>
|
||||
toggle.setValue(settings.ignoreDiacritics).onChange(async v => {
|
||||
await database.clearCache()
|
||||
settings.ignoreDiacritics = v
|
||||
await saveSettings(plugin)
|
||||
})
|
||||
)
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName('Ignore Arabic diacritics (beta)')
|
||||
.addToggle(toggle =>
|
||||
toggle.setValue(settings.ignoreArabicDiacritics).onChange(async v => {
|
||||
await database.clearCache()
|
||||
settings.ignoreArabicDiacritics = v
|
||||
await saveSettings(plugin)
|
||||
})
|
||||
)
|
||||
|
||||
// Disable Locator
|
||||
const disableDesc = new DocumentFragment()
|
||||
disableDesc.createSpan({}, span => {
|
||||
|
|
|
@ -41,9 +41,6 @@ export interface LocatorSettings extends WeightingSettings {
|
|||
recencyBoost: RecencyCutoff
|
||||
/** downrank files in the given folders */
|
||||
downrankedFoldersFilters: string[]
|
||||
/** Ignore diacritics when indexing files */
|
||||
ignoreDiacritics: boolean
|
||||
ignoreArabicDiacritics: boolean
|
||||
|
||||
/** Extensions of plain text files to index, in addition to .md */
|
||||
indexedFileTypes: string[]
|
||||
|
|
|
@ -87,8 +87,8 @@ export function getApi(plugin: LocatorPlugin) {
|
|||
return {
|
||||
async search(q: string): Promise<ResultNoteApi[]> {
|
||||
const query = new Query(q, {
|
||||
ignoreDiacritics: plugin.settings.ignoreDiacritics,
|
||||
ignoreArabicDiacritics: plugin.settings.ignoreArabicDiacritics,
|
||||
ignoreDiacritics: true,
|
||||
ignoreArabicDiacritics: true,
|
||||
})
|
||||
const raw = await plugin.searchEngine.getSuggestions(query)
|
||||
return mapResults(plugin, raw)
|
||||
|
|
|
@ -68,9 +68,7 @@ export class TextProcessor {
|
|||
const reg = this.stringsToRegex(words)
|
||||
const originalText = text
|
||||
// text = text.toLowerCase().replace(new RegExp(SEPARATORS, 'gu'), ' ')
|
||||
if (this.plugin.settings.ignoreDiacritics) {
|
||||
text = removeDiacritics(text, this.plugin.settings.ignoreArabicDiacritics)
|
||||
}
|
||||
text = removeDiacritics(text)
|
||||
const startTime = new Date().getTime()
|
||||
let match: RegExpExecArray | null = null
|
||||
let matches: SearchMatch[] = []
|
||||
|
|
|
@ -115,7 +115,7 @@ const diacriticsRegex = new RegExp(`(?!${regexpExclude})\\p{Diacritic}`, 'gu')
|
|||
/**
|
||||
* https://stackoverflow.com/a/37511463
|
||||
*/
|
||||
export function removeDiacritics(str: string, arabic = false): string {
|
||||
export function removeDiacritics(str: string, arabic = true): string {
|
||||
if (str === null || str === undefined) {
|
||||
return ''
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user