3 - Finalised adding support for German.

This commit is contained in:
Caleb Campbell
2025-12-27 13:38:14 +11:00
parent 2bcf3cb980
commit 59d66a247e
4 changed files with 33 additions and 22 deletions

View File

@@ -6,7 +6,7 @@ export const BOOKS: Book[] = [
{ id: 'lev', name: '3. Mose', aliases: ['Levitikus', 'Lev', '3Mo'] }, { id: 'lev', name: '3. Mose', aliases: ['Levitikus', 'Lev', '3Mo'] },
{ id: 'num', name: '4. Mose', aliases: ['Numeri', 'Num', '4Mo'] }, { id: 'num', name: '4. Mose', aliases: ['Numeri', 'Num', '4Mo'] },
{ id: 'deu', name: '5. Mose', aliases: ['Deuteronomium', 'Dtn', '5Mo'] }, { id: 'deu', name: '5. Mose', aliases: ['Deuteronomium', 'Dtn', '5Mo'] },
{ id: 'jos', name: 'Josua', aliases: ['Jos', 'Jos'] }, { id: 'jos', name: 'Josua', aliases: ['Jos'] },
{ id: 'jdg', name: 'Richter', aliases: ['Ri', 'Richt'] }, { id: 'jdg', name: 'Richter', aliases: ['Ri', 'Richt'] },
{ id: 'rut', name: 'Rut', aliases: ['Rut', 'Ru'] }, { id: 'rut', name: 'Rut', aliases: ['Rut', 'Ru'] },
{ id: '1sa', name: '1. Samuel', aliases: ['1Sam', '1Sa'] }, { id: '1sa', name: '1. Samuel', aliases: ['1Sam', '1Sa'] },
@@ -15,9 +15,9 @@ export const BOOKS: Book[] = [
{ id: '2ki', name: '2. Könige', aliases: ['2Kön', '2Kö'] }, { id: '2ki', name: '2. Könige', aliases: ['2Kön', '2Kö'] },
{ id: '1ch', name: '1. Chronik', aliases: ['1Chr', '1Ch'] }, { id: '1ch', name: '1. Chronik', aliases: ['1Chr', '1Ch'] },
{ id: '2ch', name: '2. Chronik', aliases: ['2Chr', '2Ch'] }, { id: '2ch', name: '2. Chronik', aliases: ['2Chr', '2Ch'] },
{ id: 'ezr', name: 'Esra', aliases: ['Esr', 'Esr'] }, { id: 'ezr', name: 'Esra', aliases: ['Esr'] },
{ id: 'neh', name: 'Nehemia', aliases: ['Neh', 'Neh'] }, { id: 'neh', name: 'Nehemia', aliases: ['Neh'] },
{ id: 'est', name: 'Ester', aliases: ['Esther', 'Est', 'Est'] }, { id: 'est', name: 'Ester', aliases: ['Esther', 'Est'] },
{ id: 'job', name: 'Ijob', aliases: ['Hiob', 'Ijob', 'Hi'] }, { id: 'job', name: 'Ijob', aliases: ['Hiob', 'Ijob', 'Hi'] },
{ id: 'psa', name: 'Psalmen', aliases: ['Psalter', 'Ps'] }, { id: 'psa', name: 'Psalmen', aliases: ['Psalter', 'Ps'] },
{ id: 'pro', name: 'Sprüche', aliases: ['Sprüche Salomos', 'Spr'] }, { id: 'pro', name: 'Sprüche', aliases: ['Sprüche Salomos', 'Spr'] },
@@ -28,7 +28,7 @@ export const BOOKS: Book[] = [
{ id: 'lam', name: 'Klagelieder', aliases: ['Threni', 'Klgl', 'Kla'] }, { id: 'lam', name: 'Klagelieder', aliases: ['Threni', 'Klgl', 'Kla'] },
{ id: 'ezk', name: 'Ezechiel', aliases: ['Hesekiel', 'Ez', 'Hes'] }, { id: 'ezk', name: 'Ezechiel', aliases: ['Hesekiel', 'Ez', 'Hes'] },
{ id: 'dan', name: 'Daniel', aliases: ['Dan'] }, { id: 'dan', name: 'Daniel', aliases: ['Dan'] },
{ id: 'hos', name: 'Hosea', aliases: ['Hos', 'Hos'] }, { id: 'hos', name: 'Hosea', aliases: ['Hos'] },
{ id: 'jol', name: 'Joel', aliases: ['Joe'] }, { id: 'jol', name: 'Joel', aliases: ['Joe'] },
{ id: 'amo', name: 'Amos', aliases: ['Am', 'Amos'] }, { id: 'amo', name: 'Amos', aliases: ['Am', 'Amos'] },
{ id: 'oba', name: 'Obadja', aliases: ['Ob', 'Oba'] }, { id: 'oba', name: 'Obadja', aliases: ['Ob', 'Oba'] },
@@ -52,8 +52,8 @@ export const BOOKS: Book[] = [
{ id: 'rom', name: 'Römer', aliases: ['Röm', 'Rö'] }, { id: 'rom', name: 'Römer', aliases: ['Röm', 'Rö'] },
{ id: '1co', name: '1. Korinther', aliases: ['1Kor', '1Ko'] }, { id: '1co', name: '1. Korinther', aliases: ['1Kor', '1Ko'] },
{ id: '2co', name: '2. Korinther', aliases: ['2Kor', '2Ko'] }, { id: '2co', name: '2. Korinther', aliases: ['2Kor', '2Ko'] },
{ id: 'gal', name: 'Galater', aliases: ['Gal', 'Gal'] }, { id: 'gal', name: 'Galater', aliases: ['Gal'] },
{ id: 'eph', name: 'Epheser', aliases: ['Eph', 'Eph'] }, { id: 'eph', name: 'Epheser', aliases: ['Eph'] },
{ id: 'php', name: 'Philipper', aliases: ['Phil'] }, { id: 'php', name: 'Philipper', aliases: ['Phil'] },
{ id: 'col', name: 'Kolosser', aliases: ['Kol'] }, { id: 'col', name: 'Kolosser', aliases: ['Kol'] },
{ id: '1th', name: '1. Thessalonicher', aliases: ['1Thes', '1Th'] }, { id: '1th', name: '1. Thessalonicher', aliases: ['1Thes', '1Th'] },

View File

@@ -15,10 +15,6 @@ import VersionSuggest from './version-suggest';
import { SettingsLabels } from './i18n/models'; import { SettingsLabels } from './i18n/models';
import { I18N } from './i18n'; import { I18N } from './i18n';
// STILL TODO:
// - Need to sort out books in PassageReference to use I18N.
// - Need to sort out smallcaps 'Lord' in German.
export default class LocalBibleRefSettingTab extends PluginSettingTab { export default class LocalBibleRefSettingTab extends PluginSettingTab {
private readonly hiddenClass = 'local-bible-ref-hidden'; private readonly hiddenClass = 'local-bible-ref-hidden';

View File

@@ -1,3 +1,4 @@
import { getLanguage } from 'obsidian';
import { I18N } from './i18n'; import { I18N } from './i18n';
import { Book } from './i18n/models'; import { Book } from './i18n/models';
@@ -54,10 +55,11 @@ export default class PassageReference
/** Builds the passage matching regular expression. */ /** Builds the passage matching regular expression. */
static get regExp(): RegExp { static get regExp(): RegExp {
const books = getBooksByLanguage();
let regExpString = '^\\-\\- ?('; let regExpString = '^\\-\\- ?(';
regExpString += I18N.EN.BOOKS.map( regExpString += books
(b) => `${b.name}|${b.aliases.join('|')}` .map((b) => `${b.name}|${b.aliases.join('|')}`)
).join('|'); .join('|');
regExpString += regExpString +=
') ?(\\d{1,3}(?::\\d{1,3})?' + ') ?(\\d{1,3}(?::\\d{1,3})?' +
'(?: ?\\- ?\\d{1,3}(?::\\d{1,3})?)?)' + '(?: ?\\- ?\\d{1,3}(?::\\d{1,3})?)?)' +
@@ -152,8 +154,9 @@ export default class PassageReference
/** Retrieves a book based on its alias. */ /** Retrieves a book based on its alias. */
private static getBook(alias: string): Book | undefined { private static getBook(alias: string): Book | undefined {
const books = getBooksByLanguage();
alias = alias.toLowerCase(); alias = alias.toLowerCase();
return I18N.EN.BOOKS.find((book) => { return books.find((book) => {
const aliases = book.aliases.map((a) => a.toLowerCase()); const aliases = book.aliases.map((a) => a.toLowerCase());
if (book.name.toLowerCase() === alias) return book; if (book.name.toLowerCase() === alias) return book;
if (aliases.includes(alias)) return book; if (aliases.includes(alias)) return book;
@@ -207,6 +210,16 @@ export default class PassageReference
} }
} }
function getBooksByLanguage(): Book[] {
switch (getLanguage()) {
case 'de':
return I18N.DE.BOOKS;
case 'en':
default:
return I18N.EN.BOOKS;
}
}
export enum PassageFormat { export enum PassageFormat {
Manuscript = 'manuscript', Manuscript = 'manuscript',
Paragraph = 'paragraph', Paragraph = 'paragraph',

View File

@@ -17,8 +17,9 @@ import LocalBibleRefSettings, { QuoteReferencePosition } from './settings';
import { I18N } from './i18n'; import { I18N } from './i18n';
export default class PassageSuggest extends EditorSuggest<PassageSuggestion> { export default class PassageSuggest extends EditorSuggest<PassageSuggestion> {
private settings: LocalBibleRefSettings; private readonly settings: LocalBibleRefSettings;
private settingsNotConfiguredText = ''; private readonly settingsNotConfiguredText: string;
private noSettingsNotice: Notice; private noSettingsNotice: Notice;
constructor(app: App, settings: LocalBibleRefSettings) { constructor(app: App, settings: LocalBibleRefSettings) {
@@ -55,8 +56,8 @@ export default class PassageSuggest extends EditorSuggest<PassageSuggestion> {
return null; return null;
} }
// min ref length is 6 ('--gen1') // min ref length is 5 ('--ex1')
if (cursor.ch < 6) return null; if (cursor.ch < 5) return null;
// must be a passage ref // must be a passage ref
const isPassage = PassageReference.regExp.test(line); const isPassage = PassageReference.regExp.test(line);
@@ -292,10 +293,11 @@ export default class PassageSuggest extends EditorSuggest<PassageSuggestion> {
/** Generates an excerpt for the suggestion. */ /** Generates an excerpt for the suggestion. */
private generateExcerpt(text: string): string { private generateExcerpt(text: string): string {
text = text.split(/<\/sup>/, 2)[1]; text = text.split(/<\/sup>/, 2)[1];
text = text.replace(/(?:<sup>\d+<\/sup>|> |- )/g, ''); text = text.replace(/<sup>\d+<\/sup>/g, '');
text = text.replace(/^(?:> |- )/gm, '');
text = text.replace( text = text.replace(
/<span style='font-variant: small-caps;'>Lord<\/span>/g, /<span(?:\s+\w+=['"][^'"]+['"])*>([^<]+)<\/span>/g,
'Lord' '$1'
); );
text = text.replace(/\n/g, ' '); text = text.replace(/\n/g, ' ');
text = text.replace(/ {2,}/g, ' '); text = text.replace(/ {2,}/g, ' ');