Formatting utilities

Published

June 13, 2024

Tabulae includes utilities for formatting traditional paradigms in Markdown.

You can create paradigms from a lexeme and a Tabulae data set.

Note

The current version of Tabulae does not yet support generating paradigms from a lexeme + a parser, but that option is planned for a subsequent release.

With a variable repo, we create a Tabulae dataset from sources in the project github repository’s datasets directory.

using Tabulae, CitableParserBuilder

shareddir = joinpath(repo, "datasets", "core-infl-shared") 
lat25dir = joinpath(repo, "datasets", "core-infl-lat25") 
ds = dataset([shareddir, lat25dir])

Noun declensions

Displaying Markdown

All the formatting functions documented here return strings of Markdown text. The code snippets use the Markdown.parse method to return a Markdown.MD object that quarto documentation formats appropriately. This works in other contexts such as Pluto notebooks and the Julia REPL.

Format a paradigm for a single noun:

using Markdown
animus = LexemeUrn("ls.n2636")
md_declension(animus, ds) |> Markdown.parse
Singular Plural
nominative animus animi
genitive animi animorum
dative animo animis
accusative animum animos
ablative animo animis
vocative anime animi

Format a paradigm for a list of nouns; optionally, include a list of headings to use for the column for each noun.

agricola = LexemeUrn("ls.n1626")
md_declension([agricola, animus], ds; headings = ["1st decl.", "2nd decl."]) |> Markdown.parse
1st decl. 2nd decl.
singular
nominative agricola animus
genitive agricolae animi
dative agricolae animo
accusative agricolam animum
ablative agricola animo
vocative agricola anime
plural
nominative agricolae animi
genitive agricolarum animorum
dative agricolis animis
accusative agricolas animos
ablative agricolis animis
vocative agricolae animi

Verb conjugations

Format a verb paradigm in the indicative and subjunctive of a single tense for both active and passive voices.

amo = LexemeUrn("ls.n2280")
impft = lmpTense("imperfect")
md_tenseconjugation(impft, amo, ds) |> Markdown.parse

Active voice

Indicative Subjunctive
first singular amabam amarem
second singular amabas amares
third singular amabat amaret
first plural amabamus amaremus
second plural amabatis amaretis
third plural amabant amarent

Passive voice

Indicative Subjunctive
first singular amabar amarer
second singular amabaris, amabare amareris, amarere
third singular amabatur amaretur
first plural amabamur amaremur
second plural amabamini amaremini
third plural amabantur amarentur

An entire verb:

md_verb_conjugation(amo, ds) |> Markdown.parse

Present system

Present tense

Active voice

Indicative Subjunctive
first singular amo amem
second singular amas ames
third singular amat amet
first plural amamus amemus
second plural amatis ametis
third plural amant ament

Passive voice

Indicative Subjunctive
first singular amor amer
second singular amaris, amare ameris, amere
third singular amatur ametur
first plural amamur amemur
second plural amamini amemini
third plural amantur amentur

Imperative

Singular Plural
active ama amate
passive amare amamini

Infinitives

active: amare

passive: amari

Participles

active: amans, amans, amans

Imperfect tense

Active voice

Indicative Subjunctive
first singular amabam amarem
second singular amabas amares
third singular amabat amaret
first plural amabamus amaremus
second plural amabatis amaretis
third plural amabant amarent

Passive voice

Indicative Subjunctive
first singular amabar amarer
second singular amabaris, amabare amareris, amarere
third singular amabatur amaretur
first plural amabamur amaremur
second plural amabamini amaremini
third plural amabantur amarentur