(refactor)(pronouns) move grammar table definitions to config.suml

This commit is contained in:
Valentyne Stigloher 2025-04-19 12:22:09 +02:00
parent 7e004234fd
commit c1f2ad65f4
6 changed files with 346 additions and 373 deletions

View File

@ -1,6 +1,7 @@
import type { Engine, LanguageCode, VoiceId } from '@aws-sdk/client-polly';
import type { Category } from '~/src/classes.ts';
import type { GrammarTablesDefinition } from '~/src/language/grammarTables.ts';
export type Toggable<T> = ({ enabled: true } & T) | { enabled: false } & Partial<T>;
@ -159,6 +160,10 @@ export interface PronounsConfig {
* typically named after their grammatical function in english snake_case
*/
morphemes: string[];
/**
* grammar table definitions to show morphemes in a compact way
*/
grammarTables?: GrammarTablesDefinition;
/**
* route path for any pronoun usage (translated)
* `false` means that it is disabled

View File

@ -67,6 +67,168 @@ pronouns:
- 'adverb_back_then'
- 'adverb_by'
- 'adjective_back_then'
grammarTables:
simple:
-
columnHeader:
-
name: 'Nominativ'
short: 'N'
-
name: 'Possessiv'
short: 'P'
-
name: 'Dativ'
short: 'D'
-
name: 'Akkusativ'
short: 'A'
sections:
-
variants:
-
morphemeCells:
- 'pronoun_n'
-
morpheme: 'possessive_determiner_m_n'
highlightsMorphemes:
- 'possessive_determiner_f_n'
- 'possessive_determiner_f_d'
- 'possessive_determiner_f_a'
- 'possessive_determiner_f_g'
- 'possessive_determiner_m_n'
- 'possessive_determiner_m_d'
- 'possessive_determiner_m_a'
- 'possessive_determiner_m_g'
- 'possessive_determiner_n_n'
- 'possessive_determiner_n_d'
- 'possessive_determiner_n_a'
- 'possessive_determiner_n_g'
- 'possessive_determiner_x_n'
- 'possessive_determiner_x_d'
- 'possessive_determiner_x_a'
- 'possessive_determiner_x_g'
- 'possessive_determiner_pl_n'
- 'possessive_determiner_pl_d'
- 'possessive_determiner_pl_a'
- 'possessive_determiner_pl_g'
- 'possessive_pronoun_f_n'
- 'possessive_pronoun_f_d'
- 'possessive_pronoun_f_a'
- 'possessive_pronoun_f_g'
- 'possessive_pronoun_m_n'
- 'possessive_pronoun_m_d'
- 'possessive_pronoun_m_a'
- 'possessive_pronoun_m_g'
- 'possessive_pronoun_n_n'
- 'possessive_pronoun_n_d'
- 'possessive_pronoun_n_a'
- 'possessive_pronoun_n_g'
- 'possessive_pronoun_x_n'
- 'possessive_pronoun_x_d'
- 'possessive_pronoun_x_a'
- 'possessive_pronoun_x_g'
- 'possessive_pronoun_pl_n'
- 'possessive_pronoun_pl_d'
- 'possessive_pronoun_pl_a'
- 'possessive_pronoun_pl_g'
- 'pronoun_d'
- 'pronoun_a'
comprehensive:
-
columnHeader:
-
name: 'Nominativ'
short: 'N'
-
name: 'Genitiv'
short: 'G'
-
name: 'Dativ'
short: 'D'
-
name: 'Akkusativ'
short: 'A'
sections:
-
header:
name: 'Personalpronomen'
short: 'Personalp.'
variants:
base: 'pronoun'
type: 'case'
-
header:
name: 'Possessivartikel'
short: 'Possessivart.'
variants:
base: 'possessive_determiner'
type: 'declension-with-case'
-
header:
name: 'Possessivpronomen'
short: 'Possessivp.'
variants:
base: 'possessive_pronoun'
type: 'declension-with-case'
-
header:
name: 'Relativpronomen'
short: 'Relativp.'
variants:
base: 'relative'
type: 'case'
-
header:
name: 'Demonstrativpronomen'
short: 'Demonstrativp.'
variants:
base: 'demonstrative'
type: 'case'
-
columnHeader:
-
name: ''
short: ''
sections:
-
header:
name: 'weitere Pronomen'
short: 'weitere P.'
variants:
-
name: 'gleicher Art'
morphemeCells:
- 'pronoun_equal'
-
name: 'zugehörig'
morphemeCells:
- 'possessive_pronoun_substantivized'
-
header:
name: 'Adverbien'
short: 'Adverb.'
variants:
-
name: 'wegen'
morphemeCells:
- 'adverb_because'
-
name: 'damals'
morphemeCells:
- 'adverb_back_then'
-
name: 'von'
morphemeCells:
- 'adverb_by'
-
header:
name: 'spezifische Adjektive'
short: 'spez. Adj.'
variants:
-
morphemeCells:
- 'adjective_back_then'
route: 'pronomen'
any: 'beliebige'
comprehensive: 'erweitert'

View File

@ -10,187 +10,12 @@ const props = defineProps<{
counter: number;
}>();
const cases = ['n', 'g', 'd', 'a'];
const simpleGrammarTables: GrammarTableDefinition[] = [
{
columnHeader: [
{
name: 'Nominativ',
short: 'N',
},
{
name: 'Possessiv',
short: 'P',
},
{
name: 'Dativ',
short: 'D',
},
{
name: 'Akkusativ',
short: 'A',
},
],
sections: [
{
variants: [
{
morphemeCells: [
'pronoun_n',
{
morpheme: 'possessive_determiner_m_n',
highlightsMorphemes: ['determiner', 'pronoun'].flatMap((possessiveKind) => {
return ['f', 'm', 'n', 'x', 'pl'].flatMap((genus) => {
return cases.flatMap((casus) => {
return `possessive_${possessiveKind}_${genus}_${casus}`;
});
});
}),
},
'pronoun_d',
'pronoun_a',
],
},
],
},
],
},
];
const comprehensiveGrammarTables: GrammarTableDefinition[] = [
{
columnHeader: [
{
name: 'Nominativ',
short: 'N',
},
{
name: 'Genitiv',
short: 'G',
},
{
name: 'Dativ',
short: 'D',
},
{
name: 'Akkusativ',
short: 'A',
},
],
sections: [
{
header: {
name: 'Personalpronomen',
short: 'Personalp.',
},
variants: {
base: 'pronoun',
type: 'case',
},
},
{
header: {
name: 'Possessivartikel',
short: 'Possessivart.',
},
variants: {
base: 'possessive_determiner',
type: 'declension-with-case',
},
},
{
header: {
name: 'Possessivpronomen',
short: 'Possessivp.',
},
variants: {
base: 'possessive_pronoun',
type: 'declension-with-case',
},
},
{
header: {
name: 'Relativpronomen',
short: 'Relativp.',
},
variants: {
base: 'relative',
type: 'case',
},
},
{
header: {
name: 'Demonstrativpronomen',
short: 'Demonstrativp.',
},
variants: {
base: 'demonstrative',
type: 'case',
},
},
],
},
{
columnHeader: [
{
name: '',
short: '',
},
],
sections: [
{
header: {
name: 'weitere Pronomen',
short: 'weitere P.',
},
variants: [
{
name: 'gleicher Art',
morphemeCells: ['pronoun_equal'],
},
{
name: 'zugehörig',
morphemeCells: ['possessive_pronoun_substantivized'],
},
],
},
{
header: {
name: 'Adverbien',
short: 'Adverb.',
},
variants: [
{
name: 'wegen',
morphemeCells: ['adverb_because'],
},
{
name: 'damals',
morphemeCells: ['adverb_back_then'],
},
{
name: 'von',
morphemeCells: ['adverb_by'],
},
],
},
{
header: {
name: 'spezifische Adjektive',
short: 'spez. Adj.',
},
variants: [
{
morphemeCells: ['adjective_back_then'],
},
],
},
],
},
];
const config = useConfig();
const grammarTables = computed((): GrammarTableDefinition[] => {
return props.comprehensive ? comprehensiveGrammarTables : simpleGrammarTables;
const grammarTables = config.pronouns.grammarTables as
{ simple: GrammarTableDefinition[]; comprehensive: GrammarTableDefinition[] };
return props.comprehensive ? grammarTables.comprehensive : grammarTables.simple;
});
const exampleValues = computed(() => props.selectedPronoun.toExampleValues(props.counter));

View File

@ -38,6 +38,176 @@ pronouns:
- 'l'
- 'h'
- 'i'
grammarTables:
-
columnHeader:
-
name: 'Nominativo'
short: 'N'
-
name: 'Dativo'
short: 'D'
-
name: 'Accusativo'
short: 'A'
sections:
-
variants:
-
morphemeCells:
- 'pronoun_n'
- 'pronoun_d'
- 'pronoun_a'
-
columnHeader:
-
name: 'Singolare'
short: 'Sing.'
-
name: 'Plurale'
short: 'Plur.'
sections:
-
header:
name: 'Accordi finali'
short: 'Accordi finali'
variants:
-
morphemeCells:
-
morpheme: 'inflection'
prefix: '-'
-
morpheme: 'plural_inflection'
prefix: '-'
-
header:
name: 'Possessivo'
short: 'Possessivo'
variants:
-
name: '1a persona'
morphemeCells:
-
morpheme: 'possessive_m'
prefix: 'm'
-
morpheme: 'plural_possessive_m'
prefix: 'm'
-
name: '2a persona'
morphemeCells:
-
morpheme: 'possessive'
prefix: 't'
-
morpheme: 'plural_possessive'
prefix: 't'
-
name: '3a persona'
morphemeCells:
-
morpheme: 'possessive'
prefix: 's'
-
morpheme: 'plural_possessive'
prefix: 's'
-
header:
name: 'Articolo determinativo'
short: 'Articolo determinativo'
variants:
-
name: 'seguito da vocale o h muta'
morphemeCells:
- 'article_v'
- 'plural_article_vs'
-
name: 'seguito da consonante normale'
morphemeCells:
- 'article'
- 'plural_article'
-
name: 'seguito da consonante speciale'
morphemeCells:
- 'article_s'
- 'plural_article_vs'
-
header:
name: 'Articolo indeterminativo'
short: 'Articolo indeterminativo'
variants:
-
name: 'seguito da vocale o h muta'
morphemeCells:
- 'indefinite_article_v'
-
name: 'seguito da consonante normale'
morphemeCells:
- 'indefinite_article'
-
name: 'seguito da consonante speciale'
morphemeCells:
- 'indefinite_article_s'
-
header:
name: 'Preposizione articolata'
short: 'Preposizione articolata'
variants:
-
name: '“di” seguito da vocale o h muta'
morphemeCells:
-
morpheme: 'articled_preposition_v'
prefix: 'de'
-
morpheme: 'plural_articled_preposition_v'
prefix: 'de'
-
name: '“di” seguito da consonante normale'
morphemeCells:
-
morpheme: 'articled_preposition'
prefix: 'de'
-
morpheme: 'plural_articled_preposition'
prefix: 'de'
-
name: '“di” seguito da consonante speciale'
morphemeCells:
-
morpheme: 'articled_preposition_s'
prefix: 'de'
-
morpheme: 'plural_articled_preposition_s'
prefix: 'de'
-
name: '“a” seguito da vocale o h muta'
morphemeCells:
-
morpheme: 'articled_preposition_v'
prefix: 'a'
-
morpheme: 'plural_articled_preposition_v'
prefix: 'a'
-
name: '“a” seguito da consonante normale'
morphemeCells:
-
morpheme: 'articled_preposition'
prefix: 'a'
-
morpheme: 'plural_articled_preposition'
prefix: 'a'
-
name: '“a” seguito da consonante speciale'
morphemeCells:
-
morpheme: 'articled_preposition_s'
prefix: 'a'
-
morpheme: 'plural_articled_preposition_s'
prefix: 'a'
route: 'pronomi'
any: 'qualsiasi'
plurals: true

View File

@ -2,206 +2,14 @@
import type { Pronoun } from '~/src/classes.ts';
import { loadPronounExamples } from '~/src/data.ts';
import type { Example } from '~/src/language/examples.ts';
import type { GrammarTableDefinition } from '~/src/language/grammarTables.ts';
const props = defineProps<{
selectedPronoun: Pronoun;
counter: number;
}>();
const grammarTables: GrammarTableDefinition[] = [
{
columnHeader: [
{
name: 'Nominativo',
short: 'N',
},
{
name: 'Dativo',
short: 'D',
},
{
name: 'Accusativo',
short: 'A',
},
],
sections: [
{
variants: [
{
morphemeCells: [
'pronoun_n',
'pronoun_d',
'pronoun_a',
],
},
],
},
],
},
{
columnHeader: [
{
name: 'Singolare',
short: 'Sing.',
},
{
name: 'Plurale',
short: 'Plur.',
},
],
sections: [
{
header: {
name: 'Accordi finali',
short: 'Accordi finali',
},
variants: [
{
morphemeCells: [
{ morpheme: 'inflection', prefix: '-' },
{ morpheme: 'plural_inflection', prefix: '-' },
],
},
],
},
{
header: {
name: 'Possessivo',
short: 'Possessivo',
},
variants: [
{
name: '1a persona',
morphemeCells: [
{ morpheme: 'possessive_m', prefix: 'm' },
{ morpheme: 'plural_possessive_m', prefix: 'm' },
],
},
{
name: '2a persona',
morphemeCells: [
{ morpheme: 'possessive', prefix: 't' },
{ morpheme: 'plural_possessive', prefix: 't' },
],
},
{
name: '3a persona',
morphemeCells: [
{ morpheme: 'possessive', prefix: 's' },
{ morpheme: 'plural_possessive', prefix: 's' },
],
},
],
},
{
header: {
name: 'Articolo determinativo',
short: 'Articolo determinativo',
},
variants: [
{
name: 'seguito da vocale o h muta',
morphemeCells: [
'article_v',
'plural_article_vs',
],
},
{
name: 'seguito da consonante normale',
morphemeCells: [
'article',
'plural_article',
],
},
{
name: 'seguito da consonante speciale',
morphemeCells: [
'article_s',
'plural_article_vs',
],
},
],
},
{
header: {
name: 'Articolo indeterminativo',
short: 'Articolo indeterminativo',
},
variants: [
{
name: 'seguito da vocale o h muta',
morphemeCells: [
'indefinite_article_v',
],
},
{
name: 'seguito da consonante normale',
morphemeCells: [
'indefinite_article',
],
},
{
name: 'seguito da consonante speciale',
morphemeCells: [
'indefinite_article_s',
],
},
],
},
{
header: {
name: 'Preposizione articolata',
short: 'Preposizione articolata',
},
variants: [
{
name: '“di” seguito da vocale o h muta',
morphemeCells: [
{ morpheme: 'articled_preposition_v', prefix: 'de' },
{ morpheme: 'plural_articled_preposition_v', prefix: 'de' },
],
},
{
name: '“di” seguito da consonante normale',
morphemeCells: [
{ morpheme: 'articled_preposition', prefix: 'de' },
{ morpheme: 'plural_articled_preposition', prefix: 'de' },
],
},
{
name: '“di” seguito da consonante speciale',
morphemeCells: [
{ morpheme: 'articled_preposition_s', prefix: 'de' },
{ morpheme: 'plural_articled_preposition_s', prefix: 'de' },
],
},
{
name: '“a” seguito da vocale o h muta',
morphemeCells: [
{ morpheme: 'articled_preposition_v', prefix: 'a' },
{ morpheme: 'plural_articled_preposition_v', prefix: 'a' },
],
},
{
name: '“a” seguito da consonante normale',
morphemeCells: [
{ morpheme: 'articled_preposition', prefix: 'a' },
{ morpheme: 'plural_articled_preposition', prefix: 'a' },
],
},
{
name: '“a” seguito da consonante speciale',
morphemeCells: [
{ morpheme: 'articled_preposition_s', prefix: 'a' },
{ morpheme: 'plural_articled_preposition_s', prefix: 'a' },
],
},
],
},
],
},
];
const config = useConfig();
const grammarTables = config.pronouns.grammarTables;
const exampleValues = computed(() => props.selectedPronoun.toExampleValues(props.counter));

View File

@ -1,5 +1,8 @@
import type { MorphemeValue } from '~/src/language/morphemes.ts';
export type GrammarTablesDefinition = GrammarTableDefinition[]
| { simple: GrammarTableDefinition[]; comprehensive: GrammarTableDefinition[] };
export interface Header {
name: string;
short?: string;