From c1f2ad65f4c1aa67635bd7793b22fa74fa16d82e Mon Sep 17 00:00:00 2001 From: Valentyne Stigloher Date: Sat, 19 Apr 2025 12:22:09 +0200 Subject: [PATCH] (refactor)(pronouns) move grammar table definitions to config.suml --- locale/config.ts | 5 + locale/de/config.suml | 162 ++++++++++++++++++++++ locale/de/pronouns/GrammarTables.vue | 183 +------------------------ locale/it/config.suml | 170 +++++++++++++++++++++++ locale/it/pronouns/GrammarTables.vue | 196 +-------------------------- src/language/grammarTables.ts | 3 + 6 files changed, 346 insertions(+), 373 deletions(-) diff --git a/locale/config.ts b/locale/config.ts index 40dfe490f..9d15a0b72 100644 --- a/locale/config.ts +++ b/locale/config.ts @@ -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 = ({ enabled: true } & T) | { enabled: false } & Partial; @@ -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 diff --git a/locale/de/config.suml b/locale/de/config.suml index e249b0c67..56ed847f8 100644 --- a/locale/de/config.suml +++ b/locale/de/config.suml @@ -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' diff --git a/locale/de/pronouns/GrammarTables.vue b/locale/de/pronouns/GrammarTables.vue index 5c0e011c9..cb391708e 100644 --- a/locale/de/pronouns/GrammarTables.vue +++ b/locale/de/pronouns/GrammarTables.vue @@ -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)); diff --git a/locale/it/config.suml b/locale/it/config.suml index 5a659a847..36412b7a1 100644 --- a/locale/it/config.suml +++ b/locale/it/config.suml @@ -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 diff --git a/locale/it/pronouns/GrammarTables.vue b/locale/it/pronouns/GrammarTables.vue index 60f4808f1..495bd101b 100644 --- a/locale/it/pronouns/GrammarTables.vue +++ b/locale/it/pronouns/GrammarTables.vue @@ -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)); diff --git a/src/language/grammarTables.ts b/src/language/grammarTables.ts index 1359715c1..06fc47048 100644 --- a/src/language/grammarTables.ts +++ b/src/language/grammarTables.ts @@ -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;