diff --git a/locale/de/nouns/nounTemplates.tsv b/locale/de/nouns/nounTemplates.tsv index 696511d98..66e7d55e4 100644 --- a/locale/de/nouns/nounTemplates.tsv +++ b/locale/de/nouns/nounTemplates.tsv @@ -1,3 +1,6 @@ masc fem neutr mascPl femPl neutrPl --mann -frau -person -männer -frauen -leute -- -in -In/-:in/-*in -e -innen -Innen/-:innen/-*innen +der -mann die -frau die -person die -männer die -frauen die -leute +der - die -in das -y/de -e/din -nin/dens -ens/der:die -:in/der_die -_in/der*die -*in die -en die -innen die -ys/die -erne/die -ninnen/die -ense/die -:innen/die -_innen/die -*innen +der - die -in das -y/de -ere/din -nin/dens -ens/der:die -:in/der_die -_in/der*die -*in die -e die -innen die -ys/die -erne/die -ninnen/die -ense/die -:innen/die -_innen/die -*innen +der -e die -in das -y/de -ere/din -nin/dens -ens/der:die -:in/der_die -_in/der*die -*in die -en die -innen die -ys/die -erne/die -erninnen/die -ense/die -:innen/die -_innen/die -*innen +der -er die -erin das -y/de -ere/din -ernin/dens -ens/der:die -er:in/der_die -er_in/der*die -er*in die -er die -erinnen die -ys/de -erne/die -erninnen/die -ense/die -er:innen/die -er_innen/die -er*innen diff --git a/src/classes.ts b/src/classes.ts index 59239aee1..25ad82370 100644 --- a/src/classes.ts +++ b/src/classes.ts @@ -875,6 +875,8 @@ export interface NounRaw { declension: unknown; } +const gendersWithNumerus = ['masc', 'fem', 'neutr', 'mascPl', 'femPl', 'neutrPl'] as const; + export class Noun { id: string; masc: string[]; @@ -914,7 +916,7 @@ export class Noun { return true; } - for (const field of ['masc', 'fem', 'neutr', 'mascPl', 'femPl', 'neutrPl'] as const) { + for (const field of gendersWithNumerus) { for (const value of this[field]) { const v = value.toLowerCase(); if (filter.startsWith('-') && v.endsWith(filter.substring(1))) { @@ -947,21 +949,32 @@ export class NounTemplate { this.neutrPl = neutrPl; } + static from(data: Record): NounTemplate { + return new NounTemplate( + data.masc.split('/'), + data.fem.split('/'), + data.neutr.split('/'), + data.mascPl.split('/'), + data.femPl.split('/'), + data.neutrPl.split('/'), + ); + } + fill(stem: string) { return { - masc: this.masc.map((e) => stem + e), - fem: this.fem.map((e) => stem + e), - neutr: this.neutr.map((e) => stem + e), - mascPl: this.mascPl.map((e) => stem + e), - femPl: this.femPl.map((e) => stem + e), - neutrPl: this.neutrPl.map((e) => stem + e), + masc: this.masc.map((e) => e.replace('-', stem)), + fem: this.fem.map((e) => e.replace('-', stem)), + neutr: this.neutr.map((e) => e.replace('-', stem)), + mascPl: this.mascPl.map((e) => e.replace('-', stem)), + femPl: this.femPl.map((e) => e.replace('-', stem)), + neutrPl: this.neutrPl.map((e) => e.replace('-', stem)), base: null, }; } toString(): string { return [this.masc, this.fem, this.neutr, this.mascPl, this.femPl, this.neutrPl] - .map((es) => es.map((e) => `-${e}`).join('/')) + .map((es) => es.join('/')) .join(', ') ; } diff --git a/src/data.ts b/src/data.ts index 4c2c63df2..bbbe5e33a 100644 --- a/src/data.ts +++ b/src/data.ts @@ -20,14 +20,7 @@ export const examples = buildList(function* () { import nounTemplatesRaw from '../data/nouns/nounTemplates.tsv'; export const nounTemplates = buildList(function* () { for (const t of nounTemplatesRaw) { - yield new NounTemplate( - t.masc.replace(/-/g, '').split('/'), - t.fem.replace(/-/g, '').split('/'), - t.neutr.replace(/-/g, '').split('/'), - t.mascPl.replace(/-/g, '').split('/'), - t.femPl.replace(/-/g, '').split('/'), - t.neutrPl.replace(/-/g, '').split('/'), - ); + yield NounTemplate.from(t); } });