local decl = {}
local la_utilities_module = "Module:la-utilities"
local string_char_module = "Module:string/char"
local table_deep_copy_module = "Module:table/deepCopy"
local table_insert_if_not_module = "Module:table/insertIfNot"
local pairs = pairs
local toNFD = mw.ustring.toNFD
local u = require(string_char_module)
local umatch = mw.ustring.match
local usub = mw.ustring.sub
local MACRON = u(0x304)
local BREVE = u(0x306)
local DIAER = u(0x308)
local accent = "*"
local function add_form(...)
add_form = require(la_utilities_module).add_form
return add_form(...)
end
local function deep_copy(...)
deep_copy = require(table_deep_copy_module)
return deep_copy(...)
end
local function insert_if_not(...)
insert_if_not = require(table_insert_if_not_module)
return insert_if_not(...)
end
local function glossary_link(anchor, text)
text = text or anchor
return "]"
end
decl = function(data, args)
local forms = data.forms
local stem = args
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
forms = stem
-- with locative
if data.loc then
forms = stem
forms = stem
end
end
local function dat_abl_pl_subtitle(dat_abl_loc_pl, loc)
return ("dative/ablative%s plural in ''-%s''"):format(loc and "/locative" or "", dat_abl_loc_pl)
end
decl = function(data, args)
local forms, types, loc, subtitles = data.forms, data.types, data.loc, data.subtitles
local stem = args
-- normal 1st
local nom_sg = "a"
local gen_loc_sg = "ae"
local dat_sg = "ae"
local acc_sg = "am"
local abl_sg = "ā"
local voc_sg = "a"
local nom_voc_pl = "ae"
local gen_pl = "ārum"
local dat_abl_loc_pl = "īs"
local acc_pl = "ās"
-- ām
if types.am then
insert_if_not(subtitles, "nominative/vocative singular in ''-ām''")
nom_sg = "ām"
acc_sg = "ām"
abl_sg = {"ām", "ā"}
voc_sg = "ām"
-- all Greek
elseif types.Greek then
--Greek M
if types.M then
insert_if_not(subtitles, "masculine")
end
insert_if_not(subtitles, "Greek-type")
--Greek Ma
if types.Ma then
insert_if_not(subtitles, "nominative singular in ''-ās''")
nom_sg = "ās"
acc_sg = "ān"
voc_sg = "ā"
-- Greek Me
elseif types.Me then
insert_if_not(subtitles, "nominative singular in ''-ēs''")
nom_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
-- Greek
else
nom_sg = "ē"
gen_loc_sg = "ēs"
acc_sg = "ēn"
abl_sg = "ē"
voc_sg = "ē"
end
end
-- ābus
if types.abus then
dat_abl_loc_pl = "ābus"
insert_if_not(subtitles, dat_abl_pl_subtitle(dat_abl_loc_pl, loc))
elseif types.not_abus then
insert_if_not(subtitles, dat_abl_pl_subtitle(dat_abl_loc_pl, loc))
end
add_form(forms, "nom_sg", stem, nom_sg)
add_form(forms, "gen_sg", stem, gen_loc_sg)
add_form(forms, "dat_sg", stem, dat_sg)
add_form(forms, "acc_sg", stem, acc_sg)
add_form(forms, "abl_sg", stem, abl_sg)
add_form(forms, "voc_sg", stem, voc_sg)
add_form(forms, {"nom_pl", "voc_pl"}, stem, nom_voc_pl)
add_form(forms, "gen_pl", stem, gen_pl)
add_form(forms, {"dat_pl", "abl_pl"}, stem, dat_abl_loc_pl)
add_form(forms, "acc_pl", stem, acc_pl)
-- with locative
if loc then
add_form(forms, "loc_sg", stem, gen_loc_sg)
add_form(forms, "loc_pl", stem, dat_abl_loc_pl)
end
end
decl = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args, args
-- normal 2nd
forms = stem1 .. "us"
forms = stem1 .. "ī"
forms = stem1 .. "ō"
forms = stem1 .. "um"
forms = stem1 .. "ō"
forms = stem1 .. "e"
forms = stem1 .. "ī"
forms = stem1 .. "ōrum"
forms = stem1 .. "īs"
forms = stem1 .. "ōs"
forms = stem1 .. "īs"
forms = stem1 .. "ī"
-- all neuter
if types.N then
insert_if_not(subtitles, "neuter")
forms = stem1 .. "um"
forms = stem1 .. "um"
forms = stem1 .. "a"
forms = stem1 .. "a"
forms = stem1 .. "a"
-- neuter ium
if types.ium then
forms = stem1 .. "ium"
forms = {stem1 .. "iī", stem1 .. "ī"}
forms = stem1 .. "iō"
forms = stem1 .. "ium"
forms = stem1 .. "iō"
forms = stem1 .. "ium"
forms = stem1 .. "ia"
forms = stem1 .. "iōrum"
forms = stem1 .. "iīs"
forms = stem1 .. "ia"
forms = stem1 .. "iīs"
forms = stem1 .. "ia"
notes = "Found in older Latin (until the Augustan Age)."
-- neuter us, plural a
elseif types.a then
insert_if_not(subtitles, "nominative/accusative/vocative plural in ''-a''")
forms = stem1 .. "us"
forms = stem1 .. "us"
forms = stem1 .. "us"
forms = stem1 .. "a"
forms = stem1 .. "a"
forms = stem1 .. "a"
-- -vom (aevom, etc.)
elseif types.vom then
insert_if_not(subtitles, "nominative singular in ''-om'' after ''v''")
forms = stem1 .. "om"
forms = stem1 .. "om"
forms = stem1 .. "om"
-- neuter Greek in -os (cētos)
elseif types.Greek and types.us then
insert_if_not(subtitles, "Greek-type")
insert_if_not(subtitles, "nominative/accusative/vocative in ''-os''")
forms = stem1 .. "os"
forms = stem1 .. "os"
forms = stem1 .. "os"
forms = stem1 .. "ē"
forms = stem1 .. "ōn"
forms = stem1 .. "ē"
forms = stem1 .. "ē"
-- neuter Greek
elseif types.Greek then
insert_if_not(subtitles, "Greek-type")
forms = stem1 .. "on"
forms = stem1 .. "on"
forms = stem1 .. "on"
-- neuter us
elseif types.us then
insert_if_not(subtitles, "nominative/accusative/vocative in ''-us''")
forms = stem1 .. "us"
forms = stem1 .. "us"
forms = stem1 .. "us"
forms = stem1 .. "ī"
forms = stem1 .. "ōs"
forms = stem1 .. "ī"
elseif types.not_Greek or types.not_us then
insert_if_not(subtitles, "nominative/accusative/vocative in ''-um''")
end
-- er
elseif types.er then
insert_if_not(subtitles, ("nominative singular in ''-%s''"):format(umatch(toNFD(stem1), "" .. accent .. "r$") and "er" or "r"))
forms = stem1
forms = stem2 .. "ī"
forms = stem2 .. "ō"
forms = stem2 .. "um"
forms = stem2 .. "ō"
forms = stem1
forms = stem2 .. "ī"
forms = stem2 .. "ōrum"
forms = stem2 .. "īs"
forms = stem2 .. "ōs"
forms = stem2 .. "īs"
forms = stem2 .. "ī"
-- ius
elseif types.ius then
forms = stem1 .. "ius"
forms = {stem1 .. "iī", stem1 .. "ī"}
forms = stem1 .. "iō"
forms = stem1 .. "ium"
forms = stem1 .. "iō"
if types.voci then
-- Only for proper names and fīlius, genius
forms = stem1 .. "ī"
else
forms = stem1 .. "ie"
end
forms = stem1 .. "iī"
forms = stem1 .. "iōrum"
forms = stem1 .. "iīs"
forms = stem1 .. "iōs"
forms = stem1 .. "iīs"
forms = stem1 .. "iī"
notes = "Found in older Latin (until the Augustan Age)."
-- -vos (servos, etc.)
elseif types.vos then
insert_if_not(subtitles, "nominative singular in ''-os'' after ''v''")
forms = stem1 .. "os"
forms = stem1 .. "om"
-- Greek
elseif types.Greek then
insert_if_not(subtitles, "Greek-type")
forms = stem1 .. "os"
forms = stem1 .. "on"
if data.num == "pl" then
forms = stem1 .. "oe"
forms = stem1 .. "oe"
else
forms = {stem1 .. "ī", stem1 .. "oe"}
forms = {stem1 .. "ī", stem1 .. "oe"}
end
elseif types.not_Greek then
insert_if_not(subtitles, "non-Greek-type")
end
-- with -um genitive plural
if types.genplum then
insert_if_not(subtitles, "contracted genitive plural")
notes = "Contraction found in poetry."
if types.ius or types.ium then
forms = {stem2 .. "iōrum", stem2 .. "ium"}
else
forms = {stem2 .. "ōrum", stem2 .. "um"}
end
elseif types.not_genplum then
insert_if_not(subtitles, "uncontracted genitive plural")
end
-- with locative
if data.loc then
if types.ius or types.ium then
forms = stem2 .. "iī"
forms = stem2 .. "iīs"
else
forms = stem2 .. "ī"
forms = stem2 .. "īs"
end
end
end
local acc_sg_i_stem_subtypes = {
acc_im = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) ;
-- cannabis, senapis, sinapis
acc_sg = {"im"},
title = {"accusative singular in ''-im''"},
},
acc_im_in = {
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris ;
-- Baetis, Tigris
acc_sg = {"im", "in"},
title = {"accusative singular in ''-im'' or ''-in''"},
},
acc_im_in_em = {
-- e.g. tigris, river Līris
acc_sg = {"im", "in", "em"},
title = {"accusative singular in ''-im'', ''-in'' or ''-em''"},
},
acc_im_em = {
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or ''-em''"},
},
acc_im_occ_em = {
-- febris, pelvis, puppis, restis, securis, turris
acc_sg = {"im", "em"},
title = {"accusative singular in ''-im'' or occasionally ''-em''"},
},
acc_em_im = {
-- aqualis, clavis, lens, navis ;
-- cutis, restis
acc_sg = {"em", "im"},
title = {"accusative singular in ''-em'' or ''-im''"},
},
}
local abl_sg_i_stem_subtypes = {
abl_i = {
-- amussis, basis, buris, cucumis, gummis, mephitis, paraphrasis, poesis, ravis, sitis, tussis, (vis) ;
-- cities, rivers, gods, e.g. Bilbilis, Syrtis, Tiberis, Anubis, Osiris ;
-- canalis "water pipe", months in -is or -er, nouns originally i-stem adjectives such as aedilis, affinis, bipennis, familiaris, sodalis, volucris, etc.
abl_sg = {"ī"},
title = {"ablative singular in ''-ī''"},
},
abl_i_e = {
-- febris, pelvis, puppis, restis, securis, turris
abl_sg = {"ī", "e"},
title = {"ablative singular in ''-ī'' or ''-e''"},
},
abl_e_i = {
-- cannabis, senapis, sinapis ;
-- Baetis, Tigris ;
-- aqualis, clavis, lens, navis ;
-- finis, mugilis, occiput, pugil, rus, supellex, vectis
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or ''-ī''"},
},
abl_e_occ_i = {
-- amnis, anguis, avis, civis, classis, fustis, ignis, imber, orbis, pars, postis, sors, unguis, vesper
abl_sg = {"e", "ī"},
title = {"ablative singular in ''-e'' or occasionally ''-ī''"},
},
}
local function extract_stem(form, ending)
local base = umatch(form, "^(.*)" .. ending .. "$")
if not base then
error("Form " .. form .. " should end in -" .. ending)
end
return base
end
local function count_vowels(stem)
return select(2, toNFD(stem):gsub("", ""))
end
decl = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem1, stem2 = args, args
local function non_i_stem_type()
return (count_vowels(stem1) > count_vowels(stem2) and "parisyllabic" or "imparisyllabic") .. " non-i-stem"
end
--normal 3rd
forms = stem1
forms = stem2 .. "is"
forms = stem2 .. "ī"
forms = stem2 .. "em"
forms = stem2 .. "e"
forms = stem1
forms = stem2 .. "ēs"
forms = stem2 .. "um"
forms = stem2 .. "ibus"
forms = stem2 .. "ēs"
forms = stem2 .. "ibus"
forms = stem2 .. "ēs"
local acc_sg_i_stem_subtype = false
local not_acc_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if acc_sg_i_stem_subtypes then
acc_sg_i_stem_subtype = true
break
end
end
for acc_sg_subtype, _ in pairs(acc_sg_i_stem_subtypes) do
if types then
not_acc_sg_i_stem_subtype = true
break
end
end
local abl_sg_i_stem_subtype = false
local not_abl_sg_i_stem_subtype = false
for subtype, _ in pairs(types) do
if abl_sg_i_stem_subtypes then
abl_sg_i_stem_subtype = true
break
end
end
for abl_sg_subtype, _ in pairs(abl_sg_i_stem_subtypes) do
if types then
not_abl_sg_i_stem_subtype = true
break
end
end
-- all Greek
if types.Greek then
insert_if_not(subtitles, "Greek-type")
-- Greek er
if types.er then
insert_if_not(subtitles, "variant with nominative singular in ''-ēr''")
stem1 = extract_stem(stem1, "ēr")
forms = stem1 .. "ēr"
forms = stem1 .. "eris"
forms = stem1 .. "erī"
forms = {stem1 .. "era", stem1 .. "erem"}
forms = stem1 .. "ere"
forms = stem1 .. "ēr"
forms = stem1 .. "erēs"
forms = stem1 .. "erum"
forms = stem1 .. "eribus"
forms = stem1 .. "erēs"
forms = stem1 .. "eribus"
forms = stem1 .. "erēs"
-- Greek on
elseif types.on then
insert_if_not(subtitles, "variant with nominative singular in ''-ōn''")
stem1 = extract_stem(stem1, "ōn")
forms = stem1 .. "ōn"
forms = {stem1 .. "ontis", stem1 .. "ontos"}
forms = stem1 .. "ontī"
forms = stem1 .. "onta"
forms = stem1 .. "onte"
forms = stem1 .. "ōn"
forms = stem1 .. "ontēs"
forms = {stem1 .. "ontum", stem1 .. "ontium"}
forms = stem1 .. "ontibus"
forms = {stem1 .. "ontēs", stem1 .. "ontās"}
forms = stem1 .. "ontibus"
forms = stem1 .. "ontēs"
-- Greek i-stem
elseif types.I then
insert_if_not(subtitles, "i-stem")
forms = {stem2 .. "is", stem2 .. "eōs", stem2 .. "ios"}
forms = {stem2 .. "im", stem2 .. "in", stem2 .. "em"}
forms = {stem2 .. "ī", stem2 .. "e"}
forms = {stem2 .. "is", stem2 .. "i"}
notes = "Found sometimes in Medieval and New Latin."
notes = "Found sometimes in Medieval and New Latin."
forms = {stem2 .. "ēs", stem2 .. "eis"}
forms = {stem2 .. "ium", stem2 .. "eōn"}
forms = {stem2 .. "ēs", stem2 .. "eis"}
forms = {stem2 .. "ēs", stem2 .. "eis"}
if types.poetic_esi then
forms = {stem2 .. "ibus", stem2 .. "esi"}
forms = {stem2 .. "ibus", stem2 .. "esi"}
notes = "Primarily in poetry."
notes = "Primarily in poetry."
end
-- normal Greek
else
insert_if_not(subtitles, "normal variant")
forms = stem2 .. "os"
if umatch(toNFD(stem2), "" .. accent .. "$") then
forms = stem2 .. "n"
else
forms = stem2 .. "a"
end
forms = stem2 .. "es"
forms = stem2 .. "as"
forms = stem2 .. "es"
if umatch(toNFD(stem1), "" .. accent .. "s$") then
-- Per Hiley, words in -is and -ys have a poetic vocative
-- without the -s, but otherwise the vocative is the same
-- as the nominative.
forms = {stem1, (stem1:gsub("s$", ""))}
notes = "In poetry."
end
end
elseif types.not_Greek then
insert_if_not(subtitles, "non-Greek-type")
end
-- polis
if types.polis then
stem1 = extract_stem(stem1, "polis")
insert_if_not(subtitles, "i-stem")
insert_if_not(subtitles, "partially Greek-type")
forms = stem1 .. "polis"
forms = stem1 .. "polis"
forms = stem1 .. "polī"
forms = {stem1 .. "polim", stem1 .. "polin"}
forms = stem1 .. "polī"
forms = {stem1 .. "polis", stem1 .. "polī"}
elseif types.not_polis then
insert_if_not(subtitles, non_i_stem_type())
end
-- all neuter
if types.N then
insert_if_not(subtitles, "neuter")
forms = stem1
-- neuter I stem
if types.I then
-- pure variety
if types.pure then
insert_if_not(subtitles, "pure i-stem")
forms = stem2 .. "ī"
forms = stem2 .. "ia"
forms = stem2 .. "ium"
forms = stem2 .. "ia"
forms = stem2 .. "ia"
-- non-pure variety (rare)
else
insert_if_not(subtitles, "i-stem")
forms = stem2 .. "a"
forms = {stem2 .. "ium", stem2 .. "um"}
forms = stem2 .. "a"
forms = stem2 .. "a"
end
-- normal neuter
else
insert_if_not(subtitles, non_i_stem_type())
forms = stem2 .. "a"
forms = stem2 .. "a"
forms = stem2 .. "a"
end
-- I stem
elseif types.I or acc_sg_i_stem_subtype or abl_sg_i_stem_subtype then
if types.not_N then
insert_if_not(subtitles, "non-neuter i-stem")
else
insert_if_not(subtitles, "i-stem")
end
forms = stem2 .. "ium"
-- Per Allen and Greenough, Hiley and others, the acc_pl in -īs
-- applied originally to all i-stem nouns, and was current as an
-- alternative form up through Caesar.
forms = {stem2 .. "ēs", stem2 .. "īs"}
local num = data.num
for subtype, _ in pairs(types) do
local acc_sg_i_stem_props = acc_sg_i_stem_subtypes
if acc_sg_i_stem_props then
forms = {}
for _, ending in ipairs(acc_sg_i_stem_props.acc_sg) do
insert_if_not(forms, stem2 .. ending)
end
if num ~= "pl" then
for _, t in ipairs(acc_sg_i_stem_props.title) do
insert_if_not(subtitles, t)
end
end
break
end
end
for subtype, _ in pairs(types) do
local abl_sg_i_stem_props = abl_sg_i_stem_subtypes
if abl_sg_i_stem_props then
forms = {}
for _, ending in ipairs(abl_sg_i_stem_props.abl_sg) do
insert_if_not(forms, stem2 .. ending)
end
if num ~= "pl" then
for _, t in ipairs(abl_sg_i_stem_props.title) do
insert_if_not(subtitles, t)
end
end
break
end
end
elseif types.not_N and types.not_I then
insert_if_not(subtitles, "non-neuter " .. non_i_stem_type())
elseif types.not_N then
insert_if_not(subtitles, "non-neuter")
elseif types.not_I then
insert_if_not(subtitles, non_i_stem_type())
end
-- with locative
if data.loc then
-- As far as I can tell, in general both dative singular and
-- ablative singular could be used for the third-declension locative,
-- with different time periods preferring different forms.
-- http://dcc.dickinson.edu/grammar/latin/3rd-declension-locative-case
-- mentions rūrī along with either Carthāginī or Carthāgine.
-- Wikipedia in https://en.wikipedia.orghttps://dictious.com/en/Locative_case#Latin
-- says this:
--
-- In archaic times, the locative singular of third declension nouns
-- was still interchangeable between ablative and dative forms, but in
-- the Augustan Period the use of the ablative form became fixed.
-- Therefore, both forms "rūrī" and "rūre" may be encountered.
--
-- Lewis and Short confirm this.
local loc_sg = forms
if type(loc_sg) == "table" then
loc_sg = deep_copy(loc_sg)
else
loc_sg = {loc_sg}
end
local abl_sg = forms
if type(abl_sg) == "table" then
for _, form in ipairs(abl_sg) do
insert_if_not(loc_sg, deep_copy(form))
end
else
insert_if_not(loc_sg, abl_sg)
end
forms = loc_sg
forms = deep_copy(forms)
--The following is what we used to have, but I simply cannot believe it.
--if types.Greek and not types.s then
-- forms = stem2 .. "ēs"
--end
end
end
decl = function(data, args)
local forms, types, subtitles, notes = data.forms, data.types, data.subtitles, data.notes
local stem = args
-- normal 4th
forms = stem .. "us"
forms = stem .. "ūs"
forms = stem .. "uī"
forms = stem .. "um"
forms = stem .. "ū"
forms = stem .. "us"
forms = stem .. "ūs"
forms = stem .. "uum"
forms = stem .. "ibus"
forms = stem .. "ūs"
forms = stem .. "ibus"
forms = stem .. "ūs"
if types.echo then
insert_if_not(subtitles, "all cases except the genitive and accusative singular in ''-ō''")
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms = stem .. "ō"
end
end
add_form(forms, "acc_sg", stem, "ōn")
elseif types.Callisto then
insert_if_not(subtitles, "all cases except the genitive singular in ''-ō''")
for slot in pairs(forms) do
if slot ~= "gen_sg" then
forms = stem .. "ō"
end
end
end
-- neuter
if types.N then
insert_if_not(subtitles, "neuter")
forms = stem .. "ū̆"
forms = {stem .. "ūs", stem .. "ū"}
forms = {stem .. "ū", stem .. "uī"}
forms = stem .. "ū̆"
forms = stem .. "ū̆"
forms = stem .. "ua"
forms = stem .. "ua"
forms = stem .. "ua"
local note1 = "The length of the final vowel is uncertain in the nominative/accusative/vocative singular; ] considers it to end with ''-ū'', while ] considers it to end with ''-ŭ''."
local note2 = "According to ]."
local note3 = "According to ]."
local note4 = "According to both."
notes = note1
notes = note2
notes = note3
notes = note4
notes = note2
notes = note1
notes = note4
notes = note1
end
-- ubus
if types.ubus then
insert_if_not(subtitles, "dative/ablative plural in ''-ubus''")
forms = stem .. "ubus"
forms = stem .. "ubus"
elseif types.not_ubus then
insert_if_not(subtitles, "dative/ablative plural in ''-ibus''")
end
-- with locative
if data.loc then
forms = forms
forms = forms
end
end
decl = function(data, args)
local forms, types = data.forms, data.types
local stem = args
-- ies
if types.i then
stem = stem .. "i"
end
forms = stem .. "ēs"
forms = stem .. "eī"
forms = stem .. "eī"
forms = stem .. "em"
forms = stem .. "ē"
forms = stem .. "ēs"
forms = stem .. "ēs"
forms = stem .. "ērum"
forms = stem .. "ēbus"
forms = stem .. "ēs"
forms = stem .. "ēbus"
forms = stem .. "ēs"
-- ies
if types.i then
forms = stem .. "ēī"
forms = stem .. "ēī"
end
--with locative
if data.loc then
forms = stem .. "ē"
forms = stem .. "ēbus"
end
end
decl = function(data, args)
local forms = data.forms
local stem1, stem2 = args, args
insert_if_not(data.subtitles, "with a distinct plural")
forms = stem1
forms = stem1
forms = stem1
forms = stem1
forms = stem1
forms = stem1
forms = stem2
forms = stem2
forms = stem2
forms = stem2
forms = stem2
forms = stem2
-- with locative
if data.loc then
forms = stem1
forms = stem2
end
end
decl = function(data, args)
local forms = data.forms
local stem = args
insert_if_not(data.subtitles, "used only in the nominative and accusative")
forms = stem
forms = "-"
forms = "-"
forms = stem
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
-- with locative (for multiword terms)
if data.loc then
forms = "-"
forms = "-"
end
data.num = "sg"
end
decl = function(data, args)
local forms, subtitles, notes = data.forms, data.subtitles, data.notes
local stem = args
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
forms = "-"
if stem == "bōs" then
data.decl = "3"
local stem1, stem2 = "bōs", "bov"
decl(data, {stem1, stem2})
add_form(forms, "abl_sg", stem2, "īd")
notes] = "Old Latin."
add_form(forms, "gen_pl", "bo", "um", 1)
add_form(forms, "gen_pl", stem2, "erum")
add_form(forms, "dat_pl", "", "bōbus", 1)
add_form(forms, "dat_pl", "", "būbus", 2)
add_form(forms, "abl_pl", "", "bōbus", 1)
add_form(forms, "abl_pl", "", "būbus", 2)
elseif stem:match("^eus$") then
data.decl = "2"
local dD = stem:sub(1, 1)
forms = dD .. "eus"
forms = dD .. "eī"
forms = dD .. "eō"
forms = dD .. "eum"
forms = dD .. "eō"
forms = {dD .. "eus", dD .. "ee"}
notes = "Rare during the Classical period."
notes = "From Late Latin onwards."
if stem == "deus" then
forms = {"dī", "diī", "deī"}
forms = {"deōrum", "deûm"}
forms = {"dīs", "diīs", "deīs"}
forms = "deōs"
forms = {"dīs", "diīs", "deīs"}
forms = {"dī", "diī", "deī"}
end
elseif stem == "domus" then
data.decl = "4,2"
data.title = "]/] noun"
forms = "domus"
forms = {"domūs", "domī"}
forms = {"domuī", "domō", "domū"}
forms = "domum"
forms = {"domū", "domō"}
forms = "domus"
forms = "domī"
forms = "domūs"
forms = {"domuum", "domōrum"}
forms = "domibus"
forms = {"domūs", "domōs"}
forms = "domibus"
forms = "domūs"
forms = "-"
data.loc = true
elseif umatch(stem, "^ēs" .. BREVE .. "?s$") then
local ij = usub(stem, 1, 1)
local uu = umatch(stem, "" .. BREVE .. "?")
forms = stem
forms = ij .. "ēsū"
forms = ij .. "ēsū"
forms = ij .. "ēs" .. uu .. "m"
forms = ij .. "ēsū"
forms = ij .. "ēsū"
data.num = "sg"
elseif stem:match("^ūgerum$") then
data.decl = "2,3"
local ij = stem:sub(1, 1)
data.title = "]–] hybrid noun"
insert_if_not(subtitles, "neuter")
forms = ij .. "ūgerum"
forms = ij .. "ūgerī"
forms = ij .. "ūgerō"
forms = ij .. "ūgerum"
forms = ij .. "ūgerō"
forms = ij .. "ūgerum"
forms = ij .. "ūgera"
forms = ij .. "ūgerum"
forms = ij .. "ūgeribus"
forms = ij .. "ūgera"
forms = {ij .. "ūgeribus", ij .. "ūgerīs"}
forms = ij .. "ūgera"
notes = "Once only, in:<br/>M. Terentius Varro, ''Res Rusticae'', bk I, ch. x"
elseif stem == "sūs" then
data.decl = "3"
forms = "sūs"
forms = "suis"
forms = "suī"
forms = "suem"
forms = "sue"
forms = "sūs"
forms = "suēs"
forms = "suum"
forms = {"suibus", "sūbus", "subus"}
forms = "suēs"
forms = {"suibus", "sūbus", "subus"}
forms = "suēs"
elseif stem == "ēthos" then
data.decl = "3"
insert_if_not(subtitles, glossary_link("irregular"))
insert_if_not(subtitles, "Greek-type")
forms = "ēthos"
forms = "ētheos"
forms = "ēthos"
forms = "ēthos"
forms = {"ēthea", "ēthē"}
forms = {"ēthesi", "ēthesin"}
forms = {"ēthea", "ēthē"}
forms = {"ēthesi", "ēthesin"}
forms = {"ēthea", "ēthē"}
elseif stem == "Athōs" then
data.decl = "2"
insert_if_not(subtitles, "highly " .. glossary_link("irregular"))
insert_if_not(subtitles, "Greek-type")
forms = "Athōs"
forms = "Athō"
forms = "Athō"
forms = {"Athō", "Athōn"}
forms = "Athō"
forms = "Athōs"
data.num = "sg"
elseif stem:match("^ēnum$") then
data.decl = "4,2"
local uv = stem:sub(1, 1)
data.title = "]/] noun"
insert_if_not(subtitles, glossary_link("defective"))
forms = {uv .. "ēnuī", uv .. "ēnō"}
forms = uv .. "ēnum"
data.num = "sg"
elseif stem:match("^īs$") then
data.decl = "3"
local uv = stem:sub(1, 1)
insert_if_not(subtitles, glossary_link("irregular"))
insert_if_not(subtitles, glossary_link("defective"))
forms = uv .. "īs"
forms = uv .. "īs"
forms = uv .. "ī"
forms = uv .. "im"
forms = uv .. "ī"
forms = uv .. "īs"
forms = uv .. "īrēs"
forms = uv .. "īrium"
forms = uv .. "īribus"
forms = {uv .. "īrēs", uv .. "īrīs"}
forms = uv .. "īribus"
forms = uv .. "īrēs"
elseif stem == "cupressus" then
data.decl = "4,2"
data.title = "]/] noun"
forms = "cupressus"
forms = {"cupressī", "cupressūs"}
forms = "cupressō"
forms = "cupressum"
forms = {"cupressō", "cupressū"}
forms = "cupressus"
forms = {"cupressī", "cupressūs"}
forms = "cupressōrum"
forms = "cupressīs"
forms = {"cupressōs", "cupressūs"}
forms = "cupressīs"
forms = {"cupressī", "cupressūs"}
else
error("Stem " .. stem .. " not recognized.")
end
end
return decl
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: