Wiksiyonaryo
tlwiktionary
https://tl.wiktionary.org/wiki/Wiksiyonaryo:Unang_Pahina
MediaWiki 1.47.0-wmf.24
case-sensitive
Midya
Natatangi
Usapan
Tagagamit
Usapang tagagamit
Wiksiyonaryo
Usapang Wiksiyonaryo
Talaksan
Usapang talaksan
MediaWiki
Usapang MediaWiki
Padron
Usapang padron
Tulong
Usapang tulong
Kategorya
Usapang kategorya
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Module:la-headword
828
33168
178397
173940
2026-10-24T06:11:10Z
GinawaSaHapon
3989
178397
Scribunto
text/plain
-- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections.
local export = {}
local pos_functions = {}
local string_utilities = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local form_is_empty = require("Module:la-utilities").form_is_empty
local insert = table.insert
local remove = table.remove
local umatch = mw.ustring.match
local lang = require("Module:languages").getByCode("la")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local PAGENAME = mw.loadData("Module:headword/data").pagename
local legal_gender = {
["m"] = true,
["f"] = true,
["n"] = true,
["?"] = true,
["?!"] = true,
}
local declension_to_english = {
["1"] = "unang",
["2"] = "ikalawang",
["3"] = "ikatlong",
["4"] = "ikaapat na",
["5"] = "ikalimang",
}
local gender_names = {
["m"] = "panlalaki",
["f"] = "pambabae",
["n"] = "di-tiyak",
["?"] = "di-alam na kasarian",
["?!"] = "di-kumpirmadong kasarian",
}
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function invert(...)
invert = require(table_module).invert
return invert(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities).pattern_escape
return pattern_escape(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function split(...)
split = require(string_utilities).split
return split(...)
end
local function ulower(...)
ulower = require(string_utilities).lower
return ulower(...)
end
local function format(array, concatenater)
if #array == 0 then
return ""
end
local concatenated = concat(array, concatenater)
if concatenated == "" then
return ""
elseif concatenated:sub(-1) == "'" then
concatenated = concatenated .. " "
end
return "; ''" .. concatenated .. "''"
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
local function make_link(page, display, face, accel)
return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face)
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iargs = require("Module:parameters").process(frame.args, {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
})
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. '-' .. suff_type
else
postype = poscat
end
local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}
local infl_classes = {}
local title = {}
local postscript = {}
if poscat == "suffixes" then
insert_if_not(data.categories, "Latin " .. suff_type .. "-forming suffixes")
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
postscript = concat(postscript, ", ")
return
require("Module:headword").full_headword(data)
.. format(infl_classes, "/")
.. format(title, ", ")
.. (postscript ~= "" and " (" .. postscript .. ")" or "")
end
local function process_num_type(numtype, categories)
if numtype == "card" then
insert_if_not(categories, "Latin cardinal numbers")
elseif numtype == "ord" then
insert_if_not(categories, "Latin ordinal numbers")
elseif numtype == "frac" then
insert_if_not(categories, "Latin fractional numbers")
elseif numtype == "dist" then
insert_if_not(categories, "Latin distributive numbers")
elseif numtype == "mul" then
insert_if_not(categories, "Latin multiplicative numbers")
elseif numtype == "coll" then
insert_if_not(categories, "Latin collective numbers")
elseif numtype then
error("Unrecognized numeral type '" .. numtype .. "'")
end
end
local function normalize_derivation(deriv, anchor, text)
if not deriv then
return nil
end
local deriv1 = deriv[1]
if not deriv1 or deriv1 == "-" then
return deriv1
end
deriv.label = glossary_link(anchor, text)
return deriv
end
local function derivation(data, decldata, arg, anchor, text)
local der = normalize_derivation(decldata[arg], anchor, text)
if der and der ~= "-" then
insert(data.inflections, der)
end
end
local function nouns(pos, def, args, data, infl_classes, title)
local is_num = pos == "numerals"
local is_pn = false
if pos == "proper nouns" then
is_pn = true
pos = "nouns"
end
local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local genders = decldata.overriding_genders
if #genders == 0 then
if decldata.gender then
genders = {ulower(decldata.gender)}
elseif not is_num then
error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec")
end
end
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
insert_if_not(categories, "Latin indeclinable " .. decldata.pos)
for _, g in ipairs(genders) do
local gender = g:match("^(.[\128-\191]*)%-[sp]$")
if not gender then
gender = g
end
if not legal_gender[gender] then
error("Gender “" .. gender .. "” is not a valid Latin gender.")
end
insert(data.genders, g)
insert_if_not(categories, "Latin " .. gender_names[gender] .. " indeclinable " .. decldata.pos)
end
else
local is_irreg = false
local is_indecl = false
local is_decl = false
local has_multiple_decls = false
local has_multiple_variants = false
-- flatten declension specs
local decls = {}
for _, g in ipairs(genders) do
if not legal_gender[g] then
error("Gender “" .. g .. "” is not a valid Latin gender.")
elseif decldata.num == "pl" then
g = g .. "-p"
elseif decldata.num == "sg" then
g = g .. "-s"
end
insert(data.genders, g)
end
local function process_decl(decl_list, props)
local headword_decl = props.headword_decl
-- skip adjectival declensions
if headword_decl:match("+$") then
return
elseif props.decl == "irreg" then
is_irreg = true
headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl
local irreg_decls = split(headword_decl, ",")
if #irreg_decls > 1 then
has_multiple_decls = true
end
for _, d in ipairs(irreg_decls) do
if d == "indecl" or d == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, d)
end
else
if headword_decl == "indecl" or headword_decl == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, headword_decl)
end
end
for _, props in ipairs(decldata.propses) do
if props.headword_decl then
process_decl(decls, props)
else
local alternant_decls = {}
for _, alternant in ipairs(props) do
for _, single_props in ipairs(alternant) do
process_decl(alternant_decls, single_props)
end
end
if #alternant_decls > 1 then
has_multiple_decls = true
elseif #decls > 1 then
has_multiple_variants = true
end
for _, d in ipairs(alternant_decls) do
insert_if_not(decls, d)
end
end
end
if is_indecl and is_decl then
has_multiple_decls = true
end
if has_multiple_decls then
insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple declensions")
end
if has_multiple_variants then
insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple variants of a single declension")
end
if is_irreg then
insert(title, glossary_link("irregular"))
insert_if_not(categories, "Latin irregular " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " irregular " .. decldata.pos)
end
end
if is_indecl then
if is_decl then
insert(title, glossary_link("indeclinable"))
else
insert(data.inflections, {label = glossary_link("indeclinable")})
end
insert_if_not(categories, "Latin indeclinable " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " indeclinable " .. decldata.pos)
end
end
if #decls > 1 then
insert(title, "variously declined")
end
for _, decl in ipairs(decls) do
if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then
local decl_class = declension_to_english[decl]
if not decl_class then
error("Internal error: declension '" .. decl .. "' not recognized")
end
insert(title, "[[Appendix:Latin " .. decl_class .. " declension|" .. decl_class .. " declension]]")
insert_if_not(categories, "Latin " .. decl_class .. " declension " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " " .. decldata.pos .. " in the " .. decl_class .. " declension")
end
end
end
local lemma_num = decldata.num == "pl" and "pl" or "sg"
if NAMESPACE == "Reconstruction" then
-- For reconstructed nouns:
if data.genders[1] == 'n' and lemma_num == 'sg' then
-- singular neuter nouns give a plural
local pl = decldata.forms["nom_pl"]
if pl and pl ~= "" and #pl > 0 then
pl.label = "plural"
insert(data.inflections, pl)
end
else
-- all others give an oblique
local obl = decldata.forms["acc_" .. lemma_num]
if obl and obl ~= "" and #obl > 0 then
obl.label = "oblique"
insert(data.inflections, obl)
end
end
else
local gen = decldata.forms["gen_" .. lemma_num]
if (decldata.unattested["gen_" .. lemma_num]) then
gen[1] = '*' .. gen[1]
data.nolink = true
end
if gen and gen ~= "" and gen ~= "—" and #gen > 0 then
if is_decl then
-- Skip displaying the genitive for nouns that are only
-- indeclinable. But we do display it for nouns like Abrahām
-- and Ādām that can be either indeclinable or declined.
gen.label = "genitive"
insert(data.inflections, gen)
end
else
insert(data.inflections, {label = "no genitive"})
insert_if_not(categories, "Latin " .. decldata.pos .. " with no genitive singular")
end
end
end
derivation(data, decldata, "m", "masculine")
derivation(data, decldata, "f", "feminine")
derivation(data, decldata, "n", "neuter")
derivation(data, decldata, "adj", "relational", "relational adjective")
derivation(data, decldata, "dim", "diminutive")
derivation(data, decldata, "aug", "augmentative")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return is_pn and decldata.pos == "nouns" and "proper nouns" or decldata.pos
end
pos_functions["nouns"] = function(def, args, data, infl_classes, title)
return nouns("nouns", def, args, data, infl_classes, title)
end
pos_functions["proper nouns"] = function(def, args, data, infl_classes, title)
return nouns("proper nouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-noun"] = function(def, args, data, infl_classes, title)
return nouns("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-noun"] = function(def, args, data, infl_classes, title)
return nouns("numerals", def, args, data, infl_classes, title)
end
function export.verb_title(title, typeinfo, lemma_forms)
local conj = typeinfo.conj
local irreg_processing = typeinfo.irreg
local subtypes = typeinfo.subtypes
local first_lemma = ""
if #lemma_forms > 0 then
first_lemma = require("Module:links").remove_links(lemma_forms[1])
end
if conj == "1st" then
insert(title, "[[Appendix:Latin first conjugation|first conjugation]]")
elseif conj == "2nd" then
insert(title, "[[Appendix:Latin second conjugation|second conjugation]]")
elseif conj == "3rd" then
insert(title, "[[Appendix:Latin third conjugation|third conjugation]]")
elseif conj == "3rd-io" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant) conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "3rd/4th" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant)]] / [[Appendix:Latin fourth conjugation|fourth conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "4th" then
insert(title, "[[Appendix:Latin fourth conjugation|fourth conjugation]]")
elseif conj == "irreg" then -- sum
insert(title, "[[Appendix:Latin irregular verbs|irregular conjugation]]")
end
if subtypes.highlydef then -- āiō, inquam
insert(title, "highly [[defective verb#English|defective]]")
end
if subtypes.suppl then -- sum, volō
insert(title, "[[suppletive#English|suppletive]]")
end
if subtypes["3only"] then -- decet
insert(title, "[[third person#English|third person]]-only")
elseif subtypes.impers then -- decet, advesperāscit (also nopass)
insert(title, "[[impersonal verb#English|impersonal]]")
end
if subtypes.depon then -- dēmōlior, calvor (also noperf)
insert(title, "[[deponent#English|deponent]]")
end
if subtypes.perfaspres then -- meminī, ōdī
insert(title, "no [[present tense#English|present]] stem")
-- If semidepon is set, only the active forms are affected.
local voice = subtypes.semidepon and "[[active voice#English|active]] " or ""
insert(title, ("[[perfect tense#English|perfect]] %sforms have [[present tense#English|present]] %smeaning"):format(voice, voice))
-- Clarify that deponency can only apply to the perfect.
if subtypes.semidepon then -- ōdī
insert(title, "[[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
if subtypes.optsemidepon then
insert(title, "optionally [[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
else
if subtypes.semidepon then -- fīdō, gaudeō
insert(title, "[[semi-deponent#English|semi-deponent]]")
end
if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō
insert(title, "optionally [[semi-deponent#English|semi-deponent]]")
end
end
if subtypes.imponly then -- cedo, apage
insert(title, "[[imperative mood#English|imperative]]-only")
end
if subtypes.nopass then -- coacēscō
insert(title, "no [[passive voice#English|passive]]")
end
local stems = {}
if subtypes.nopres then -- coepī; perfaspres already handles this above
insert(stems, "[[present tense#English|present]]")
end
if subtypes.noperf then
insert(stems, "[[perfect tense#English|perfect]]")
end
if subtypes.nosup or subtypes.supfutractvonly then
insert(stems, "[[supine#English|supine]]")
end
if #stems > 0 then
local extra = subtypes.supfutractvonly and " except in the [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]"
insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or ""))
end
if subtypes.nofutr then -- soleō
insert(title, "no [[future tense#English|future]]")
end
if subtypes.pass3only then -- praefundō
insert(title, "[[third person#English|third person]]-only in the [[passive voice#English|passive]]")
elseif subtypes.passimpers then -- abambulō
local msg = "[[impersonal verb#English|impersonal]] in the [[passive voice#English|passive]]"
if subtypes.passimpersold then -- possum
msg = msg .. " in [[Old Latin]]"
end
insert(title, msg)
end
if subtypes.noimp then -- volō
insert(title, "no [[imperative mood#English|imperative]]")
end
if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] short [[imperative mood#English|imperative]]")
end
if subtypes.nofutractvptc and not subtypes.nosup then -- fīō
insert(title, "no [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]")
end
if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then
if subtypes.noinf then -- inquam
insert(title, "no [[infinitive#English|infinitive]]")
end
if subtypes.noger then -- libet
insert(title, "no [[gerund#English|gerund]]")
end
end
if subtypes.shorta then -- dō
insert(title, ("[[Appendix:Latin irregular verbs|irregular]] short %s in most forms"):format(make_link(nil, "ă", "term")))
end
if irreg_processing then
if first_lemma:match("edō$") then -- edō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] alternative forms")
elseif first_lemma:match("fīō$") then -- fīō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] long " .. make_link(nil, "ī", "term"))
end
end
end
pos_functions["verbs"] = function(def, args, data, infl_classes, title)
local m_la_verb = require("Module:la-verb")
local def1, def2
if def then
def1, def2 = def:match("^(.-):(.*)$")
end
local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)
local lemma_forms = conjdata.overriding_lemma
if not lemma_forms or #lemma_forms == 0 then
lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)
end
data.heads = lemma_forms
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = conjdata.id
local perf_only = false
local function insert_inflection(infl, label)
infl.label = label
insert(data.inflections, infl)
end
local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"])
if #inf > 0 then
insert_inflection(inf, "present infinitive")
else
inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"])
if #inf > 0 then
perf_only = true
insert_inflection(inf, "perfect infinitive")
end
end
if not perf_only then
local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"])
if #perf == 0 then
perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"])
end
if #perf > 0 then
insert_inflection(perf, "perfect active")
end
end
local subtypes = typeinfo.subtypes
if not (subtypes.depon or subtypes.semidepon) then
local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"])
if #sup > 0 then
insert_inflection(sup, "supine")
else
local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"])
if #fap > 0 then
insert_inflection(fap, "future active participle")
end
end
end
export.verb_title(title, typeinfo, lemma_forms)
end
pos_functions["suffixes-verb"] = pos_functions["verbs"]
local function attested_form(decldata, index)
local form
if (decldata.unattested[index]) then
form = { { term = '*' .. decldata.forms[index][1], nolink = true } }
else
form = decldata.forms[index]
end
return form
end
local function degree_derivations(comp, sup, data)
local inflections = data.inflections
if not (comp or sup) then
return
elseif (not comp or comp == "-") and (not sup or sup == "-") then
insert(inflections, {label = "not [[Appendix:Glossary#comparative|comparable]]"})
insert_if_not(data.categories, "Latin uncomparable adverbs")
return
elseif comp == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#comparative|comparative]]"})
elseif comp then
insert(inflections, comp)
end
if sup == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#superlative|superlative]]"})
elseif sup then
insert(inflections, sup)
end
end
local function adjectives(pos, def, args, data, infl_classes)
local is_num = pos == "numerals"
local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.num == "pl" then
insert_if_not(categories, "Latin plural-only " .. decldata.pos)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
if decldata.pos == "participles" then
local lemma1 = lemma[1]
if lemma1:sub(-4) == "ndum" then
insert_if_not(categories, "Latin future passive participles")
elseif lemma1:match("um$") then
insert_if_not(categories, "Latin perfect participles")
end
end
else
local lemma_num = decldata.num == "pl" and "pl" or "sg"
local masc = decldata.forms["nom_" .. lemma_num .. "_m"]
local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f")
local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n")
local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m")
local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m")
if decldata.pos == "participles" then
local masc1 = masc[1]
if masc1:sub(-5) == "ūrus" then
insert_if_not(categories, "Latin future active participles")
elseif masc1:sub(-4) == "ndus" then
-- FIXME, should rename to "Latin gerundives")
insert_if_not(categories, "Latin future passive participles")
else
local masc1_final2 = masc1:sub(-2)
if masc1_final2 == "us" then
insert_if_not(categories, "Latin perfect participles")
elseif masc1_final2 == "ns" then
insert_if_not(categories, "Latin present participles")
else
error("Unrecognized participle ending: " .. masc1)
end
end
end
-- We display the inflections in three different ways to mimic the
-- old way of doing things:
--
-- 1. If masc and fem are different, show masc, fem and neut.
-- 2. Otherwise, if masc and neut are different, show masc and neut.
-- 3. Otherwise, show masc nominative and masc genitive.
if not form_is_empty(fem) and not deep_equals(masc, fem) then
fem.label = "feminine"
insert(data.inflections, fem)
if not form_is_empty(neut) then
neut.label = "neuter"
insert(data.inflections, neut)
end
elseif not form_is_empty(neut) and not deep_equals(masc, neut) then
neut.label = "neuter"
insert(data.inflections, neut)
elseif not form_is_empty(gen) then
gen.label = "genitive"
insert(data.inflections, gen)
elseif not form_is_empty(acc) then
acc.label = "accusative"
insert(data.inflections, acc)
end
insert(infl_classes, decldata.title)
end
local comp = normalize_derivation(decldata.comp, "comparative")
local sup = normalize_derivation(decldata.sup, "superlative")
degree_derivations(comp, sup, data)
derivation(data, decldata, "adv", "adverb")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return decldata.pos
end
pos_functions["adjectives"] = function(def, args, data, infl_classes, title)
return adjectives("adjectives", def, args, data, infl_classes, title)
end
pos_functions["participles"] = function(def, args, data, infl_classes, title)
return adjectives("participles", def, args, data, infl_classes, title)
end
pos_functions["determiners"] = function(def, args, data, infl_classes, title)
return adjectives("determiners", def, args, data, infl_classes, title)
end
pos_functions["pronouns"] = function(def, args, data, infl_classes, title)
return adjectives("pronouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("numerals", def, args, data, infl_classes, title)
end
pos_functions["adverbs"] = function(def, args, data)
local sublist = {sublist = "/"}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp"},
[3] = {alias_of = "sup"},
["head"] = {list = true, required = true},
["comp"] = sublist,
["sup"] = sublist,
["adj"] = sublist,
["id"] = true,
})
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
local comp, sup = args.comp, args.sup
local irreg = false
if comp then
if comp[1] == "-" then
comp = "-"
elseif comp[1] == nil then
comp = nil
else
comp.label = glossary_link("comparative")
comp = args.comp
irreg = true
end
end
if sup then
if sup[1] == "-" then
sup = "-"
elseif sup[1] == nil then
sup = nil
else
sup.label = glossary_link("superlative")
sup = args.sup
irreg = true
end
end
local categories = data.categories
if irreg then
insert_if_not(categories, "Latin irregular adverbs")
end
if not (comp or sup) then
local default_comp = {label = glossary_link("comparative")}
local default_sup = {label = glossary_link("superlative")}
for _, head in ipairs(args.head) do
local stem = nil
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = head:match("(.*)" .. pattern_escape(suff) .. "$")
comp_suff, sup_suff = "ius", "issimē"
if stem ~= nil then
if suff == "nter" then
stem = stem .. "nt"
elseif suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(default_comp, stem .. comp_suff)
insert(default_sup, stem .. sup_suff)
break
end
end
if not stem then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
end
comp = comp or default_comp
sup = sup or default_sup
end
degree_derivations(comp, sup, data)
derivation(data, args, "adj", "adjective")
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes)
local list = {list = true}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_pos] = {sublist = "/"},
[other_deg] = list,
["id"] = true,
})
data.no_redundant_head_cat = #args.head == 0
-- Set default manually so we can tell whether the user specified head=.
if #args.head == 0 then
args.head = {PAGENAME}
end
data.heads = args.head
data.id = args.id
insert(data.inflections, {label = deg})
if pos_func then
pos_func(args, data, infl_classes)
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Latin " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_deg])
if other then
if #other > 0 then
args[other_deg].label = other_deg_label
insert(data.inflections, args[other_deg])
else
insert(data.inflections, {label = "no " .. other_deg_label .. " form"})
end
end
derivation(data, args, other_pos, other_pos_label)
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Latin adjectives" or
-- "Latin adverbs". Otherwise, return nothing, so that the term goes in the
-- relevant non-lemma category (e.g. "Latin comparative adjectives"), and
-- into "Latin non-lemma forms".
if positive and not positive_attested then
return pos
end
end
local function comp_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin third declension|third declension]]")
local n = {label = "neuter"}
for _, head in ipairs(args.head) do
local neuter = head:gsub("or$", "us")
insert(n, neuter)
end
insert(data.inflections, n)
end
pos_functions["comparative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "comparative", comp_adj, "adv", "adverb", "sup", "superlative", args, data, infl_classes)
end
pos_functions["comparative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "comparative", nil, "adj", "adjective", "sup", "superlative", args, data, infl_classes)
end
local function sup_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin first declension|first]]")
insert(infl_classes, "[[Appendix:Latin second declension|second declension]]")
local f, n = {label = "feminine"}, {label = "neuter"}
for _, head in ipairs(args.head) do
local stem = head:gsub("us$", "")
insert(f, stem .. "a")
insert(n, stem .. "um")
end
insert(data.inflections, f)
insert(data.inflections, n)
end
pos_functions["superlative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "superlative", sup_adj, "adv", "adverb", "comp", "comparative", args, data, infl_classes)
end
pos_functions["superlative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "superlative", nil, "adj", "adjective", "comp", "comparative", args, data, infl_classes)
end
local function adpositions(pos, def, args, data, infl_classes, title, postscript)
local cases = invert(require("Module:la-utilities").cases)
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {list = true, set = keys_to_list(cases)},
["head"] = {list = true, required = true},
["id"] = true,
})
-- Case names are supplied in numbered arguments, optionally preceded by
-- headwords.
cases = args[2]
for i = 1, #cases do
for j = i + 1, #cases do
if cases[i] == cases[j] then
error("Duplicate case")
end
end
local case = cases[i]
local appendix_link = glossary_link(case)
if i == 1 then
appendix_link = "+ " .. appendix_link
end
insert(postscript, appendix_link)
insert_if_not(data.categories, "Latin " .. case .. " " .. pos)
end
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
end
pos_functions["prepositions"] = function(...)
return adpositions("prepositions", ...)
end
pos_functions["postpositions"] = function(...)
return adpositions("postpositions", ...)
end
pos_functions["gerunds"] = function(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = "labōrandum"}, -- headword
[2] = true, -- gerundive
})
data.heads = {args[1]}
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
insert(data.inflections, {label = "[[Appendix:Glossary#accusative|accusative]]"})
local stem = args[1]:match("^(.*)um$")
if not stem then
error("Unrecognized gerund ending: " .. stem)
end
if args[2] == "-" then
insert(data.inflections, {label = "no [[Appendix:Glossary#gerundive|gerundive]]"})
else
insert(data.inflections, {[1] = args[2] or stem .. "us", label = "[[Appendix:Glossary#gerundive|gerundive]]"})
end
end
local function non_lemma_forms(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
})
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["gerund forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
kgg4tooidivynh722jywue03ig9v4m6
178398
178397
2026-10-24T06:26:44Z
GinawaSaHapon
3989
178398
Scribunto
text/plain
-- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections.
local export = {}
local pos_functions = {}
local string_utilities = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local form_is_empty = require("Module:la-utilities").form_is_empty
local insert = table.insert
local remove = table.remove
local umatch = mw.ustring.match
local lang = require("Module:languages").getByCode("la")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local PAGENAME = mw.loadData("Module:headword/data").pagename
local legal_gender = {
["m"] = true,
["f"] = true,
["n"] = true,
["?"] = true,
["?!"] = true,
}
local declension_to_english = {
["1"] = "unang",
["2"] = "ikalawang",
["3"] = "ikatlong",
["4"] = "ikaapat na",
["5"] = "ikalimang",
}
local gender_names = {
["m"] = "panlalaki",
["f"] = "pambabae",
["n"] = "di-tiyak",
["?"] = "di-alam na kasarian",
["?!"] = "di-kumpirmadong kasarian",
}
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function invert(...)
invert = require(table_module).invert
return invert(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities).pattern_escape
return pattern_escape(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function split(...)
split = require(string_utilities).split
return split(...)
end
local function ulower(...)
ulower = require(string_utilities).lower
return ulower(...)
end
local function format(array, concatenater)
if #array == 0 then
return ""
end
local concatenated = concat(array, concatenater)
if concatenated == "" then
return ""
elseif concatenated:sub(-1) == "'" then
concatenated = concatenated .. " "
end
return "; ''" .. concatenated .. "''"
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
local function make_link(page, display, face, accel)
return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face)
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iargs = require("Module:parameters").process(frame.args, {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
})
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. '-' .. suff_type
else
postype = poscat
end
local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}
local infl_classes = {}
local title = {}
local postscript = {}
if poscat == "suffixes" then
insert_if_not(data.categories, "Latin " .. suff_type .. "-forming suffixes")
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
postscript = concat(postscript, ", ")
return
require("Module:headword").full_headword(data)
.. format(infl_classes, "/")
.. format(title, ", ")
.. (postscript ~= "" and " (" .. postscript .. ")" or "")
end
local function process_num_type(numtype, categories)
if numtype == "card" then
insert_if_not(categories, "Latin cardinal numbers")
elseif numtype == "ord" then
insert_if_not(categories, "Latin ordinal numbers")
elseif numtype == "frac" then
insert_if_not(categories, "Latin fractional numbers")
elseif numtype == "dist" then
insert_if_not(categories, "Latin distributive numbers")
elseif numtype == "mul" then
insert_if_not(categories, "Latin multiplicative numbers")
elseif numtype == "coll" then
insert_if_not(categories, "Latin collective numbers")
elseif numtype then
error("Unrecognized numeral type '" .. numtype .. "'")
end
end
local function normalize_derivation(deriv, anchor, text)
if not deriv then
return nil
end
local deriv1 = deriv[1]
if not deriv1 or deriv1 == "-" then
return deriv1
end
deriv.label = glossary_link(anchor, text)
return deriv
end
local function derivation(data, decldata, arg, anchor, text)
local der = normalize_derivation(decldata[arg], anchor, text)
if der and der ~= "-" then
insert(data.inflections, der)
end
end
local function nouns(pos, def, args, data, infl_classes, title)
local is_num = pos == "numerals"
local is_pn = false
if pos == "proper nouns" then
is_pn = true
pos = "nouns"
end
local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local genders = decldata.overriding_genders
if #genders == 0 then
if decldata.gender then
genders = {ulower(decldata.gender)}
elseif not is_num then
error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec")
end
end
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
insert_if_not(categories, "Latin indeclinable " .. decldata.pos)
for _, g in ipairs(genders) do
local gender = g:match("^(.[\128-\191]*)%-[sp]$")
if not gender then
gender = g
end
if not legal_gender[gender] then
error("Gender “" .. gender .. "” is not a valid Latin gender.")
end
insert(data.genders, g)
insert_if_not(categories, "Latin " .. gender_names[gender] .. " indeclinable " .. decldata.pos)
end
else
local is_irreg = false
local is_indecl = false
local is_decl = false
local has_multiple_decls = false
local has_multiple_variants = false
-- flatten declension specs
local decls = {}
for _, g in ipairs(genders) do
if not legal_gender[g] then
error("Gender “" .. g .. "” is not a valid Latin gender.")
elseif decldata.num == "pl" then
g = g .. "-p"
elseif decldata.num == "sg" then
g = g .. "-s"
end
insert(data.genders, g)
end
local function process_decl(decl_list, props)
local headword_decl = props.headword_decl
-- skip adjectival declensions
if headword_decl:match("+$") then
return
elseif props.decl == "irreg" then
is_irreg = true
headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl
local irreg_decls = split(headword_decl, ",")
if #irreg_decls > 1 then
has_multiple_decls = true
end
for _, d in ipairs(irreg_decls) do
if d == "indecl" or d == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, d)
end
else
if headword_decl == "indecl" or headword_decl == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, headword_decl)
end
end
for _, props in ipairs(decldata.propses) do
if props.headword_decl then
process_decl(decls, props)
else
local alternant_decls = {}
for _, alternant in ipairs(props) do
for _, single_props in ipairs(alternant) do
process_decl(alternant_decls, single_props)
end
end
if #alternant_decls > 1 then
has_multiple_decls = true
elseif #decls > 1 then
has_multiple_variants = true
end
for _, d in ipairs(alternant_decls) do
insert_if_not(decls, d)
end
end
end
if is_indecl and is_decl then
has_multiple_decls = true
end
if has_multiple_decls then
insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple declensions")
end
if has_multiple_variants then
insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple variants of a single declension")
end
if is_irreg then
insert(title, glossary_link("irregular"))
insert_if_not(categories, "Latin irregular " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " irregular " .. decldata.pos)
end
end
if is_indecl then
if is_decl then
insert(title, glossary_link("indeclinable"))
else
insert(data.inflections, {label = glossary_link("indeclinable")})
end
insert_if_not(categories, "Latin indeclinable " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " indeclinable " .. decldata.pos)
end
end
if #decls > 1 then
insert(title, "variously declined")
end
for _, decl in ipairs(decls) do
if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then
local decl_class = declension_to_english[decl]
if not decl_class then
error("Internal error: declension '" .. decl .. "' not recognized")
end
insert(title, "[[Appendix:Latin " .. decl_class .. " declension|" .. decl_class .. " declension]]")
insert_if_not(categories, "Latin " .. decl_class .. " declension " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin " .. gender_names[g] .. " " .. decldata.pos .. " in the " .. decl_class .. " declension")
end
end
end
local lemma_num = decldata.num == "pl" and "pl" or "sg"
if NAMESPACE == "Reconstruction" then
-- For reconstructed nouns:
if data.genders[1] == 'n' and lemma_num == 'sg' then
-- singular neuter nouns give a plural
local pl = decldata.forms["nom_pl"]
if pl and pl ~= "" and #pl > 0 then
pl.label = "plural"
insert(data.inflections, pl)
end
else
-- all others give an oblique
local obl = decldata.forms["acc_" .. lemma_num]
if obl and obl ~= "" and #obl > 0 then
obl.label = "oblique"
insert(data.inflections, obl)
end
end
else
local gen = decldata.forms["gen_" .. lemma_num]
if (decldata.unattested["gen_" .. lemma_num]) then
gen[1] = '*' .. gen[1]
data.nolink = true
end
if gen and gen ~= "" and gen ~= "—" and #gen > 0 then
if is_decl then
-- Skip displaying the genitive for nouns that are only
-- indeclinable. But we do display it for nouns like Abrahām
-- and Ādām that can be either indeclinable or declined.
gen.label = "genitive"
insert(data.inflections, gen)
end
else
insert(data.inflections, {label = "no genitive"})
insert_if_not(categories, "Latin " .. decldata.pos .. " with no genitive singular")
end
end
end
derivation(data, decldata, "m", "masculine")
derivation(data, decldata, "f", "feminine")
derivation(data, decldata, "n", "neuter")
derivation(data, decldata, "adj", "relational", "relational adjective")
derivation(data, decldata, "dim", "diminutive")
derivation(data, decldata, "aug", "augmentative")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return is_pn and decldata.pos == "nouns" and "proper nouns" or decldata.pos
end
pos_functions["nouns"] = function(def, args, data, infl_classes, title)
return nouns("nouns", def, args, data, infl_classes, title)
end
pos_functions["proper nouns"] = function(def, args, data, infl_classes, title)
return nouns("proper nouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-noun"] = function(def, args, data, infl_classes, title)
return nouns("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-noun"] = function(def, args, data, infl_classes, title)
return nouns("numerals", def, args, data, infl_classes, title)
end
function export.verb_title(title, typeinfo, lemma_forms)
local conj = typeinfo.conj
local irreg_processing = typeinfo.irreg
local subtypes = typeinfo.subtypes
local first_lemma = ""
if #lemma_forms > 0 then
first_lemma = require("Module:links").remove_links(lemma_forms[1])
end
if conj == "1st" then
insert(title, "[[Appendix:Latin first conjugation|first conjugation]]")
elseif conj == "2nd" then
insert(title, "[[Appendix:Latin second conjugation|second conjugation]]")
elseif conj == "3rd" then
insert(title, "[[Appendix:Latin third conjugation|third conjugation]]")
elseif conj == "3rd-io" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant) conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "3rd/4th" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant)]] / [[Appendix:Latin fourth conjugation|fourth conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "4th" then
insert(title, "[[Appendix:Latin fourth conjugation|fourth conjugation]]")
elseif conj == "irreg" then -- sum
insert(title, "[[Appendix:Latin irregular verbs|irregular conjugation]]")
end
if subtypes.highlydef then -- āiō, inquam
insert(title, "highly [[defective verb#English|defective]]")
end
if subtypes.suppl then -- sum, volō
insert(title, "[[suppletive#English|suppletive]]")
end
if subtypes["3only"] then -- decet
insert(title, "[[third person#English|third person]]-only")
elseif subtypes.impers then -- decet, advesperāscit (also nopass)
insert(title, "[[impersonal verb#English|impersonal]]")
end
if subtypes.depon then -- dēmōlior, calvor (also noperf)
insert(title, "[[deponent#English|deponent]]")
end
if subtypes.perfaspres then -- meminī, ōdī
insert(title, "no [[present tense#English|present]] stem")
-- If semidepon is set, only the active forms are affected.
local voice = subtypes.semidepon and "[[active voice#English|active]] " or ""
insert(title, ("[[perfect tense#English|perfect]] %sforms have [[present tense#English|present]] %smeaning"):format(voice, voice))
-- Clarify that deponency can only apply to the perfect.
if subtypes.semidepon then -- ōdī
insert(title, "[[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
if subtypes.optsemidepon then
insert(title, "optionally [[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
else
if subtypes.semidepon then -- fīdō, gaudeō
insert(title, "[[semi-deponent#English|semi-deponent]]")
end
if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō
insert(title, "optionally [[semi-deponent#English|semi-deponent]]")
end
end
if subtypes.imponly then -- cedo, apage
insert(title, "[[imperative mood#English|imperative]]-only")
end
if subtypes.nopass then -- coacēscō
insert(title, "no [[passive voice#English|passive]]")
end
local stems = {}
if subtypes.nopres then -- coepī; perfaspres already handles this above
insert(stems, "[[present tense#English|present]]")
end
if subtypes.noperf then
insert(stems, "[[perfect tense#English|perfect]]")
end
if subtypes.nosup or subtypes.supfutractvonly then
insert(stems, "[[supine#English|supine]]")
end
if #stems > 0 then
local extra = subtypes.supfutractvonly and " except in the [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]"
insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or ""))
end
if subtypes.nofutr then -- soleō
insert(title, "no [[future tense#English|future]]")
end
if subtypes.pass3only then -- praefundō
insert(title, "[[third person#English|third person]]-only in the [[passive voice#English|passive]]")
elseif subtypes.passimpers then -- abambulō
local msg = "[[impersonal verb#English|impersonal]] in the [[passive voice#English|passive]]"
if subtypes.passimpersold then -- possum
msg = msg .. " in [[Old Latin]]"
end
insert(title, msg)
end
if subtypes.noimp then -- volō
insert(title, "no [[imperative mood#English|imperative]]")
end
if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] short [[imperative mood#English|imperative]]")
end
if subtypes.nofutractvptc and not subtypes.nosup then -- fīō
insert(title, "no [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]")
end
if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then
if subtypes.noinf then -- inquam
insert(title, "no [[infinitive#English|infinitive]]")
end
if subtypes.noger then -- libet
insert(title, "no [[gerund#English|gerund]]")
end
end
if subtypes.shorta then -- dō
insert(title, ("[[Appendix:Latin irregular verbs|irregular]] short %s in most forms"):format(make_link(nil, "ă", "term")))
end
if irreg_processing then
if first_lemma:match("edō$") then -- edō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] alternative forms")
elseif first_lemma:match("fīō$") then -- fīō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] long " .. make_link(nil, "ī", "term"))
end
end
end
pos_functions["verbs"] = function(def, args, data, infl_classes, title)
local m_la_verb = require("Module:la-verb")
local def1, def2
if def then
def1, def2 = def:match("^(.-):(.*)$")
end
local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)
local lemma_forms = conjdata.overriding_lemma
if not lemma_forms or #lemma_forms == 0 then
lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)
end
data.heads = lemma_forms
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = conjdata.id
local perf_only = false
local function insert_inflection(infl, label)
infl.label = label
insert(data.inflections, infl)
end
local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"])
if #inf > 0 then
insert_inflection(inf, "present infinitive")
else
inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"])
if #inf > 0 then
perf_only = true
insert_inflection(inf, "perfect infinitive")
end
end
if not perf_only then
local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"])
if #perf == 0 then
perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"])
end
if #perf > 0 then
insert_inflection(perf, "perfect active")
end
end
local subtypes = typeinfo.subtypes
if not (subtypes.depon or subtypes.semidepon) then
local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"])
if #sup > 0 then
insert_inflection(sup, "supine")
else
local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"])
if #fap > 0 then
insert_inflection(fap, "future active participle")
end
end
end
export.verb_title(title, typeinfo, lemma_forms)
end
pos_functions["suffixes-verb"] = pos_functions["verbs"]
local function attested_form(decldata, index)
local form
if (decldata.unattested[index]) then
form = { { term = '*' .. decldata.forms[index][1], nolink = true } }
else
form = decldata.forms[index]
end
return form
end
local function degree_derivations(comp, sup, data)
local inflections = data.inflections
if not (comp or sup) then
return
elseif (not comp or comp == "-") and (not sup or sup == "-") then
insert(inflections, {label = "not [[Appendix:Glossary#comparative|comparable]]"})
insert_if_not(data.categories, "Latin uncomparable adverbs")
return
elseif comp == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#comparative|comparative]]"})
elseif comp then
insert(inflections, comp)
end
if sup == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#superlative|superlative]]"})
elseif sup then
insert(inflections, sup)
end
end
local function adjectives(pos, def, args, data, infl_classes)
local is_num = pos == "numerals"
local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.num == "pl" then
insert_if_not(categories, "Latin plural-only " .. decldata.pos)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
if decldata.pos == "participles" then
local lemma1 = lemma[1]
if lemma1:sub(-4) == "ndum" then
insert_if_not(categories, "Latin future passive participles")
elseif lemma1:match("um$") then
insert_if_not(categories, "Latin perfect participles")
end
end
else
local lemma_num = decldata.num == "pl" and "pl" or "sg"
local masc = decldata.forms["nom_" .. lemma_num .. "_m"]
local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f")
local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n")
local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m")
local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m")
if decldata.pos == "participles" then
local masc1 = masc[1]
if masc1:sub(-5) == "ūrus" then
insert_if_not(categories, "Latin future active participles")
elseif masc1:sub(-4) == "ndus" then
-- FIXME, should rename to "Latin gerundives")
insert_if_not(categories, "Latin future passive participles")
else
local masc1_final2 = masc1:sub(-2)
if masc1_final2 == "us" then
insert_if_not(categories, "Latin perfect participles")
elseif masc1_final2 == "ns" then
insert_if_not(categories, "Latin present participles")
else
error("Unrecognized participle ending: " .. masc1)
end
end
end
-- We display the inflections in three different ways to mimic the
-- old way of doing things:
--
-- 1. If masc and fem are different, show masc, fem and neut.
-- 2. Otherwise, if masc and neut are different, show masc and neut.
-- 3. Otherwise, show masc nominative and masc genitive.
if not form_is_empty(fem) and not deep_equals(masc, fem) then
fem.label = "pambabae"
insert(data.inflections, fem)
if not form_is_empty(neut) then
neut.label = "neuter"
insert(data.inflections, neut)
end
elseif not form_is_empty(neut) and not deep_equals(masc, neut) then
neut.label = "di-tiyak"
insert(data.inflections, neut)
elseif not form_is_empty(gen) then
gen.label = "paari"
insert(data.inflections, gen)
elseif not form_is_empty(acc) then
acc.label = "paakusa"
insert(data.inflections, acc)
end
insert(infl_classes, decldata.title)
end
local comp = normalize_derivation(decldata.comp, "comparative")
local sup = normalize_derivation(decldata.sup, "superlative")
degree_derivations(comp, sup, data)
derivation(data, decldata, "adv", "adverb")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return decldata.pos
end
pos_functions["adjectives"] = function(def, args, data, infl_classes, title)
return adjectives("adjectives", def, args, data, infl_classes, title)
end
pos_functions["participles"] = function(def, args, data, infl_classes, title)
return adjectives("participles", def, args, data, infl_classes, title)
end
pos_functions["determiners"] = function(def, args, data, infl_classes, title)
return adjectives("determiners", def, args, data, infl_classes, title)
end
pos_functions["pronouns"] = function(def, args, data, infl_classes, title)
return adjectives("pronouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("numerals", def, args, data, infl_classes, title)
end
pos_functions["adverbs"] = function(def, args, data)
local sublist = {sublist = "/"}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp"},
[3] = {alias_of = "sup"},
["head"] = {list = true, required = true},
["comp"] = sublist,
["sup"] = sublist,
["adj"] = sublist,
["id"] = true,
})
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
local comp, sup = args.comp, args.sup
local irreg = false
if comp then
if comp[1] == "-" then
comp = "-"
elseif comp[1] == nil then
comp = nil
else
comp.label = glossary_link("comparative")
comp = args.comp
irreg = true
end
end
if sup then
if sup[1] == "-" then
sup = "-"
elseif sup[1] == nil then
sup = nil
else
sup.label = glossary_link("superlative")
sup = args.sup
irreg = true
end
end
local categories = data.categories
if irreg then
insert_if_not(categories, "Latin irregular adverbs")
end
if not (comp or sup) then
local default_comp = {label = glossary_link("comparative")}
local default_sup = {label = glossary_link("superlative")}
for _, head in ipairs(args.head) do
local stem = nil
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = head:match("(.*)" .. pattern_escape(suff) .. "$")
comp_suff, sup_suff = "ius", "issimē"
if stem ~= nil then
if suff == "nter" then
stem = stem .. "nt"
elseif suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(default_comp, stem .. comp_suff)
insert(default_sup, stem .. sup_suff)
break
end
end
if not stem then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
end
comp = comp or default_comp
sup = sup or default_sup
end
degree_derivations(comp, sup, data)
derivation(data, args, "adj", "adjective")
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes)
local list = {list = true}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_pos] = {sublist = "/"},
[other_deg] = list,
["id"] = true,
})
data.no_redundant_head_cat = #args.head == 0
-- Set default manually so we can tell whether the user specified head=.
if #args.head == 0 then
args.head = {PAGENAME}
end
data.heads = args.head
data.id = args.id
insert(data.inflections, {label = deg})
if pos_func then
pos_func(args, data, infl_classes)
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Latin " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_deg])
if other then
if #other > 0 then
args[other_deg].label = other_deg_label
insert(data.inflections, args[other_deg])
else
insert(data.inflections, {label = "no " .. other_deg_label .. " form"})
end
end
derivation(data, args, other_pos, other_pos_label)
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Latin adjectives" or
-- "Latin adverbs". Otherwise, return nothing, so that the term goes in the
-- relevant non-lemma category (e.g. "Latin comparative adjectives"), and
-- into "Latin non-lemma forms".
if positive and not positive_attested then
return pos
end
end
local function comp_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin third declension|third declension]]")
local n = {label = "neuter"}
for _, head in ipairs(args.head) do
local neuter = head:gsub("or$", "us")
insert(n, neuter)
end
insert(data.inflections, n)
end
pos_functions["comparative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "comparative", comp_adj, "adv", "adverb", "sup", "superlative", args, data, infl_classes)
end
pos_functions["comparative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "comparative", nil, "adj", "adjective", "sup", "superlative", args, data, infl_classes)
end
local function sup_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin first declension|first]]")
insert(infl_classes, "[[Appendix:Latin second declension|second declension]]")
local f, n = {label = "feminine"}, {label = "neuter"}
for _, head in ipairs(args.head) do
local stem = head:gsub("us$", "")
insert(f, stem .. "a")
insert(n, stem .. "um")
end
insert(data.inflections, f)
insert(data.inflections, n)
end
pos_functions["superlative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "superlative", sup_adj, "adv", "adverb", "comp", "comparative", args, data, infl_classes)
end
pos_functions["superlative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "superlative", nil, "adj", "adjective", "comp", "comparative", args, data, infl_classes)
end
local function adpositions(pos, def, args, data, infl_classes, title, postscript)
local cases = invert(require("Module:la-utilities").cases)
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {list = true, set = keys_to_list(cases)},
["head"] = {list = true, required = true},
["id"] = true,
})
-- Case names are supplied in numbered arguments, optionally preceded by
-- headwords.
cases = args[2]
for i = 1, #cases do
for j = i + 1, #cases do
if cases[i] == cases[j] then
error("Duplicate case")
end
end
local case = cases[i]
local appendix_link = glossary_link(case)
if i == 1 then
appendix_link = "+ " .. appendix_link
end
insert(postscript, appendix_link)
insert_if_not(data.categories, "Latin " .. case .. " " .. pos)
end
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
end
pos_functions["prepositions"] = function(...)
return adpositions("prepositions", ...)
end
pos_functions["postpositions"] = function(...)
return adpositions("postpositions", ...)
end
pos_functions["gerunds"] = function(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = "labōrandum"}, -- headword
[2] = true, -- gerundive
})
data.heads = {args[1]}
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
insert(data.inflections, {label = "[[Appendix:Glossary#accusative|accusative]]"})
local stem = args[1]:match("^(.*)um$")
if not stem then
error("Unrecognized gerund ending: " .. stem)
end
if args[2] == "-" then
insert(data.inflections, {label = "no [[Appendix:Glossary#gerundive|gerundive]]"})
else
insert(data.inflections, {[1] = args[2] or stem .. "us", label = "[[Appendix:Glossary#gerundive|gerundive]]"})
end
end
local function non_lemma_forms(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
})
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["gerund forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
4iygmzjyhoshasuwfxa367nv1qcv33x
178399
178398
2026-10-24T06:38:00Z
GinawaSaHapon
3989
178399
Scribunto
text/plain
-- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections.
local export = {}
local pos_functions = {}
local string_utilities = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local form_is_empty = require("Module:la-utilities").form_is_empty
local insert = table.insert
local remove = table.remove
local umatch = mw.ustring.match
local lang = require("Module:languages").getByCode("la")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local PAGENAME = mw.loadData("Module:headword/data").pagename
local legal_gender = {
["m"] = true,
["f"] = true,
["n"] = true,
["?"] = true,
["?!"] = true,
}
local declension_to_english = {
["1"] = "unang",
["2"] = "ikalawang",
["3"] = "ikatlong",
["4"] = "ikaapat na",
["5"] = "ikalimang",
}
local gender_names = {
["m"] = "panlalaki",
["f"] = "pambabae",
["n"] = "di-tiyak",
["?"] = "di-alam na kasarian",
["?!"] = "di-kumpirmadong kasarian",
}
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function invert(...)
invert = require(table_module).invert
return invert(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities).pattern_escape
return pattern_escape(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function split(...)
split = require(string_utilities).split
return split(...)
end
local function ulower(...)
ulower = require(string_utilities).lower
return ulower(...)
end
local function format(array, concatenater)
if #array == 0 then
return ""
end
local concatenated = concat(array, concatenater)
if concatenated == "" then
return ""
elseif concatenated:sub(-1) == "'" then
concatenated = concatenated .. " "
end
return "; ''" .. concatenated .. "''"
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
local function make_link(page, display, face, accel)
return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face)
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iargs = require("Module:parameters").process(frame.args, {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
})
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. '-' .. suff_type
else
postype = poscat
end
local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}
local infl_classes = {}
local title = {}
local postscript = {}
if poscat == "suffixes" then
insert_if_not(data.categories, "Latin na hulaping gumagawa ng " .. suff_type)
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
postscript = concat(postscript, ", ")
return
require("Module:headword").full_headword(data)
.. format(infl_classes, "/")
.. format(title, ", ")
.. (postscript ~= "" and " (" .. postscript .. ")" or "")
end
local function process_num_type(numtype, categories)
if numtype == "card" then
insert_if_not(categories, "Latin na paulat na bilang")
elseif numtype == "ord" then
insert_if_not(categories, "Latin na panunuran na bilang")
elseif numtype == "frac" then
insert_if_not(categories, "Latin na bahaging bilang")
elseif numtype == "dist" then
insert_if_not(categories, "Latin na pamahaging bilang")
elseif numtype == "mul" then
insert_if_not(categories, "Latin na pamparaming bilang")
elseif numtype == "coll" then
insert_if_not(categories, "Latin na kolektibong bilang")
elseif numtype then
error("Unrecognized numeral type '" .. numtype .. "'")
end
end
local function normalize_derivation(deriv, anchor, text)
if not deriv then
return nil
end
local deriv1 = deriv[1]
if not deriv1 or deriv1 == "-" then
return deriv1
end
deriv.label = glossary_link(anchor, text)
return deriv
end
local function derivation(data, decldata, arg, anchor, text)
local der = normalize_derivation(decldata[arg], anchor, text)
if der and der ~= "-" then
insert(data.inflections, der)
end
end
local function nouns(pos, def, args, data, infl_classes, title)
local is_num = pos == "numerals"
local is_pn = false
if pos == "proper nouns" then
is_pn = true
pos = "nouns"
end
local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local genders = decldata.overriding_genders
if #genders == 0 then
if decldata.gender then
genders = {ulower(decldata.gender)}
elseif not is_num then
error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec")
end
end
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("di-nababago")})
insert_if_not(categories, "Latin na di-nababagong " .. decldata.pos)
for _, g in ipairs(genders) do
local gender = g:match("^(.[\128-\191]*)%-[sp]$")
if not gender then
gender = g
end
if not legal_gender[gender] then
error("Gender “" .. gender .. "” is not a valid Latin gender.")
end
insert(data.genders, g)
insert_if_not(categories, "Latin na " .. gender_names[gender] .. " na di-nababagong " .. decldata.pos)
end
else
local is_irreg = false
local is_indecl = false
local is_decl = false
local has_multiple_decls = false
local has_multiple_variants = false
-- flatten declension specs
local decls = {}
for _, g in ipairs(genders) do
if not legal_gender[g] then
error("Gender “" .. g .. "” is not a valid Latin gender.")
elseif decldata.num == "pl" then
g = g .. "-p"
elseif decldata.num == "sg" then
g = g .. "-s"
end
insert(data.genders, g)
end
local function process_decl(decl_list, props)
local headword_decl = props.headword_decl
-- skip adjectival declensions
if headword_decl:match("+$") then
return
elseif props.decl == "irreg" then
is_irreg = true
headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl
local irreg_decls = split(headword_decl, ",")
if #irreg_decls > 1 then
has_multiple_decls = true
end
for _, d in ipairs(irreg_decls) do
if d == "indecl" or d == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, d)
end
else
if headword_decl == "indecl" or headword_decl == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, headword_decl)
end
end
for _, props in ipairs(decldata.propses) do
if props.headword_decl then
process_decl(decls, props)
else
local alternant_decls = {}
for _, alternant in ipairs(props) do
for _, single_props in ipairs(alternant) do
process_decl(alternant_decls, single_props)
end
end
if #alternant_decls > 1 then
has_multiple_decls = true
elseif #decls > 1 then
has_multiple_variants = true
end
for _, d in ipairs(alternant_decls) do
insert_if_not(decls, d)
end
end
end
if is_indecl and is_decl then
has_multiple_decls = true
end
if has_multiple_decls then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming kaukulan")
end
if has_multiple_variants then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming baryant ng isang kaukulan")
end
if is_irreg then
insert(title, glossary_link("di-regular"))
insert_if_not(categories, "Latin na di-regular na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-regular na " .. decldata.pos)
end
end
if is_indecl then
if is_decl then
insert(title, glossary_link("di-mauukol"))
else
insert(data.inflections, {label = glossary_link("di-mauukol")})
end
insert_if_not(categories, "Latin na di-mauukol na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-mauukol na " .. decldata.pos)
end
end
if #decls > 1 then
insert(title, "iba-iba ang kaukulan")
end
for _, decl in ipairs(decls) do
if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then
local decl_class = declension_to_english[decl]
if not decl_class then
error("Internal error: declension '" .. decl .. "' not recognized")
end
insert(title, "[[Apendise:" .. decl_class .. " kaukulan sa Latin|" .. decl_class .. " kaukulan]]")
insert_if_not(categories, "Latin na " .. decl_class .. " kaukulan na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na " .. decldata.pos .. " sa " .. decl_class .. " kaukulan")
end
end
end
local lemma_num = decldata.num == "pl" and "pl" or "sg"
if NAMESPACE == "Reconstruction" then
-- For reconstructed nouns:
if data.genders[1] == 'n' and lemma_num == 'sg' then
-- singular neuter nouns give a plural
local pl = decldata.forms["nom_pl"]
if pl and pl ~= "" and #pl > 0 then
pl.label = "plural"
insert(data.inflections, pl)
end
else
-- all others give an oblique
local obl = decldata.forms["acc_" .. lemma_num]
if obl and obl ~= "" and #obl > 0 then
obl.label = "oblique"
insert(data.inflections, obl)
end
end
else
local gen = decldata.forms["gen_" .. lemma_num]
if (decldata.unattested["gen_" .. lemma_num]) then
gen[1] = '*' .. gen[1]
data.nolink = true
end
if gen and gen ~= "" and gen ~= "—" and #gen > 0 then
if is_decl then
-- Skip displaying the genitive for nouns that are only
-- indeclinable. But we do display it for nouns like Abrahām
-- and Ādām that can be either indeclinable or declined.
gen.label = "genitive"
insert(data.inflections, gen)
end
else
insert(data.inflections, {label = "walang paari"})
insert_if_not(categories, "Latin na " .. decldata.pos .. " na walang paaring pang-isahan")
end
end
end
derivation(data, decldata, "m", "panlalaki")
derivation(data, decldata, "f", "pambabae")
derivation(data, decldata, "n", "di-tiyak")
derivation(data, decldata, "adj", "kaugnayan", "pangkaugnayan na pang-uri")
derivation(data, decldata, "dim", "pampaliit")
derivation(data, decldata, "aug", "pampalaki")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin na " .. cat)
end
return is_pn and decldata.pos == "nouns" and "proper nouns" or decldata.pos
end
pos_functions["nouns"] = function(def, args, data, infl_classes, title)
return nouns("nouns", def, args, data, infl_classes, title)
end
pos_functions["proper nouns"] = function(def, args, data, infl_classes, title)
return nouns("proper nouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-noun"] = function(def, args, data, infl_classes, title)
return nouns("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-noun"] = function(def, args, data, infl_classes, title)
return nouns("numerals", def, args, data, infl_classes, title)
end
function export.verb_title(title, typeinfo, lemma_forms)
local conj = typeinfo.conj
local irreg_processing = typeinfo.irreg
local subtypes = typeinfo.subtypes
local first_lemma = ""
if #lemma_forms > 0 then
first_lemma = require("Module:links").remove_links(lemma_forms[1])
end
if conj == "1st" then
insert(title, "[[Appendix:Latin first conjugation|first conjugation]]")
elseif conj == "2nd" then
insert(title, "[[Appendix:Latin second conjugation|second conjugation]]")
elseif conj == "3rd" then
insert(title, "[[Appendix:Latin third conjugation|third conjugation]]")
elseif conj == "3rd-io" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant) conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "3rd/4th" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant)]] / [[Appendix:Latin fourth conjugation|fourth conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "4th" then
insert(title, "[[Appendix:Latin fourth conjugation|fourth conjugation]]")
elseif conj == "irreg" then -- sum
insert(title, "[[Appendix:Latin irregular verbs|irregular conjugation]]")
end
if subtypes.highlydef then -- āiō, inquam
insert(title, "highly [[defective verb#English|defective]]")
end
if subtypes.suppl then -- sum, volō
insert(title, "[[suppletive#English|suppletive]]")
end
if subtypes["3only"] then -- decet
insert(title, "[[third person#English|third person]]-only")
elseif subtypes.impers then -- decet, advesperāscit (also nopass)
insert(title, "[[impersonal verb#English|impersonal]]")
end
if subtypes.depon then -- dēmōlior, calvor (also noperf)
insert(title, "[[deponent#English|deponent]]")
end
if subtypes.perfaspres then -- meminī, ōdī
insert(title, "no [[present tense#English|present]] stem")
-- If semidepon is set, only the active forms are affected.
local voice = subtypes.semidepon and "[[active voice#English|active]] " or ""
insert(title, ("[[perfect tense#English|perfect]] %sforms have [[present tense#English|present]] %smeaning"):format(voice, voice))
-- Clarify that deponency can only apply to the perfect.
if subtypes.semidepon then -- ōdī
insert(title, "[[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
if subtypes.optsemidepon then
insert(title, "optionally [[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
else
if subtypes.semidepon then -- fīdō, gaudeō
insert(title, "[[semi-deponent#English|semi-deponent]]")
end
if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō
insert(title, "optionally [[semi-deponent#English|semi-deponent]]")
end
end
if subtypes.imponly then -- cedo, apage
insert(title, "[[imperative mood#English|imperative]]-only")
end
if subtypes.nopass then -- coacēscō
insert(title, "no [[passive voice#English|passive]]")
end
local stems = {}
if subtypes.nopres then -- coepī; perfaspres already handles this above
insert(stems, "[[present tense#English|present]]")
end
if subtypes.noperf then
insert(stems, "[[perfect tense#English|perfect]]")
end
if subtypes.nosup or subtypes.supfutractvonly then
insert(stems, "[[supine#English|supine]]")
end
if #stems > 0 then
local extra = subtypes.supfutractvonly and " except in the [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]"
insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or ""))
end
if subtypes.nofutr then -- soleō
insert(title, "no [[future tense#English|future]]")
end
if subtypes.pass3only then -- praefundō
insert(title, "[[third person#English|third person]]-only in the [[passive voice#English|passive]]")
elseif subtypes.passimpers then -- abambulō
local msg = "[[impersonal verb#English|impersonal]] in the [[passive voice#English|passive]]"
if subtypes.passimpersold then -- possum
msg = msg .. " in [[Old Latin]]"
end
insert(title, msg)
end
if subtypes.noimp then -- volō
insert(title, "no [[imperative mood#English|imperative]]")
end
if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] short [[imperative mood#English|imperative]]")
end
if subtypes.nofutractvptc and not subtypes.nosup then -- fīō
insert(title, "no [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]")
end
if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then
if subtypes.noinf then -- inquam
insert(title, "no [[infinitive#English|infinitive]]")
end
if subtypes.noger then -- libet
insert(title, "no [[gerund#English|gerund]]")
end
end
if subtypes.shorta then -- dō
insert(title, ("[[Appendix:Latin irregular verbs|irregular]] short %s in most forms"):format(make_link(nil, "ă", "term")))
end
if irreg_processing then
if first_lemma:match("edō$") then -- edō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] alternative forms")
elseif first_lemma:match("fīō$") then -- fīō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] long " .. make_link(nil, "ī", "term"))
end
end
end
pos_functions["verbs"] = function(def, args, data, infl_classes, title)
local m_la_verb = require("Module:la-verb")
local def1, def2
if def then
def1, def2 = def:match("^(.-):(.*)$")
end
local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)
local lemma_forms = conjdata.overriding_lemma
if not lemma_forms or #lemma_forms == 0 then
lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)
end
data.heads = lemma_forms
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = conjdata.id
local perf_only = false
local function insert_inflection(infl, label)
infl.label = label
insert(data.inflections, infl)
end
local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"])
if #inf > 0 then
insert_inflection(inf, "present infinitive")
else
inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"])
if #inf > 0 then
perf_only = true
insert_inflection(inf, "perfect infinitive")
end
end
if not perf_only then
local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"])
if #perf == 0 then
perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"])
end
if #perf > 0 then
insert_inflection(perf, "perfect active")
end
end
local subtypes = typeinfo.subtypes
if not (subtypes.depon or subtypes.semidepon) then
local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"])
if #sup > 0 then
insert_inflection(sup, "supine")
else
local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"])
if #fap > 0 then
insert_inflection(fap, "future active participle")
end
end
end
export.verb_title(title, typeinfo, lemma_forms)
end
pos_functions["suffixes-verb"] = pos_functions["verbs"]
local function attested_form(decldata, index)
local form
if (decldata.unattested[index]) then
form = { { term = '*' .. decldata.forms[index][1], nolink = true } }
else
form = decldata.forms[index]
end
return form
end
local function degree_derivations(comp, sup, data)
local inflections = data.inflections
if not (comp or sup) then
return
elseif (not comp or comp == "-") and (not sup or sup == "-") then
insert(inflections, {label = "not [[Appendix:Glossary#comparative|comparable]]"})
insert_if_not(data.categories, "Latin uncomparable adverbs")
return
elseif comp == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#comparative|comparative]]"})
elseif comp then
insert(inflections, comp)
end
if sup == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#superlative|superlative]]"})
elseif sup then
insert(inflections, sup)
end
end
local function adjectives(pos, def, args, data, infl_classes)
local is_num = pos == "numerals"
local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.num == "pl" then
insert_if_not(categories, "Latin plural-only " .. decldata.pos)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
if decldata.pos == "participles" then
local lemma1 = lemma[1]
if lemma1:sub(-4) == "ndum" then
insert_if_not(categories, "Latin future passive participles")
elseif lemma1:match("um$") then
insert_if_not(categories, "Latin perfect participles")
end
end
else
local lemma_num = decldata.num == "pl" and "pl" or "sg"
local masc = decldata.forms["nom_" .. lemma_num .. "_m"]
local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f")
local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n")
local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m")
local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m")
if decldata.pos == "participles" then
local masc1 = masc[1]
if masc1:sub(-5) == "ūrus" then
insert_if_not(categories, "Latin future active participles")
elseif masc1:sub(-4) == "ndus" then
-- FIXME, should rename to "Latin gerundives")
insert_if_not(categories, "Latin future passive participles")
else
local masc1_final2 = masc1:sub(-2)
if masc1_final2 == "us" then
insert_if_not(categories, "Latin perfect participles")
elseif masc1_final2 == "ns" then
insert_if_not(categories, "Latin present participles")
else
error("Unrecognized participle ending: " .. masc1)
end
end
end
-- We display the inflections in three different ways to mimic the
-- old way of doing things:
--
-- 1. If masc and fem are different, show masc, fem and neut.
-- 2. Otherwise, if masc and neut are different, show masc and neut.
-- 3. Otherwise, show masc nominative and masc genitive.
if not form_is_empty(fem) and not deep_equals(masc, fem) then
fem.label = "pambabae"
insert(data.inflections, fem)
if not form_is_empty(neut) then
neut.label = "neuter"
insert(data.inflections, neut)
end
elseif not form_is_empty(neut) and not deep_equals(masc, neut) then
neut.label = "di-tiyak"
insert(data.inflections, neut)
elseif not form_is_empty(gen) then
gen.label = "paari"
insert(data.inflections, gen)
elseif not form_is_empty(acc) then
acc.label = "paakusa"
insert(data.inflections, acc)
end
insert(infl_classes, decldata.title)
end
local comp = normalize_derivation(decldata.comp, "comparative")
local sup = normalize_derivation(decldata.sup, "superlative")
degree_derivations(comp, sup, data)
derivation(data, decldata, "adv", "adverb")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return decldata.pos
end
pos_functions["adjectives"] = function(def, args, data, infl_classes, title)
return adjectives("adjectives", def, args, data, infl_classes, title)
end
pos_functions["participles"] = function(def, args, data, infl_classes, title)
return adjectives("participles", def, args, data, infl_classes, title)
end
pos_functions["determiners"] = function(def, args, data, infl_classes, title)
return adjectives("determiners", def, args, data, infl_classes, title)
end
pos_functions["pronouns"] = function(def, args, data, infl_classes, title)
return adjectives("pronouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("numerals", def, args, data, infl_classes, title)
end
pos_functions["adverbs"] = function(def, args, data)
local sublist = {sublist = "/"}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp"},
[3] = {alias_of = "sup"},
["head"] = {list = true, required = true},
["comp"] = sublist,
["sup"] = sublist,
["adj"] = sublist,
["id"] = true,
})
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
local comp, sup = args.comp, args.sup
local irreg = false
if comp then
if comp[1] == "-" then
comp = "-"
elseif comp[1] == nil then
comp = nil
else
comp.label = glossary_link("comparative")
comp = args.comp
irreg = true
end
end
if sup then
if sup[1] == "-" then
sup = "-"
elseif sup[1] == nil then
sup = nil
else
sup.label = glossary_link("superlative")
sup = args.sup
irreg = true
end
end
local categories = data.categories
if irreg then
insert_if_not(categories, "Latin irregular adverbs")
end
if not (comp or sup) then
local default_comp = {label = glossary_link("comparative")}
local default_sup = {label = glossary_link("superlative")}
for _, head in ipairs(args.head) do
local stem = nil
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = head:match("(.*)" .. pattern_escape(suff) .. "$")
comp_suff, sup_suff = "ius", "issimē"
if stem ~= nil then
if suff == "nter" then
stem = stem .. "nt"
elseif suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(default_comp, stem .. comp_suff)
insert(default_sup, stem .. sup_suff)
break
end
end
if not stem then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
end
comp = comp or default_comp
sup = sup or default_sup
end
degree_derivations(comp, sup, data)
derivation(data, args, "adj", "adjective")
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes)
local list = {list = true}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_pos] = {sublist = "/"},
[other_deg] = list,
["id"] = true,
})
data.no_redundant_head_cat = #args.head == 0
-- Set default manually so we can tell whether the user specified head=.
if #args.head == 0 then
args.head = {PAGENAME}
end
data.heads = args.head
data.id = args.id
insert(data.inflections, {label = deg})
if pos_func then
pos_func(args, data, infl_classes)
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Latin " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_deg])
if other then
if #other > 0 then
args[other_deg].label = other_deg_label
insert(data.inflections, args[other_deg])
else
insert(data.inflections, {label = "no " .. other_deg_label .. " form"})
end
end
derivation(data, args, other_pos, other_pos_label)
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Latin adjectives" or
-- "Latin adverbs". Otherwise, return nothing, so that the term goes in the
-- relevant non-lemma category (e.g. "Latin comparative adjectives"), and
-- into "Latin non-lemma forms".
if positive and not positive_attested then
return pos
end
end
local function comp_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin third declension|third declension]]")
local n = {label = "neuter"}
for _, head in ipairs(args.head) do
local neuter = head:gsub("or$", "us")
insert(n, neuter)
end
insert(data.inflections, n)
end
pos_functions["comparative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "comparative", comp_adj, "adv", "adverb", "sup", "superlative", args, data, infl_classes)
end
pos_functions["comparative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "comparative", nil, "adj", "adjective", "sup", "superlative", args, data, infl_classes)
end
local function sup_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin first declension|first]]")
insert(infl_classes, "[[Appendix:Latin second declension|second declension]]")
local f, n = {label = "feminine"}, {label = "neuter"}
for _, head in ipairs(args.head) do
local stem = head:gsub("us$", "")
insert(f, stem .. "a")
insert(n, stem .. "um")
end
insert(data.inflections, f)
insert(data.inflections, n)
end
pos_functions["superlative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "superlative", sup_adj, "adv", "adverb", "comp", "comparative", args, data, infl_classes)
end
pos_functions["superlative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "superlative", nil, "adj", "adjective", "comp", "comparative", args, data, infl_classes)
end
local function adpositions(pos, def, args, data, infl_classes, title, postscript)
local cases = invert(require("Module:la-utilities").cases)
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {list = true, set = keys_to_list(cases)},
["head"] = {list = true, required = true},
["id"] = true,
})
-- Case names are supplied in numbered arguments, optionally preceded by
-- headwords.
cases = args[2]
for i = 1, #cases do
for j = i + 1, #cases do
if cases[i] == cases[j] then
error("Duplicate case")
end
end
local case = cases[i]
local appendix_link = glossary_link(case)
if i == 1 then
appendix_link = "+ " .. appendix_link
end
insert(postscript, appendix_link)
insert_if_not(data.categories, "Latin " .. case .. " " .. pos)
end
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
end
pos_functions["prepositions"] = function(...)
return adpositions("prepositions", ...)
end
pos_functions["postpositions"] = function(...)
return adpositions("postpositions", ...)
end
pos_functions["gerunds"] = function(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = "labōrandum"}, -- headword
[2] = true, -- gerundive
})
data.heads = {args[1]}
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
insert(data.inflections, {label = "[[Appendix:Glossary#accusative|accusative]]"})
local stem = args[1]:match("^(.*)um$")
if not stem then
error("Unrecognized gerund ending: " .. stem)
end
if args[2] == "-" then
insert(data.inflections, {label = "no [[Appendix:Glossary#gerundive|gerundive]]"})
else
insert(data.inflections, {[1] = args[2] or stem .. "us", label = "[[Appendix:Glossary#gerundive|gerundive]]"})
end
end
local function non_lemma_forms(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
})
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["gerund forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
cqzupmdcxn3kmonru4a52iqi6karsnq
178401
178399
2026-10-24T06:47:51Z
GinawaSaHapon
3989
178401
Scribunto
text/plain
-- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections.
local export = {}
local pos_functions = {}
local string_utilities = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local form_is_empty = require("Module:la-utilities").form_is_empty
local insert = table.insert
local remove = table.remove
local umatch = mw.ustring.match
local lang = require("Module:languages").getByCode("la")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local PAGENAME = mw.loadData("Module:headword/data").pagename
local legal_gender = {
["m"] = true,
["f"] = true,
["n"] = true,
["?"] = true,
["?!"] = true,
}
local declension_to_english = {
["1"] = "unang",
["2"] = "ikalawang",
["3"] = "ikatlong",
["4"] = "ikaapat na",
["5"] = "ikalimang",
}
local gender_names = {
["m"] = "panlalaki",
["f"] = "pambabae",
["n"] = "di-tiyak",
["?"] = "di-alam na kasarian",
["?!"] = "di-kumpirmadong kasarian",
}
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function invert(...)
invert = require(table_module).invert
return invert(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities).pattern_escape
return pattern_escape(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function split(...)
split = require(string_utilities).split
return split(...)
end
local function ulower(...)
ulower = require(string_utilities).lower
return ulower(...)
end
local function format(array, concatenater)
if #array == 0 then
return ""
end
local concatenated = concat(array, concatenater)
if concatenated == "" then
return ""
elseif concatenated:sub(-1) == "'" then
concatenated = concatenated .. " "
end
return "; ''" .. concatenated .. "''"
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
local function make_link(page, display, face, accel)
return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face)
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iargs = require("Module:parameters").process(frame.args, {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
})
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. '-' .. suff_type
else
postype = poscat
end
local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}
local infl_classes = {}
local title = {}
local postscript = {}
if poscat == "suffixes" then
insert_if_not(data.categories, "Latin na hulaping gumagawa ng " .. suff_type)
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
postscript = concat(postscript, ", ")
return
require("Module:headword").full_headword(data)
.. format(infl_classes, "/")
.. format(title, ", ")
.. (postscript ~= "" and " (" .. postscript .. ")" or "")
end
local function process_num_type(numtype, categories)
if numtype == "card" then
insert_if_not(categories, "Latin na paulat na pambilang")
elseif numtype == "ord" then
insert_if_not(categories, "Latin na panunuran na pambilang")
elseif numtype == "frac" then
insert_if_not(categories, "Latin na bahaging pambilang")
elseif numtype == "dist" then
insert_if_not(categories, "Latin na pamahaging pambilang")
elseif numtype == "mul" then
insert_if_not(categories, "Latin na pamparaming pambilang")
elseif numtype == "coll" then
insert_if_not(categories, "Latin na kolektibong pambilang")
elseif numtype then
error("Unrecognized numeral type '" .. numtype .. "'")
end
end
local function normalize_derivation(deriv, anchor, text)
if not deriv then
return nil
end
local deriv1 = deriv[1]
if not deriv1 or deriv1 == "-" then
return deriv1
end
deriv.label = glossary_link(anchor, text)
return deriv
end
local function derivation(data, decldata, arg, anchor, text)
local der = normalize_derivation(decldata[arg], anchor, text)
if der and der ~= "-" then
insert(data.inflections, der)
end
end
local function nouns(pos, def, args, data, infl_classes, title)
local is_num = pos == "numerals"
local is_pn = false
if pos == "pantangi" then
is_pn = true
pos = "pangngalan"
end
local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local genders = decldata.overriding_genders
if #genders == 0 then
if decldata.gender then
genders = {ulower(decldata.gender)}
elseif not is_num then
error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec")
end
end
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("di-nababago")})
insert_if_not(categories, "Latin na di-nababagong " .. decldata.pos)
for _, g in ipairs(genders) do
local gender = g:match("^(.[\128-\191]*)%-[sp]$")
if not gender then
gender = g
end
if not legal_gender[gender] then
error("Gender “" .. gender .. "” is not a valid Latin gender.")
end
insert(data.genders, g)
insert_if_not(categories, "Latin na " .. gender_names[gender] .. " na di-nababagong " .. decldata.pos)
end
else
local is_irreg = false
local is_indecl = false
local is_decl = false
local has_multiple_decls = false
local has_multiple_variants = false
-- flatten declension specs
local decls = {}
for _, g in ipairs(genders) do
if not legal_gender[g] then
error("Gender “" .. g .. "” is not a valid Latin gender.")
elseif decldata.num == "pl" then
g = g .. "-p"
elseif decldata.num == "sg" then
g = g .. "-s"
end
insert(data.genders, g)
end
local function process_decl(decl_list, props)
local headword_decl = props.headword_decl
-- skip adjectival declensions
if headword_decl:match("+$") then
return
elseif props.decl == "irreg" then
is_irreg = true
headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl
local irreg_decls = split(headword_decl, ",")
if #irreg_decls > 1 then
has_multiple_decls = true
end
for _, d in ipairs(irreg_decls) do
if d == "indecl" or d == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, d)
end
else
if headword_decl == "indecl" or headword_decl == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, headword_decl)
end
end
for _, props in ipairs(decldata.propses) do
if props.headword_decl then
process_decl(decls, props)
else
local alternant_decls = {}
for _, alternant in ipairs(props) do
for _, single_props in ipairs(alternant) do
process_decl(alternant_decls, single_props)
end
end
if #alternant_decls > 1 then
has_multiple_decls = true
elseif #decls > 1 then
has_multiple_variants = true
end
for _, d in ipairs(alternant_decls) do
insert_if_not(decls, d)
end
end
end
if is_indecl and is_decl then
has_multiple_decls = true
end
if has_multiple_decls then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming kaukulan")
end
if has_multiple_variants then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming baryant ng isang kaukulan")
end
if is_irreg then
insert(title, glossary_link("di-regular"))
insert_if_not(categories, "Latin na di-regular na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-regular na " .. decldata.pos)
end
end
if is_indecl then
if is_decl then
insert(title, glossary_link("di-mauukol"))
else
insert(data.inflections, {label = glossary_link("di-mauukol")})
end
insert_if_not(categories, "Latin na di-mauukol na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-mauukol na " .. decldata.pos)
end
end
if #decls > 1 then
insert(title, "iba-iba ang kaukulan")
end
for _, decl in ipairs(decls) do
if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then
local decl_class = declension_to_english[decl]
if not decl_class then
error("Internal error: declension '" .. decl .. "' not recognized")
end
insert(title, "[[Apendise:" .. decl_class .. " kaukulan sa Latin|" .. decl_class .. " kaukulan]]")
insert_if_not(categories, "Latin na " .. decl_class .. " kaukulan na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na " .. decldata.pos .. " sa " .. decl_class .. " kaukulan")
end
end
end
local lemma_num = decldata.num == "pl" and "pl" or "sg"
if NAMESPACE == "Reconstruction" then
-- For reconstructed nouns:
if data.genders[1] == 'n' and lemma_num == 'sg' then
-- singular neuter nouns give a plural
local pl = decldata.forms["nom_pl"]
if pl and pl ~= "" and #pl > 0 then
pl.label = "plural"
insert(data.inflections, pl)
end
else
-- all others give an oblique
local obl = decldata.forms["acc_" .. lemma_num]
if obl and obl ~= "" and #obl > 0 then
obl.label = "oblique"
insert(data.inflections, obl)
end
end
else
local gen = decldata.forms["gen_" .. lemma_num]
if (decldata.unattested["gen_" .. lemma_num]) then
gen[1] = '*' .. gen[1]
data.nolink = true
end
if gen and gen ~= "" and gen ~= "—" and #gen > 0 then
if is_decl then
-- Skip displaying the genitive for nouns that are only
-- indeclinable. But we do display it for nouns like Abrahām
-- and Ādām that can be either indeclinable or declined.
gen.label = "genitive"
insert(data.inflections, gen)
end
else
insert(data.inflections, {label = "walang paari"})
insert_if_not(categories, "Latin na " .. decldata.pos .. " na walang paaring pang-isahan")
end
end
end
derivation(data, decldata, "m", "panlalaki")
derivation(data, decldata, "f", "pambabae")
derivation(data, decldata, "n", "di-tiyak")
derivation(data, decldata, "adj", "kaugnayan", "pangkaugnayan na pang-uri")
derivation(data, decldata, "dim", "pampaliit")
derivation(data, decldata, "aug", "pampalaki")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin na " .. cat)
end
return is_pn and decldata.pos == "nouns" and "proper nouns" or decldata.pos
end
pos_functions["nouns"] = function(def, args, data, infl_classes, title)
return nouns("pangngalan", def, args, data, infl_classes, title)
end
pos_functions["proper nouns"] = function(def, args, data, infl_classes, title)
return nouns("pantangi", def, args, data, infl_classes, title)
end
pos_functions["suffixes-noun"] = function(def, args, data, infl_classes, title)
return nouns("hulapi", def, args, data, infl_classes, title)
end
pos_functions["numerals-noun"] = function(def, args, data, infl_classes, title)
return nouns("pambilang", def, args, data, infl_classes, title)
end
function export.verb_title(title, typeinfo, lemma_forms)
local conj = typeinfo.conj
local irreg_processing = typeinfo.irreg
local subtypes = typeinfo.subtypes
local first_lemma = ""
if #lemma_forms > 0 then
first_lemma = require("Module:links").remove_links(lemma_forms[1])
end
if conj == "1st" then
insert(title, "[[Appendix:Latin first conjugation|first conjugation]]")
elseif conj == "2nd" then
insert(title, "[[Appendix:Latin second conjugation|second conjugation]]")
elseif conj == "3rd" then
insert(title, "[[Appendix:Latin third conjugation|third conjugation]]")
elseif conj == "3rd-io" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant) conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "3rd/4th" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant)]] / [[Appendix:Latin fourth conjugation|fourth conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "4th" then
insert(title, "[[Appendix:Latin fourth conjugation|fourth conjugation]]")
elseif conj == "irreg" then -- sum
insert(title, "[[Appendix:Latin irregular verbs|irregular conjugation]]")
end
if subtypes.highlydef then -- āiō, inquam
insert(title, "highly [[defective verb#English|defective]]")
end
if subtypes.suppl then -- sum, volō
insert(title, "[[suppletive#English|suppletive]]")
end
if subtypes["3only"] then -- decet
insert(title, "[[third person#English|third person]]-only")
elseif subtypes.impers then -- decet, advesperāscit (also nopass)
insert(title, "[[impersonal verb#English|impersonal]]")
end
if subtypes.depon then -- dēmōlior, calvor (also noperf)
insert(title, "[[deponent#English|deponent]]")
end
if subtypes.perfaspres then -- meminī, ōdī
insert(title, "no [[present tense#English|present]] stem")
-- If semidepon is set, only the active forms are affected.
local voice = subtypes.semidepon and "[[active voice#English|active]] " or ""
insert(title, ("[[perfect tense#English|perfect]] %sforms have [[present tense#English|present]] %smeaning"):format(voice, voice))
-- Clarify that deponency can only apply to the perfect.
if subtypes.semidepon then -- ōdī
insert(title, "[[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
if subtypes.optsemidepon then
insert(title, "optionally [[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
else
if subtypes.semidepon then -- fīdō, gaudeō
insert(title, "[[semi-deponent#English|semi-deponent]]")
end
if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō
insert(title, "optionally [[semi-deponent#English|semi-deponent]]")
end
end
if subtypes.imponly then -- cedo, apage
insert(title, "[[imperative mood#English|imperative]]-only")
end
if subtypes.nopass then -- coacēscō
insert(title, "no [[passive voice#English|passive]]")
end
local stems = {}
if subtypes.nopres then -- coepī; perfaspres already handles this above
insert(stems, "[[present tense#English|present]]")
end
if subtypes.noperf then
insert(stems, "[[perfect tense#English|perfect]]")
end
if subtypes.nosup or subtypes.supfutractvonly then
insert(stems, "[[supine#English|supine]]")
end
if #stems > 0 then
local extra = subtypes.supfutractvonly and " except in the [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]"
insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or ""))
end
if subtypes.nofutr then -- soleō
insert(title, "no [[future tense#English|future]]")
end
if subtypes.pass3only then -- praefundō
insert(title, "[[third person#English|third person]]-only in the [[passive voice#English|passive]]")
elseif subtypes.passimpers then -- abambulō
local msg = "[[impersonal verb#English|impersonal]] in the [[passive voice#English|passive]]"
if subtypes.passimpersold then -- possum
msg = msg .. " in [[Old Latin]]"
end
insert(title, msg)
end
if subtypes.noimp then -- volō
insert(title, "no [[imperative mood#English|imperative]]")
end
if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] short [[imperative mood#English|imperative]]")
end
if subtypes.nofutractvptc and not subtypes.nosup then -- fīō
insert(title, "no [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]")
end
if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then
if subtypes.noinf then -- inquam
insert(title, "no [[infinitive#English|infinitive]]")
end
if subtypes.noger then -- libet
insert(title, "no [[gerund#English|gerund]]")
end
end
if subtypes.shorta then -- dō
insert(title, ("[[Appendix:Latin irregular verbs|irregular]] short %s in most forms"):format(make_link(nil, "ă", "term")))
end
if irreg_processing then
if first_lemma:match("edō$") then -- edō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] alternative forms")
elseif first_lemma:match("fīō$") then -- fīō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] long " .. make_link(nil, "ī", "term"))
end
end
end
pos_functions["verbs"] = function(def, args, data, infl_classes, title)
local m_la_verb = require("Module:la-verb")
local def1, def2
if def then
def1, def2 = def:match("^(.-):(.*)$")
end
local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)
local lemma_forms = conjdata.overriding_lemma
if not lemma_forms or #lemma_forms == 0 then
lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)
end
data.heads = lemma_forms
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = conjdata.id
local perf_only = false
local function insert_inflection(infl, label)
infl.label = label
insert(data.inflections, infl)
end
local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"])
if #inf > 0 then
insert_inflection(inf, "present infinitive")
else
inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"])
if #inf > 0 then
perf_only = true
insert_inflection(inf, "perfect infinitive")
end
end
if not perf_only then
local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"])
if #perf == 0 then
perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"])
end
if #perf > 0 then
insert_inflection(perf, "perfect active")
end
end
local subtypes = typeinfo.subtypes
if not (subtypes.depon or subtypes.semidepon) then
local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"])
if #sup > 0 then
insert_inflection(sup, "supine")
else
local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"])
if #fap > 0 then
insert_inflection(fap, "future active participle")
end
end
end
export.verb_title(title, typeinfo, lemma_forms)
end
pos_functions["suffixes-verb"] = pos_functions["verbs"]
local function attested_form(decldata, index)
local form
if (decldata.unattested[index]) then
form = { { term = '*' .. decldata.forms[index][1], nolink = true } }
else
form = decldata.forms[index]
end
return form
end
local function degree_derivations(comp, sup, data)
local inflections = data.inflections
if not (comp or sup) then
return
elseif (not comp or comp == "-") and (not sup or sup == "-") then
insert(inflections, {label = "not [[Appendix:Glossary#comparative|comparable]]"})
insert_if_not(data.categories, "Latin uncomparable adverbs")
return
elseif comp == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#comparative|comparative]]"})
elseif comp then
insert(inflections, comp)
end
if sup == "-" then
insert(inflections, {label = "no [[Appendix:Glossary#superlative|superlative]]"})
elseif sup then
insert(inflections, sup)
end
end
local function adjectives(pos, def, args, data, infl_classes)
local is_num = pos == "numerals"
local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.num == "pl" then
insert_if_not(categories, "Latin plural-only " .. decldata.pos)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
if decldata.pos == "participles" then
local lemma1 = lemma[1]
if lemma1:sub(-4) == "ndum" then
insert_if_not(categories, "Latin future passive participles")
elseif lemma1:match("um$") then
insert_if_not(categories, "Latin perfect participles")
end
end
else
local lemma_num = decldata.num == "pl" and "pl" or "sg"
local masc = decldata.forms["nom_" .. lemma_num .. "_m"]
local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f")
local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n")
local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m")
local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m")
if decldata.pos == "participles" then
local masc1 = masc[1]
if masc1:sub(-5) == "ūrus" then
insert_if_not(categories, "Latin future active participles")
elseif masc1:sub(-4) == "ndus" then
-- FIXME, should rename to "Latin gerundives")
insert_if_not(categories, "Latin future passive participles")
else
local masc1_final2 = masc1:sub(-2)
if masc1_final2 == "us" then
insert_if_not(categories, "Latin perfect participles")
elseif masc1_final2 == "ns" then
insert_if_not(categories, "Latin present participles")
else
error("Unrecognized participle ending: " .. masc1)
end
end
end
-- We display the inflections in three different ways to mimic the
-- old way of doing things:
--
-- 1. If masc and fem are different, show masc, fem and neut.
-- 2. Otherwise, if masc and neut are different, show masc and neut.
-- 3. Otherwise, show masc nominative and masc genitive.
if not form_is_empty(fem) and not deep_equals(masc, fem) then
fem.label = "pambabae"
insert(data.inflections, fem)
if not form_is_empty(neut) then
neut.label = "neuter"
insert(data.inflections, neut)
end
elseif not form_is_empty(neut) and not deep_equals(masc, neut) then
neut.label = "di-tiyak"
insert(data.inflections, neut)
elseif not form_is_empty(gen) then
gen.label = "paari"
insert(data.inflections, gen)
elseif not form_is_empty(acc) then
acc.label = "paakusa"
insert(data.inflections, acc)
end
insert(infl_classes, decldata.title)
end
local comp = normalize_derivation(decldata.comp, "comparative")
local sup = normalize_derivation(decldata.sup, "superlative")
degree_derivations(comp, sup, data)
derivation(data, decldata, "adv", "adverb")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin " .. cat)
end
return decldata.pos
end
pos_functions["adjectives"] = function(def, args, data, infl_classes, title)
return adjectives("adjectives", def, args, data, infl_classes, title)
end
pos_functions["participles"] = function(def, args, data, infl_classes, title)
return adjectives("participles", def, args, data, infl_classes, title)
end
pos_functions["determiners"] = function(def, args, data, infl_classes, title)
return adjectives("determiners", def, args, data, infl_classes, title)
end
pos_functions["pronouns"] = function(def, args, data, infl_classes, title)
return adjectives("pronouns", def, args, data, infl_classes, title)
end
pos_functions["suffixes-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("suffixes", def, args, data, infl_classes, title)
end
pos_functions["numerals-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("numerals", def, args, data, infl_classes, title)
end
pos_functions["adverbs"] = function(def, args, data)
local sublist = {sublist = "/"}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp"},
[3] = {alias_of = "sup"},
["head"] = {list = true, required = true},
["comp"] = sublist,
["sup"] = sublist,
["adj"] = sublist,
["id"] = true,
})
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
local comp, sup = args.comp, args.sup
local irreg = false
if comp then
if comp[1] == "-" then
comp = "-"
elseif comp[1] == nil then
comp = nil
else
comp.label = glossary_link("comparative")
comp = args.comp
irreg = true
end
end
if sup then
if sup[1] == "-" then
sup = "-"
elseif sup[1] == nil then
sup = nil
else
sup.label = glossary_link("superlative")
sup = args.sup
irreg = true
end
end
local categories = data.categories
if irreg then
insert_if_not(categories, "Latin irregular adverbs")
end
if not (comp or sup) then
local default_comp = {label = glossary_link("comparative")}
local default_sup = {label = glossary_link("superlative")}
for _, head in ipairs(args.head) do
local stem = nil
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = head:match("(.*)" .. pattern_escape(suff) .. "$")
comp_suff, sup_suff = "ius", "issimē"
if stem ~= nil then
if suff == "nter" then
stem = stem .. "nt"
elseif suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(default_comp, stem .. comp_suff)
insert(default_sup, stem .. sup_suff)
break
end
end
if not stem then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
end
comp = comp or default_comp
sup = sup or default_sup
end
degree_derivations(comp, sup, data)
derivation(data, args, "adj", "adjective")
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes)
local list = {list = true}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_pos] = {sublist = "/"},
[other_deg] = list,
["id"] = true,
})
data.no_redundant_head_cat = #args.head == 0
-- Set default manually so we can tell whether the user specified head=.
if #args.head == 0 then
args.head = {PAGENAME}
end
data.heads = args.head
data.id = args.id
insert(data.inflections, {label = deg})
if pos_func then
pos_func(args, data, infl_classes)
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Latin " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_deg])
if other then
if #other > 0 then
args[other_deg].label = other_deg_label
insert(data.inflections, args[other_deg])
else
insert(data.inflections, {label = "no " .. other_deg_label .. " form"})
end
end
derivation(data, args, other_pos, other_pos_label)
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Latin adjectives" or
-- "Latin adverbs". Otherwise, return nothing, so that the term goes in the
-- relevant non-lemma category (e.g. "Latin comparative adjectives"), and
-- into "Latin non-lemma forms".
if positive and not positive_attested then
return pos
end
end
local function comp_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin third declension|third declension]]")
local n = {label = "neuter"}
for _, head in ipairs(args.head) do
local neuter = head:gsub("or$", "us")
insert(n, neuter)
end
insert(data.inflections, n)
end
pos_functions["comparative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "comparative", comp_adj, "adv", "adverb", "sup", "superlative", args, data, infl_classes)
end
pos_functions["comparative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "comparative", nil, "adj", "adjective", "sup", "superlative", args, data, infl_classes)
end
local function sup_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin first declension|first]]")
insert(infl_classes, "[[Appendix:Latin second declension|second declension]]")
local f, n = {label = "feminine"}, {label = "neuter"}
for _, head in ipairs(args.head) do
local stem = head:gsub("us$", "")
insert(f, stem .. "a")
insert(n, stem .. "um")
end
insert(data.inflections, f)
insert(data.inflections, n)
end
pos_functions["superlative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "superlative", sup_adj, "adv", "adverb", "comp", "comparative", args, data, infl_classes)
end
pos_functions["superlative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "superlative", nil, "adj", "adjective", "comp", "comparative", args, data, infl_classes)
end
local function adpositions(pos, def, args, data, infl_classes, title, postscript)
local cases = invert(require("Module:la-utilities").cases)
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {list = true, set = keys_to_list(cases)},
["head"] = {list = true, required = true},
["id"] = true,
})
-- Case names are supplied in numbered arguments, optionally preceded by
-- headwords.
cases = args[2]
for i = 1, #cases do
for j = i + 1, #cases do
if cases[i] == cases[j] then
error("Duplicate case")
end
end
local case = cases[i]
local appendix_link = glossary_link(case)
if i == 1 then
appendix_link = "+ " .. appendix_link
end
insert(postscript, appendix_link)
insert_if_not(data.categories, "Latin " .. case .. " " .. pos)
end
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
end
pos_functions["prepositions"] = function(...)
return adpositions("prepositions", ...)
end
pos_functions["postpositions"] = function(...)
return adpositions("postpositions", ...)
end
pos_functions["gerunds"] = function(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = "labōrandum"}, -- headword
[2] = true, -- gerundive
})
data.heads = {args[1]}
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
insert(data.inflections, {label = "[[Appendix:Glossary#accusative|accusative]]"})
local stem = args[1]:match("^(.*)um$")
if not stem then
error("Unrecognized gerund ending: " .. stem)
end
if args[2] == "-" then
insert(data.inflections, {label = "no [[Appendix:Glossary#gerundive|gerundive]]"})
else
insert(data.inflections, {[1] = args[2] or stem .. "us", label = "[[Appendix:Glossary#gerundive|gerundive]]"})
end
end
local function non_lemma_forms(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
})
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["gerund forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
s7vng8p3xmtx5e63guazlc83eumayqh
178402
178401
2026-10-24T06:58:17Z
GinawaSaHapon
3989
178402
Scribunto
text/plain
-- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections.
local export = {}
local pos_functions = {}
local string_utilities = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local form_is_empty = require("Module:la-utilities").form_is_empty
local insert = table.insert
local remove = table.remove
local umatch = mw.ustring.match
local lang = require("Module:languages").getByCode("la")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local PAGENAME = mw.loadData("Module:headword/data").pagename
local legal_gender = {
["m"] = true,
["f"] = true,
["n"] = true,
["?"] = true,
["?!"] = true,
}
local declension_to_english = {
["1"] = "unang",
["2"] = "ikalawang",
["3"] = "ikatlong",
["4"] = "ikaapat na",
["5"] = "ikalimang",
}
local gender_names = {
["m"] = "panlalaki",
["f"] = "pambabae",
["n"] = "di-tiyak",
["?"] = "di-alam na kasarian",
["?!"] = "di-kumpirmadong kasarian",
}
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function invert(...)
invert = require(table_module).invert
return invert(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities).pattern_escape
return pattern_escape(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function split(...)
split = require(string_utilities).split
return split(...)
end
local function ulower(...)
ulower = require(string_utilities).lower
return ulower(...)
end
local function format(array, concatenater)
if #array == 0 then
return ""
end
local concatenated = concat(array, concatenater)
if concatenated == "" then
return ""
elseif concatenated:sub(-1) == "'" then
concatenated = concatenated .. " "
end
return "; ''" .. concatenated .. "''"
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Apendise:Glosaryo#" .. anchor .. "|" .. text .. "]]"
end
local function make_link(page, display, face, accel)
return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face)
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iargs = require("Module:parameters").process(frame.args, {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
})
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. '-' .. suff_type
else
postype = poscat
end
local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}
local infl_classes = {}
local title = {}
local postscript = {}
if poscat == "suffixes" then
insert_if_not(data.categories, "Latin na hulaping gumagawa ng " .. suff_type)
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
postscript = concat(postscript, ", ")
return
require("Module:headword").full_headword(data)
.. format(infl_classes, "/")
.. format(title, ", ")
.. (postscript ~= "" and " (" .. postscript .. ")" or "")
end
local function process_num_type(numtype, categories)
if numtype == "card" then
insert_if_not(categories, "Latin na paulat na pambilang")
elseif numtype == "ord" then
insert_if_not(categories, "Latin na panunuran na pambilang")
elseif numtype == "frac" then
insert_if_not(categories, "Latin na bahaging pambilang")
elseif numtype == "dist" then
insert_if_not(categories, "Latin na pamahaging pambilang")
elseif numtype == "mul" then
insert_if_not(categories, "Latin na pamparaming pambilang")
elseif numtype == "coll" then
insert_if_not(categories, "Latin na kolektibong pambilang")
elseif numtype then
error("Unrecognized numeral type '" .. numtype .. "'")
end
end
local function normalize_derivation(deriv, anchor, text)
if not deriv then
return nil
end
local deriv1 = deriv[1]
if not deriv1 or deriv1 == "-" then
return deriv1
end
deriv.label = glossary_link(anchor, text)
return deriv
end
local function derivation(data, decldata, arg, anchor, text)
local der = normalize_derivation(decldata[arg], anchor, text)
if der and der ~= "-" then
insert(data.inflections, der)
end
end
local function nouns(pos, def, args, data, infl_classes, title)
local is_num = pos == "numerals"
local is_pn = false
if pos == "pantangi" then
is_pn = true
pos = "pangngalan"
end
local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local genders = decldata.overriding_genders
if #genders == 0 then
if decldata.gender then
genders = {ulower(decldata.gender)}
elseif not is_num then
error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec")
end
end
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("di-nababago")})
insert_if_not(categories, "Latin na di-nababagong " .. decldata.pos)
for _, g in ipairs(genders) do
local gender = g:match("^(.[\128-\191]*)%-[sp]$")
if not gender then
gender = g
end
if not legal_gender[gender] then
error("Gender “" .. gender .. "” is not a valid Latin gender.")
end
insert(data.genders, g)
insert_if_not(categories, "Latin na " .. gender_names[gender] .. " na di-nababagong " .. decldata.pos)
end
else
local is_irreg = false
local is_indecl = false
local is_decl = false
local has_multiple_decls = false
local has_multiple_variants = false
-- flatten declension specs
local decls = {}
for _, g in ipairs(genders) do
if not legal_gender[g] then
error("Gender “" .. g .. "” is not a valid Latin gender.")
elseif decldata.num == "pl" then
g = g .. "-p"
elseif decldata.num == "sg" then
g = g .. "-s"
end
insert(data.genders, g)
end
local function process_decl(decl_list, props)
local headword_decl = props.headword_decl
-- skip adjectival declensions
if headword_decl:match("+$") then
return
elseif props.decl == "irreg" then
is_irreg = true
headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl
local irreg_decls = split(headword_decl, ",")
if #irreg_decls > 1 then
has_multiple_decls = true
end
for _, d in ipairs(irreg_decls) do
if d == "indecl" or d == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, d)
end
else
if headword_decl == "indecl" or headword_decl == "0" then
is_indecl = true
else
is_decl = true
end
insert_if_not(decl_list, headword_decl)
end
end
for _, props in ipairs(decldata.propses) do
if props.headword_decl then
process_decl(decls, props)
else
local alternant_decls = {}
for _, alternant in ipairs(props) do
for _, single_props in ipairs(alternant) do
process_decl(alternant_decls, single_props)
end
end
if #alternant_decls > 1 then
has_multiple_decls = true
elseif #decls > 1 then
has_multiple_variants = true
end
for _, d in ipairs(alternant_decls) do
insert_if_not(decls, d)
end
end
end
if is_indecl and is_decl then
has_multiple_decls = true
end
if has_multiple_decls then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming kaukulan")
end
if has_multiple_variants then
insert_if_not(categories, "Latin na " .. decldata.pos .. " na may maraming baryant ng isang kaukulan")
end
if is_irreg then
insert(title, glossary_link("di-regular"))
insert_if_not(categories, "Latin na di-regular na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-regular na " .. decldata.pos)
end
end
if is_indecl then
if is_decl then
insert(title, glossary_link("di-mauukol"))
else
insert(data.inflections, {label = glossary_link("di-mauukol")})
end
insert_if_not(categories, "Latin na di-mauukol na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na di-mauukol na " .. decldata.pos)
end
end
if #decls > 1 then
insert(title, "iba-iba ang kaukulan")
end
for _, decl in ipairs(decls) do
if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then
local decl_class = declension_to_english[decl]
if not decl_class then
error("Internal error: declension '" .. decl .. "' not recognized")
end
insert(title, "[[Apendise:" .. decl_class .. " kaukulan sa Latin|" .. decl_class .. " kaukulan]]")
insert_if_not(categories, "Latin na " .. decl_class .. " kaukulan na " .. decldata.pos)
for _, g in ipairs(genders) do
insert_if_not(categories, "Latin na " .. gender_names[g] .. " na " .. decldata.pos .. " sa " .. decl_class .. " kaukulan")
end
end
end
local lemma_num = decldata.num == "pl" and "pl" or "sg"
if NAMESPACE == "Reconstruction" then
-- For reconstructed nouns:
if data.genders[1] == 'n' and lemma_num == 'sg' then
-- singular neuter nouns give a plural
local pl = decldata.forms["nom_pl"]
if pl and pl ~= "" and #pl > 0 then
pl.label = "plural"
insert(data.inflections, pl)
end
else
-- all others give an oblique
local obl = decldata.forms["acc_" .. lemma_num]
if obl and obl ~= "" and #obl > 0 then
obl.label = "oblique"
insert(data.inflections, obl)
end
end
else
local gen = decldata.forms["gen_" .. lemma_num]
if (decldata.unattested["gen_" .. lemma_num]) then
gen[1] = '*' .. gen[1]
data.nolink = true
end
if gen and gen ~= "" and gen ~= "—" and #gen > 0 then
if is_decl then
-- Skip displaying the genitive for nouns that are only
-- indeclinable. But we do display it for nouns like Abrahām
-- and Ādām that can be either indeclinable or declined.
gen.label = "genitive"
insert(data.inflections, gen)
end
else
insert(data.inflections, {label = "walang paari"})
insert_if_not(categories, "Latin na " .. decldata.pos .. " na walang paaring pang-isahan")
end
end
end
derivation(data, decldata, "m", "panlalaki")
derivation(data, decldata, "f", "pambabae")
derivation(data, decldata, "n", "di-tiyak")
derivation(data, decldata, "adj", "kaugnayan", "pangkaugnayan na pang-uri")
derivation(data, decldata, "dim", "pampaliit")
derivation(data, decldata, "aug", "pampalaki")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin na " .. cat)
end
return is_pn and decldata.pos == "nouns" and "proper nouns" or decldata.pos
end
pos_functions["nouns"] = function(def, args, data, infl_classes, title)
return nouns("pangngalan", def, args, data, infl_classes, title)
end
pos_functions["proper nouns"] = function(def, args, data, infl_classes, title)
return nouns("pantangi", def, args, data, infl_classes, title)
end
pos_functions["suffixes-noun"] = function(def, args, data, infl_classes, title)
return nouns("hulapi", def, args, data, infl_classes, title)
end
pos_functions["numerals-noun"] = function(def, args, data, infl_classes, title)
return nouns("pambilang", def, args, data, infl_classes, title)
end
function export.verb_title(title, typeinfo, lemma_forms)
local conj = typeinfo.conj
local irreg_processing = typeinfo.irreg
local subtypes = typeinfo.subtypes
local first_lemma = ""
if #lemma_forms > 0 then
first_lemma = require("Module:links").remove_links(lemma_forms[1])
end
if conj == "1st" then
insert(title, "[[Appendix:Latin first conjugation|first conjugation]]")
elseif conj == "2nd" then
insert(title, "[[Appendix:Latin second conjugation|second conjugation]]")
elseif conj == "3rd" then
insert(title, "[[Appendix:Latin third conjugation|third conjugation]]")
elseif conj == "3rd-io" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant) conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "3rd/4th" then
insert(title, ("[[Appendix:Latin third conjugation|third (%s variant)]] / [[Appendix:Latin fourth conjugation|fourth conjugation]]"):format(make_link(nil, "-iō", "term")))
elseif conj == "4th" then
insert(title, "[[Appendix:Latin fourth conjugation|fourth conjugation]]")
elseif conj == "irreg" then -- sum
insert(title, "[[Appendix:Latin irregular verbs|irregular conjugation]]")
end
if subtypes.highlydef then -- āiō, inquam
insert(title, "highly [[defective verb#English|defective]]")
end
if subtypes.suppl then -- sum, volō
insert(title, "[[suppletive#English|suppletive]]")
end
if subtypes["3only"] then -- decet
insert(title, "[[third person#English|third person]]-only")
elseif subtypes.impers then -- decet, advesperāscit (also nopass)
insert(title, "[[impersonal verb#English|impersonal]]")
end
if subtypes.depon then -- dēmōlior, calvor (also noperf)
insert(title, "[[deponent#English|deponent]]")
end
if subtypes.perfaspres then -- meminī, ōdī
insert(title, "no [[present tense#English|present]] stem")
-- If semidepon is set, only the active forms are affected.
local voice = subtypes.semidepon and "[[active voice#English|active]] " or ""
insert(title, ("[[perfect tense#English|perfect]] %sforms have [[present tense#English|present]] %smeaning"):format(voice, voice))
-- Clarify that deponency can only apply to the perfect.
if subtypes.semidepon then -- ōdī
insert(title, "[[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
if subtypes.optsemidepon then
insert(title, "optionally [[deponent#English|deponent]] in the [[perfect tense#English|perfect]]")
end
else
if subtypes.semidepon then -- fīdō, gaudeō
insert(title, "[[semi-deponent#English|semi-deponent]]")
end
if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō
insert(title, "optionally [[semi-deponent#English|semi-deponent]]")
end
end
if subtypes.imponly then -- cedo, apage
insert(title, "[[imperative mood#English|imperative]]-only")
end
if subtypes.nopass then -- coacēscō
insert(title, "no [[passive voice#English|passive]]")
end
local stems = {}
if subtypes.nopres then -- coepī; perfaspres already handles this above
insert(stems, "[[present tense#English|present]]")
end
if subtypes.noperf then
insert(stems, "[[perfect tense#English|perfect]]")
end
if subtypes.nosup or subtypes.supfutractvonly then
insert(stems, "[[supine#English|supine]]")
end
if #stems > 0 then
local extra = subtypes.supfutractvonly and " except in the [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]"
insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or ""))
end
if subtypes.nofutr then -- soleō
insert(title, "no [[future tense#English|future]]")
end
if subtypes.pass3only then -- praefundō
insert(title, "[[third person#English|third person]]-only in the [[passive voice#English|passive]]")
elseif subtypes.passimpers then -- abambulō
local msg = "[[impersonal verb#English|impersonal]] in the [[passive voice#English|passive]]"
if subtypes.passimpersold then -- possum
msg = msg .. " in [[Old Latin]]"
end
insert(title, msg)
end
if subtypes.noimp then -- volō
insert(title, "no [[imperative mood#English|imperative]]")
end
if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] short [[imperative mood#English|imperative]]")
end
if subtypes.nofutractvptc and not subtypes.nosup then -- fīō
insert(title, "no [[future tense#English|future]] [[active voice#English|active]] [[participle#English|participle]]")
end
if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then
if subtypes.noinf then -- inquam
insert(title, "no [[infinitive#English|infinitive]]")
end
if subtypes.noger then -- libet
insert(title, "no [[gerund#English|gerund]]")
end
end
if subtypes.shorta then -- dō
insert(title, ("[[Appendix:Latin irregular verbs|irregular]] short %s in most forms"):format(make_link(nil, "ă", "term")))
end
if irreg_processing then
if first_lemma:match("edō$") then -- edō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] alternative forms")
elseif first_lemma:match("fīō$") then -- fīō
insert(title, "[[Appendix:Latin irregular verbs|irregular]] long " .. make_link(nil, "ī", "term"))
end
end
end
pos_functions["verbs"] = function(def, args, data, infl_classes, title)
local m_la_verb = require("Module:la-verb")
local def1, def2
if def then
def1, def2 = def:match("^(.-):(.*)$")
end
local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)
local lemma_forms = conjdata.overriding_lemma
if not lemma_forms or #lemma_forms == 0 then
lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)
end
data.heads = lemma_forms
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = conjdata.id
local perf_only = false
local function insert_inflection(infl, label)
infl.label = label
insert(data.inflections, infl)
end
local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"])
if #inf > 0 then
insert_inflection(inf, "present infinitive")
else
inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"])
if #inf > 0 then
perf_only = true
insert_inflection(inf, "perfect infinitive")
end
end
if not perf_only then
local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"])
if #perf == 0 then
perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"])
end
if #perf > 0 then
insert_inflection(perf, "perfect active")
end
end
local subtypes = typeinfo.subtypes
if not (subtypes.depon or subtypes.semidepon) then
local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"])
if #sup > 0 then
insert_inflection(sup, "supine")
else
local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"])
if #fap > 0 then
insert_inflection(fap, "future active participle")
end
end
end
export.verb_title(title, typeinfo, lemma_forms)
end
pos_functions["suffixes-verb"] = pos_functions["verbs"]
local function attested_form(decldata, index)
local form
if (decldata.unattested[index]) then
form = { { term = '*' .. decldata.forms[index][1], nolink = true } }
else
form = decldata.forms[index]
end
return form
end
local function degree_derivations(comp, sup, data)
local inflections = data.inflections
if not (comp or sup) then
return
elseif (not comp or comp == "-") and (not sup or sup == "-") then
insert(inflections, {label = "hindi [[Apendise:Glosaryo#pahambing|pahambing]]"})
insert_if_not(data.categories, "Latin na pang-abay na di-mahahambing")
return
elseif comp == "-" then
insert(inflections, {label = "walang [[Apendise:Glosaryo#pahambing|pahambing]]"})
elseif comp then
insert(inflections, comp)
end
if sup == "-" then
insert(inflections, {label = "walang [[Apendise:Glosaryo#pasukdol|pasukdol]]"})
elseif sup then
insert(inflections, sup)
end
end
local function adjectives(pos, def, args, data, infl_classes)
local is_num = pos == "numerals"
local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def)
local lemma = decldata.overriding_lemma
-- TODO: modify the headword line if the slot isn't the expected one.
if #lemma == 0 then
for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do
local potential_lemma = decldata.forms["linked_" .. slot]
if not form_is_empty(potential_lemma) then
if decldata.unattested[slot] then
potential_lemma = "*" .. potential_lemma
end
lemma = potential_lemma
break
end
end
end
data.heads = lemma
-- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't
-- really any redundant heads.
data.no_redundant_head_cat = true
data.id = decldata.id
local categories = data.categories
if is_num then
process_num_type(decldata.num_type, categories)
end
if decldata.num == "pl" then
insert_if_not(categories, "Latin na pangmaramihan lamang na " .. decldata.pos)
end
if decldata.indecl then
insert(data.inflections, {label = glossary_link("di-nababago")})
if decldata.pos == "pandiwari" then
local lemma1 = lemma[1]
if lemma1:sub(-4) == "ndum" then
insert_if_not(categories, "Latin na panghinaharap na pasibong pandiwari")
elseif lemma1:match("um$") then
insert_if_not(categories, "Latin perpektong pandiwari")
end
end
else
local lemma_num = decldata.num == "pl" and "pl" or "sg"
local masc = decldata.forms["nom_" .. lemma_num .. "_m"]
local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f")
local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n")
local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m")
local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m")
if decldata.pos == "pandiwari" then
local masc1 = masc[1]
if masc1:sub(-5) == "ūrus" then
insert_if_not(categories, "Latin na panghinaharap na aktibong pandiwari")
elseif masc1:sub(-4) == "ndus" then
-- FIXME, should rename to "Latin gerundives")
insert_if_not(categories, "Latin na panghinaharap na pasibong pandiwari")
else
local masc1_final2 = masc1:sub(-2)
if masc1_final2 == "us" then
insert_if_not(categories, "Latin na perpektong pandiwari")
elseif masc1_final2 == "ns" then
insert_if_not(categories, "Latin na pangkasalukuyang pandiwari")
else
error("Unrecognized participle ending: " .. masc1)
end
end
end
-- We display the inflections in three different ways to mimic the
-- old way of doing things:
--
-- 1. If masc and fem are different, show masc, fem and neut.
-- 2. Otherwise, if masc and neut are different, show masc and neut.
-- 3. Otherwise, show masc nominative and masc genitive.
if not form_is_empty(fem) and not deep_equals(masc, fem) then
fem.label = "pambabae"
insert(data.inflections, fem)
if not form_is_empty(neut) then
neut.label = "di-tiyak"
insert(data.inflections, neut)
end
elseif not form_is_empty(neut) and not deep_equals(masc, neut) then
neut.label = "di-tiyak"
insert(data.inflections, neut)
elseif not form_is_empty(gen) then
gen.label = "paari"
insert(data.inflections, gen)
elseif not form_is_empty(acc) then
acc.label = "paakusa"
insert(data.inflections, acc)
end
insert(infl_classes, decldata.title)
end
local comp = normalize_derivation(decldata.comp, "pahambing")
local sup = normalize_derivation(decldata.sup, "pasukdol")
degree_derivations(comp, sup, data)
derivation(data, decldata, "adv", "pang-abay")
for _, cat in ipairs(decldata.categories) do
insert_if_not(categories, cat)
end
for _, cat in ipairs(decldata.cat) do
insert_if_not(categories, "Latin na " .. cat)
end
return decldata.pos
end
pos_functions["adjectives"] = function(def, args, data, infl_classes, title)
return adjectives("pang-uri", def, args, data, infl_classes, title)
end
pos_functions["participles"] = function(def, args, data, infl_classes, title)
return adjectives("pandiwari", def, args, data, infl_classes, title)
end
pos_functions["determiners"] = function(def, args, data, infl_classes, title)
return adjectives("pantukoy", def, args, data, infl_classes, title)
end
pos_functions["pronouns"] = function(def, args, data, infl_classes, title)
return adjectives("panghalip", def, args, data, infl_classes, title)
end
pos_functions["suffixes-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("hulapi", def, args, data, infl_classes, title)
end
pos_functions["numerals-adjective"] = function(def, args, data, infl_classes, title)
return adjectives("pambilang", def, args, data, infl_classes, title)
end
pos_functions["adverbs"] = function(def, args, data)
local sublist = {sublist = "/"}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp"},
[3] = {alias_of = "sup"},
["head"] = {list = true, required = true},
["comp"] = sublist,
["sup"] = sublist,
["adj"] = sublist,
["id"] = true,
})
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
local comp, sup = args.comp, args.sup
local irreg = false
if comp then
if comp[1] == "-" then
comp = "-"
elseif comp[1] == nil then
comp = nil
else
comp.label = glossary_link("comparative")
comp = args.comp
irreg = true
end
end
if sup then
if sup[1] == "-" then
sup = "-"
elseif sup[1] == nil then
sup = nil
else
sup.label = glossary_link("superlative")
sup = args.sup
irreg = true
end
end
local categories = data.categories
if irreg then
insert_if_not(categories, "Latin irregular adverbs")
end
if not (comp or sup) then
local default_comp = {label = glossary_link("comparative")}
local default_sup = {label = glossary_link("superlative")}
for _, head in ipairs(args.head) do
local stem = nil
for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do
stem = head:match("(.*)" .. pattern_escape(suff) .. "$")
comp_suff, sup_suff = "ius", "issimē"
if stem ~= nil then
if suff == "nter" then
stem = stem .. "nt"
elseif suff == "rā" then
comp_suff = "er" .. comp_suff
sup_suff = "imē"
end
insert(default_comp, stem .. comp_suff)
insert(default_sup, stem .. sup_suff)
break
end
end
if not stem then
error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.")
end
end
comp = comp or default_comp
sup = sup or default_sup
end
degree_derivations(comp, sup, data)
derivation(data, args, "adj", "adjective")
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes)
local list = {list = true}
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_pos] = {sublist = "/"},
[other_deg] = list,
["id"] = true,
})
data.no_redundant_head_cat = #args.head == 0
-- Set default manually so we can tell whether the user specified head=.
if #args.head == 0 then
args.head = {PAGENAME}
end
data.heads = args.head
data.id = args.id
insert(data.inflections, {label = deg})
if pos_func then
pos_func(args, data, infl_classes)
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Latin " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_deg])
if other then
if #other > 0 then
args[other_deg].label = other_deg_label
insert(data.inflections, args[other_deg])
else
insert(data.inflections, {label = "no " .. other_deg_label .. " form"})
end
end
derivation(data, args, other_pos, other_pos_label)
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Latin adjectives" or
-- "Latin adverbs". Otherwise, return nothing, so that the term goes in the
-- relevant non-lemma category (e.g. "Latin comparative adjectives"), and
-- into "Latin non-lemma forms".
if positive and not positive_attested then
return pos
end
end
local function comp_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin third declension|third declension]]")
local n = {label = "neuter"}
for _, head in ipairs(args.head) do
local neuter = head:gsub("or$", "us")
insert(n, neuter)
end
insert(data.inflections, n)
end
pos_functions["comparative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "comparative", comp_adj, "adv", "adverb", "sup", "superlative", args, data, infl_classes)
end
pos_functions["comparative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "comparative", nil, "adj", "adjective", "sup", "superlative", args, data, infl_classes)
end
local function sup_adj(args, data, infl_classes)
insert(infl_classes, "[[Appendix:Latin first declension|first]]")
insert(infl_classes, "[[Appendix:Latin second declension|second declension]]")
local f, n = {label = "feminine"}, {label = "neuter"}
for _, head in ipairs(args.head) do
local stem = head:gsub("us$", "")
insert(f, stem .. "a")
insert(n, stem .. "um")
end
insert(data.inflections, f)
insert(data.inflections, n)
end
pos_functions["superlative adjectives"] = function(def, args, data, infl_classes, title)
return degree("adjectives", "superlative", sup_adj, "adv", "adverb", "comp", "comparative", args, data, infl_classes)
end
pos_functions["superlative adverbs"] = function(def, args, data, infl_classes, title)
return degree("adverbs", "superlative", nil, "adj", "adjective", "comp", "comparative", args, data, infl_classes)
end
local function adpositions(pos, def, args, data, infl_classes, title, postscript)
local cases = invert(require("Module:la-utilities").cases)
args = require("Module:parameters").process(args, {
[1] = {alias_of = "head", list = false},
[2] = {list = true, set = keys_to_list(cases)},
["head"] = {list = true, required = true},
["id"] = true,
})
-- Case names are supplied in numbered arguments, optionally preceded by
-- headwords.
cases = args[2]
for i = 1, #cases do
for j = i + 1, #cases do
if cases[i] == cases[j] then
error("Duplicate case")
end
end
local case = cases[i]
local appendix_link = glossary_link(case)
if i == 1 then
appendix_link = "+ " .. appendix_link
end
insert(postscript, appendix_link)
insert_if_not(data.categories, "Latin " .. case .. " " .. pos)
end
data.heads = args.head
data.no_redundant_head_cat = true -- since head= is required
data.id = args.id
end
pos_functions["prepositions"] = function(...)
return adpositions("prepositions", ...)
end
pos_functions["postpositions"] = function(...)
return adpositions("postpositions", ...)
end
pos_functions["gerunds"] = function(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = "labōrandum"}, -- headword
[2] = true, -- gerundive
})
data.heads = {args[1]}
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
insert(data.inflections, {label = "[[Appendix:Glossary#accusative|accusative]]"})
local stem = args[1]:match("^(.*)um$")
if not stem then
error("Unrecognized gerund ending: " .. stem)
end
if args[2] == "-" then
insert(data.inflections, {label = "no [[Appendix:Glossary#gerundive|gerundive]]"})
else
insert(data.inflections, {[1] = args[2] or stem .. "us", label = "[[Appendix:Glossary#gerundive|gerundive]]"})
end
end
local function non_lemma_forms(def, args, data)
args = require("Module:parameters").process(args, {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
})
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["gerund forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
rzpx0w4oxtkwasmk7mrx84lzfarojav
Module:la-adj/data
828
38954
178396
178387
2026-10-24T06:07:29Z
GinawaSaHapon
3989
178396
Scribunto
text/plain
local decl = {}
local en_utilities_module = "Module:en-utilities"
local la_utilities_module = "Module:la-utilities"
local string_char_module = "Module:string/char"
local table_deep_copy_module = "Module:table/deepCopy"
local table_empty_module = "Module:table/empty"
local table_insert_if_not_module = "Module:table/insertIfNot"
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 = "[" .. MACRON .. BREVE .. DIAER .. "]*"
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 empty_table(...)
empty_table = require(table_empty_module)
return empty_table(...)
end
local function insert_if_not(...)
insert_if_not = require(table_insert_if_not_module)
return insert_if_not(...)
end
local function remove_forms(...)
remove_forms = require(la_utilities_module).remove_forms
return remove_forms(...)
end
local function singularize(...)
singularize = require(en_utilities_module).singularize
return singularize(...)
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
local function decl_link(english_declension, decl_text)
decl_text = decl_text or english_declension .. " kaukulan"
return "[[Apendise:" .. english_declension .. " kaukulan sa Latin|" .. decl_text .. "]]"
end
local function preprocess(...)
local frame = mw.getCurrentFrame()
function preprocess(text)
return frame:preprocess(text)
end
return preprocess(...)
end
decl["0+"] = function(data, args)
local forms, categories = data.forms, data.categories
local stem = args[1]
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = stem
forms["gen_sg_m"] = stem
forms["gen_pl_m"] = stem
forms["dat_sg_m"] = stem
forms["dat_pl_m"] = stem
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = stem
forms["abl_sg_m"] = stem
forms["abl_pl_m"] = stem
forms["voc_sg_m"] = stem
forms["voc_pl_m"] = stem
forms["loc_sg_m"] = stem
forms["loc_pl_m"] = stem
insert_if_not(categories, "Latin na " .. data.pos .. " na hindi nagbabago")
end
decl["1&2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
local singpos, gender = singularize(pos), data.gender
if gender == "F" then
data.title = decl_link("unang") .. " na " .. singpos
elseif gender then
data.title = decl_link("ikalawang") .. " na " .. singpos
else
data.title = decl_link("unang", "una") .. "/" .. decl_link("ikalawang") .. " na " .. singpos
end
local original
if types.er then
local final2 = stem:sub(-2)
if final2 == "er" then
insert_if_not(subtitles, "palagyong panlalaking pang-isahan na nagtatapos sa ''-er''")
insert_if_not(categories, "Latin na una at ikalawang kaukulan na "
.. pos .. " na may palagyong panlalaking pang-isahan na nagtatapos sa -er")
elseif final2 == "ur" then
insert_if_not(subtitles, "palagyong panlalaking pang-isahan na nagtatapos sa ''-ur''")
insert_if_not(categories, "Latin na una at ikalawang kaukulan na "
.. pos .. " na may palagyong panlalaking pang-isahan na nagtatapos sa -ur")
else
error("Unrecognized ''-r'' stem (doesn't end in ''-er'' or ''-ur''): " .. stem)
end
stem, original = args[2], stem
end
local us = "us"
local a_sf = "a"
local um = "um"
local ae_gsf = "ae"
local am = "am"
local a_macron = "ā"
local i_pl = stem .. "ī"
if types.greekA or types.greekE then
insert_if_not(subtitles, "Griyegong uri")
insert_if_not(categories, "Latin na una at ikalawang kaukulan na " .. pos .. " na may kaukulang Griyego")
if types.greekA then
us = "os"
um = "on"
am = "ān"
else
us = "os"
a_sf = "ē"
um = "on"
ae_gsf = "ēs"
am = "ēn"
a_macron = "ē"
end
i_pl = {i_pl, stem .. "oe"} -- FIXME: add .oe spec.
end
forms["nom_sg_m"] = original or (stem .. us)
forms["nom_sg_f"] = stem .. a_sf
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_f"] = stem .. ae_gsf
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_f"] = stem .. "ae"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_f"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_f"] = stem .. am
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_f"] = stem .. a_macron
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_f"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = original or (stem .. "e")
forms["voc_sg_f"] = stem .. a_sf
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
if types.ius then
insert_if_not(subtitles, "kaukulang panghalip")
--insert_if_not(subtitles, "with genitive singular in ''-ī̆us'' and dative singular in ''-ī''")
insert_if_not(categories, "Latin na una at ikalawang kaukulan na " .. pos .. " na may paaring pang-isahan na nagtatapos sa -ī̆us")
forms["gen_sg_m"] = stem .. "ī̆us"
forms["gen_sg_f"] = stem .. "ī̆us"
forms["gen_sg_n"] = stem .. "ī̆us"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_f"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
elseif types.not_ius then
insert_if_not(subtitles, "kaukulang di-panghalip")
--insert_if_not(subtitles, "with normal genitive and dative singular")
end
if stem == "me" then
forms["voc_sg_m"] = "mī"
end
if types.ic then
insert_if_not(subtitles, "''hic'' na uri")
--insert_if_not(subtitles, "with genitive singular ending in ''-ius'' and dative singular ending in ''-ic''")
local oc = "oc"
local oc_macron = "ōc"
if stem == "ill" then
oc = "uc"
oc_macron = "ūc"
end
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = stem .. oc
forms["nom_pl_n"] = stem .. "aec"
forms["gen_sg_m"] = stem .. "uius"
forms["gen_sg_f"] = stem .. "uius"
forms["gen_sg_n"] = stem .. "uius"
forms["dat_sg_m"] = stem .. "uic"
forms["dat_sg_f"] = stem .. "uic"
forms["dat_sg_n"] = stem .. "uic"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = stem .. oc
forms["acc_pl_n"] = stem .. "aec"
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. oc_macron
forms["voc_sg_m"] = "-"
forms["voc_sg_f"] = "-"
forms["voc_sg_n"] = "-"
forms["voc_pl_m"] = "-"
forms["voc_pl_f"] = "-"
forms["voc_pl_n"] = "-"
end
if types.distr then
if stem:sub(-1) == "n" then
insert_if_not(subtitles, "pamahagi, karaniwang pangmaramihan lamang; mas pumapabor sa mga maiikling paaring pangmaramihan na nagtatapos sa''-num''")
forms["gen_pl_m"] = {stem .. "um", stem .. "ōrum"}
forms["gen_pl_f"] = {stem .. "um", stem .. "ārum"}
forms["gen_pl_n"] = {stem .. "um", stem .. "ōrum"}
else
error("Unrecognized distributive numeral stem (doesn't end in ''n''): " .. stem)
end
original = stem
stem = args[2]
end
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na una at ikalawang kaukulan na " .. pos)
end
decl["1-1+"] = function(data, args)
local forms, pos, subtitles, categories = data.forms, data.pos, data.subtitles, data.categories
local stem = args[1]
data.title = decl_link("unang") .. " na may iisang anyo na " .. singularize(pos)
forms["nom_sg_m"] = stem .. "a"
forms["nom_pl_m"] = stem .. "ae"
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ae"
forms["gen_pl_m"] = stem .. "ārum"
forms["dat_sg_m"] = stem .. "ae"
forms["dat_pl_m"] = stem .. "īs"
forms["acc_sg_m"] = stem .. "am"
forms["acc_sg_n"] = stem .. "a"
forms["acc_pl_m"] = stem .. "ās"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ā"
forms["abl_pl_m"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "a"
forms["voc_pl_m"] = stem .. "ae"
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
insert_if_not(categories, "Latin na unang kaukulan na " .. data.pos)
end
decl["2-2+"] = function(data, args)
local forms, types, pos, subtitles, categories = data.forms, data.types, data.pos, data.subtitles, data.categories
local stem = args[1]
data.title = decl_link("ikalawang") .. " na may dalawang anyo na " .. singularize(pos)
local us = "us"
local um = "um"
local i_pl = stem .. "ī"
if types.greek then
insert_if_not(subtitles, "Griyegong uri")
insert_if_not(categories, "Latin na ikalawang kaukulan na " .. pos .. " na may kaukulang Griyego")
us = "os"
um = "on"
i_pl = {i_pl, stem .. "oe"} -- FIXME: add .oe spec.
end
forms["nom_sg_m"] = stem .. us
forms["nom_sg_n"] = stem .. um
forms["nom_pl_m"] = i_pl
forms["nom_pl_n"] = stem .. "a"
forms["gen_sg_m"] = stem .. "ī"
forms["gen_sg_n"] = stem .. "ī"
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_sg_m"] = stem .. "ō"
forms["dat_sg_n"] = stem .. "ō"
forms["dat_pl_m"] = stem .. "īs"
forms["dat_pl_n"] = stem .. "īs"
forms["acc_sg_m"] = stem .. um
forms["acc_sg_n"] = stem .. um
forms["acc_pl_m"] = stem .. "ōs"
forms["acc_pl_n"] = stem .. "a"
forms["abl_sg_m"] = stem .. "ō"
forms["abl_sg_n"] = stem .. "ō"
forms["abl_pl_m"] = stem .. "īs"
forms["abl_pl_n"] = stem .. "īs"
forms["voc_sg_m"] = stem .. "e"
forms["voc_sg_n"] = stem .. um
forms["voc_pl_m"] = i_pl
forms["voc_pl_n"] = stem .. "a"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na iklawang kaukulan na " .. pos)
end
local function abl_i_e(...)
local function update_slot(forms, slot, f, do_copy)
if not forms[slot] then
return do_copy
elseif do_copy then
f = deep_copy(f)
end
forms[slot] = f
return true
end
function abl_i_e(stem, forms, types)
local f, do_copy
if types["abl_e_i"] then
f = {stem .. "e", stem .. "ī"}
elseif types["abl_i_e"] then
f = {stem .. "ī", stem .. "e"}
else
return
end
do_copy = update_slot(forms, "abl_sg_m", f, do_copy)
do_copy = update_slot(forms, "abl_sg_f", f, do_copy)
-- Neuter doesn't take -e with i-stems.
if not types.I then
update_slot(forms, "abl_sg_n", f, do_copy)
end
end
return abl_i_e(...)
end
decl["3-1+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
local singpos = singularize(pos)
if data.gender then
data.title = decl_link("ikatlong") .. " na " .. singpos
else
data.title = decl_link("ikatlong") .. " na may tatlong anyo na " .. singpos
end
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = {stem2 .. "ī", stem2 .. "e"}
forms["abl_sg_n"] = {stem2 .. "ī", stem2 .. "e"}
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
if types.par then
insert_if_not(subtitles, "non-i-stem")
forms["abl_sg_m"] = stem2 .. "e"
forms["abl_sg_n"] = stem2 .. "e"
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["acc_pl_m"] = stem2 .. "ēs"
forms["acc_pl_n"] = stem2 .. "a"
forms["voc_pl_n"] = stem2 .. "a"
elseif types.not_par then
insert_if_not(subtitles, "i-stem")
end
local es_base = stem1:match("^(.-)ēs$")
if es_base and es_base == stem2 then
if types.greek then
local note1 = "Kasalukuyang hindi alam kung ginagamit ng mga ganitong pang-uri ang mga dulo ng tangkay na i o katinig sa Klasikong Latin: di-kumpirmado ang mga kaugnay na anyo. Depende sa salita, maaaring kumpirmado sa Bagong Latin ang alinman o parehong dulo."
forms["nom_sg_n"] = stem2 .. "es"
forms["acc_sg_n"] = stem2 .. "es"
forms["voc_sg_n"] = stem2 .. "es"
forms["nom_pl_n"] = {stem2 .. "a", stem2 .. "ia"}
notes["nom_pl_n2"] = note1
forms["acc_pl_n"] = {stem2 .. "a", stem2 .. "ia"}
notes["acc_pl_n2"] = note1
forms["voc_pl_n"] = {stem2 .. "a", stem2 .. "ia"}
notes["voc_pl_n2"] = note1
forms["abl_sg_m"] = {stem2 .. "e", stem2 .. "ī"}
notes["abl_sg_m2"] = note1
forms["abl_sg_n"] = {stem2 .. "e", stem2 .. "ī"}
notes["abl_sg_n2"] = note1
notes["loc_sg_m2"] = note1 -- same as abl_sg_m2
notes["loc_sg_n2"] = note1 -- same as abl_sg_n2
forms["gen_pl_m"] = {stem2 .. "um", stem2 .. "ium"}
notes["gen_pl_m2"] = note1
forms["gen_pl_n"] = {stem2 .. "um", stem2 .. "ium"}
notes["gen_pl_n2"] = note1
insert_if_not(subtitles, "Griyegong uri")
elseif types.not_greek then
insert_if_not(subtitles, "di-Griyegong uri")
end
end
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos .. " na may isang anyo")
end
decl["3-def+"] = function(data, args)
local forms, types, pos, subtitles, notes, categories = data.forms, data.types, data.pos, data.subtitles, data.notes, data.categories
local stem1, stem2 = args[1], args[2]
local singpos = singularize(pos)
if data.gender then
data.title = decl_link("ikatlong") .. " na " .. singpos
else
data.title = decl_link("ikatlong") .. " na depektibong " .. singpos
end
forms["nom_sg_m"] = stem1
forms["nom_sg_n"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1
forms["acc_pl_m"] = stem2 .. "ēs"
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
forms["voc_sg_m"] = stem1
forms["voc_sg_n"] = stem1
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
if types.tor then
data.title = decl_link("ikatlong") .. " na panlalaking " .. singpos
insert_if_not(subtitles, "di-tangkay na i")
remove_forms(forms, {"_f$", "_n$"})
forms["nom_sg_m"] = stem1
forms["gen_sg_m"] = stem2 .. "is"
forms["dat_sg_m"] = stem2 .. "ī"
forms["acc_sg_m"] = stem2 .. "em"
forms["abl_sg_m"] = stem2 .. "e"
forms["voc_sg_m"] = stem1
forms["nom_pl_m"] = stem2 .. "ēs"
forms["gen_pl_m"] = stem2 .. "um"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["acc_pl_m"] = stem2 .. "ēs"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["voc_pl_m"] = stem2 .. "ēs"
insert_if_not(categories, "Latin na ikatlong kaukulan na panlalaki lamang na pang-uri")
end
if types.trix then
insert_if_not(subtitles, "pambabae lamang kung isahan, pambabae o di-tiyak kung maramihan")
remove_forms(forms, {"_m$", "sg_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
insert_if_not(categories, "Latin na ikatlong kaukulan na pambabae at pangdi-tiyak lamang na pang-uri")
end
if types.trixf then
data.title = decl_link("ikatlong") .. " na pambabaeng " .. singpos
remove_forms(forms, {"_m$", "_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = stem2 .. "is"
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = stem2 .. "em"
forms["abl_sg_f"] = {stem2 .. "e", stem2 .. "ī"}
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ēs"
forms["gen_pl_f"] = stem2 .. "ium"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = stem2 .. "ēs"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ēs"
insert_if_not(categories, "Latin na ikatlong kaukulan na pambabae lamang na pang-uri")
end
if types.idis then
data.title = decl_link("ikatlong") .. " na pambabae lamang na " .. singpos
insert_if_not(subtitles, "Griyego o di-Griyegong uri")
insert_if_not(subtitles, "di-tangkay na i")
remove_forms(forms, {"_m$", "_n$"})
forms["nom_sg_f"] = stem1
forms["gen_sg_f"] = {stem2 .. "is", stem2 .. "os"}
forms["dat_sg_f"] = stem2 .. "ī"
forms["acc_sg_f"] = {stem2 .. "em", stem2 .. "a"}
forms["abl_sg_f"] = stem2 .. "e"
forms["voc_sg_f"] = stem1
forms["nom_pl_f"] = stem2 .. "ē̆s"
forms["gen_pl_f"] = stem2 .. "um"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["acc_pl_f"] = {stem2 .. "ēs", stem2 .. "as"}
forms["abl_pl_f"] = stem2 .. "ibus"
forms["voc_pl_f"] = stem2 .. "ē̆s"
if umatch(toNFD(stem1), "[iyIY]" .. 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["voc_sg_f"] = {stem1, (stem1:gsub("s$", ""))}
notes["voc_sg_f2"] = "Sa panulaan."
end
insert_if_not(categories, "Latin na ikatlong kaukulan na pambabae lamang na pang-uri")
end
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
end
decl["3-C+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1 = args[1]
local stem2 = stem1 .. "ōr"
data.title = decl_link("ikatlong") .. " na pahambing na " .. singularize(pos)
forms["nom_sg_m"] = stem1 .. "or"
forms["nom_sg_n"] = stem1 .. "us"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "a"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "um"
forms["gen_pl_n"] = stem2 .. "um"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_n"] = stem1 .. "us"
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
forms["acc_pl_n"] = stem2 .. "a"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
abl_i_e(stem2, forms, types)
forms["voc_sg_m"] = stem1 .. "or"
forms["voc_sg_n"] = stem1 .. "us"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "a"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
insert_if_not(categories, "Latin na pahambing na pang-uri")
end
decl["3-P+"] = function(data, args)
local forms, notes = data.forms, data.notes
local stem2 = args[2]
decl["3-1+"](data, args)
data.title = decl_link("ikatlong") .. " na pandiwari"
local note1 = "Kapag ginamit lamang bilang pang-uri"
forms["abl_sg_m"] = {stem2 .. "e", stem2 .. "ī"}
notes["abl_sg_m2"] = note1
forms["abl_sg_n"] = {stem2 .. "e", stem2 .. "ī"}
notes["abl_sg_n2"] = note1
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
notes["loc_sg_m2"] = note1 -- same as abl_sg_m2
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
notes["loc_sg_n2"] = note1 -- same as abl_sg_n2
forms["acc_pl_m"] = {stem2 .. "ēs", stem2 .. "īs"}
end
decl["3-2+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem = args[1]
local singpos = singularize(pos)
if data.gender then
data.title = decl_link("ikatlong") .. " na " .. singpos
else
data.title = decl_link("ikatlong") .. " na may dalawang anyo na " .. singpos
end
forms["nom_sg_m"] = stem .. "is"
forms["nom_sg_n"] = stem .. "e"
forms["nom_pl_m"] = stem .. "ēs"
forms["nom_pl_n"] = stem .. "ia"
forms["gen_sg_m"] = stem .. "is"
forms["gen_sg_n"] = stem .. "is"
forms["gen_pl_m"] = stem .. "ium"
forms["gen_pl_n"] = stem .. "ium"
forms["dat_sg_m"] = stem .. "ī"
forms["dat_sg_n"] = stem .. "ī"
forms["dat_pl_m"] = stem .. "ibus"
forms["dat_pl_n"] = stem .. "ibus"
forms["acc_sg_m"] = stem .. "em"
forms["acc_sg_n"] = stem .. "e"
forms["acc_pl_m"] = {stem .. "īs", stem .. "ēs"}
forms["acc_pl_n"] = stem .. "ia"
forms["abl_sg_m"] = stem .. "ī"
forms["abl_sg_n"] = stem .. "ī"
forms["abl_pl_m"] = stem .. "ibus"
forms["abl_pl_n"] = stem .. "ibus"
-- abl_i_e(stem, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem .. "is"
forms["voc_sg_n"] = stem .. "e"
forms["voc_pl_m"] = stem .. "ēs"
forms["voc_pl_n"] = stem .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos .. " na may dalawang anyo")
end
decl["3-3+"] = function(data, args)
local forms, types, pos, categories = data.forms, data.types, data.pos, data.categories
local stem1, stem2 = args[1], args[2]
local singpos = singularize(pos)
if data.gender then
data.title = decl_link("ikatlong") .. " na " .. singpos
else
data.title = decl_link("ikatlong") .. " na may tatlong anyo na " .. singpos
end
forms["nom_sg_m"] = stem1
forms["nom_sg_f"] = stem2 .. "is"
forms["nom_sg_n"] = stem2 .. "e"
forms["nom_pl_m"] = stem2 .. "ēs"
forms["nom_pl_f"] = stem2 .. "ēs"
forms["nom_pl_n"] = stem2 .. "ia"
forms["gen_sg_m"] = stem2 .. "is"
forms["gen_sg_f"] = stem2 .. "is"
forms["gen_sg_n"] = stem2 .. "is"
forms["gen_pl_m"] = stem2 .. "ium"
forms["gen_pl_f"] = stem2 .. "ium"
forms["gen_pl_n"] = stem2 .. "ium"
forms["dat_sg_m"] = stem2 .. "ī"
forms["dat_sg_f"] = stem2 .. "ī"
forms["dat_sg_n"] = stem2 .. "ī"
forms["dat_pl_m"] = stem2 .. "ibus"
forms["dat_pl_f"] = stem2 .. "ibus"
forms["dat_pl_n"] = stem2 .. "ibus"
forms["acc_sg_m"] = stem2 .. "em"
forms["acc_sg_f"] = stem2 .. "em"
forms["acc_sg_n"] = stem2 .. "e"
forms["acc_pl_m"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_f"] = {stem2 .. "īs", stem2 .. "ēs"}
forms["acc_pl_n"] = stem2 .. "ia"
forms["abl_sg_m"] = stem2 .. "ī"
forms["abl_sg_f"] = stem2 .. "ī"
forms["abl_sg_n"] = stem2 .. "ī"
forms["abl_pl_m"] = stem2 .. "ibus"
forms["abl_pl_f"] = stem2 .. "ibus"
forms["abl_pl_n"] = stem2 .. "ibus"
-- abl_i_e(stem2, forms, types) -- enable once [[Module:la-nominal]] has ben updated
forms["voc_sg_m"] = stem1
forms["voc_sg_f"] = stem2 .. "is"
forms["voc_sg_n"] = stem2 .. "e"
forms["voc_pl_m"] = stem2 .. "ēs"
forms["voc_pl_f"] = stem2 .. "ēs"
forms["voc_pl_n"] = stem2 .. "ia"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos .. " na may tatlong anyo")
end
decl["indecl+"] = function(data, args)
local forms, subtitles, categories = data.forms, data.subtitles, data.categories
local stem = args[1]
insert_if_not(subtitles, "ginagamit lamang sa palagyo at paakusa")
forms["nom_sg_m"] = stem
forms["nom_pl_m"] = "-"
forms["gen_sg_m"] = "-"
forms["gen_pl_m"] = "-"
forms["dat_sg_m"] = "-"
forms["dat_pl_m"] = "-"
forms["acc_sg_m"] = stem
forms["acc_pl_m"] = "-"
forms["abl_sg_m"] = "-"
forms["abl_pl_m"] = "-"
forms["voc_sg_m"] = "-"
forms["voc_pl_m"] = "-"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
insert_if_not(categories, "Latin na " .. data.pos .. " na hindi nagbabago")
end
decl["irreg+"] = function(data, args)
local forms, types, pos, notes, categories = data.forms, data.types, data.pos, data.notes, data.categories
local arg1 = args[1]
if arg1 == "duo" or arg1 == "ambō" then
local stem = usub(arg1, 1, -2)
data.title = stem == "amb" and glossary_link("di-regular") .. " na pang-uri" or " na pambilang"
data.num = "pl"
local stem_with_o = stem .. (stem == "amb" and "ō" or "o")
local note1 = preprocess("Sinusulat minsan ang paaring pangmaramihan na {{m|la|duum}} bilang {{m|la|duûm}} sa mga tekstong nasa Bagong Latin. Regular na resulta ang dulo nito na {{m|la|-um|id=paaring pangmaramihan}} ng orihinal na dulong ikalawang kaukulan na paaring pangmaramihan (ikumpara ang Griyego {{m|grc|-ων}}, hindi kontraksiyon ang {{m|grc|-ῶν}}) ng {{m|la||-ōrum}} (mas bagong inobasyon). Ginamit ang kaakibat na anyong Lumang Latin nito na {{m|la|duom}} ni Plautus at nabanggit ni Cicero; posible itong binigkas bilang {{m|la|duōm}} sa Makalumang Latin, ngunit naniniwala ang ilang mga lingwista na pinapaikli na sa Proto-Italiko ang mga patinig bago ang {{m|la||-m}} sa dulo ng salita.")
forms["nom_pl_m"] = stem_with_o
forms["nom_pl_f"] = stem .. "ae"
forms["nom_pl_n"] = stem_with_o
forms["gen_pl_m"] = stem .. "ōrum"
forms["gen_pl_f"] = stem .. "ārum"
forms["gen_pl_n"] = stem .. "ōrum"
forms["dat_pl_m"] = stem .. "ōbus"
forms["dat_pl_f"] = stem .. "ābus"
forms["dat_pl_n"] = stem .. "ōbus"
forms["acc_pl_m"] = {stem .. "ōs", stem_with_o}
forms["acc_pl_f"] = stem .. "ās"
forms["acc_pl_n"] = stem_with_o
forms["abl_pl_m"] = stem .. "ōbus"
forms["abl_pl_f"] = stem .. "ābus"
forms["abl_pl_n"] = stem .. "ōbus"
forms["voc_pl_m"] = stem_with_o
forms["voc_pl_f"] = stem .. "ae"
forms["voc_pl_n"] = stem_with_o
if stem == "du" then
forms["gen_pl_m"] = {forms["gen_pl_m"], "duum"}
notes["gen_pl_m2"] = note1
forms["gen_pl_n"] = {forms["gen_pl_n"], "duum"}
notes["gen_pl_n2"] = note1
end
elseif arg1:sub(-6) == "mīlle" then
data.title = "semi-" .. glossary_link("di-nagbabagong") .. " pambilang"
local stem = arg1:sub(1, -3)
forms["nom_sg_m"] = stem .. "le"
forms["nom_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["gen_sg_m"] = stem .. "le"
forms["gen_pl_m"] = {stem .. "ium", stem .. "lium"}
forms["dat_sg_m"] = stem .. "le"
forms["dat_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["acc_sg_m"] = stem .. "le"
forms["acc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["abl_sg_m"] = stem .. "le"
forms["abl_pl_m"] = {stem .. "ibus", stem .. "libus"}
forms["voc_sg_m"] = stem .. "le"
forms["voc_pl_m"] = {stem .. "ia", stem .. "lia"}
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
elseif arg1 == "ille" or arg1 == "iste" or arg1 == "ipse" or arg1 == "olle" then
local stem = arg1:sub(1, -2)
types.ius = true
decl["1&2+"](data, {stem})
data.title = glossary_link("pamatlig") .. " na " .. singularize(data.pos)
forms["nom_sg_m"] = arg1
if arg1 == "ipse" then
local note1 = "Medyebal na Latin."
add_form(forms, "nom_sg_n", stem, "ud")
notes["nom_sg_n2"] = note1
add_form(forms, "acc_sg_n", stem, "ud")
notes["acc_sg_n2"] = note1
else
forms["nom_sg_n"] = stem .. "ud"
forms["acc_sg_n"] = stem .. "ud"
end
forms["voc_sg_m"] = "-"
forms["voc_sg_f"] = "-"
forms["voc_sg_n"] = "-"
forms["voc_pl_m"] = "-"
forms["voc_pl_f"] = "-"
forms["voc_pl_n"] = "-"
empty_table(categories)
elseif arg1 == "illic" or arg1 == "istic" or arg1 == "isthic" then
data.title = glossary_link("pamatlig") .. " na " .. singularize(data.pos)
local stem, unattested = arg1:sub(1, -3), data.unattested
forms["nom_sg_m"] = stem .. "ic"
forms["nom_sg_f"] = stem .. "aec"
forms["nom_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["gen_sg_m"] = stem .. "ī̆usce"
forms["gen_sg_f"] = stem .. "ī̆usce"
forms["gen_sg_n"] = stem .. "ī̆usce"
forms["dat_sg_m"] = stem .. "īc"
forms["dat_sg_f"] = stem .. "īc"
forms["dat_sg_n"] = stem .. "īc"
forms["acc_sg_m"] = stem .. "unc"
forms["acc_sg_f"] = stem .. "anc"
forms["acc_sg_n"] = {stem .. "uc", stem .. "ucce", stem .. "oc"}
forms["abl_sg_m"] = stem .. "ōc"
forms["abl_sg_f"] = stem .. "āc"
forms["abl_sg_n"] = stem .. "ōc"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["nom_pl_m"] = stem .. "īsce"
forms["nom_pl_f"] = stem .. "aec"
forms["nom_pl_n"] = stem .. "aec"
forms["gen_pl_m"] = stem .. "ōrunc"
unattested["gen_pl_m"] = true
forms["gen_pl_f"] = stem .. "ārunc"
unattested["gen_pl_f"] = true
forms["gen_ok_n"] = stem .. "ōrunc"
unattested["gen_pl_n"] = true
forms["dat_pl_m"] = stem .. "īsce"
forms["dat_pl_f"] = stem .. "īsce"
forms["dat_pl_n"] = stem .. "īsce"
forms["acc_pl_m"] = stem .. "ōsce"
forms["acc_pl_f"] = stem .. "āsce"
forms["acc_pl_n"] = stem .. "aec"
forms["abl_pl_m"] = stem .. "īsce"
forms["abl_pl_f"] = stem .. "īsce"
forms["abl_pl_n"] = stem .. "īsce"
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "hice" then
data.title = glossary_link("pamatlig") .. " na panghalip"
forms["nom_sg_m"] = "hice"
forms["nom_sg_f"] = "haece"
forms["nom_sg_n"] = "hoce"
forms["nom_pl_m"] = "hīce"
forms["nom_pl_f"] = "haece"
forms["nom_pl_n"] = "haece"
forms["gen_sg_m"] = "huiusce"
forms["gen_sg_f"] = "huiusce"
forms["gen_sg_n"] = "huiusce"
forms["gen_pl_m"] = {"hōrunce", "hōrumce"}
forms["gen_pl_f"] = {"hārunce", "hārumce"}
forms["gen_pl_n"] = {"hōrunce", "hōrumce"}
forms["dat_sg_m"] = "huīce"
forms["dat_sg_f"] = "huīce"
forms["dat_sg_n"] = "huīce"
forms["dat_pl_m"] = "hīsce"
forms["dat_pl_f"] = "hīsce"
forms["dat_pl_n"] = "hīsce"
forms["acc_sg_m"] = "hunce"
forms["acc_sg_f"] = "hance"
forms["acc_sg_n"] = "hoce"
forms["acc_pl_m"] = "hōsce"
forms["acc_pl_f"] = "hāsce"
forms["acc_pl_n"] = "haece"
forms["abl_sg_m"] = "hōce"
forms["abl_sg_f"] = "hāce"
forms["abl_sg_n"] = "hōce"
forms["abl_pl_m"] = "hīsce"
forms["abl_pl_f"] = "hīsce"
forms["abl_pl_n"] = "hīsce"
forms["loc_sg_m"] = deep_copy(forms["gen_sg_m"])
forms["loc_sg_f"] = deep_copy(forms["gen_sg_f"])
forms["loc_sg_n"] = deep_copy(forms["gen_sg_n"])
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_f"] = deep_copy(forms["abl_pl_f"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
elseif arg1 == "plūs" then
data.title = glossary_link("di-regular") .. " na " .. decl_link("ikatlong") .. " na pahambing na " .. singularize(pos) .. ", pangmaramihan lamang sa Klasikong Latin"
local note1 = "Wala sa mga pang-isahang anyo ang ginagamit bilang mga pang-uri sa Klasikong Latin"
forms["nom_sg_n"] = "plūs"
notes["nom_sg_n1"] = note1
forms["nom_pl_m"] = "plūrēs"
forms["nom_pl_n"] = "plūra"
forms["gen_sg_m"] = "plūris"
notes["gen_sg_m1"] = note1
forms["gen_sg_n"] = "plūris"
notes["gen_sg_n1"] = note1
forms["gen_pl_m"] = "plūrium"
forms["gen_pl_n"] = "plūrium"
forms["dat_sg_m"] = "plūrī"
notes["dat_sg_m1"] = note1
forms["dat_sg_n"] = "plūrī"
notes["dat_sg_n1"] = note1
forms["dat_pl_m"] = "plūribus"
forms["dat_pl_n"] = "plūribus"
forms["acc_sg_m"] = "plūrem"
notes["acc_sg_m1"] = note1
forms["acc_sg_f"] = "plūrem"
notes["acc_sg_f1"] = note1
forms["acc_sg_n"] = "plūs"
notes["acc_sg_n1"] = note1
forms["acc_pl_m"] = {"plūrēs", "plūrīs"}
forms["acc_pl_n"] = "plūra"
forms["abl_sg_m"] = {"plūrī", "plūre"}
notes["abl_sg_m1"] = note1
notes["abl_sg_m2"] = note1
forms["abl_sg_f"] = {"plūrī", "plūre"}
notes["abl_sg_f1"] = note1
notes["abl_sg_f2"] = note1
forms["abl_sg_n"] = {"plūrī", "plūre"}
notes["abl_sg_n1"] = note1
notes["abl_sg_n2"] = note1
forms["abl_pl_m"] = "plūribus"
forms["abl_pl_n"] = "plūribus"
forms["voc_sg_n"] = "plūs"
notes["voc_sg_n1"] = note1
forms["voc_pl_m"] = "plūrēs"
forms["voc_pl_n"] = "plūra"
forms["loc_sg_m"] = deep_copy(forms["abl_sg_m"])
notes["loc_sg_m1"] = note1
notes["loc_sg_m2"] = note1
forms["loc_sg_f"] = deep_copy(forms["abl_sg_f"])
notes["loc_sg_f1"] = note1
notes["loc_sg_f2"] = note1
forms["loc_sg_n"] = deep_copy(forms["abl_sg_n"])
notes["loc_sg_n1"] = note1
notes["loc_sg_n2"] = note1
forms["loc_pl_m"] = deep_copy(forms["abl_pl_m"])
forms["loc_pl_n"] = deep_copy(forms["abl_pl_n"])
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos)
insert_if_not(categories, "Latin na ikatlong kaukulan na " .. pos .. " na may isang anyo")
elseif umatch(arg1, "^egō̆?$") or arg1 == "nōs" then
data.title = glossary_link("panao") .. " na panghalip"
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "nōs"
forms["gen_sg_m"] = "meī"
forms["gen_pl_m"] = {"nostrī", "nostrum"}
forms["dat_sg_m"] = "mihī̆"
forms["dat_pl_m"] = "nōbīs"
forms["acc_sg_m"] = {"mē", "mēmē"}
forms["acc_pl_m"] = "nōs"
forms["abl_sg_m"] = {"mē", "mēmē"}
forms["abl_pl_m"] = "nōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "nōs"
elseif arg1 == "tū" or arg1 == "vōs" then
data.title = glossary_link("panao") .. " na panghalip"
forms["nom_sg_m"] = arg1
forms["nom_pl_m"] = "vōs"
forms["gen_sg_m"] = "tuī"
forms["gen_pl_m"] = {"vestrī", "vestrum"}
forms["dat_sg_m"] = "tibī̆"
forms["dat_pl_m"] = "vōbīs"
forms["acc_sg_m"] = {"tē", "tētē"}
forms["acc_pl_m"] = "vōs"
forms["abl_sg_m"] = {"tē", "tētē"}
forms["abl_pl_m"] = "vōbīs"
forms["voc_sg_m"] = arg1
forms["voc_pl_m"] = "vōs"
elseif arg1 == "suī" then
data.title = glossary_link("pabalik") .. " na panghalip"
forms["nom_sg_m"] = "-"
forms["nom_pl_m"] = "-"
forms["gen_sg_m"] = arg1
forms["gen_pl_m"] = forms["gen_sg_m"]
forms["dat_sg_m"] = "sibī̆"
forms["dat_pl_m"] = forms["dat_sg_m"]
forms["acc_sg_m"] = {"sē", "sēsē"}
forms["acc_pl_m"] = {"sē", "sēsē"}
forms["abl_sg_m"] = {"sē", "sēsē"}
forms["abl_pl_m"] = {"sē", "sēsē"}
forms["voc_sg_m"] = "-"
forms["voc_pl_m"] = "-"
elseif arg1 == "is" or arg1 == "īdem" then
data.title = glossary_link("pamatlig") .. " na panghalip"
local note1 = preprocess("The dative singular is found spelled {{orth|{{sma|{{lang|la|EIEI}}}}}} (here represented as {{m|la||-ēī}}), and scanned as two longs in {{w|Plautus}}, but also as a monosyllable; the latter is its normal scansion in Classical. Other spellings include {{orth|{{sma|{{lang|la|EEI}}}}}}{{,}} and {{orth|{{sma|{{lang|la|IEI}}}}}}.")
local note2 = preprocess("The nominative/dative/ablative plural forms regularly developed into a monosyllable {{IPAchar|/iː(s)/}}, with later remodelling; compare the etymology of {{m|la|deus}}. This {{IPAchar|/iː/}} was normally spelled as {{orth|{{sma|{{lang|la|EI}}}}}} during and as {{orth|{{sma|{{lang|la|II}}}}}} after the Republic; a disyllabic {{m|la||-iī}}, spelled {{orth|{{sma|{{lang|la|II}}}}}}, {{orth|{{sma|{{lang|la|I}}}}}}, appears in Silver Age poetry, while disyllabic {{m|la||-eīs}} is only post-Classical. Other spellings include {{orth|{{sma|{{lang|la|EEI(S)}}}}}}, {{orth|{{sma|{{lang|la|EIEI(S)}}}}}}{{,}} and {{orth|{{sma|{{lang|la|IEI(S)}}}}}}.")
forms["nom_sg_m"] = "is"
forms["nom_sg_f"] = "ea"
forms["nom_sg_n"] = "id"
forms["nom_pl_m"] = {"iī", "eī", "ī"}
notes["nom_pl_m1"] = note2
forms["nom_pl_f"] = "eae"
forms["nom_pl_n"] = "ea"
forms["gen_sg_m"] = {"eius", "ejus"}
forms["gen_sg_f"] = {"eius", "ejus"}
forms["gen_sg_n"] = {"eius", "ejus"}
forms["gen_pl_m"] = {"eōrum", "eum"}
forms["gen_pl_f"] = "eārum"
forms["gen_pl_n"] = {"eōrum", "eum"}
forms["dat_sg_m"] = {"eī", "e͡i", "ēī"}
notes["dat_sg_m1"] = note1
forms["dat_sg_f"] = {"eī", "e͡i", "ēī", "eae"}
notes["dat_sg_f1"] = note1
forms["dat_sg_n"] = {"eī", "e͡i", "ēī"}
notes["dat_sg_n1"] = note1
forms["dat_pl_m"] = {"iīs", "eīs", "īs", "ībus"}
notes["dat_pl_m1"] = note2
forms["dat_pl_f"] = {"iīs", "eīs", "īs", "eābus"}
notes["dat_pl_f1"] = note2
forms["dat_pl_n"] = {"iīs", "eīs", "īs"}
notes["dat_pl_n1"] = note2
forms["acc_sg_m"] = "eum"
forms["acc_sg_f"] = "eam"
forms["acc_sg_n"] = "id"
forms["acc_pl_m"] = "eōs"
forms["acc_pl_f"] = "eās"
forms["acc_pl_n"] = "ea"
forms["abl_sg_m"] = "eō"
forms["abl_sg_f"] = "eā"
forms["abl_sg_n"] = "eō"
forms["abl_pl_m"] = {"iīs", "eīs", "īs"}
notes["abl_pl_m1"] = note2
forms["abl_pl_f"] = {"iīs", "eīs", "īs"}
notes["abl_pl_f1"] = note2
forms["abl_pl_n"] = {"iīs", "eīs", "īs"}
notes["abl_pl_n1"] = note2
if arg1 == "īdem" then
forms["nom_sg_m"] = "ī"
forms["nom_sg_n"] = "i"
forms["acc_sg_n"] = "i"
end
elseif arg1 == "quis" or arg1 == "quī" then
local note1 = preprocess("{{m|la|qua|Qua|ng=with short {{m|la||ă}}}} occurs only as an indefinite pronoun or determiner, placed immediately after {{m|la|sī}}, {{m|la|nē}}{{,}} or {{m|la|num}}. The combinations {{m|la|sīqua}}, {{m|la|nēqua}}, and {{m|la|numqua}} are sometimes written without spacing (as also are the masculines {{m|la|sīquis}}, {{m|la|nēquis}}{{,}} and {{m|la|numquis}}). Compare {{m|la|aliquis}}, {{m|la|aliqua}}, {{m|la|aliquid}}. {{m|la|quae|Quae}} can also be used instead of {{m|la||quă}}, and {{m|la||quă}} is never used as an interrogative pronoun/determiner, relative pronoun/determiner{{,}} or feminine nominative plural.")
local note2 = "Republican Latin."
local note3 = preprocess("{{m|la|quī|Quī}} is occasionally used as an ablative singular, whence {{m|la|quīcum|t=with whom}}; it was originally preferred in instrumental meanings.")
if arg1 == "quī" then
if pos == "pronouns" then
data.title = glossary_link("relative") .. " pronoun"
forms["nom_sg_m"] = {"quī", "quei"}
notes["nom_sg_m2"] = note2
forms["nom_sg_f"] = {"quae", "quai"}
notes["nom_sg_f2"] = note2
forms["nom_pl_n"] = "quae"
forms["acc_pl_n"] = "quae"
else
data.title = glossary_link("relative") .. "/" .. glossary_link("interrogative") .. " determiner"
forms["nom_sg_m"] = {"quī", "quei", "quis"}
notes["nom_sg_m2"] = note2
notes["nom_sg_m3"] = note2
forms["nom_sg_f"] = {"quae", "quai", "qua"}
notes["nom_sg_f2"] = note2
notes["nom_sg_f3"] = note1
forms["nom_pl_n"] = {"quae", "qua"}
notes["nom_pl_n2"] = note1
forms["acc_pl_n"] = {"quae", "qua"}
notes["acc_pl_n2"] = note1
end
forms["nom_sg_n"] = "quod"
forms["nom_pl_m"] = {"quī", "quei"}
notes["nom_pl_m2"] = note2
forms["nom_pl_f"] = "quae"
forms["gen_pl_m"] = "quōrum"
forms["gen_pl_f"] = "quārum"
forms["gen_pl_n"] = "quōrum"
forms["acc_sg_f"] = "quam"
forms["acc_sg_n"] = "quod"
forms["acc_pl_m"] = "quōs"
forms["acc_pl_f"] = "quās"
else
data.title = glossary_link("interrogative") .. "/" .. glossary_link("indefinite") .. " pronoun"
forms["nom_sg_m"] = {"quis", "quī", "quei"}
notes["nom_sg_m3"] = note2
forms["nom_sg_f"] = {"quae", "quis", "qua"}
notes["nom_sg_f2"] = note2
notes["nom_sg_f3"] = note1
forms["nom_sg_n"] = "quid"
forms["nom_pl_m"] = {"quī", "quei", "quēs"}
notes["nom_pl_m2"] = note2
notes["nom_pl_m3"] = note2
forms["nom_pl_f"] = {"quae", "quēs"}
notes["nom_pl_f2"] = note2
forms["nom_pl_n"] = {"quae", "qua"}
notes["nom_pl_n2"] = note1
forms["gen_pl_m"] = {"quōrum", "quium"}
forms["gen_pl_f"] = {"quārum", "quium"}
forms["gen_pl_n"] = {"quōrum", "quium"}
notes["gen_pl_m2"] = note2
notes["gen_pl_f2"] = note2
notes["gen_pl_n2"] = note2
forms["acc_sg_f"] = {"quam", "quem"}
notes["acc_sg_f2"] = note2
forms["acc_sg_n"] = "quid"
forms["acc_pl_m"] = {"quōs", "quēs"}
notes["acc_pl_m2"] = note2
forms["acc_pl_f"] = {"quās", "quēs"}
notes["acc_pl_f2"] = note2
forms["acc_pl_n"] = {"quae", "qua"}
notes["acc_pl_n2"] = note1
end
forms["gen_sg_m"] = {"cuius", "quoius"}
forms["gen_sg_f"] = {"cuius", "quoius"}
forms["gen_sg_n"] = {"cuius", "quoius"}
notes["gen_sg_m2"] = note2
notes["gen_sg_f2"] = note2
notes["gen_sg_n2"] = note2
forms["dat_sg_m"] = {"cui", "quoi", "[[quoī]] / [[quoei]]", "[[quoiī]] / [[quoiei]]"}
forms["dat_sg_f"] = {"cui", "quoi", "[[quoī]] / [[quoei]]", "[[quoiī]] / [[quoiei]]"}
forms["dat_sg_n"] = {"cui", "quoi", "[[quoī]] / [[quoei]]", "[[quoiī]] / [[quoiei]]"}
notes["dat_sg_m2"] = note2
notes["dat_sg_m3"] = note2
notes["dat_sg_m4"] = note2
notes["dat_sg_f2"] = note2
notes["dat_sg_f3"] = note2
notes["dat_sg_f4"] = note2
notes["dat_sg_n2"] = note2
notes["dat_sg_n3"] = note2
notes["dat_sg_n4"] = note2
forms["dat_pl_m"] = {"quibus", "quīs", "queis"}
forms["dat_pl_f"] = {"quibus", "quīs", "queis"}
forms["dat_pl_n"] = {"quibus", "quīs", "queis"}
notes["dat_pl_m3"] = note2
notes["dat_pl_f3"] = note2
notes["dat_pl_n3"] = note2
forms["acc_sg_m"] = "quem"
forms["abl_sg_m"] = {"quō", "quī"}
forms["abl_sg_f"] = {"quā", "quī"}
forms["abl_sg_n"] = {"quō", "quī"}
notes["abl_sg_m2"] = note3
notes["abl_sg_f2"] = note3
notes["abl_sg_n2"] = note3
forms["abl_pl_m"] = {"quibus", "quīs", "queis"}
forms["abl_pl_f"] = {"quibus", "quīs", "queis"}
forms["abl_pl_n"] = {"quibus", "quīs", "queis"}
notes["abl_pl_m3"] = note2
notes["abl_pl_f3"] = note2
notes["abl_pl_n3"] = note2
elseif arg1 == "aliquī" then
data.title = glossary_link("indefinite") .. " " .. glossary_link("determiner")
local note1 = "Normatively, [[aliqui#Latin|aliquī]] is a determiner (used adjectivally) and [[aliquis#Latin|aliquis]] is a pronoun (used substantively), but the opposite usages can be found, even among the best Classical writers."
local note2 = "The feminine nominative singular form is usually ''aliqua'', but there are a handful of possible examples of ''aliquae'' as a feminine nominative singular form; see [[Citations:aliquae]]. The feminine nominative plural can only be ''aliquae'', and there are perhaps no solid examples of the neuter nominative/accusative plural taking any form other than ''aliqua''."
local note3 = "Alternative spelling [[aliquoius]] (used in Republican Latin or earlier)."
local note4 = "Alternative spelling [[aliqueis]] (used in Republican Latin or earlier)."
local note5 = "Alternative spelling [[aliquoi]] (used in Republican Latin or earlier)."
forms["nom_sg_m"] = {"aliquī", "aliquis"}
notes["nom_sg_m2"] = note1
forms["nom_sg_f"] = "aliqua"
notes["nom_sg_f1"] = note2
forms["nom_sg_n"] = "aliquod"
forms["nom_pl_m"] = "aliquī"
forms["nom_pl_f"] = "aliquae"
notes["nom_pl_f1"] = note2
forms["nom_pl_n"] = "aliqua"
notes["nom_pl_n1"] = note2
forms["gen_sg_m"] = "alicuius"
notes["gen_sg_m1"] = note3
forms["gen_sg_f"] = "alicuius"
notes["gen_sg_f1"] = note3
forms["gen_sg_n"] = "alicuius"
notes["gen_sg_n1"] = note3
forms["gen_pl_m"] = "aliquōrum"
forms["gen_pl_f"] = "aliquārum"
forms["gen_pl_n"] = "aliquōrum"
forms["dat_sg_m"] = "alicui"
notes["dat_sg_m1"] = note5
forms["dat_sg_f"] = "alicui"
notes["dat_sg_f1"] = note5
forms["dat_sg_n"] = "alicui"
notes["dat_sg_n1"] = note5
forms["dat_pl_m"] = {"aliquīs", "aliquibus"}
notes["dat_pl_m1"] = note4
forms["dat_pl_f"] = {"aliquīs", "aliquibus"}
notes["dat_pl_f1"] = note4
forms["dat_pl_n"] = {"aliquīs", "aliquibus"}
notes["dat_pl_n1"] = note4
forms["acc_sg_m"] = "aliquem"
forms["acc_sg_f"] = "aliquam"
forms["acc_sg_n"] = "aliquod"
forms["acc_pl_m"] = "aliquōs"
forms["acc_pl_f"] = "aliquās"
forms["acc_pl_n"] = "aliqua"
notes["acc_pl_n1"] = note2
forms["abl_sg_m"] = "aliquō"
forms["abl_sg_f"] = "aliquā"
forms["abl_sg_n"] = "aliquō"
forms["abl_pl_m"] = {"aliquīs", "aliquibus"}
notes["abl_pl_m1"] = note4
forms["abl_pl_f"] = {"aliquīs", "aliquibus"}
notes["abl_pl_f1"] = note4
forms["abl_pl_n"] = {"aliquīs", "aliquibus"}
notes["abl_pl_n1"] = note4
elseif arg1 == "aliquis" then
data.title = glossary_link("indefinite") .. " " .. glossary_link("pronoun")
local note1 = preprocess("{{m|la|aliquī|g=m|qq=nom. sg.}} is relatively rare (but classically attested) as a pronoun, although frequent as a determiner.")
local note2 = preprocess("{{m|la|aliqua|g=f|qq=nom. sg.}} is very rare as a pronoun, although frequent as a determiner.")
local note3 = preprocess("{{m|la|alicuius|qq=gen. sg.}} and {{m|la|alicui|qq=dat. sg.}} have alternative spellings {{m|la|aliquoius}}, {{m|la|aliquoi}} (used in Republican Latin or earlier).")
local note4 = "Alternative spelling [[aliqueis]] (used in Republican Latin or earlier)."
local note4 = preprocess("{{m|la|aliquīs|qq=abl. pl.}} has the alternative spelling {{m|la|aliqueis}} (used in Republican Latin or earlier).")
local note5 = preprocess("{{m|la|aliquī|qq=abl. sg.}} is a rare Old Latin form, attested in Plautus in place of {{m|la|aliquō}} as a masculine and neuter pronoun.")
local note6 = preprocess("{{m|la|aliquī|qq=nom. pl.}} had an alternative Old Latin form {{m|la|aliquēs}} according to the Late Latin grammarian Charisius.")
forms["nom_sg_m"] = {"aliquis", "aliquī"}
notes["nom_sg_m2"] = note1
forms["nom_sg_f"] = "aliqua"
notes["nom_sg_f1"] = note2
forms["nom_sg_n"] = "aliquid"
forms["nom_pl_m"] = "aliquī"
notes["nom_pl_m1"] = note6
forms["nom_pl_f"] = "aliquae"
forms["nom_pl_n"] = "aliqua"
forms["gen_sg_m"] = "alicuius"
notes["gen_sg_m1"] = note3
forms["gen_sg_f"] = "alicuius"
notes["gen_sg_f1"] = note3
forms["gen_sg_n"] = "alicuius"
notes["gen_sg_n1"] = note3
forms["gen_pl_m"] = "aliquōrum"
forms["gen_pl_f"] = "aliquārum"
forms["gen_pl_n"] = "aliquōrum"
forms["dat_sg_m"] = "alicui"
notes["dat_sg_m1"] = note3
forms["dat_sg_f"] = "alicui"
notes["dat_sg_f1"] = note3
forms["dat_sg_n"] = "alicui"
notes["dat_sg_n1"] = note3
forms["dat_pl_m"] = {"aliquīs", "aliquibus"}
notes["dat_pl_m1"] = note4
forms["dat_pl_f"] = {"aliquīs", "aliquibus"}
notes["dat_pl_f1"] = note4
forms["dat_pl_n"] = {"aliquīs", "aliquibus"}
notes["dat_pl_n1"] = note4
forms["acc_sg_m"] = "aliquem"
forms["acc_sg_f"] = "aliquam"
forms["acc_sg_n"] = "aliquid"
forms["acc_pl_m"] = "aliquōs"
forms["acc_pl_f"] = "aliquās"
forms["acc_pl_n"] = "aliqua"
forms["abl_sg_m"] = {"aliquō", "aliquī"}
notes["abl_sg_m2"] = note5
forms["abl_sg_f"] = {"aliquā", "aliquī"}
notes["abl_sg_f2"] = note5
forms["abl_sg_n"] = {"aliquō", "aliquī"}
notes["abl_sg_n2"] = note5
forms["abl_pl_m"] = {"aliquīs", "aliquibus"}
notes["abl_pl_m1"] = note4
forms["abl_pl_f"] = {"aliquīs", "aliquibus"}
notes["abl_pl_f1"] = note4
forms["abl_pl_n"] = {"aliquīs", "aliquibus"}
notes["abl_pl_n1"] = note4
elseif arg1 == "quisquam" then
if pos == "pronouns" then
local note1 = "Republican Latin."
local note2 = "Used in the feminine only in Old Latin."
data.title = glossary_link("negative polarity item", "negative polarity") .. " " .. glossary_link("indefinite") .. " " .. glossary_link("pronoun")
forms["nom_sg_m"] = "quisquam"
notes["nom_sg_m1"] = note2
forms["nom_sg_n"] = {"quicquam", "quidquam"}
forms["gen_sg_m"] = {"cuiusquam", "quoiusquam"}
forms["gen_sg_f"] = {"cuiusquam", "quoiusquam"}
forms["gen_sg_n"] = {"cuiusquam", "quoiusquam"}
notes["gen_sg_m2"] = note1
notes["gen_sg_f2"] = note1
notes["gen_sg_n2"] = note1
forms["dat_sg_m"] = {"cuiquam", "quoiquam"}
forms["dat_sg_f"] = {"cuiquam", "quoiquam"}
forms["dat_sg_n"] = {"cuiquam", "quoiquam"}
notes["dat_sg_m2"] = note1
notes["dat_sg_f2"] = note1
notes["dat_sg_n2"] = note1
forms["acc_sg_m"] = "quemquam"
notes["acc_sg_m1"] = note2
forms["acc_sg_n"] = {"quicquam", "quidquam"}
forms["abl_sg_m"] = {"quōquam", "quīquam"}
forms["abl_sg_n"] = {"quōquam", "quīquam"}
elseif pos == "determiners" then
local note1 = "Only attested in postclassical Latin. In Classical Latin, forms of [[ullus#Latin|ūllus]] were used instead."
local note2 = "Only attested as a feminine form in the preclassical Latin of authors like Plautus."
local note3 = "Attested only once in Classical Latin. Usually [[ullus#Latin|ūllam]] was used instead."
local note4 = "Attested, but rare in Classical Latin. Usually [[ullus#Latin|ūllō]] was used instead."
data.title = glossary_link("negative polarity item", "negative polarity") .. " " .. glossary_link("indefinite") .. " " .. glossary_link("determiner")
forms["nom_sg_m"] = "quisquam"
forms["nom_sg_f"] = {"quaequam", "quisquam"}
notes["nom_sg_f1"] = note1
notes["nom_sg_f2"] = note2
forms["nom_sg_n"] = "quodquam"
notes["nom_sg_n1"] = note1
forms["nom_pl_m"] = "quīquam"
notes["nom_pl_m1"] = note1
forms["nom_pl_f"] = "quaequam"
notes["nom_pl_f1"] = note1
forms["nom_pl_n"] = "quaequam"
notes["nom_pl_n1"] = note1
forms["gen_sg_m"] = "cuiusquam"
forms["gen_sg_f"] = "cuiusquam"
forms["gen_sg_n"] = "cuiusquam"
forms["gen_pl_m"] = "quōrumquam"
notes["gen_pl_m1"] = note1
forms["gen_pl_f"] = "quārumquam"
notes["gen_pl_f1"] = note1
forms["gen_pl_n"] = "quōrumquam"
notes["gen_pl_n1"] = note1
forms["dat_sg_m"] = "cuiquam"
forms["dat_sg_f"] = "cuiquam"
forms["dat_sg_n"] = "cuiquam"
forms["dat_pl_m"] = "quibusquam"
notes["dat_pl_m1"] = note1
forms["dat_pl_f"] = "quibusquam"
notes["dat_pl_f1"] = note1
forms["dat_pl_n"] = "quibusquam"
notes["dat_pl_n1"] = note1
forms["acc_sg_m"] = "quemquam"
forms["acc_sg_f"] = {"quamquam", "quemquam"}
notes["acc_sg_f1"] = note3
notes["acc_sg_f2"] = note2
forms["acc_sg_n"] = "quodquam"
notes["acc_sg_n1"] = note1
forms["acc_pl_m"] = "quōsquam"
notes["acc_pl_m1"] = note1
forms["acc_pl_f"] = "quāsquam"
notes["acc_pl_f1"] = note1
forms["acc_pl_n"] = "quaequam"
notes["acc_pl_n1"] = note1
forms["abl_sg_m"] = {"quōquam", "quīquam"}
notes["abl_sg_m1"] = note4
notes["abl_sg_m2"] = note2
forms["abl_sg_f"] = "quāquam"
notes["abl_sg_f1"] = note1
forms["abl_sg_n"] = "quōquam"
notes["abl_sg_n1"] = note4
forms["abl_pl_m"] = "quibusquam"
notes["abl_pl_m1"] = note1
forms["abl_pl_f"] = "quibusquam"
notes["abl_pl_f1"] = note1
forms["abl_pl_n"] = "quibusquam"
notes["abl_pl_n1"] = note1
forms["voc_sg_m"] = "quisquam"
notes["voc_sg_m1"] = note1
forms["voc_sg_f"] = "quaequam"
notes["voc_sg_f1"] = note1
forms["voc_sg_n"] = "quodquam"
notes["voc_sg_n1"] = note1
forms["voc_pl_m"] = "quīquam"
notes["voc_pl_m1"] = note1
forms["voc_pl_f"] = "quaequam"
notes["voc_pl_f1"] = note1
forms["voc_pl_n"] = "quaequam"
notes["voc_pl_n1"] = note1
end
elseif arg1 == "quisquis" then
data.title = glossary_link("relative") .. "/" .. glossary_link("interrogative") .. " pronoun"
forms["nom_sg_m"] = "quisquis"
forms["nom_sg_f"] = "quisquis"
forms["nom_sg_n"] = {"quidquid", "quicquid"}
forms["nom_pl_m"] = "quīquī"
forms["nom_pl_f"] = "quaequae"
forms["nom_pl_n"] = "quaequae"
forms["gen_sg_m"] = "cuiuscuius"
forms["gen_sg_f"] = "cuiuscuius"
forms["gen_sg_n"] = "cuiuscuius"
forms["gen_pl_m"] = "quōrumquōrum"
forms["gen_pl_f"] = "quārumquārum"
forms["gen_pl_n"] = "quōrumquōrum"
forms["dat_sg_m"] = "cuicui"
forms["dat_sg_f"] = "cuicui"
forms["dat_sg_n"] = "cuicui"
forms["dat_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["dat_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["acc_sg_m"] = "quemquem"
forms["acc_sg_f"] = "quamquam"
forms["acc_sg_n"] = {"quidquid", "quicquid"}
forms["acc_pl_m"] = "quōsquōs"
forms["acc_pl_f"] = "quāsquās"
forms["acc_pl_n"] = "quaequae"
forms["abl_sg_m"] = "quōquō"
forms["abl_sg_f"] = "quāquā"
forms["abl_sg_n"] = "quōquō"
forms["abl_pl_m"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_f"] = {"quibusquibus", "quīsquīs"}
forms["abl_pl_n"] = {"quibusquibus", "quīsquīs"}
forms["voc_sg_m"] = "quisquis"
forms["voc_sg_f"] = "quisquis"
forms["voc_sg_n"] = {"quidquid", "quicquid"}
forms["voc_pl_m"] = "quīquī"
forms["voc_pl_f"] = "quaequae"
forms["voc_pl_n"] = "quaequae"
elseif arg1 == "ecquis" then
local note1 = "Unattested in classical Latin."
local note2 = "Attested only twice in Classical Latin."
data.title = glossary_link("interrogative") .. " pronoun"
forms["nom_sg_m"] = {"ecquis", "ecquī"}
forms["nom_sg_f"] = {"ecqua", "ecquae"}
forms["nom_sg_n"] = "ecquid"
forms["nom_pl_m"] = "ecquī"
forms["nom_pl_f"] = "ecquae"
forms["nom_pl_n"] = {"ecqua", "ecquae"}
forms["gen_sg_m"] = "eccuius"
forms["gen_sg_f"] = "eccuius"
forms["gen_sg_n"] = "eccuius"
notes["gen_sg_m1"] = note1
notes["gen_sg_f1"] = note1
notes["gen_sg_n1"] = note1
forms["dat_sg_m"] = "eccui"
forms["dat_sg_f"] = "eccui"
forms["dat_sg_n"] = "eccui"
notes["dat_sg_m1"] = note2
notes["dat_sg_f1"] = note2
notes["dat_sg_n1"] = note2
forms["acc_sg_m"] = "ecquem"
forms["acc_sg_f"] = "ecquam"
forms["acc_sg_n"] = "ecquod"
forms["acc_pl_m"] = "ecquōs"
forms["acc_pl_f"] = "ecquās"
forms["acc_pl_n"] = {"ecqua", "ecquae"}
forms["abl_sg_m"] = {"ecquō", "ecquī"}
forms["abl_sg_f"] = {"ecquā", "ecquī"}
forms["abl_sg_n"] = {"ecquō", "ecquī"}
elseif arg1 == "quīdam" then
local note1 = "The genitive singular was spelled [[quoiusdam#Latin|''quoiusdam'']] before the Augustan period."
local note2 = "The dative singular was spelled [[quoidam#Latin|''quoidam'']] before the Augustan period."
local note3 = "An alternative masculine nominative/accusative plural form [[quesdam#Latin|''quēsdam'']] occurs in Accius."
local note4 = "The dative/ablative plural has a rare alternative form [[quisdam#Latin|''quīsdam'']]/[[queisdam#Latin|''queisdam'']]."
data.title = glossary_link("indefinite") .. " pronoun"
forms["nom_sg_m"] = "quīdam"
forms["nom_sg_f"] = "quaedam"
forms["nom_sg_n"] = "quiddam"
forms["nom_pl_m"] = "quīdam"
notes["nom_pl_m1"] = note3
forms["nom_pl_f"] = "quaedam"
forms["nom_pl_n"] = "quaedam"
forms["gen_sg_m"] = "cuiusdam"
forms["gen_sg_f"] = "cuiusdam"
forms["gen_sg_n"] = "cuiusdam"
notes["gen_sg_m1"] = note1
notes["gen_sg_f1"] = note1
notes["gen_sg_n1"] = note1
forms["gen_pl_m"] = {"quōrundam", "quōrumdam"}
forms["gen_pl_f"] = {"quārundam", "quārumdam"}
forms["gen_pl_n"] = {"quōrundam", "quōrumdam"}
forms["dat_sg_m"] = "cuidam"
forms["dat_sg_f"] = "cuidam"
forms["dat_sg_n"] = "cuidam"
notes["dat_sg_m1"] = note2
notes["dat_sg_f1"] = note2
notes["dat_sg_n1"] = note2
forms["dat_pl_m"] = "quibusdam"
forms["dat_pl_f"] = "quibusdam"
forms["dat_pl_n"] = "quibusdam"
notes["dat_pl_m1"] = note4
notes["dat_pl_f1"] = note4
notes["dat_pl_n1"] = note4
forms["acc_sg_m"] = {"quendam", "quemdam"}
forms["acc_sg_f"] = {"quandam", "quamdam"}
forms["acc_sg_n"] = "quiddam"
forms["acc_pl_m"] = "quōsdam"
notes["acc_pl_m1"] = note3
forms["acc_pl_f"] = "quāsdam"
forms["acc_pl_n"] = "quaedam"
forms["abl_sg_m"] = "quōdam"
forms["abl_sg_f"] = "quādam"
forms["abl_sg_n"] = "quōdam"
forms["abl_pl_m"] = "quibusdam"
forms["abl_pl_f"] = "quibusdam"
forms["abl_pl_n"] = "quibusdam"
notes["abl_pl_m1"] = note4
notes["abl_pl_f1"] = note4
notes["abl_pl_n1"] = note4
elseif arg1 == "nēmō" then
local note1 = "The genitive [[neminis|''nēminis'']] is not used in Classical Latin, and is generally also avoided by later authors."
local note2 = "The ablative [[nemine|''nēmine'']] is not used in Classical Latin, but can be seen in authors from the Imperial period onwards."
data.title = "Negative pronoun and " .. glossary_link("determiner")
forms["nom_sg_m"] = "nēmō"
forms["nom_sg_f"] = "nēmō"
forms["gen_sg_m"] = {"nūllī̆us", "nēminis"}
forms["gen_sg_f"] = {"nūllī̆us", "nēminis"}
notes["gen_sg_m2"] = note1
notes["gen_sg_f2"] = note1
forms["dat_sg_m"] = "nēminī"
forms["dat_sg_f"] = "nēminī"
forms["acc_sg_m"] = "nēminem"
forms["acc_sg_f"] = "nēminem"
forms["abl_sg_m"] = {"nūllō", "nēmine"}
forms["abl_sg_f"] = {"nūllā", "nēmine"}
notes["abl_sg_m2"] = note2
notes["abl_sg_f2"] = note2
else
error('adjective ' .. arg1 .. ' not recognized')
end
end
return decl
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet:
cdi72smn4e53k9e4800ntd2juh246k4
liber
0
38956
178389
2026-10-24T04:38:55Z
GinawaSaHapon
3989
Nilikha ang pahina na may '=={{=la=}}== ===Etimolohiya 1=== {{ety|la|title=līber|id=free|:inh|itc-ola:loeber<ety:inh<itc-pro:*louðeros>>|text=++|tree=1}}<ref name=EDL1>{{R:itc:EDL|page=338|head=līber}}</ref> May kaugnayan sa {{cog|grc|ἐλεύθερος}}, {{cog|sa|रोधति|tr=ródhati}}, {{cog|nl|lieden}}, {{cog|de|Leute}}, at {{cog|ru|лю́ди|t=people}}. ====Pagbigkas==== * {{la-IPA|līber}} ====Pang-uri==== {{la-adj|līber|comp=līberior|sup=līberrimus|adv=līberē}}...'
178389
wikitext
text/x-wiki
=={{=la=}}==
===Etimolohiya 1===
{{ety|la|title=līber|id=free|:inh|itc-ola:loeber<ety:inh<itc-pro:*louðeros>>|text=++|tree=1}}<ref name=EDL1>{{R:itc:EDL|page=338|head=līber}}</ref>
May kaugnayan sa {{cog|grc|ἐλεύθερος}}, {{cog|sa|रोधति|tr=ródhati}}, {{cog|nl|lieden}}, {{cog|de|Leute}}, at {{cog|ru|лю́ди|t=people}}.
====Pagbigkas====
* {{la-IPA|līber}}
====Pang-uri====
{{la-adj|līber|comp=līberior|sup=līberrimus|adv=līberē}}
# {{senseid|la|malaya}} [[malaya]]; [[magsarili|nagsasarili]]; walang [[higpit|paghihigpit]]; hindi [[magbantay|binabantayan]]
#: {{syn|la|solūtus|expers|immūnis}}
#* {{Q|la|{{w|Seneca the Younger|Lucius Anneus Seneca Minor}}|{{w|Epistulae Morales ad Lucilium|Epistulae Morales ad Lucilium}}|Epistula XCII|year=65 AD|quote=''Nēmō '''līber''' est quī corporī servit.''|trans=Walang sinumang '''malaya''' na alipin ng sariling katawan.}}
# {{lb|la|transferred}} malayang tao
#* {{Q|la|Pl.|Cap.|3|4|94|thru=95|quote=Haud istūc rogō. Fuistin '''līber'''? — Fuī.|trans=Hindi yon ang tinatanong ko. '''Malayang tao''' ka ba? – Noon.}}
#* {{Q|la|Publius Terentius Afer|Andria|769|thru=771|quote=DĀVUS: Vērum! Vīdī Cantharam / suffarcinātam! MȲSĪS: Dīs Pol habeō grātiam / quom in pariundō aliquot adfuērunt '''līberae'''!|trans=DAVUS: Totoo! Nakita ko si Canthara na binibigkis [yung sanggol]!<br/>MYSIS (sarkastiko): Sa ngalan ni Pollux, aking pinasasalamatan ang kalangitan sa mga '''malalayang babae''' na nandito sa panganganak!<br/>(Ipinapahiwatig ng tanging pagbanggit lamang kay Canthara rito na maaaring mas mapagkakatiwalaan siya bilang saksi kesa sa alipin na si Mysis.)}}
# hindi pa [[tapos]]; [[bukás]] pa {{q|ang kaso}}
# [[unbiased]] (pertains to lawyers) walang [[kumiling|kinikilingan]] {{q|tumutukoy sa mga abogado}}
# hindi [[kabilang]] {{q|sa gastos o katulad}}; walang [[epekto]]
=====Kaukulan=====
{{la-adecl|līber}}
* Minsan {{l|la|līberum}} ang kaukulang paaring pangmaramihan
=====Hinangong kataga=====
{{col4|la
|līberālis
|līberālitās
|līberāliter
|līberātiō
|līberātor
|līberē
|līberī
|līberō
|līberta
|lībertās
|lībertīnus
|lībertus
}}
=====Anak na kataga=====
{{top3}}
* {{desc|rup|libir}}
* {{desc|sq|lirë|bor=1}} (pinagtatalunan)
* {{desc|ca|lliure}}
* {{desc|co|liberu|libaru}}
* {{desc|egl|lébber|lèbber}}
* {{desc|ist|leîbaro}}
* {{desctree|it|libero|bor=1}}
* {{desc|lij|libero}}
* {{desc|lmo|liber|libar}}
* {{desc|an|libre}}
* {{desc|roa-ole}}
** {{desc|ast|llibre|chibre}}
** {{desc|ext|libri}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|libre|lhibre}}
* {{desc|oc|liure}}
* {{desc|roa-opt|livre|libre}}
** {{desc|fax|libri}}
** {{desc|gl|libre}}
** {{desctree|pt|livre}}
* {{desctree|es|libre}}
* {{desc|pms|lìber}}
* {{desc|fur|libar}}
* {{desc|rgn|lébar}}
* {{desc|sc|líbberu|líveru}}
* {{desc|scn|lìviru|lìbbiru|q1=laos na}}
* {{desc|vec|łìbaro}}
* {{desc|fro|libre|slb=1}}
** {{desctree|fr|libre}}
** {{desc|nrf|libe}}
** {{desc|wa|lîb}}
{{bottom}}
====Pangngalan====
{{la-noun|līber<2>}}
# {{lb|la|post-Republican}} {{singular of|la|līberī}}: [[anak]] na [[lalaki]]; anak {{q|ng isang magulang na}}
#: {{syn|la|fīlius|nātus}}
#* {{Q|la|Quintilian|Declamations|2|8|2|quote=Quanto alios praestat affectus diligere vitae, lucis auctorem! '''Liberi''' ac parentis non alius mihi videtur affectus quam quo rerum natura, quo mundus ipse constrictus est.|translation=May mas hihigit pa bang damdamin kesa sa pagmamahal sa gumawa ng buhay at liwanag? Tila walang pagkakaiba sa akin ang pagmamahal sa pagitan ng '''anak''' at magulang sa pagmamahal sa pagbubuklod ng kalikasan at ng mismong mundo.}}
=====Paalala sa paggamit=====
Hanggang sa panahon ng Republika, ginagamit lamang ang salitang ito sa anyong pangmaramihan nito (''plurale tantum''). Kahit sa pagsapit ng panahon ng Imperyo, napakabihirang gamitin ang anyong pang-isahan nito; tanging makikita lamang ito sa {{w|Kodigo ni Justiniano}}.
=====Kaukulan=====
{{la-ndecl|līber<2>}}
====Sanggunian====
{{reflist}}
===Etimolohiya 2===
{{etymon|la|id=balat|:inh|itc-pro:*luβros|tree=1}}
{{inh+|la|itc-pro|*luβros}}, mula sa {{inh|la|ine-pro||*lubʰ-ró-s}}, mula sa {{m|ine-pro|*lewbʰ-||balatan, tanggalin (mula sa katawan), saktan|id=balatan}},<ref name=EDL2>{{R:itc:EDL|pages=337-8|head=liber, -brī}}</ref> posible mula sa {{m|ine-pro|*lew-||tanggalin (mula sa katawan)}}.<ref>{{R:ine:IEW|page=690}}</ref> May kaugnayan sa {{cog|cu|лꙋбъ||balat ng puno}}, {{cog|ru|луб||loobang balat ng puno}}, {{cog|lt|lùpti||balatan}}.<ref>{{R:Nocentini|hw=libro}}</ref> Tingnan din ang {{cog|en|leaf||dahon}}, {{m|en|lobby||pahingaan}}, {{m|en|lodge||panuluyan}}, at {{cog|grc|λυπή||sakit (masaktan)}}.
====Alternatibong pagbaybay====
* {{l|la|lib.}}, {{l|la|l.}}
====Pagbigkas====
* {{la-IPA|liber}}
====Pangngalan====
{{la-noun|liber/libr<2>}}
# {{senseid|la|aklat}} [[aklat]]
#* {{Q|la|Ovid|Tristia|1|1|thru=2|quote=Parvē — nec invideō — sine mē, '''liber''', ībis in urbem,<br/>eī mihi, quod dominō nōn licet īre tuō!|trans=Aking munting '''aklat''' – hindi ako naiingit [sa'yo] – kung wala ako, mapapadpad ka sa lungsod: Mula sa akin, dahil bawal lisanin ka ng iyong may-ari!<br/>(Tinutukoy ng pinaalis na makata ang aklat niya na para bang maninilbi niya ito na pinadala niya sa Roma.)}}
#* {{Q|la|Seneca the Younger|Epistulae Morales ad Lucilium|1|2|3|quote=Distringit '''librōrum''' multitūdō; itaque cum legere nōn possīs quantum habuerīs, satis est habēre quantum lēgās.|trans=Naliligaw lamang ang isip [ng mambabasa] sa dami ng mga '''aklat'''; kaya, dahil hindi ka naman nakakabasa nang singdami ng meron ka, sapat na ang magmay-ari ka [ng mga aklat] ng kaya mo lamang basahin.}}
# {{senseid|la|balat ng puno}} [[looban|loobang]] [[balat]] ng [[puno]]
=====Kaukulan=====
{{la-ndecl|liber/libr<2>}}
=====Hinangong kataga=====
* {{l|la|libellus}}
* {{l|la|librārius}}
* {{l|la|librārium}}
=====Anak na kataga=====
* {{desc|frp|lévro}} {{q|walang dudang anak mismo nito}}
;
Mga bahagyang aral na hiram
{{top3}}
* {{desc|an|libro}}
* {{desc|sq|libër|bor=1}}
* {{desc|eu|liburu|bor=1}}
* {{desc|co|libru}}
* {{desc|dlm|lebro}}
* {{desc|egl|lîber}}
* {{desc|bor=1|en|liber|libro-}}
* {{desc|fr|liber|libro-}}
* {{desc|fur|libri}}
* {{desc|io|libro|bor=1}}
* {{desc|ist|leîbro}}
* {{desc|it|libro}}
* {{desc|lld|liber}}
* {{desc|lij|libbro}}
* {{desc|lmo|libar|liber|libru}}
* {{desc|nap|libro|libbro}}
* {{desc|fro|livre|slb=1}}
** {{desctree|fr|livre}}
** {{desc|nrf|livre}}
* {{desc|roa-ole|}}
** {{desc|ast|llibru}}
** {{desc|ext|libru}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|lhibro|libro}}
* {{desc|roa-opt|livro|libro}}
** {{desc|fax|libru}}
** {{desc|gl|libro}}
** {{desc|pt|livro}}
*** {{desc|pov|libru|bor=1}}
* {{desc|pro|libre}}
** {{desc|ca|llibre}}
** {{desc|oc|libre}}
* {{desc|osp|libro}}
** {{desctree|es|libro}}
* {{desc|pms|lìber}}
* {{desc|rgn|lìbar}}
* {{desc|sc|líbbaru|líbberu|libbru|líbburu}}
* {{desc|scn|libbru}}
* {{desc|vec|łìbro}}
* {{desc|wa|lîv|live}}
* {{desc|cel-bry-pro|*llɨβr|bor=1}} {{see desc}}
* {{desc|sga|lebor|bor=1}} {{see desc}}
{{bottom}}
====Sanggunian====
{{reflist}}
===Etimolohiya 3===
====Pagbigkas====
* {{la-IPA|līber}}
====Pandiwa====
{{head|la|verb form|head=līber}}
# {{inflection of|la|lībō||1|s|pres|pasv|subj}}
===Magbasa pa===
* {{R:la:L&S|līber, ''adj.''|liber1}}
* {{R:la:L&S|līber, ''n.''|liber4}}
* {{R:la:Elementary Lewis}}
* {{R:la:Gaffiot}}
* {{R:la:M&A}}
* {{R:la:Peck}}
* {{R:la:Platner}}
* {{R:Smith's Persons}}
* {{R:Smith's Antiquities}}
9j8s97x9d0ewi7taz9g8jr1zsxxpvpp
178390
178389
2026-10-24T04:39:20Z
GinawaSaHapon
3989
178390
wikitext
text/x-wiki
=={{=la=}}==
===Etimolohiya 1===
{{ety|la|title=līber|id=free|:inh|itc-ola:loeber<ety:inh<itc-pro:*louðeros>>|text=++|tree=1}}<ref name=EDL1>{{R:itc:EDL|page=338|head=līber}}</ref>
May kaugnayan sa {{cog|grc|ἐλεύθερος}}, {{cog|sa|रोधति|tr=ródhati}}, {{cog|nl|lieden}}, {{cog|de|Leute}}, at {{cog|ru|лю́ди|t=sambayanan}}.
====Pagbigkas====
* {{la-IPA|līber}}
====Pang-uri====
{{la-adj|līber|comp=līberior|sup=līberrimus|adv=līberē}}
# {{senseid|la|malaya}} [[malaya]]; [[magsarili|nagsasarili]]; walang [[higpit|paghihigpit]]; hindi [[magbantay|binabantayan]]
#: {{syn|la|solūtus|expers|immūnis}}
#* {{Q|la|{{w|Seneca the Younger|Lucius Anneus Seneca Minor}}|{{w|Epistulae Morales ad Lucilium|Epistulae Morales ad Lucilium}}|Epistula XCII|year=65 AD|quote=''Nēmō '''līber''' est quī corporī servit.''|trans=Walang sinumang '''malaya''' na alipin ng sariling katawan.}}
# {{lb|la|transferred}} malayang tao
#* {{Q|la|Pl.|Cap.|3|4|94|thru=95|quote=Haud istūc rogō. Fuistin '''līber'''? — Fuī.|trans=Hindi yon ang tinatanong ko. '''Malayang tao''' ka ba? – Noon.}}
#* {{Q|la|Publius Terentius Afer|Andria|769|thru=771|quote=DĀVUS: Vērum! Vīdī Cantharam / suffarcinātam! MȲSĪS: Dīs Pol habeō grātiam / quom in pariundō aliquot adfuērunt '''līberae'''!|trans=DAVUS: Totoo! Nakita ko si Canthara na binibigkis [yung sanggol]!<br/>MYSIS (sarkastiko): Sa ngalan ni Pollux, aking pinasasalamatan ang kalangitan sa mga '''malalayang babae''' na nandito sa panganganak!<br/>(Ipinapahiwatig ng tanging pagbanggit lamang kay Canthara rito na maaaring mas mapagkakatiwalaan siya bilang saksi kesa sa alipin na si Mysis.)}}
# hindi pa [[tapos]]; [[bukás]] pa {{q|ang kaso}}
# [[unbiased]] (pertains to lawyers) walang [[kumiling|kinikilingan]] {{q|tumutukoy sa mga abogado}}
# hindi [[kabilang]] {{q|sa gastos o katulad}}; walang [[epekto]]
=====Kaukulan=====
{{la-adecl|līber}}
* Minsan {{l|la|līberum}} ang kaukulang paaring pangmaramihan
=====Hinangong kataga=====
{{col4|la
|līberālis
|līberālitās
|līberāliter
|līberātiō
|līberātor
|līberē
|līberī
|līberō
|līberta
|lībertās
|lībertīnus
|lībertus
}}
=====Anak na kataga=====
{{top3}}
* {{desc|rup|libir}}
* {{desc|sq|lirë|bor=1}} (pinagtatalunan)
* {{desc|ca|lliure}}
* {{desc|co|liberu|libaru}}
* {{desc|egl|lébber|lèbber}}
* {{desc|ist|leîbaro}}
* {{desctree|it|libero|bor=1}}
* {{desc|lij|libero}}
* {{desc|lmo|liber|libar}}
* {{desc|an|libre}}
* {{desc|roa-ole}}
** {{desc|ast|llibre|chibre}}
** {{desc|ext|libri}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|libre|lhibre}}
* {{desc|oc|liure}}
* {{desc|roa-opt|livre|libre}}
** {{desc|fax|libri}}
** {{desc|gl|libre}}
** {{desctree|pt|livre}}
* {{desctree|es|libre}}
* {{desc|pms|lìber}}
* {{desc|fur|libar}}
* {{desc|rgn|lébar}}
* {{desc|sc|líbberu|líveru}}
* {{desc|scn|lìviru|lìbbiru|q1=laos na}}
* {{desc|vec|łìbaro}}
* {{desc|fro|libre|slb=1}}
** {{desctree|fr|libre}}
** {{desc|nrf|libe}}
** {{desc|wa|lîb}}
{{bottom}}
====Pangngalan====
{{la-noun|līber<2>}}
# {{lb|la|post-Republican}} {{singular of|la|līberī}}: [[anak]] na [[lalaki]]; anak {{q|ng isang magulang na}}
#: {{syn|la|fīlius|nātus}}
#* {{Q|la|Quintilian|Declamations|2|8|2|quote=Quanto alios praestat affectus diligere vitae, lucis auctorem! '''Liberi''' ac parentis non alius mihi videtur affectus quam quo rerum natura, quo mundus ipse constrictus est.|translation=May mas hihigit pa bang damdamin kesa sa pagmamahal sa gumawa ng buhay at liwanag? Tila walang pagkakaiba sa akin ang pagmamahal sa pagitan ng '''anak''' at magulang sa pagmamahal sa pagbubuklod ng kalikasan at ng mismong mundo.}}
=====Paalala sa paggamit=====
Hanggang sa panahon ng Republika, ginagamit lamang ang salitang ito sa anyong pangmaramihan nito (''plurale tantum''). Kahit sa pagsapit ng panahon ng Imperyo, napakabihirang gamitin ang anyong pang-isahan nito; tanging makikita lamang ito sa {{w|Kodigo ni Justiniano}}.
=====Kaukulan=====
{{la-ndecl|līber<2>}}
====Sanggunian====
{{reflist}}
===Etimolohiya 2===
{{etymon|la|id=balat|:inh|itc-pro:*luβros|tree=1}}
{{inh+|la|itc-pro|*luβros}}, mula sa {{inh|la|ine-pro||*lubʰ-ró-s}}, mula sa {{m|ine-pro|*lewbʰ-||balatan, tanggalin (mula sa katawan), saktan|id=balatan}},<ref name=EDL2>{{R:itc:EDL|pages=337-8|head=liber, -brī}}</ref> posible mula sa {{m|ine-pro|*lew-||tanggalin (mula sa katawan)}}.<ref>{{R:ine:IEW|page=690}}</ref> May kaugnayan sa {{cog|cu|лꙋбъ||balat ng puno}}, {{cog|ru|луб||loobang balat ng puno}}, {{cog|lt|lùpti||balatan}}.<ref>{{R:Nocentini|hw=libro}}</ref> Tingnan din ang {{cog|en|leaf||dahon}}, {{m|en|lobby||pahingaan}}, {{m|en|lodge||panuluyan}}, at {{cog|grc|λυπή||sakit (masaktan)}}.
====Alternatibong pagbaybay====
* {{l|la|lib.}}, {{l|la|l.}}
====Pagbigkas====
* {{la-IPA|liber}}
====Pangngalan====
{{la-noun|liber/libr<2>}}
# {{senseid|la|aklat}} [[aklat]]
#* {{Q|la|Ovid|Tristia|1|1|thru=2|quote=Parvē — nec invideō — sine mē, '''liber''', ībis in urbem,<br/>eī mihi, quod dominō nōn licet īre tuō!|trans=Aking munting '''aklat''' – hindi ako naiingit [sa'yo] – kung wala ako, mapapadpad ka sa lungsod: Mula sa akin, dahil bawal lisanin ka ng iyong may-ari!<br/>(Tinutukoy ng pinaalis na makata ang aklat niya na para bang maninilbi niya ito na pinadala niya sa Roma.)}}
#* {{Q|la|Seneca the Younger|Epistulae Morales ad Lucilium|1|2|3|quote=Distringit '''librōrum''' multitūdō; itaque cum legere nōn possīs quantum habuerīs, satis est habēre quantum lēgās.|trans=Naliligaw lamang ang isip [ng mambabasa] sa dami ng mga '''aklat'''; kaya, dahil hindi ka naman nakakabasa nang singdami ng meron ka, sapat na ang magmay-ari ka [ng mga aklat] ng kaya mo lamang basahin.}}
# {{senseid|la|balat ng puno}} [[looban|loobang]] [[balat]] ng [[puno]]
=====Kaukulan=====
{{la-ndecl|liber/libr<2>}}
=====Hinangong kataga=====
* {{l|la|libellus}}
* {{l|la|librārius}}
* {{l|la|librārium}}
=====Anak na kataga=====
* {{desc|frp|lévro}} {{q|walang dudang anak mismo nito}}
;
Mga bahagyang aral na hiram
{{top3}}
* {{desc|an|libro}}
* {{desc|sq|libër|bor=1}}
* {{desc|eu|liburu|bor=1}}
* {{desc|co|libru}}
* {{desc|dlm|lebro}}
* {{desc|egl|lîber}}
* {{desc|bor=1|en|liber|libro-}}
* {{desc|fr|liber|libro-}}
* {{desc|fur|libri}}
* {{desc|io|libro|bor=1}}
* {{desc|ist|leîbro}}
* {{desc|it|libro}}
* {{desc|lld|liber}}
* {{desc|lij|libbro}}
* {{desc|lmo|libar|liber|libru}}
* {{desc|nap|libro|libbro}}
* {{desc|fro|livre|slb=1}}
** {{desctree|fr|livre}}
** {{desc|nrf|livre}}
* {{desc|roa-ole|}}
** {{desc|ast|llibru}}
** {{desc|ext|libru}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|lhibro|libro}}
* {{desc|roa-opt|livro|libro}}
** {{desc|fax|libru}}
** {{desc|gl|libro}}
** {{desc|pt|livro}}
*** {{desc|pov|libru|bor=1}}
* {{desc|pro|libre}}
** {{desc|ca|llibre}}
** {{desc|oc|libre}}
* {{desc|osp|libro}}
** {{desctree|es|libro}}
* {{desc|pms|lìber}}
* {{desc|rgn|lìbar}}
* {{desc|sc|líbbaru|líbberu|libbru|líbburu}}
* {{desc|scn|libbru}}
* {{desc|vec|łìbro}}
* {{desc|wa|lîv|live}}
* {{desc|cel-bry-pro|*llɨβr|bor=1}} {{see desc}}
* {{desc|sga|lebor|bor=1}} {{see desc}}
{{bottom}}
====Sanggunian====
{{reflist}}
===Etimolohiya 3===
====Pagbigkas====
* {{la-IPA|līber}}
====Pandiwa====
{{head|la|verb form|head=līber}}
# {{inflection of|la|lībō||1|s|pres|pasv|subj}}
===Magbasa pa===
* {{R:la:L&S|līber, ''adj.''|liber1}}
* {{R:la:L&S|līber, ''n.''|liber4}}
* {{R:la:Elementary Lewis}}
* {{R:la:Gaffiot}}
* {{R:la:M&A}}
* {{R:la:Peck}}
* {{R:la:Platner}}
* {{R:Smith's Persons}}
* {{R:Smith's Antiquities}}
g5j827zgud8z0m5mj7toe2bt1v5yhvl
178395
178390
2026-10-24T05:22:42Z
GinawaSaHapon
3989
/* Pang-uri */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
178395
wikitext
text/x-wiki
=={{=la=}}==
===Etimolohiya 1===
{{ety|la|title=līber|id=free|:inh|itc-ola:loeber<ety:inh<itc-pro:*louðeros>>|text=++|tree=1}}<ref name=EDL1>{{R:itc:EDL|page=338|head=līber}}</ref>
May kaugnayan sa {{cog|grc|ἐλεύθερος}}, {{cog|sa|रोधति|tr=ródhati}}, {{cog|nl|lieden}}, {{cog|de|Leute}}, at {{cog|ru|лю́ди|t=sambayanan}}.
====Pagbigkas====
* {{la-IPA|līber}}
====Pang-uri====
{{la-adj|līber|comp=līberior|sup=līberrimus|adv=līberē}}
# {{senseid|la|malaya}} [[malaya]]; [[magsarili|nagsasarili]]; walang [[higpit|paghihigpit]]; hindi [[magbantay|binabantayan]]
#: {{syn|la|solūtus|expers|immūnis}}
#* {{Q|la|{{w|Seneca the Younger|Lucius Anneus Seneca Minor}}|{{w|Epistulae Morales ad Lucilium|Epistulae Morales ad Lucilium}}|Epistula XCII|year=65 AD|quote=''Nēmō '''līber''' est quī corporī servit.''|trans=Walang sinumang '''malaya''' na alipin ng sariling katawan.}}
# {{lb|la|transferred}} malayang tao
#* {{Q|la|Pl.|Cap.|3|4|94|thru=95|quote=Haud istūc rogō. Fuistin '''līber'''? — Fuī.|trans=Hindi yon ang tinatanong ko. '''Malayang tao''' ka ba? – Noon.}}
#* {{Q|la|Publius Terentius Afer|Andria|769|thru=771|quote=DĀVUS: Vērum! Vīdī Cantharam / suffarcinātam! MȲSĪS: Dīs Pol habeō grātiam / quom in pariundō aliquot adfuērunt '''līberae'''!|trans=DAVUS: Totoo! Nakita ko si Canthara na binibigkis [yung sanggol]!<br/>MYSIS (sarkastiko): Sa ngalan ni Pollux, aking pinasasalamatan ang kalangitan sa mga '''malalayang babae''' na nandito sa panganganak!<br/>(Ipinapahiwatig ng tanging pagbanggit lamang kay Canthara rito na maaaring mas mapagkakatiwalaan siya bilang saksi kesa sa alipin na si Mysis.)}}
# hindi pa [[tapos]]; [[bukás]] pa {{q|ang kaso}}
# walang [[kumiling|kinikilingan]] {{q|tumutukoy sa mga abogado}}
# hindi [[kabilang]] {{q|sa gastos o katulad}}; walang [[epekto]]
=====Kaukulan=====
{{la-adecl|līber}}
* Minsan {{l|la|līberum}} ang kaukulang paaring pangmaramihan
=====Hinangong kataga=====
{{col4|la
|līberālis
|līberālitās
|līberāliter
|līberātiō
|līberātor
|līberē
|līberī
|līberō
|līberta
|lībertās
|lībertīnus
|lībertus
}}
=====Anak na kataga=====
{{top3}}
* {{desc|rup|libir}}
* {{desc|sq|lirë|bor=1}} (pinagtatalunan)
* {{desc|ca|lliure}}
* {{desc|co|liberu|libaru}}
* {{desc|egl|lébber|lèbber}}
* {{desc|ist|leîbaro}}
* {{desctree|it|libero|bor=1}}
* {{desc|lij|libero}}
* {{desc|lmo|liber|libar}}
* {{desc|an|libre}}
* {{desc|roa-ole}}
** {{desc|ast|llibre|chibre}}
** {{desc|ext|libri}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|libre|lhibre}}
* {{desc|oc|liure}}
* {{desc|roa-opt|livre|libre}}
** {{desc|fax|libri}}
** {{desc|gl|libre}}
** {{desctree|pt|livre}}
* {{desctree|es|libre}}
* {{desc|pms|lìber}}
* {{desc|fur|libar}}
* {{desc|rgn|lébar}}
* {{desc|sc|líbberu|líveru}}
* {{desc|scn|lìviru|lìbbiru|q1=laos na}}
* {{desc|vec|łìbaro}}
* {{desc|fro|libre|slb=1}}
** {{desctree|fr|libre}}
** {{desc|nrf|libe}}
** {{desc|wa|lîb}}
{{bottom}}
====Pangngalan====
{{la-noun|līber<2>}}
# {{lb|la|post-Republican}} {{singular of|la|līberī}}: [[anak]] na [[lalaki]]; anak {{q|ng isang magulang na}}
#: {{syn|la|fīlius|nātus}}
#* {{Q|la|Quintilian|Declamations|2|8|2|quote=Quanto alios praestat affectus diligere vitae, lucis auctorem! '''Liberi''' ac parentis non alius mihi videtur affectus quam quo rerum natura, quo mundus ipse constrictus est.|translation=May mas hihigit pa bang damdamin kesa sa pagmamahal sa gumawa ng buhay at liwanag? Tila walang pagkakaiba sa akin ang pagmamahal sa pagitan ng '''anak''' at magulang sa pagmamahal sa pagbubuklod ng kalikasan at ng mismong mundo.}}
=====Paalala sa paggamit=====
Hanggang sa panahon ng Republika, ginagamit lamang ang salitang ito sa anyong pangmaramihan nito (''plurale tantum''). Kahit sa pagsapit ng panahon ng Imperyo, napakabihirang gamitin ang anyong pang-isahan nito; tanging makikita lamang ito sa {{w|Kodigo ni Justiniano}}.
=====Kaukulan=====
{{la-ndecl|līber<2>}}
====Sanggunian====
{{reflist}}
===Etimolohiya 2===
{{etymon|la|id=balat|:inh|itc-pro:*luβros|tree=1}}
{{inh+|la|itc-pro|*luβros}}, mula sa {{inh|la|ine-pro||*lubʰ-ró-s}}, mula sa {{m|ine-pro|*lewbʰ-||balatan, tanggalin (mula sa katawan), saktan|id=balatan}},<ref name=EDL2>{{R:itc:EDL|pages=337-8|head=liber, -brī}}</ref> posible mula sa {{m|ine-pro|*lew-||tanggalin (mula sa katawan)}}.<ref>{{R:ine:IEW|page=690}}</ref> May kaugnayan sa {{cog|cu|лꙋбъ||balat ng puno}}, {{cog|ru|луб||loobang balat ng puno}}, {{cog|lt|lùpti||balatan}}.<ref>{{R:Nocentini|hw=libro}}</ref> Tingnan din ang {{cog|en|leaf||dahon}}, {{m|en|lobby||pahingaan}}, {{m|en|lodge||panuluyan}}, at {{cog|grc|λυπή||sakit (masaktan)}}.
====Alternatibong pagbaybay====
* {{l|la|lib.}}, {{l|la|l.}}
====Pagbigkas====
* {{la-IPA|liber}}
====Pangngalan====
{{la-noun|liber/libr<2>}}
# {{senseid|la|aklat}} [[aklat]]
#* {{Q|la|Ovid|Tristia|1|1|thru=2|quote=Parvē — nec invideō — sine mē, '''liber''', ībis in urbem,<br/>eī mihi, quod dominō nōn licet īre tuō!|trans=Aking munting '''aklat''' – hindi ako naiingit [sa'yo] – kung wala ako, mapapadpad ka sa lungsod: Mula sa akin, dahil bawal lisanin ka ng iyong may-ari!<br/>(Tinutukoy ng pinaalis na makata ang aklat niya na para bang maninilbi niya ito na pinadala niya sa Roma.)}}
#* {{Q|la|Seneca the Younger|Epistulae Morales ad Lucilium|1|2|3|quote=Distringit '''librōrum''' multitūdō; itaque cum legere nōn possīs quantum habuerīs, satis est habēre quantum lēgās.|trans=Naliligaw lamang ang isip [ng mambabasa] sa dami ng mga '''aklat'''; kaya, dahil hindi ka naman nakakabasa nang singdami ng meron ka, sapat na ang magmay-ari ka [ng mga aklat] ng kaya mo lamang basahin.}}
# {{senseid|la|balat ng puno}} [[looban|loobang]] [[balat]] ng [[puno]]
=====Kaukulan=====
{{la-ndecl|liber/libr<2>}}
=====Hinangong kataga=====
* {{l|la|libellus}}
* {{l|la|librārius}}
* {{l|la|librārium}}
=====Anak na kataga=====
* {{desc|frp|lévro}} {{q|walang dudang anak mismo nito}}
;
Mga bahagyang aral na hiram
{{top3}}
* {{desc|an|libro}}
* {{desc|sq|libër|bor=1}}
* {{desc|eu|liburu|bor=1}}
* {{desc|co|libru}}
* {{desc|dlm|lebro}}
* {{desc|egl|lîber}}
* {{desc|bor=1|en|liber|libro-}}
* {{desc|fr|liber|libro-}}
* {{desc|fur|libri}}
* {{desc|io|libro|bor=1}}
* {{desc|ist|leîbro}}
* {{desc|it|libro}}
* {{desc|lld|liber}}
* {{desc|lij|libbro}}
* {{desc|lmo|libar|liber|libru}}
* {{desc|nap|libro|libbro}}
* {{desc|fro|livre|slb=1}}
** {{desctree|fr|livre}}
** {{desc|nrf|livre}}
* {{desc|roa-ole|}}
** {{desc|ast|llibru}}
** {{desc|ext|libru}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|lhibro|libro}}
* {{desc|roa-opt|livro|libro}}
** {{desc|fax|libru}}
** {{desc|gl|libro}}
** {{desc|pt|livro}}
*** {{desc|pov|libru|bor=1}}
* {{desc|pro|libre}}
** {{desc|ca|llibre}}
** {{desc|oc|libre}}
* {{desc|osp|libro}}
** {{desctree|es|libro}}
* {{desc|pms|lìber}}
* {{desc|rgn|lìbar}}
* {{desc|sc|líbbaru|líbberu|libbru|líbburu}}
* {{desc|scn|libbru}}
* {{desc|vec|łìbro}}
* {{desc|wa|lîv|live}}
* {{desc|cel-bry-pro|*llɨβr|bor=1}} {{see desc}}
* {{desc|sga|lebor|bor=1}} {{see desc}}
{{bottom}}
====Sanggunian====
{{reflist}}
===Etimolohiya 3===
====Pagbigkas====
* {{la-IPA|līber}}
====Pandiwa====
{{head|la|verb form|head=līber}}
# {{inflection of|la|lībō||1|s|pres|pasv|subj}}
===Magbasa pa===
* {{R:la:L&S|līber, ''adj.''|liber1}}
* {{R:la:L&S|līber, ''n.''|liber4}}
* {{R:la:Elementary Lewis}}
* {{R:la:Gaffiot}}
* {{R:la:M&A}}
* {{R:la:Peck}}
* {{R:la:Platner}}
* {{R:Smith's Persons}}
* {{R:Smith's Antiquities}}
3lx9e8xy7de608etx8zx8yf9xue4hcq
178400
178395
2026-10-24T06:41:24Z
GinawaSaHapon
3989
/* Pangngalan */ (using [[wikt:en:MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
178400
wikitext
text/x-wiki
=={{=la=}}==
===Etimolohiya 1===
{{ety|la|title=līber|id=free|:inh|itc-ola:loeber<ety:inh<itc-pro:*louðeros>>|text=++|tree=1}}<ref name=EDL1>{{R:itc:EDL|page=338|head=līber}}</ref>
May kaugnayan sa {{cog|grc|ἐλεύθερος}}, {{cog|sa|रोधति|tr=ródhati}}, {{cog|nl|lieden}}, {{cog|de|Leute}}, at {{cog|ru|лю́ди|t=sambayanan}}.
====Pagbigkas====
* {{la-IPA|līber}}
====Pang-uri====
{{la-adj|līber|comp=līberior|sup=līberrimus|adv=līberē}}
# {{senseid|la|malaya}} [[malaya]]; [[magsarili|nagsasarili]]; walang [[higpit|paghihigpit]]; hindi [[magbantay|binabantayan]]
#: {{syn|la|solūtus|expers|immūnis}}
#* {{Q|la|{{w|Seneca the Younger|Lucius Anneus Seneca Minor}}|{{w|Epistulae Morales ad Lucilium|Epistulae Morales ad Lucilium}}|Epistula XCII|year=65 AD|quote=''Nēmō '''līber''' est quī corporī servit.''|trans=Walang sinumang '''malaya''' na alipin ng sariling katawan.}}
# {{lb|la|transferred}} malayang tao
#* {{Q|la|Pl.|Cap.|3|4|94|thru=95|quote=Haud istūc rogō. Fuistin '''līber'''? — Fuī.|trans=Hindi yon ang tinatanong ko. '''Malayang tao''' ka ba? – Noon.}}
#* {{Q|la|Publius Terentius Afer|Andria|769|thru=771|quote=DĀVUS: Vērum! Vīdī Cantharam / suffarcinātam! MȲSĪS: Dīs Pol habeō grātiam / quom in pariundō aliquot adfuērunt '''līberae'''!|trans=DAVUS: Totoo! Nakita ko si Canthara na binibigkis [yung sanggol]!<br/>MYSIS (sarkastiko): Sa ngalan ni Pollux, aking pinasasalamatan ang kalangitan sa mga '''malalayang babae''' na nandito sa panganganak!<br/>(Ipinapahiwatig ng tanging pagbanggit lamang kay Canthara rito na maaaring mas mapagkakatiwalaan siya bilang saksi kesa sa alipin na si Mysis.)}}
# hindi pa [[tapos]]; [[bukás]] pa {{q|ang kaso}}
# walang [[kumiling|kinikilingan]] {{q|tumutukoy sa mga abogado}}
# hindi [[kabilang]] {{q|sa gastos o katulad}}; walang [[epekto]]
=====Kaukulan=====
{{la-adecl|līber}}
* Minsan {{l|la|līberum}} ang kaukulang paaring pangmaramihan
=====Hinangong kataga=====
{{col4|la
|līberālis
|līberālitās
|līberāliter
|līberātiō
|līberātor
|līberē
|līberī
|līberō
|līberta
|lībertās
|lībertīnus
|lībertus
}}
=====Anak na kataga=====
{{top3}}
* {{desc|rup|libir}}
* {{desc|sq|lirë|bor=1}} (pinagtatalunan)
* {{desc|ca|lliure}}
* {{desc|co|liberu|libaru}}
* {{desc|egl|lébber|lèbber}}
* {{desc|ist|leîbaro}}
* {{desctree|it|libero|bor=1}}
* {{desc|lij|libero}}
* {{desc|lmo|liber|libar}}
* {{desc|an|libre}}
* {{desc|roa-ole}}
** {{desc|ast|llibre|chibre}}
** {{desc|ext|libri}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|libre|lhibre}}
* {{desc|oc|liure}}
* {{desc|roa-opt|livre|libre}}
** {{desc|fax|libri}}
** {{desc|gl|libre}}
** {{desctree|pt|livre}}
* {{desctree|es|libre}}
* {{desc|pms|lìber}}
* {{desc|fur|libar}}
* {{desc|rgn|lébar}}
* {{desc|sc|líbberu|líveru}}
* {{desc|scn|lìviru|lìbbiru|q1=laos na}}
* {{desc|vec|łìbaro}}
* {{desc|fro|libre|slb=1}}
** {{desctree|fr|libre}}
** {{desc|nrf|libe}}
** {{desc|wa|lîb}}
{{bottom}}
====Pangngalan====
{{la-noun|līber<2>}}
# {{lb|la|post-Republican}} {{singular of|la|līberī}}: [[anak]] na [[lalaki]]; anak {{q|ng isang magulang na}}
#: {{syn|la|fīlius|nātus}}
#* {{Q|la|Quintilian|Declamations|2|8|2|quote=Quanto alios praestat affectus diligere vitae, lucis auctorem! '''Liberi''' ac parentis non alius mihi videtur affectus quam quo rerum natura, quo mundus ipse constrictus est.|trans=May mas hihigit pa bang damdamin kesa sa pagmamahal sa gumawa ng buhay at liwanag? Tila walang pagkakaiba sa akin ang pagmamahal sa pagitan ng '''anak''' at magulang sa pagmamahal sa pagbubuklod ng kalikasan at ng mismong mundo.}}
=====Paalala sa paggamit=====
Hanggang sa panahon ng Republika, ginagamit lamang ang salitang ito sa anyong pangmaramihan nito (''plurale tantum''). Kahit sa pagsapit ng panahon ng Imperyo, napakabihirang gamitin ang anyong pang-isahan nito; tanging makikita lamang ito sa {{w|Kodigo ni Justiniano}}.
=====Kaukulan=====
{{la-ndecl|līber<2>}}
====Sanggunian====
{{reflist}}
===Etimolohiya 2===
{{etymon|la|id=balat|:inh|itc-pro:*luβros|tree=1}}
{{inh+|la|itc-pro|*luβros}}, mula sa {{inh|la|ine-pro||*lubʰ-ró-s}}, mula sa {{m|ine-pro|*lewbʰ-||balatan, tanggalin (mula sa katawan), saktan|id=balatan}},<ref name=EDL2>{{R:itc:EDL|pages=337-8|head=liber, -brī}}</ref> posible mula sa {{m|ine-pro|*lew-||tanggalin (mula sa katawan)}}.<ref>{{R:ine:IEW|page=690}}</ref> May kaugnayan sa {{cog|cu|лꙋбъ||balat ng puno}}, {{cog|ru|луб||loobang balat ng puno}}, {{cog|lt|lùpti||balatan}}.<ref>{{R:Nocentini|hw=libro}}</ref> Tingnan din ang {{cog|en|leaf||dahon}}, {{m|en|lobby||pahingaan}}, {{m|en|lodge||panuluyan}}, at {{cog|grc|λυπή||sakit (masaktan)}}.
====Alternatibong pagbaybay====
* {{l|la|lib.}}, {{l|la|l.}}
====Pagbigkas====
* {{la-IPA|liber}}
====Pangngalan====
{{la-noun|liber/libr<2>}}
# {{senseid|la|aklat}} [[aklat]]
#* {{Q|la|Ovid|Tristia|1|1|thru=2|quote=Parvē — nec invideō — sine mē, '''liber''', ībis in urbem,<br/>eī mihi, quod dominō nōn licet īre tuō!|trans=Aking munting '''aklat''' – hindi ako naiingit [sa'yo] – kung wala ako, mapapadpad ka sa lungsod: Mula sa akin, dahil bawal lisanin ka ng iyong may-ari!<br/>(Tinutukoy ng pinaalis na makata ang aklat niya na para bang maninilbi niya ito na pinadala niya sa Roma.)}}
#* {{Q|la|Seneca the Younger|Epistulae Morales ad Lucilium|1|2|3|quote=Distringit '''librōrum''' multitūdō; itaque cum legere nōn possīs quantum habuerīs, satis est habēre quantum lēgās.|trans=Naliligaw lamang ang isip [ng mambabasa] sa dami ng mga '''aklat'''; kaya, dahil hindi ka naman nakakabasa nang singdami ng meron ka, sapat na ang magmay-ari ka [ng mga aklat] ng kaya mo lamang basahin.}}
# {{senseid|la|balat ng puno}} [[looban|loobang]] [[balat]] ng [[puno]]
=====Kaukulan=====
{{la-ndecl|liber/libr<2>}}
=====Hinangong kataga=====
* {{l|la|libellus}}
* {{l|la|librārius}}
* {{l|la|librārium}}
=====Anak na kataga=====
* {{desc|frp|lévro}} {{q|walang dudang anak mismo nito}}
;
Mga bahagyang aral na hiram
{{top3}}
* {{desc|an|libro}}
* {{desc|sq|libër|bor=1}}
* {{desc|eu|liburu|bor=1}}
* {{desc|co|libru}}
* {{desc|dlm|lebro}}
* {{desc|egl|lîber}}
* {{desc|bor=1|en|liber|libro-}}
* {{desc|fr|liber|libro-}}
* {{desc|fur|libri}}
* {{desc|io|libro|bor=1}}
* {{desc|ist|leîbro}}
* {{desc|it|libro}}
* {{desc|lld|liber}}
* {{desc|lij|libbro}}
* {{desc|lmo|libar|liber|libru}}
* {{desc|nap|libro|libbro}}
* {{desc|fro|livre|slb=1}}
** {{desctree|fr|livre}}
** {{desc|nrf|livre}}
* {{desc|roa-ole|}}
** {{desc|ast|llibru}}
** {{desc|ext|libru}}
** {{desc|roa-leo|llibru}}
** {{desc|mwl|lhibro|libro}}
* {{desc|roa-opt|livro|libro}}
** {{desc|fax|libru}}
** {{desc|gl|libro}}
** {{desc|pt|livro}}
*** {{desc|pov|libru|bor=1}}
* {{desc|pro|libre}}
** {{desc|ca|llibre}}
** {{desc|oc|libre}}
* {{desc|osp|libro}}
** {{desctree|es|libro}}
* {{desc|pms|lìber}}
* {{desc|rgn|lìbar}}
* {{desc|sc|líbbaru|líbberu|libbru|líbburu}}
* {{desc|scn|libbru}}
* {{desc|vec|łìbro}}
* {{desc|wa|lîv|live}}
* {{desc|cel-bry-pro|*llɨβr|bor=1}} {{see desc}}
* {{desc|sga|lebor|bor=1}} {{see desc}}
{{bottom}}
====Sanggunian====
{{reflist}}
===Etimolohiya 3===
====Pagbigkas====
* {{la-IPA|līber}}
====Pandiwa====
{{head|la|verb form|head=līber}}
# {{inflection of|la|lībō||1|s|pres|pasv|subj}}
===Magbasa pa===
* {{R:la:L&S|līber, ''adj.''|liber1}}
* {{R:la:L&S|līber, ''n.''|liber4}}
* {{R:la:Elementary Lewis}}
* {{R:la:Gaffiot}}
* {{R:la:M&A}}
* {{R:la:Peck}}
* {{R:la:Platner}}
* {{R:Smith's Persons}}
* {{R:Smith's Antiquities}}
1oy7z4mgr5nlugov3kmxjq795baxw33
Padron:Q
10
38957
178391
2026-10-24T04:41:12Z
GinawaSaHapon
3989
Nilikha ang pahina na may '<includeonly>{{safesubst:<noinclude/>#invoke:Quotations|create}}</includeonly><noinclude>{{documentation}}</noinclude>'
178391
wikitext
text/x-wiki
<includeonly>{{safesubst:<noinclude/>#invoke:Quotations|create}}</includeonly><noinclude>{{documentation}}</noinclude>
o3csj9kg2zx4f3xwfalfjiq47ec9bp4
Module:Quotations
828
38958
178392
2026-10-24T04:47:40Z
GinawaSaHapon
3989
Nilikha ang pahina na may '-- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local export = {} local debug_track_module = "Module:debug/track" local foreign_numerals_module = "Module:foreign numerals" local functions_module = "Module:fun" local languages_module = "Module:languages" local links_module = "Module:links" local load_module = "Module:load" local quotations_date_validation_module = "Module:Quotations/date validation" local script_utilities_m...'
178392
Scribunto
text/plain
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
local export = {}
local debug_track_module = "Module:debug/track"
local foreign_numerals_module = "Module:foreign numerals"
local functions_module = "Module:fun"
local languages_module = "Module:languages"
local links_module = "Module:links"
local load_module = "Module:load"
local quotations_date_validation_module = "Module:Quotations/date validation"
local script_utilities_module = "Module:script utilities"
local string_nowiki_module = "Module:string/nowiki"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local add_warning = mw.addWarning
local byte = string.byte
local concat = table.concat
local find = string.find
local floor = math.floor
local format = string.format
local insert = table.insert
local match = string.match
local rep = string.rep
local require = require
local sub = string.sub
local tonumber = tonumber
local tostring = tostring
local umatch = mw.ustring.match
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function date_validation(...)
date_validation = require(quotations_date_validation_module).main
return date_validation(...)
end
local function embedded_language_links(...)
embedded_language_links = require(links_module).embedded_language_links
return embedded_language_links(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function is_callable(...)
is_callable = require(functions_module).is_callable
return is_callable(...)
end
local function is_Latin_script(...)
is_Latin_script = require(script_utilities_module).is_Latin_script
return is_Latin_script(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function lang_err(...)
lang_err = require(languages_module).err
return lang_err(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function nowiki(...)
nowiki = require(string_nowiki_module)
return nowiki(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function tag_text(...)
tag_text = require(script_utilities_module).tag_text
return tag_text(...)
end
local function tag_transcription(...)
tag_transcription = require(script_utilities_module).tag_transcription
return tag_transcription(...)
end
local function tag_translit(...)
tag_translit = require(script_utilities_module).tag_translit
return tag_translit(...)
end
local function to_Devanagari(...)
to_Devanagari = require(foreign_numerals_module).to_Devanagari
return to_Devanagari(...)
end
local function track(...)
track = require(debug_track_module)
return track(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function ulower(...)
ulower = require(string_utilities_module).lower
return ulower(...)
end
local function uupper(...)
uupper = require(string_utilities_module).upper
return uupper(...)
end
local LanguageModule = {}
LanguageModule.__index = LanguageModule
LanguageModule.period = "."
local hasData = {
ae = true,
ar = true,
axm = true,
az = true,
bn = true,
bra = true,
chg = true,
cy = true,
egy = true,
en = true,
fa = true,
fr = true,
frm = true,
fro = true,
['gmq-ogt'] = true,
['gmq-pro'] = true,
goh = true,
grc = true,
he = true,
hi = true,
hit = true,
hy = true,
['inc-apa'] = true,
['inc-ash'] = true,
['inc-mgu'] = true,
['inc-oaw'] = true,
['inc-ogu'] = true,
['inc-ohi'] = true,
['inc-opa'] = true,
ka = true,
pra = true,
la = true,
lzz = true,
mt = true,
mxi = true,
nci = true,
oge = true,
okm = true,
omr = true,
osc = true,
ota = true,
peo = true,
pgn = true,
pmh = true,
sa = true,
scn = true,
sd = true,
spx = true,
sv = true,
uga = true,
uk = true,
umc = true,
vah = true,
xce = true,
xcl = true,
xlp = true,
xvo = true,
['zle-ono'] = true,
['zle-ort'] = true,
}
export.hasData = hasData
function export.create(frame)
return export.Create(frame:getParent().args, frame)
end
local function warn_about_unrecognized_args(unrecognized_args)
track("Quotations/param error")
add_warning('Unrecognized parameters in ' .. nowiki('{{Q}}: ' .. concat(keys_to_list(unrecognized_args), ', ')))
end
function export.Create(args, frame)
-- Set up our initial variables; set empty parameters to false
local processed_args = {}
local unrecognized_args = {}
local params = {
thru = true,
quote = true,
text = true,
passage = true,
trans = true,
transauthor = true,
transyear = true,
t = true,
lit = true,
style = true,
object = true,
notes = true,
refn = true,
form = true,
year = true,
termlang = true,
tr = true, -- This is simply ignored if quote is in Latin script.
ts = true, -- This is simply ignored if quote is in Latin script.
subst = true, -- This is simply ignored if quote is in Latin script.
nocat = true,
}
-- FIXME: use [[Module:parameters]].
local max_numbered_param = 4
for k, v in pairs(args) do
if type(k) == 'number' then
if k > max_numbered_param then
max_numbered_param = k
end
elseif not params[k] then
unrecognized_args[k] = v
end
v = mw.text.trim(v)
if v == '' then
if k == "lang" then
processed_args[k] = nil
else
processed_args[k] = false
end
else
processed_args[k] = v
end
end
if next(unrecognized_args) then
warn_about_unrecognized_args(unrecognized_args)
end
-- Ensure that all numbered parameters up to the greatest numbered parameter
-- are not nil.
for i = 1, max_numbered_param do
processed_args[i] = processed_args[i] or false
end
-- Apply aliases.
-- This should be cleaned up when more robust parameter parsing is implemented.
processed_args.quote = processed_args.quote or processed_args.text or processed_args.passage
args = processed_args -- Overwrite original args.
local lang = args[1]
lang = get_lang(lang) or lang_err(lang, 1)
local ante = {}
if hasData[lang:getCode()] then
local m_langModule = LanguageModule.new(lang)
ante = m_langModule:expand(args)
else
track("Quotations/no data")
track("Quotations/no data/" .. lang:getCode())
end
if ante.author == nil then
ante.author = args[2]
end
if ante.work == nil then
ante.work = args[3]
end
if ante.ref == nil then
local ref = {}
-- FIXME: get rid of the arbitrary limit 10
for i = 4, 10 do
if args[i] then
insert(ref, args[i])
else
break
end
end
ante.ref = concat(ref, '.')
end
for k in pairs(args) do
if type(k) ~= "number" then
ante[k] = args[k]
end
end
local penult = {
year = '',
author = '',
work = '',
object = '',
ref = '',
termlang = '',
notes = '',
refn = '',
otherLines = {},
s1 = '',
s2 = '',
s3 = '',
s4 = '',
s5 = ''
}
local comma = false
--Language specific modules are responsible for first line parameters.
--Base formatting module will poll for other parameters,
--pulling them only if the language module hasn't returned them.
local otherOtherLineStuff = {'quote', 'transyear', 'transauthor', 'trans', 'termlang'}
for _, item in ipairs(otherOtherLineStuff) do
ante[item] = ante[item] or args[item]
end
if not ante.code then
penult.elAttr = ' class="wiktQuote" data-validation="white">'
else
penult.elAttr = ' class="wiktQuote" data-validation="' .. ante.code .. '">'
end
if ante.year then
penult.year = "'''" .. date_validation(ante.year) .. "'''"
comma = true
end
if ante.author then
if comma then
penult.s1 = ', '
end
penult.author = ante.author
comma = true
end
if ante.work then
if comma then
penult.s2 = ', '
end
penult.work = ante.work
comma = true
end
if ante.object then
if comma then
penult.s5 = ' '
end
penult.object = '(' .. ante.object .. ')'
comma = true
end
if ante.ref and ante.ref ~= '' then
if comma then
penult.s3 = ' '
end
penult.ref = ante.ref
end
if ante.style == 'no' or penult.work == '' then
-- Leave as-is
elseif ante.style == 'q' then
penult.work = '“' .. penult.work .. '”'
else
penult.work = "''" .. penult.work .. "''"
end
if ante.termlang then
ante.termlang = get_lang(ante.termlang) or lang_err(ante.termlang, 1)
penult.termlang = ' (in ' .. lang:getCanonicalName() .. ')'
end
if ante.notes then
if comma then
penult.s4 = ' '
end
penult.notes = '(' .. ante.notes .. ')'
end
if ante.refn then
penult.refn = (frame or mw.getCurrentFrame()):preprocess(ante.refn)
end
local form = args.form or 'full'
if form == 'inline' then
return '<span' .. penult.elAttr .. penult.author .. penult.s2 .. penult.work .. penult.termlang .. penult.s5 .. penult.object .. penult.s3 .. penult.ref .. penult.s4 .. penult.notes .. penult.refn .. '</span>'
end
local categories = {}
if ante.t then
ante.trans = ante.t
end
if ante.quote or (ante.trans and ante.trans ~= "-") then
penult.refn = ":" .. penult.refn
local translitwithtrans = false
insert(penult.otherLines, "<dl><dd>")
if ante.quote then
local quote = ante.quote
local sc = lang:findBestScript(quote)
-- fix up links with accents/macrons/etc.
quote = embedded_language_links{term = quote, lang = lang, sc = sc}
insert(penult.otherLines, tag_text(quote, lang, sc, nil, "e-quotation"))
if args.nocat then
track("Quotations/nocat")
elseif ante.termlang then
insert(categories, ante.termlang:getCanonicalName() .. " terms with quotations")
else
insert(categories, lang:getCanonicalName() .. " terms with quotations")
end
if not is_Latin_script(sc) or lang:getCode() == "egy" then
-- Handle subst=
local subbed_quote = remove_links(quote)
if args.subst then
local substs = split(args.subst, ",")
for _, subpair in ipairs(substs) do
local subsplit = split(subpair, find(subpair, "//", 1, true) and "//" or "/")
subbed_quote = ugsub(subbed_quote, subsplit[1], subsplit[2])
end
end
local transliteration = args.tr or (lang:transliterate(subbed_quote, sc))
if transliteration then
transliteration = "<dd>" .. tag_translit(transliteration, lang, "usex") .. "</dd>"
end
local transcription = args.ts and "<dd>/" .. tag_transcription(args.ts, lang, "usex") .. "/</dd>"
if transliteration or transcription then
local translitend = "</dl>"
if ante.trans and ante.trans ~= "-" and not ante.transyear and not ante.transauthor then
translitwithtrans = true
translitend = ""
end
insert(penult.otherLines, "<dl>" .. (transliteration or "") .. (transcription or "") .. translitend)
end
end
end
if ante.trans == "-" then
ante.trans = nil
insert(categories, "Omitted translation in the main namespace")
elseif ante.trans then
local litline = ""
if ante.lit then
litline = "<dd>(sa literal na salin, “" .. ante.lit .. "”)</dd>"
end
if ante.transyear or ante.transauthor then
insert(penult.otherLines, "<ul><li>")
if ante.transyear then
insert(penult.otherLines, "'''" .. ante.transyear .. "''' translation")
else
insert(penult.otherLines, "Translation")
end
if ante.transauthor then
insert(penult.otherLines, " by " .. ante.transauthor)
end
insert(penult.otherLines, "<dl><dd>" .. ante.trans .. "</dd>" .. litline .. "</dl></li></ul>")
else
if not ante.quote then
insert(penult.otherLines, ante.trans)
else
local transstart = "<dl><dd>"
if translitwithtrans then
transstart = "<dd>"
end
insert(penult.otherLines, transstart .. ante.trans .. "</dd>" .. litline .. "</dl>")
end
end
elseif lang:getCode() ~= "en" and lang:getCode() ~= "und" then
insert(penult.otherLines, "<dl><dd><small>(please [[Wiktionary:Quotations#Adding_translations_to_quotations|add an English translation]] of this quotation)</small></dd></dl>")
-- add trreq category if translation is unspecified and language is not English or undetermined
insert(categories, "Requests for translations of " .. lang:getCanonicalName() .. " quotations")
end
insert(penult.otherLines, "</dd></dl>")
end
penult.otherLines = concat(penult.otherLines)
categories = format_categories(categories, lang)
if form == 'full' then
return '<div' .. penult.elAttr .. penult.year .. penult.s1 .. penult.author .. penult.s2 .. penult.work .. penult.termlang .. penult.s5 .. penult.object .. penult.s3 .. penult.ref .. penult.s4 .. penult.notes .. penult.refn .. penult.otherLines .. '</div>' .. categories
elseif form == 'work' then
return '<span' .. penult.elAttr .. penult.work .. penult.termlang .. penult.s5 .. penult.object .. penult.s3 .. penult.ref .. penult.s4 .. penult.notes .. penult.refn .. penult.otherLines .. '</span>' .. categories
elseif form == 'ref' then
return '<span' .. penult.elAttr .. penult.ref .. penult.s4 .. penult.notes .. penult.refn .. penult.otherLines .. '</span>' .. categories
end
end
function LanguageModule.new(lang)
local sema = safe_require("Module:Quotations/" .. lang:getCode()) or {}
sema.library = load_data("Module:Quotations/" .. lang:getCode() .. "/data")
return setmetatable(sema, LanguageModule)
end
function LanguageModule:changeCode(color)
if color == 'orange' then
self.code = 'orange'
end
if (color == 'yellow') and (self.code == 'green') then
self.code = 'yellow'
end
end
function LanguageModule:reroute(route)
local temp = {}
local data = self.library.data
for k, v in pairs(route) do
temp[k] = self:interpret(v)
end
for k, v in pairs(temp) do
self[k] = v
end
if self.author ~= nil and data[self.author] then
self.aData = data[self.author]
if self.work ~= nil and self.aData.works[self.work] then
self.wData = self.aData.works[self.work]
end
end
end
function LanguageModule:lower(input)
return input ~= nil and ulower(input) or nil
end
function LanguageModule:upper(input)
return input ~= nil and uupper(input) or nil
end
function LanguageModule:isLetter(input)
return not tonumber(input)
end
function LanguageModule:digits(width, num)
return format('%' .. width .. 'd', num)
end
function LanguageModule:numToDeva(input)
return input ~= nil and to_Devanagari(input) or nil
end
function LanguageModule:separ(values, separator)
return concat(values, separator)
end
function LanguageModule:roundDown(period, verse)
if tonumber(verse) then
return floor(verse / period) * period
end
self:changeCode('orange')
end
function LanguageModule:chapterSelect(rubric, verse)
verse = tonumber(match(verse, "^%d+"))
for k, v in pairs(rubric) do
if v[1] <= verse and verse <= v[2] then
return k
end
end
self:changeCode('orange')
end
function LanguageModule:interpret(item)
local output
if type(item) == 'string' then
if #item > 1 and byte(item) == 0x2E then
local address = sub(item, 2)
local returnable = self[address] or self.library.data.Sundry and self.library.data.Sundry[address]
output = returnable
else
output = item
end
elseif type(item) == 'table' then
--If it's a table, it's either a function call or a nested address.
local presumedFunction = self:interpret(item[1])
if is_callable(presumedFunction) then
local parameters = {}
-- FIXME: get rid of the arbitrary limit 30
for i = 2, 30 do
if item[i] ~= nil then
insert(parameters, self:interpret(item[i]))
else
break
end
end
output = presumedFunction(self, unpack(parameters))
else
local nested = self
-- FIXME: get rid of the arbitrary limit 30
for i = 1, 30 do
local address = item[i]
if address and nested then
nested = nested[address]
else
break
end
end
output = nested
end
else
output = item
end
return output
end
function LanguageModule:convert(scheme, initiate)
local converted
if is_callable(scheme) then
converted = scheme(self, tonumber(initiate) or initiate)
elseif type(scheme) == "table" then
converted = scheme[tonumber(initiate) or initiate]
end
if converted ~= nil then
return converted
end
self:changeCode('orange')
end
function LanguageModule:numToRoman(item)
local j = tonumber(item)
if (j == nil) then
return item
end
if (j <= 0) then
return item
end
local ints = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
local nums = {'M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I'}
local result = ""
for k = 1, #ints do
local count = floor(j / ints[k])
result = result .. rep(nums[k], count)
j = j - ints[k] * count
end
return result
end
-- Iterate through "array" and its sublevels. Find indices in "array" that
-- contain a string matching "valToFind". Return last index where that string
-- (minus its first letter) is the key for a field in "self", as well as last
-- index where that string was found.
-- Used to locate the place where the "rlformat" should be skipped out of,
-- because there's no ".ref" value supplied for what comes next.
-- For instance, if book but not line number has been supplied.
local function findLastValidRefIndex(self, array, valToFind)
local lastValidIndex, lastIndex
for i, val in ipairs(array) do
if type(val) == 'table' then
local res1, res2 = findLastValidRefIndex(self, val, valToFind)
if res1 then
lastValidIndex = i
end
if res2 then
lastIndex = i
end
elseif type(val) == "string" and match(val, valToFind) then
lastIndex = i
if self[sub(val, 2)] then
lastValidIndex = i
end
end
end
return lastValidIndex, lastIndex
end
function LanguageModule:expand(args)
--Instantiate our variables.
local results = {}
self.code = 'green'
local data = self.library.data
self.author = args.author or args[2]
self.work = args.work or args[3]
-- FIXME: get rid of the arbitrary limit 5
for i = 1, 5 do
local refName = 'ref' .. i
local paramNumber = i + 3
self[refName] = args[refName] or args[paramNumber]
end
--Check if we've been given an author alias.
if data.authorAliases and data.authorAliases[self.author] then
self.author = data.authorAliases[self.author]
end
if not data[self.author] then
self:changeCode('yellow')
else
self.aData = data[self.author]
if self.aData.reroute then
self:reroute(self.aData.reroute)
else
if self.aData.aliases and self.aData.aliases[self.work] then
self.work = self.aData.aliases[self.work]
end
if not (self.aData.works and self.aData.works[self.work]) then
self:changeCode('yellow')
else
self.wData = self.aData.works[self.work]
if self.wData.reroute then
self:reroute(self.wData.reroute)
end
end
end
end
--Load all author-level data.
if self.aData and self.aData.aLink then
results.author = '[[w:' .. self.aData.aLink .. '|' .. self.author .. ']]'
else
results.author = self.author
end
if self.aData and self.aData.year then
results.year = self.aData.year
end
--If the database has a link for the work, incorporate it.
if not self.wData or not self.wData.wLink then
results.work = self.work
else
results.work = '[[w:' .. self.wData.wLink .. '|' .. self.work .. ']]'
end
--Some works have info which overrides the author-level info or fills other parameters.
if self.wData then
if self.wData.year then
results.year = self.wData.year
end
if self.wData.author ~= nil then
results.author = self.wData.author
end
if self.wData.object then
results.object = self.wData.object
end
if self.wData.style then
results.style = self.wData.style
end
if self.wData.refn then
results.refn = self.wData.refn
end
end
self.thru = args.through or args.thru
--Custom formatter for displayed reference
if self.aData and self.aData.rdFormat and self.aData.rdFormat.custom then
local formatted = {}
for _, current in ipairs(self.aData.rdFormat.custom) do
insert(formatted, self:interpret(current))
end
self.refDisplay = concat(formatted)
else
--The displayed reference usually consists of all the ref argument(s) joined with a period.
self.refDisplay = self.ref1 and '' or (self.wData and self.wData.refDefaultDisplay or false)
local separator_num = 1
-- FIXME: get rid of the arbitrary limit 5
for i = 1, 5 do
local whichRef = 'ref' .. tostring(i)
if self[whichRef] then
local ref = self[whichRef]
local separator
-- no separator before a letter
if umatch(ref, "^%a$") then
separator = ""
-- to allow colon between biblical chapter and verse
elseif self.aData and self.aData.rdFormat and self.aData.rdFormat.separator then
separator = self.aData.rdFormat.separator
elseif self.aData and self.aData.rdFormat and self.aData.rdFormat.separators then
separator = self.aData.rdFormat.separators[separator_num]
else
separator = "."
end
if i > 1 then
self.refDisplay = self.refDisplay .. separator
separator_num = separator_num + 1
end
self.refDisplay = self.refDisplay .. self[whichRef]
else
break
end
end
if self.thru then
self.refDisplay = self.refDisplay .. '–' .. self.thru
end
end
-- Apply custom work formatting, if specified
if self.wData and self.wData.workFormat then
self.workFormat = self.aData['workFormat' .. tostring(self.wData.workFormat)]
elseif self.aData and self.aData.workFormat then
self.workFormat = self.aData.workFormat
end
if self.workFormat then
results.style = 'no' -- Ignore/override style parameter
local formatted = {}
for _, current in ipairs(self.workFormat) do
insert(formatted, self:interpret(current))
end
results.work = concat(formatted)
end
--[[ If the work is not in the database,
or we don't have a source text link,
the ref is simply the display.
Otherwise, we have to create a reference link,
easily the most challenging function of this script. ]]
if self.wData and self.wData.rlFormat then
self.rlFormat = self.aData['rlFormat' .. tostring(self.wData.rlFormat)]
elseif self.aData and self.aData.rlFormat then
self.rlFormat = self.aData.rlFormat
end
if self.wData and self.rlFormat then
self.rlTitle = self.wData.rlTitle
-- Go through indices in "self.rlFormat" that contain a string
-- beginning in ".ref" (either in the first level of "self.rlFormat"
-- or a sublevel). Return the index of the string that has a
-- corresponding field in "self", as well as the index of the last
-- such string.
local lastValidIndex, lastIndex = findLastValidRefIndex(self, self.rlFormat, '^%.ref(%d+)$')
-- If there isn't another ".ref" string after the last valid index,
-- then there is no need to cut short the rlFormat.
self.refLink = {}
if lastIndex and lastValidIndex and lastIndex > lastValidIndex then
for i, current in ipairs(self.rlFormat) do
if i > lastValidIndex then
break
end
insert(self.refLink, self:interpret(current))
end
else
for _, current in ipairs(self.rlFormat) do
insert(self.refLink, self:interpret(current))
end
end
self.refLink = concat(self.refLink)
end
if self.wData and self.wData.xrlFormat then
self.xrlFormat = self.aData['xrlFormat' .. tostring(self.wData.xrlFormat)]
elseif self.aData and self.aData.xrlFormat then
self.xrlFormat = self.aData.xrlFormat
end
if self.xrlFormat then
self.xurl = self.wData.xurl
-- Go through indices in `self.xrlFormat` that contain a string
-- beginning ".ref" (either in the first level of `self.xrlFormat`
-- or a sublevel). Return the index of the string that has a
-- corresponding field in `self`, as well as the index of the last
-- such string.
local lastValidIndex, lastIndex = findLastValidRefIndex(self, self.xrlFormat, '^%.ref(%d+)$')
-- If there isn't another ".ref" string after the last valid index,
-- then there is no need to cut short the rlFormat.
self.xrefLink = {}
if lastIndex and lastValidIndex and lastIndex > lastValidIndex then
for i, current in ipairs(self.xrlFormat) do
if i > lastValidIndex then
break
end
insert(self.xrefLink, self:interpret(current))
end
else
for _, current in ipairs(self.xrlFormat) do
insert(self.xrefLink, self:interpret(current))
end
end
self.xrefLink = concat(self.xrefLink)
end
if self.refLink and self.refDisplay then
results.ref = '[[' .. self.refLink .. '|' .. self.refDisplay .. ']]'
elseif self.xrefLink and self.refDisplay then
results.ref = '[' .. self.xrefLink .. ' ' .. self.refDisplay .. ']'
else
results.ref = self.refDisplay or ''
end
if args.notes then
results.notes = args.notes
end
results.code = self.code
return results
end
return export
bghy41z7gphk3fwf2p4rs2q1qn3lz3u
Module:Quotations/la/data
828
38959
178393
2026-10-24T04:49:56Z
GinawaSaHapon
3989
Nilikha ang pahina na may 'local data = {} data.Sundry = {} data.Sundry.OrdinalNames = { 'Primus', 'Secundus', 'Tertius', 'Quartus', 'Quintus', 'Sextus', 'Septimus', 'Octavus', 'Nonus', 'Decimus', 'Undecimus', 'Duodecimus', 'Tertius Decimus' } data.authorAliases = { ['Acc.'] = 'Accius', ['Aldh.'] = 'Aldhelmus Meldunensis', ['Ambrose'] = 'Ambrosius', ['Amm.'] = 'Ammianus Marcellinus', ['Amp.'] = 'Lucius Ampelius', ['Anastas.'] = 'Anastasius Bibliothecarius', ['Anthim.'] = 'An...'
178393
Scribunto
text/plain
local data = {}
data.Sundry = {}
data.Sundry.OrdinalNames = {
'Primus', 'Secundus', 'Tertius', 'Quartus', 'Quintus', 'Sextus',
'Septimus', 'Octavus', 'Nonus', 'Decimus', 'Undecimus', 'Duodecimus',
'Tertius Decimus'
}
data.authorAliases = {
['Acc.'] = 'Accius',
['Aldh.'] = 'Aldhelmus Meldunensis',
['Ambrose'] = 'Ambrosius',
['Amm.'] = 'Ammianus Marcellinus',
['Amp.'] = 'Lucius Ampelius',
['Anastas.'] = 'Anastasius Bibliothecarius',
['Anthim.'] = 'Anthimus',
['App.'] = 'Apuleius',
['Apu.'] = 'Apuleius',
['Apuleius Barbarus'] = 'Pseudo-Apuleius',
['Apuleius Platonicus'] = 'Pseudo-Apuleius',
['Arn.'] = 'Arnobius',
['Arnoldus Abbas Bonævallis'] = 'Arnoldus Bonaevallis',
['Att.'] = 'Accius',
['Attius'] = 'Accius',
['Aug.'] = 'Aurelius Augustinus Hipponensis',
['Augustine'] = 'Aurelius Augustinus Hipponensis',
['Aur. Vict.'] = 'Aurelius Victor',
['Aus.'] = 'Ausonius',
['Beda'] = 'Beda Presbyter',
['Bede'] = 'Beda Presbyter',
['Bern.'] = 'Bernardus Silvestris',
['C.'] = 'Cicero',
['Cael. Aur.'] = 'Caelius Aurelianus',
['Caes.'] = 'Julius Caesar',
['Caesar'] = 'Julius Caesar',
['Cassiod.'] = 'Cassiodorus',
['Cat.'] = 'Catullus',
['Cato'] = 'Marcus Porcius Cato',
['Cato Maior'] = 'Marcus Porcius Cato',
['Cato maior'] = 'Marcus Porcius Cato',
['Cato the Elder'] = 'Marcus Porcius Cato',
['Cels.'] = 'Aulus Cornelius Celsus',
['Celsus'] = 'Aulus Cornelius Celsus',
['Charis.'] = 'Flavius Sosipater Charisius',
['Chiro'] = 'Chiron Centaurus',
['Cic.'] = 'Cicero',
['Claud.'] = 'Claudius Claudianus',
['Claudian'] = 'Claudius Claudianus',
['Col.'] = 'Columella',
['Curt.'] = 'Quintus Curtius Rufus',
['Diom.'] = 'Diomedes Grammaticus',
['Don.'] = 'Aelius Donatus',
['Donat.'] = 'Tiberius Claudius Donatus',
['Enn.'] = 'Ennius',
['Fest.'] = 'Sextus Pompeius Festus',
['Festus'] = 'Sextus Pompeius Festus',
['Fibonacci'] = 'Leonardus Pisanus',
['Firm.'] = 'Julius Firmicus Maternus',
['Fortun.'] = 'Venantius Fortunatus',
['Front.'] = 'Sextus Julius Frontinus',
['Frontin.'] = 'Sextus Julius Frontinus',
['Frontinus'] = 'Sextus Julius Frontinus',
['Fulg.'] = 'Fabius Planciades Fulgentius',
['Fulgentius'] = 'Fabius Planciades Fulgentius',
['Fulgentius Mythographus'] = 'Fabius Planciades Fulgentius',
['Gell.'] = 'Aulus Gellius',
['Gellius'] = 'Aulus Gellius',
['Gilb.'] = 'Gilbertus Anglicus',
['Giles of Rome'] = 'Aegidius Romanus',
['Gregory I'] = 'Gregorius Magnus',
['Gregory the Great'] = 'Gregorius Magnus',
['Hadrian'] = 'Hadrianus',
['Harigero Lobiensi Abbati'] = 'Herigerus Lobiensis',
['Hier.'] = 'Hieronymus',
['Hor.'] = 'Horatius',
['Horace'] = 'Horatius',
['Hyg.'] = 'Gaius Julius Hyginus',
['Hyg. Gromat.'] = 'Hyginus Gromaticus',
['Innocent III'] = 'Innocentius III',
['Isid.'] = 'Isidorus Hispalensis',
['Iulius Caesar'] = 'Julius Caesar',
['Iul. Vict.'] = 'Gaius Julius Victor',
['Iust.'] = 'Iustinus',
['Iustin.'] = 'Iustinianus',
['Iuv.'] = 'Juvenalis',
['Iuvenalis'] = 'Juvenalis',
['Jerome'] = 'Hieronymus',
['Jo. de Janua'] = 'Johannes Genuensis',
['Johannes Kepler'] = 'Johannes Keplerus',
['Jul. Vict.'] = 'Gaius Julius Victor',
['Just.'] = 'Iustinus',
['Justin'] = 'Iustinus',
['Justin.'] = 'Iustinianus',
['Justinian'] = 'Iustinianus',
['Justinianus'] = 'Iustinianus',
['Juv.'] = 'Juvenalis',
['Juvenal'] = 'Juvenalis',
['J. Vict.'] = 'Gaius Julius Victor',
['J.-Vict.'] = 'Gaius Julius Victor',
['Kepler'] = 'Johannes Keplerus',
['Keplerus'] = 'Johannes Keplerus',
['Lact.'] = 'Lactantius',
['Lampr.'] = 'Aelius Lampridius',
['Liv.'] = 'Titus Livius',
['Livy'] = 'Titus Livius',
['Liv. Andron.'] = 'Livius Andronicus',
['Luc.'] = 'Lucanus',
['Lucan'] = 'Lucanus',
['Lucilius'] = 'Gaius Lucilius',
['Lucr.'] = 'Lucretius',
['Macr.'] = 'Macrobius',
['Mall. Th.'] = 'Mallius Theodorus',
['Mall.-Th.'] = 'Mallius Theodorus',
['Mall. Theod.'] = 'Mallius Theodorus',
['Mal. Theod.'] = 'Mallius Theodorus',
['Marc. Emp.'] = 'Marcellus Empiricus',
['Marcus Annaeus Lucanus'] = 'Lucanus',
['Iustinus'] = 'Marcus Iunianus Iustinus',
['Mart.'] = 'Martialis',
['Martial'] = 'Martialis',
['Mel.'] = 'Pomponius Mela',
['Mela'] = 'Pomponius Mela',
['Nazar.'] = 'Nazarius',
['Nep.'] = 'Cornelius Nepos',
['Non.'] = 'Nonius Marcellus',
['Nonius.'] = 'Nonius Marcellus',
['Ord. Vit.'] = 'Orderic Vitalis',
['Oros.'] = 'Paulus Orosius',
['Osb. Glouc.'] = 'Osbernus Glocestriensis',
['Ov.'] = 'Ovidius',
['Ovid'] = 'Ovidius',
['Pac.'] = 'Marcus Pacuvius',
['Pacuv.'] = 'Marcus Pacuvius',
['Pacuvius'] = 'Marcus Pacuvius',
['Pall.'] = 'Palladius',
['Paul.'] = 'Julius Paulus Prudentissimus',
['Pers.'] = 'Persius',
['Petr.'] = 'Petronius',
['Phaedrus.'] = 'Phaedrus',
['Pl.'] = 'Plautus',
['Plaut.'] = 'Plautus',
['Plin.'] = 'Plinius Maior',
['Plin. Maj.'] = 'Plinius Maior',
['Plinius Major'] = 'Plinius Maior',
['Plin. Min.'] = 'Plinius Minor',
['Pliny the Elder'] = 'Plinius Maior',
['Pliny the Younger'] = 'Plinius Minor',
['Prisc.'] = 'Priscianus',
['Priscian'] = 'Priscianus',
['Prop.'] = 'Propertius',
['Ps. Apul.'] = 'Pseudo-Apuleius',
['Ps. Ov.'] = 'Pseudo-Ovidius',
['Quint.'] = 'Quintilianus',
['Quintilian'] = 'Quintilianus',
['Quintus Horatius Flaccus'] = 'Horatius',
['Sall.'] = 'Gaius Sallustius Crispus',
['Sallust'] = 'Gaius Sallustius Crispus',
['Sallustius'] = 'Gaius Sallustius Crispus',
['Salv.'] = 'Salvianus',
['Salvian'] = 'Salvianus',
['Sen.'] = 'Seneca Minor',
['Sen. Mai.'] = 'Seneca Maior',
['Sen. Maj.'] = 'Seneca Maior',
['Sen. Min.'] = 'Seneca Minor',
['Seneca the Elder'] = 'Seneca Maior',
['Seneca the Younger'] = 'Seneca Minor',
['Serv.'] = 'Servius Honoratus',
['Servius'] = 'Servius Honoratus',
['Servius the Grammarian'] = 'Servius Honoratus',
['Sid.'] = 'Sidonius Apollinaris',
['Sil.'] = 'Silius Italicus',
['Sol.'] = 'Solinus',
['Solin.'] = 'Solinus',
['Spart.'] = 'Aelius Spartianus',
['Stat.'] = 'Statius',
['Suet.'] = 'Suetonius',
['Sulp.'] = 'Sulpicius Severus',
['Sulp. Sev.'] = 'Sulpicius Severus',
['Symm.'] = 'Quintus Aurelius Symmachus',
['T.'] = 'Publius Terentius Afer',
['Tac.'] = 'Tacitus',
['Ter.'] = 'Publius Terentius Afer',
['Terence'] = 'Publius Terentius Afer',
['Tert.'] = 'Tertullianus',
['Tertullian'] = 'Tertullianus',
['Tib.'] = 'Albius Tibullus',
['Val. Fl.'] = 'Valerius Flaccus',
['Tibullus'] = 'Albius Tibullus',
['Val. Max.'] = 'Valerius Maximus',
['Varr.'] = 'Marcus Terentius Varro',
['Varro'] = 'Marcus Terentius Varro',
['Veg.'] = 'Vegetius',
['Ven.'] = 'Venantius Fortunatus',
['Ven. Fort.'] = 'Venantius Fortunatus',
['Verg.'] = 'Vergilius',
['Vergil'] = 'Vergilius',
['Virgil'] = 'Vergilius',
['Vitr.'] = 'Vitruvius',
['Vop. Flav.'] = 'Flavius Vopiscus',
}
data[false] = {}
data[false].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data[false].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data[false].rlFormat3 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data[false].rlFormat4 = {'s:la:', 'Vulgata Clementina/', '.rlTitle', '#Caput_', '.ref1'}
data[false].xrlFormat1 = {'.xurl'}
data[false].works = {
['Acta Sanctorum Ordinis S. Benedicti in saeculorum classes distributa'] = {},
['Alphita'] = {['year'] = 'c. 1315', ['wLink'] = 'd:Q51374509'},
['Asclepius'] = {['year'] = '200–300', ['rlTitle'] = 'Asclepius'},
['Codex Theodosianus'] = {['year'] = '438 CE', ['wLink'] = 'Codex Theodosianus', ['rlTitle'] = 'Codex Theodosianus', ['rlFormat'] = 1},
['De re culinaria'] = {['year'] = '230', ['wLink'] = 'Apicius', ['rlTitle'] = 'De re coquinaria', ['rlFormat'] = 1},
['Epitome de Caesaribus'] = {['wLink'] = 'Epitome de Caesaribus', ['rlTitle'] = 'Epitome de Caesaribus', ['rlFormat'] = 2},
['Anthologia Latina'] = {['wLink'] = 'Latin Anthology'},
['Corpus Inscriptionum Latinarum'] = {['wLink'] = 'Corpus Inscriptionum Latinarum'},
['Lex duodecim tabularum'] = {['wLink'] = 'Twelve Tables', ['rlTitle'] = 'Lex duodecim tabularum', ['year'] = '449 BC', ['rlFormat'] = 3},
['Lex Luci Lucerina'] = {['rlTitle'] = 'Lex Luci Lucerina', ['year'] = 'c. 314-100 BCE'},
['Lex Salica'] = {['wLink'] = 'Salic law', ['rlTitle'] = 'Lex Salica', ['year'] = 'c. 500', ['rlFormat'] = 2},
['Medicina Plinii'] = {['wLink'] = 'Medicina Plinii', ['year'] = '4th century CE'},
['De viris illustribus'] = {['year'] = 'c. 300–c. 350', ['wLink'] = 'De viris illustribus', ['rlTitle'] = 'De viris illustribus urbis Romae', ['rlFormat'] = 3},
['Origo gentis Romanae'] = {['wLink'] = 'Origo gentis Romanae'},
['Promptorium parvulorum sive clericorum dictionarius Anglo-Latinus Princeps'] = {['reroute'] = {['author'] = 'Galfridus Grammaticus'}, ['work'] = 'Promptorium parvulorum sive clericorum dictionarius Anglo-Latinus Princeps'},
['Carmina Burana'] = {['wLink'] = 'Carmina Burana', ['year'] = '12th century', ['xurl'] = 'https://www.tha.de/~harsch/Chronologia/Lspost13/CarminaBurana/bur_car0.html', ['xrlFormat'] = 1},
['Sinonoma Bartholomei'] = {['year'] = '14th century', ['wLink'] = 'd:Q51431513'},
['Vulgata—Abdias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Abdiae', ['rlFormat'] = 4},
['Vulgata—Actus Apostolorum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Acta Apostolorum', ['rlFormat'] = 4},
['Vulgata—Aggaeus'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Aggaei', ['rlFormat'] = 4},
['Vulgata—Amos'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Amos', ['rlFormat'] = 4},
['Vulgata—Apocalypsis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Apocalypsis', ['rlFormat'] = 4},
['Vulgata—Baruch'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Baruch', ['rlFormat'] = 4},
['Vulgata—Canticum Canticorum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Canticum Canticorum', ['rlFormat'] = 4},
['Vulgata—Colossenses'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Colossenses', ['rlFormat'] = 4},
['Vulgata—Daniel'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Danielis', ['rlFormat'] = 4},
['Vulgata—Deutoronomium'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Deuteronomii', ['rlFormat'] = 4},
['Vulgata—Ecclesiastes'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Ecclesiastes', ['rlFormat'] = 4},
['Vulgata—Ecclesiasticus'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Ecclesiasticus', ['rlFormat'] = 4},
['Vulgata—Epistula I ad Corinthios'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Corinthios I', ['rlFormat'] = 4},
['Vulgata—Epistula II ad Corinthios'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Corinthios II', ['rlFormat'] = 4},
['Vulgata—Epistula ad Ephesios'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Ephesios', ['rlFormat'] = 4},
['Vulgata—Epistula ad Galatas'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Galatas', ['rlFormat'] = 4},
['Vulgata—Epistula Jacobi'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Jacobi Epistola', ['rlFormat'] = 4},
['Vulgata—Epistula I Joannis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Joannis Epistola I', ['rlFormat'] = 4},
['Vulgata—Epistula II Joannis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Joannis Epistola II', ['rlFormat'] = 4},
['Vulgata—Epistula III Joannis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Joannis Epistola III', ['rlFormat'] = 4},
['Vulgata—Epistula Judae'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Juda Epistola', ['rlFormat'] = 4},
['Vulgata—Epistula ad Hebraeos'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Hebraeos', ['rlFormat'] = 4},
['Vulgata—Epistula I Petri'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Petri Epistola I', ['rlFormat'] = 4},
['Vulgata—Epistula II Petri'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Petri Epistola II', ['rlFormat'] = 4},
['Vulgata—Epistula ad Philippenses'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Philippenses', ['rlFormat'] = 4},
['Vulgata—Epistula ad Philemonem'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Philemonem', ['rlFormat'] = 4},
['Vulgata—Epistula ad Romanos'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Romanos', ['rlFormat'] = 4},
['Vulgata—Epistula I ad Thessalonicenses'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Thessalonicenses I', ['rlFormat'] = 4},
['Vulgata—Epistula II ad Thessalonicenses'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Thessalonicenses II', ['rlFormat'] = 4},
['Vulgata—Epistula I ad Timotheum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Timotheum I', ['rlFormat'] = 4},
['Vulgata—Epistula II ad Timotheum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Timotheum II', ['rlFormat'] = 4},
['Vulgata—Epistula ad Titum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Pauli Epistola ad Titum', ['rlFormat'] = 4},
['Vulgata—Esdras'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber I Esdrae', ['rlFormat'] = 4},
['Vulgata—Esther'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Esther', ['rlFormat'] = 4},
['Vulgata—Evangelium Joannis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Evangelium Secundum Joannem', ['rlFormat'] = 4},
['Vulgata—Evangelium Lucae'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Evangelium Secundum Lucam', ['rlFormat'] = 4},
['Vulgata—Evangelium Marci'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Evangelium Secundum Marcum', ['rlFormat'] = 4},
['Vulgata—Evangelium Matthaei'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Evangelium Secundum Matthaeum', ['rlFormat'] = 4},
['Vulgata—Exodus'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Exodus', ['rlFormat'] = 4},
['Vulgata—Ezechiel'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Ezechielis', ['rlFormat'] = 4},
['Vulgata—Genesis'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Genesis', ['rlFormat'] = 4},
['Vulgata—Habacuc'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Habacuc', ['rlFormat'] = 4},
['Vulgata—Isaias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Isaiae', ['rlFormat'] = 4},
['Vulgata—Jeremias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Jeremiae', ['rlFormat'] = 4},
['Vulgata—Jonas'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Jona', ['rlFormat'] = 4},
['Vulgata—Josue'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Josue', ['rlFormat'] = 4},
['Vulgata—Judices'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Judicum', ['rlFormat'] = 4},
['Vulgata—Leviticus'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Leviticus', ['rlFormat'] = 4},
['Vulgata—Machabaei I'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber I Machabaeorum', ['rlFormat'] = 4},
['Vulgata—Machabaei II'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber II Machabaeorum', ['rlFormat'] = 4},
['Vulgata—Malachias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Malachiae', ['rlFormat'] = 4},
['Vulgata—Michaeas'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Michaeae', ['rlFormat'] = 4},
['Vulgata—Nahum'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Nahum', ['rlFormat'] = 4},
['Vulgata—Nehemias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber II Esdrae', ['rlFormat'] = 4},
['Vulgata—Numeri'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Numeri', ['rlFormat'] = 4},
['Vulgata—Osee'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Osee', ['rlFormat'] = 4},
['Vulgata—Paralipomena I'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber I Paralipomenon', ['rlFormat'] = 4},
['Vulgata—Paralipomena II'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber II Paralipomenon', ['rlFormat'] = 4},
['Vulgata—Proverbia'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Proverbiorum', ['rlFormat'] = 4},
['Vulgata—Psalmi'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Psalmorum', ['rlFormat'] = 4},
['Vulgata—Reges I'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber I Regum', ['rlFormat'] = 4},
['Vulgata—Reges II'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber II Regum', ['rlFormat'] = 4},
['Vulgata—Reges III'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber III Regum', ['rlFormat'] = 4},
['Vulgata—Reges IV'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber IV Regum', ['rlFormat'] = 4},
['Vulgata—Sapientia'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Sapientiae', ['rlFormat'] = 4},
['Vulgata—Sophonias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Sophoniae', ['rlFormat'] = 4},
['Vulgata—Tobias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Liber Tobiae', ['rlFormat'] = 4},
['Vulgata—Zacharias'] = {['wLink'] = 'Sixto-Clementine Vulgate', ['rlTitle'] = 'Prophetia Zachariae', ['rlFormat'] = 4}}
data[false].aliases = {
['Acta SS. Bened.'] = 'Acta Sanctorum Ordinis S. Benedicti in saeculorum classes distributa',
['Alph.'] = 'Alphita',
['Anthol. Lat.'] = 'Anthologia Latina',
['Apic.'] = 'De re culinaria',
['Asclep.'] = 'Asclepius',
['Cod. Th.'] = 'Codex Theodosianus',
['Cod. Theod.'] = 'Codex Theodosianus',
['Corpus Inscriptionum Latinarum'] = 'Latin Inscriptions',
['De re coquinaria'] = 'De re culinaria',
['Epit.'] = 'Epitome de Caesaribus',
['Inscr.'] = 'Corpus Inscriptionum Latinarum',
['Latin Anthology'] = 'Anthologia Latina',
['Lex Duodecim Tabularum'] = 'Lex duodecim tabularum',
['On Illustrious Men of the City of Rome'] = 'De viris illustribus',
['Origin of the Roman People'] = 'Origo gentis Romanae',
['PP'] = 'Promptorium parvulorum sive clericorum dictionarius Anglo-Latinus Princeps',
['SB'] = 'Sinonoma Bartholomei',
['The Twelve Tables'] = 'Lex duodecim tabularum',
['Trism.'] = 'Asclepius',
['Vir. Ill.'] = 'De viris illustribus',
['Vulg. Abd.'] = 'Vulgata—Abdias',
['Vulg. Act.'] = 'Vulgata—Actus Apostolorum',
['Vulg. Agg.'] = 'Vulgata—Aggaeus',
['Vulg. Am.'] = 'Vulgata—Amos',
['Vulg. Amos'] = 'Vulgata—Amos',
['Vulg. Apoc.'] = 'Vulgata—Apocalypsis',
['Vulg. Bar.'] = 'Vulgata—Baruch',
['Vulg. Cant.'] = 'Vulgata—Canticum Canticorum',
['Vulg. Coloss.'] = 'Vulgata—Epistula ad Colossenses',
['Vulg. 1 Cor.'] = 'Vulgata—Epistula I ad Corinthios',
['Vulg. 2 Cor.'] = 'Vulgata—Epistula II ad Corinthios',
['Vulg. Dan.'] = 'Vulgata—Daniel',
['Vulg. Deut.'] = 'Vulgata—Deutoronomium',
['Vulg. Eccl.'] = 'Vulgata—Ecclesiastes',
['Vulg. Eccli.'] = 'Vulgata—Ecclesiaticus',
['Vulg. Eph.'] = 'Vulgata—Epistula ad Ephesios',
['Vulg. Esdr.'] = 'Vulgata—Esdras',
['Vulg. 2 Esdr.'] = 'Vulgata—Nehemias',
['Vulg. Esth.'] = 'Vulgata—Esther',
['Vulg. Exod.'] = 'Vulgata—Exodus',
['Vulg. Ezech.'] = 'Vulgata—Ezechiel',
['Vulg. Gal.'] = 'Vulgata—Epistula ad Galatas',
['Vulg. Gen.'] = 'Vulgata—Genesis',
['Vulg. Hab.'] = 'Vulgata—Habacuc',
['Vulg. Heb.'] = 'Vulgata—Epistula ad Hebraeos',
['Vulg. Isa.'] = 'Vulgata—Isaias',
['Vulg. Jac.'] = 'Vulgata—Epistula Jacobi',
['Vulg. Jer.'] = 'Vulgata—Jeremias',
['Vulg. Joan.'] = 'Vulgata—Evangelium Joannis',
['Vulg. 1 Joan.'] = 'Vulgata—Epistula I Joannis',
['Vulg. 2 Joan.'] = 'Vulgata—Epistula II Joannis',
['Vulg. 3 Joan.'] = 'Vulgata—Epistula III Joannis',
['Vulg. Jon.'] = 'Vulgata—Jonas',
['Vulg. Jos.'] = 'Vulgata—Josue',
['Vulg. Jud.'] = 'Vulgata—Epistula Judae',
['Vulg. Judic.'] = 'Vulgata—Judices',
['Vulg. Lev.'] = 'Vulgata—Leviticus',
['Vulg. Luc.'] = 'Vulgata—Evangelium Lucae',
['Vulg. 1 Macc.'] = 'Vulgata—Machabaei I',
['Vulg. 1 Mach.'] = 'Vulgata—Machabaei I',
['Vulg. 2 Macc.'] = 'Vulgata—Machabaei II',
['Vulg. 2 Mach.'] = 'Vulgata—Machabaei II',
['Vulg. Mal.'] = 'Vulgata—Malachias',
['Vulg. Marc.'] = 'Vulgata—Evangelium Marci',
['Vulg. Matt.'] = 'Vulgata—Evangelium Matthaei',
['Vulg. Mich.'] = 'Vulgata—Michaeas',
['Vulg. Nah.'] = 'Vulgata—Nahum',
['Vulg. Neb.'] = 'Vulgata—Nehemias',
['Vulg. Num.'] = 'Vulgata—Numeri',
['Vulg. Os.'] = 'Vulgata—Osee',
['Vulg. 1 Par.'] = 'Vulgata—Paralipomena I',
['Vulg. 1 Paral.'] = 'Vulgata—Paralipomena I',
['Vulg. 2 Par.'] = 'Vulgata—Paralipomena II',
['Vulg. 2 Paral.'] = 'Vulgata—Paralipomena II',
['Vulg. 1 Petr.'] = 'Vulgata—Epistula I Petri',
['Vulg. 2 Petr.'] = 'Vulgata—Epistula II Petri',
['Vulg. Phil.'] = 'Vulgata—Epistula ad Philippenses',
['Vulg. Philem.'] = 'Vulgata—Epistula ad Philemonem',
['Vulg. Prov.'] = 'Vulgata—Proverbia',
['Vulg. Psa.'] = 'Vulgata—Psalmi',
['Vulg. 1 Reg.'] = 'Vulgata—Reges I',
['Vulg. 2 Reg.'] = 'Vulgata—Reges II',
['Vulg. 3 Reg.'] = 'Vulgata—Reges III',
['Vulg. 4 Reg.'] = 'Vulgata—Reges IV',
['Vulg. Rom.'] = 'Vulgata—Epistula ad Romanos',
['Vulg. Sap.'] = 'Vulgata—Sapientia',
['Vulg. Soph.'] = 'Vulgata—Sophonias',
['Vulg. 1 Thess.'] = 'Vulgata—Epistula I ad Thessalonicenses',
['Vulg. 2 Thess.'] = 'Vulgata—Epistula II ad Thessalonicenses',
['Vulg. 1 Tim.'] = 'Vulgata—Epistula I ad Timotheum',
['Vulg. 2 Tim.'] = 'Vulgata—Epistula II ad Timotheum',
['Vulg. Tit.'] = 'Vulgata—Epistula ad Titum',
['Vulg. Tob.'] = 'Vulgata—Tobias',
['Vulg. Zach.'] = 'Vulgata—Zacharias'}
data['Accius'] = {}
data['Accius'].aLink = 'Lucius Accius'
data['Accius'].year = '170 - c. 86 BCE'
data['Accius'].rlFormat1 = {'s:la:', '.rlTitle', '/', '.ref1', '#', '.ref2'}
data['Accius'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Accius'].works = {
['Tragoediae'] = {['year'] = 'c. 140–104 BCE', ['rlTitle'] = 'Tragoediae (Accius, ed. E. H. Warmington)', ['rlFormat'] = 1},
['Phinidae'] = {['rlTitle'] = 'Tragoediae (Accius, ed. E. H. Warmington)', ['rlFormat'] = 2}}
data['Accius'].aliases = {
[false] = 'Tragoediae',
['Tragedies'] = 'Tragoediae'
}
data['Aelius Donatus'] = {}
data['Aelius Donatus'].aLink = 'Aelius Donatus'
data['Aelius Donatus'].year = 'mid 4th c. CE'
data['Aelius Lampridius'] = {}
data['Aelius Lampridius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Aelius Lampridius'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Aelius Lampridius'].rlFormat3 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Aelius Lampridius'].works = {
['Historia Augusta: Commodus'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta/Commodus', ['rlFormat'] = 1},
['Historia Augusta: Elagabalus'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta/Elagabalus', ['rlFormat'] = 2},
['Historia Augusta: Severus Alexander'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta/Severus Alexander', ['rlFormat'] = 3}}
data['Aelius Lampridius'].aliases = {
['Alex. Sev.'] = 'Historia Augusta: Severus Alexander',
['Com.'] = 'Historia Augusta: Commodus',
['Elag.'] = 'Historia Augusta: Elagabalus',
['Augustan History: Commodus'] = 'Historia Augusta: Commodus',
['Augustan History: Elagabalus'] = 'Historia Augusta: Elagabalus',
['Augustan History: Severus Alexander'] = 'Historia Augusta: Severus Alexander'
}
data['Aelius Spartianus'] = {}
data['Aelius Spartianus'].year = '4th century'
data['Aelius Spartianus'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Aelius Spartianus'].works = {
['Historia Augusta: Aelius'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta/Aelius', ['rlFormat'] = 1},
['Historia Augusta: Hadrianus'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta/Hadrianus', ['rlFormat'] = 1}}
data['Aelius Spartianus'].aliases = {
['Ael.'] = 'Historia Augusta: Aelius',
['Aelius'] = 'Historia Augusta: Aelius',
['Hadr.'] = 'Historia Augusta: Hadrianus',
['Hadrianus'] = 'Historia Augusta: Hadrianus'
}
data['Marcus Aemilius Scaurus'] = {}
data['Marcus Aemilius Scaurus'].aLink = 'Marcus Aemilius Scaurus (consul 115 BC)'
data['Marcus Aemilius Scaurus'].year = 'c. 161–c. 89 BCE'
data['Marcus Aemilius Scaurus'].works = {
['De vita sua'] = {['rlTitle'] = 'De vita sua', ['year'] = 'c. 100-89 BCE'}
}
data['Albertus Magnus'] = {}
data['Albertus Magnus'].aLink = 'Albertus Magnus'
data['Albertus Magnus'].year = 'c. 1200 – 1280'
data['Albertus Magnus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3', '.period', '.ref4'}
data['Albertus Magnus'].works = {
['De animalibus'] = {['rlTitle'] = 'De animalibus', ['rlFormat'] = 1}
}
data['Aldhelmus Meldunensis'] = {}
data['Aldhelmus Meldunensis'].aLink = 'Aldhelm'
data['Aldhelmus Meldunensis'].year = 'c. 639 – 709'
data['Aldhelmus Meldunensis'].works = {
['Aenigmata'] = {},
['Carmina ecclesiastica'] = {},
['Epistulae'] = {},
['De metris'] = {},
['De pedum regulis'] = {},
['De virginitate'] = {}
}
data['Aldhelmus Meldunensis'].aliases = {
['Aen.'] = 'Aenigmata',
['CE'] = 'Carmina ecclesiastica',
['Ep.'] = 'Epistulae',
['Met.'] = 'De metris',
['PR'] = 'De pedum regulis',
['VirgP'] = 'De virginitate',
['VirgV'] = 'De virginitate'
}
data['Ambrose'] = {}
data['Ambrose'].aLink = 'Ambrose'
data['Ambrose'].year = 'c. 339 – c. 397 CE'
data['Ammianus Marcellinus'] = {}
data['Ammianus Marcellinus'].aLink = 'Ammianus Marcellinus'
data['Ammianus Marcellinus'].year = 'c. 330 – c. 390 CE'
data['Ammianus Marcellinus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data['Ammianus Marcellinus'].works = {['Res Gestae'] = {['year'] = '380–392', ['wLink'] = 'Res gestae (Ammianus Marcellinus)', ['rlTitle'] = 'Res Gestae Libri XXXI', ['rlFormat'] = 1}}
data['Ammianus Marcellinus'].aliases = {
[false] = 'Res Gestae'
}
data['Anastasius Bibliothecarius'] = {}
data['Anastasius Bibliothecarius'].aLink = 'Anastasius Bibliothecarius'
data['Anastasius Bibliothecarius'].year = 'c. 810 – a. 879'
data['Anastasius Bibliothecarius'].xrlFormat1 = {'https://books.google.com/books?id=F3ZLAAAAMAAJ&pg=PA', '.ref1', '#v=onepage&f=false'}
data['Anastasius Bibliothecarius'].works = {
['Historia, de vitis Romanorum pontificum'] = {['wLink'] = 'Liber Pontificalis', ['xrlFormat'] = 1}
}
data['Anastasius Bibliothecarius'].aliases = {
[false] = 'Historia, de vitis Romanorum pontificum'
}
data['Anthimus'] = {}
data['Anthimus'].aLink = 'Anthimus (physician)'
data['Anthimus'].year = 'c. 475 – 525'
data['Anthimus'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Anthimus'].works = {
['De observatione ciborum'] = {['rlTitle'] = 'De observatione ciborum', ['rlFormat'] = 1}}
data['Anthimus'].aliases = {
[false] = 'De observatione ciborum',
['De Observatione Ciborum'] = 'De observatione ciborum',
['On the Observance of Foods'] = 'De observatione ciborum',
['On the observance of foods'] = 'De observatione ciborum'
}
data['Apuleius'] = {}
data['Apuleius'].aLink = 'Apuleius'
data['Apuleius'].year = 'c. 125 – 180 CE'
data['Apuleius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Apuleius'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period'}
data['Apuleius'].rlFormat3 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Apuleius'].rlFormat4 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Apuleius'].rlFormat5 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Apuleius'].works = {
['Apologia sive pro se de magia'] = {['year'] = '158–159', ['rlTitle'] = 'Apologia sive pro se de magia', ['rlFormat'] = 4},
['De deo Socratis'] = {['rlTitle'] = 'De deo Socratis', ['year'] = '2nd century', ['rlFormat'] = 5},
['De mundo'] = {['rlTitle'] = 'De mundo', ['rlFormat'] = 1},
['De Platone et eius dogmate'] = {['rlTitle'] = 'De Platone et eius dogmate', ['rlFormat'] = 3},
['Florida'] = {['rlTitle'] = 'Florida (Lucius Apuleius)', ['rlFormat'] = 1},
['Metamorphoses'] = {['wLink'] = 'The Golden Ass', ['rlTitle'] = 'Metamorphoses (Apuleius)', ['rlFormat'] = 2}}
data['Apuleius'].aliases = {
['Apol.'] = 'Apologia sive pro se de magia',
['Apologia'] = 'Apologia sive pro se de magia',
['De deo S.'] = 'De deo Socratis',
['Dogm. Plat.'] = 'De Platone et eius dogmate',
['Flor.'] = 'Florida',
['M.'] = 'Metamorphoses',
['Mag.'] = 'Apologia sive pro se de magia',
['Met.'] = 'Metamorphoses',
['Mund.'] = 'De mundo',
['On Plato and His Doctrine'] = 'De Platone et eius dogmate',
['On the God of Socrates'] = 'De deo Socratis',
['The Apologia'] = 'Apologia sive pro se de magia'
}
data['Pseudo-Apuleius'] = {}
data['Pseudo-Apuleius'].aLink = 'Pseudo-Apuleius'
data['Pseudo-Apuleius'].works = {['Herbarium'] = {['year'] = '300–400'}}
data['Pseudo-Apuleius'].aliases = {
['Herbarius'] = 'Herbarium',
['Herbal'] = 'Herbarium',
['Herb.'] = 'Herbarium',
[false] = 'Herbarium'
}
data['Arator'] = {}
data['Arator'].aLink = 'Arator'
data['Arator'].year = 'c. 490 – 544 CE'
data['Arator'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.convert', '.OrdinalNames', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Arator'].works = {
['De actibus apostolorum'] = {['rlTitle'] = 'De actibus apostolorum', ['rlFormat'] = 1}
}
data['Arnobius'] = {}
data['Arnobius'].aLink = 'Arnobius'
data['Arnobius'].year = '4th century–c. 330 CE'
data['Arnobius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#p', '.ref2'}
data['Arnobius'].works= {['Against the Pagans'] = {['year'] = 'c. 303 ', ['rlTitle'] = 'Adversus Nationes', ['rlFormat'] = 1}}
data['Arnobius'].aliases = {
['Adversus gentes'] = 'Against the Pagans',
[false] = 'Against the Pagans'
}
data['Arnoldus Bonaevallis'] = {}
data['Arnoldus Bonaevallis'].aLink = 'd:Q91016408'
data['Arnoldus Bonaevallis'].year = 'c. 1100–1156'
data['Arnoldus Bonaevallis'].xrlFormat1 = {'https://books.google.co.uk/books?id=-5ZBAAAAcAAJ&pg=PA', '.ref1', '#v=onepage&f=false'}
data['Arnoldus Bonaevallis'].works = {['Tractatus de septem verbis Domini in cruce'] = {['xrlFormat'] = 1}}
data['Arnoldus Bonaevallis'].aliases = {[false] = 'Tractatus de septem verbis Domini in cruce'}
data['Aurelius Augustinus Hipponensis'] = {}
data['Aurelius Augustinus Hipponensis'].aLink = 'Augustine of Hippo'
data['Aurelius Augustinus Hipponensis'].year = '354–430'
data['Aurelius Augustinus Hipponensis'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '#', '.ref3'}
data['Aurelius Augustinus Hipponensis'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Aurelius Augustinus Hipponensis'].rlFormat3 = {'s:la:', '.rlTitle', '/Liber ', {'.convert', '.OrdinalNames', '.ref1'}}
data['Aurelius Augustinus Hipponensis'].rlFormat4 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Aurelius Augustinus Hipponensis'].rlFormat5 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}}
data['Aurelius Augustinus Hipponensis'].rlFormat6 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Aurelius Augustinus Hipponensis'].rlFormat7 = {'s:la:', '.rlTitle', '/Liber ', {'.convert', '.OrdinalNames', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Aurelius Augustinus Hipponensis'].rlFormat8 = {'s:la:', '.rlTitle', '/', '.ref1'}
data['Aurelius Augustinus Hipponensis'].works = {
['Contra academicos'] = {['year'] = '386–387', ['rlTitle'] = 'Contra Academicos', ['rlFormat'] = 1},
['De civitate Dei'] = {['year'] = '412–426', ['wLink'] = 'The City of God', ['rlTitle'] = 'De civitate Dei', ['rlFormat'] = 2},
['Confessiones'] = {['year'] = '397–401', ['wLink'] = 'Confessions (St. Augustine)', ['rlTitle'] = 'Confessiones', ['rlFormat'] = 3},
['Epistolae'] = {['rlTitle'] = 'Epistolae (Aurelius Augustinus)', ['rlFormat'] = 4},
['De doctrina Christiana'] = {['year'] = '397–426', ['wLink'] = 'De doctrina Christiana', ['rlTitle'] = 'De Doctrina Christiana', ['rlFormat'] = 5},
['De musica'] = {['year'] = '388–390', ['rlTitle'] = 'De Musica (Augustinus)', ['rlFormat'] = 5},
['De Moribus Ecclesiae et de Moribus Manichaeorum'] = {['year'] = '388–389', ['rlTitle'] = 'De Moribus Ecclesiae et de Moribus Manichaeorum', ['rlFormat'] = 4},
['De Trinitate'] = {['year'] = '399–419', ['wLink'] = 'On the Trinity', ['rlTitle'] = 'De trinitate (Aurelius Augustinus)', ['rlFormat'] = 6},
['Retractationum'] = {['year'] = '426–427', ['rlTitle'] = 'Retractationum', ['rlFormat'] = 7},
['Sermones'] = {['rlTitle'] = 'Sermones (Aurelius Augustinus)', ['rlFormat'] = 8}
}
data['Aurelius Augustinus Hipponensis'].aliases = {
['Acad.'] = 'Contra academicos',
['Against the Academics'] = 'Contra academicos',
['C. D.'] = 'De civitate Dei',
['City of God'] = 'De civitate Dei',
['Civ. Dei'] = 'De civitate Dei',
['Confessions'] = 'Confessiones',
['De Doctr. Christ.'] = 'De doctrina Christiana',
['Ep.'] = 'Epistolae',
['Epistles'] = 'Epistolae',
['Epistulae'] = 'Epistolae',
['On Christian Doctrine'] = 'De doctrina Christiana',
['On Music'] = 'De musica',
['On the Morals of the Manichaeans'] = 'De Moribus Ecclesiae et de Moribus Manichaeorum',
['On the Trinity'] = 'De Trinitate',
['Mor. Manich.'] = 'De Moribus Ecclesiae et de Moribus Manichaeorum',
['Music.'] = 'De musica',
['Retract.'] = 'Retractationum',
['Retractations'] = 'Retractationum',
['Serm.'] = 'Sermones',
['Sermons'] = 'Sermones',
['Trin.'] = 'De Trinitate'
}
data['Aurelius Prudentius Clemens'] = {}
data['Aurelius Prudentius Clemens'].aLink = 'Prudentius'
data['Aurelius Prudentius Clemens'].year = '348 – c. 405-413 CE'
data['Aurelius Prudentius Clemens'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Aurelius Prudentius Clemens'].works = {
['Dittochæon'] = {['year'] = '4th century', ['rlTitle'] = 'Dittochæon', ['rlFormat'] = 1},
['Psychomachia'] = {['rlTitle'] = 'Psychomachia', ['rlFormat'] = 1}}
data['Aurelius Prudentius Clemens'].aliases = {['Dittochaeon'] = 'Dittochæon'}
data['Aurelius Victor'] = {}
data['Aurelius Victor'].aLink = 'Aurelius Victor'
data['Aurelius Victor'].year = 'c. 320–c. 390'
data['Aurelius Victor'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Aurelius Victor'].works = {['De Caesaribus'] = {['year'] = '358–360', ['rlTitle'] = 'Liber de Caesaribus', ['rlFormat'] = 1}}
data['Aurelius Victor'].aliases = {
['Caes.'] = 'De Caesaribus'
}
data['Ausonius'] = {}
data['Ausonius'].aLink = 'Ausonius'
data['Ausonius'].year = 'c. 310 – c. 394 CE'
data['Ausonius'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Ausonius'].works = {
['Mosella'] = {['year'] = 'c. 370 CE', ['rlTitle'] = 'Mosella', ['rlFormat'] = 1},
['Epigrammata Ausonii de diversis rebus'] = {['rlTitle'] = 'Epigrammata Ausonii de diversis rebus', ['rlFormat'] = 1},
['Epistulae'] = {},
['Cupido cruciatur'] = {['rlTitle'] = 'Cupido cruciatur', ['rlFormat'] = 1}
}
data['Ausonius'].aliases = {
['Caes.'] = 'De Caesaribus',
['Ep.'] = 'Epistulae',
['Epigr.'] = 'Epigrammata Ausonii de diversis rebus',
['Mos.'] = 'Mosella',
}
data['Aulus Gellius'] = {}
data['Aulus Gellius'].aLink = 'Aulus Gellius'
data['Aulus Gellius'].year = 'c. 125 - c. 180 CE'
data['Aulus Gellius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Aulus Gellius'].works = {['Noctes Atticae'] = {['year'] = 'c. 177', ['wLink'] = 'Noctes Atticae', ['rlTitle'] = 'Noctes Atticae', ['rlFormat'] = 1}}
data['Aulus Gellius'].aliases = {
[false] = 'Noctes Atticae',
['Attic Nights'] = 'Noctes Atticae',
['Attic nights'] = 'Noctes Atticae'
}
data['Avianus'] = {}
data['Avianus'].aLink = 'Avianus'
data['Avianus'].year = 'c. 400'
data['Avianus'].works = {['Fabulae'] = {['year'] = 'c. 400', ['rlTitle'] = 'Fabulae (Avianus)', ['rlFormat'] = 1}}
data['Baldus de Ubaldis'] = {}
data['Baldus de Ubaldis'].aLink = 'Baldus de Ubaldis'
data['Baldus de Ubaldis'].year = '1327-1400'
data['Beda Presbyter'] = {}
data['Beda Presbyter'].aLink = 'Bede'
data['Beda Presbyter'].year = '672–735'
data['Beda Presbyter'].rlFormat1 = {'s:la:', '.rlTitle', '/', '.ref1', '#', '.ref2'}
data['Beda Presbyter'].xrlFormat1 = {'https://archive.org/details/grammaticilatini07keil/page/', '.ref1', '/mode/1up'}
data['Beda Presbyter'].works = {
['De tabernaculo'] = {['year'] = 'a. 729'},
['Historia ecclesiastica'] = {['year'] = 'c. 731', ['wLink'] = 'Ecclesiastical History of the English People', ['rlTitle'] = 'Historia Ecclesiastica gentis Anglorum', ['rlFormat'] = 1},
['Liber de arte metrica'] = {['year'] = 'c. 701', ['xrlFormat'] = 1}}
data['Beda Presbyter'].aliases = {
['AM'] = 'Liber de arte metrica',
['Ecclesiastical History of the English People'] = 'Historia ecclesiastica gentis Anglorum',
['HE'] = 'Historia ecclesiastica',
['Historia ecclesiastica gentis Anglorum'] = 'Historia ecclesiastica',
['Tab.'] = 'De tabernaculo'
}
data['Bernardus Silvestris'] = {}
data['Bernardus Silvestris'].aLink = 'Bernardus Silvestris'
data['Bernardus Silvestris'].year = '12th century'
data['Bernardus Silvestris'].xrlFormat1 = {'https://archive.org/details/commentumquoddic0000unse/page/', '.ref1', '/mode/1up'}
data['Bernardus Silvestris'].works = {['Commentum super sex libros Eneidos Virgilii'] = {['wLink'] = 'd:Q131129779', ['xrlFormat'] = 1}}
data['Bernardus Silvestris'].aliases = {['Comm. Aen.'] = 'Commentum super sex libros Eneidos Virgilii'}
data['Boethius'] = {}
data['Boethius'].aLink = 'Boethius'
data['Boethius'].year = 'c. 480 – 524 CE'
data['Boethius'].works = {
['Quomodo substantiae'] = {}
}
data['Caelius Aurelianus'] = {}
data['Caelius Aurelianus'].aLink = 'Caelius Aurelianus'
data['Caelius Aurelianus'].year = 'c. 420'
data['Caelius Aurelianus'].works = {
['Acutae passiones'] = {},
['Tardae passiones'] = {}}
data['Caelius Aurelianus'].aliases = {
['Acut.'] = 'Acutae passiones',
['Tard.'] = 'Tardae passiones'
}
data['Calpurnius Siculus'] = {}
data['Calpurnius Siculus'].aLink = 'Titus Calpurnius Siculus'
data['Calpurnius Siculus'].works = {
['Bucolics'] = {},
}
data['Cassiodorus'] = {}
data['Cassiodorus'].aLink = 'Cassiodorus'
data['Cassiodorus'].year = 'c. 485–c. 585'
data['Cassiodorus'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Cassiodorus'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Cassiodorus'].rlFormat3 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Cassiodorus'].rlFormat4 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Cassiodorus'].rlFormat5 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Cassiodorus'].works = {
['Chronicon'] = {['year'] = 'c. 519', ['rlTitle'] = 'Chronica', ['rlFormat'] = 1},
['Complexiones'] = {['year'] = 'c. 540', ['rlTitle'] = 'Complexiones (Cassiodorus)', ['rlFormat'] = 2},
['De anima'] = {['year'] = '540', ['rlTitle'] = 'De anima', ['rlFormat'] = 3},
['Gothorum historia'] = {['year'] = '526–533'},
['Historia ecclesiastica'] = {['year'] = 'c. 550'},
['Institutio divinarum litterarum'] = {['year'] = '543–555', ['rlTitle'] = 'Institutiones (Cassiodorus)', ['rlFormat'] = 4},
['Variarum libri XII'] = {['year'] = '507–537', ['rlTitle'] = 'Variarum libri XII', ['rlFormat'] = 5}}
data['Cassiodorus'].aliases = {
['Chron.'] = 'Chronicon',
['Complex.'] = 'Complexiones',
['De Anim.'] = 'De anima',
['Hist.'] = 'Gothorum historia',
['Hist. Eccl.'] = 'Historia ecclesiastica',
['Inst. Div. Litt.'] = 'Institutio divinarum litterarum',
['Var.'] = 'Variarum libri XII'
}
data['Marcus Porcius Cato'] = {}
data['Marcus Porcius Cato'].aLink = 'Cato the Elder'
data['Marcus Porcius Cato'].year = '234–149 BC'
data['Marcus Porcius Cato'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Marcus Porcius Cato'].works = {['De agri cultura'] = {['wLink'] = 'De agri cultura', ['rlTitle'] = 'De agri cultura', ['rlFormat'] = 1}}
data['Marcus Porcius Cato'].aliases = {
[false] = 'De agri cultura',
['De Agri Cultura'] = 'De agri cultura',
['De Agricultura'] = 'De agri cultura',
['De agricultura'] = 'De agri cultura',
['De re rustica'] = 'De agri cultura',
['De Re Rustica'] = 'De agri cultura',
['R. R.'] = 'De agri cultura'
}
data['Catullus'] = {}
data['Catullus'].aLink = 'Catullus'
data['Catullus'].year = 'c. 84 - 54 BC'
data['Catullus'].rlFormat1 = {'s:la:', '.rlTitle', '/Carmen ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Catullus'].works = {['Carmina'] = {['rlTitle'] = 'Carmina (Catullus, ed. Merrill)', ['rlFormat'] = 1}}
data['Catullus'].aliases = {
[false] = 'Carmina',
['Poems'] = 'Carmina'
}
data['Celio Calcagnini'] = {}
data['Celio Calcagnini'].aLink = 'Celio Calcagnini'
data['Celio Calcagnini'].year = '1479 - 1541 CE'
data['Celio Calcagnini'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Celio Calcagnini'].works = {['Epitoma'] = {['rlTitle'] = 'Super Prometheo et Epimetheo epitoma', ['year'] = 'c. 1500', ['rlFormat'] = 1}
}
data['Claudius Claudianus'] = {}
data['Claudius Claudianus'].aLink = 'Claudian'
data['Claudius Claudianus'].year = 'c. 370 – 404'
data['Claudius Claudianus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Claudius Claudianus'].works = {
['Panegyricus de consulatu Probini et Olybrii'] = {['year'] = '395', ['rlTitle'] = 'Panegyricus de consulatu Probini et Olybrii'},
['De raptu Proserpinae'] = {['year'] = 'c. 395', ['rlTitle'] = 'De raptu Proserpinae'},
['Panegyricus de tertio consulatu Honorii Augusti'] = {['year'] = 396, ['rlTitle'] = 'Panegyricus de tertio consulatu Honorii Augusti'},
['In Rufinum'] = {['year'] = '397', ['rlTitle'] = 'In Rufinum'},
['Panegyricus de quarto consulatu Honorii Augusti'] = {['year'] = '398', ['rlTitle'] = 'Panegyricus de quarto consulatu Honorii Augusti'},
['In Gildonem'] = {['year'] = '398', ['rlTitle'] = 'In Gildonem'},
['Fescennina'] = {['year'] = '398', ['rlTitle'] = 'Fescennina'},
['Epithalamium'] = {['year'] = '398', ['rlTitle'] = 'Epithalamium'},
['In Eutropium'] = {['year'] = '399', ['rlTitle'] = 'In Eutropium'},
['Panegyricus de consulatu Flavii Manlii Theodori'] = {['year'] = '399', ['rlTitle'] = 'Panegyricus dictus Mallio Theodoro consuli'},
['De consulatu Stilichonis'] = {['year'] = '400', ['rlTitle'] = 'De consulatu Stilichonis', ['rlFormat'] = 1},
['De bello Gothico'] = {['year'] = '402', ['rlTitle'] = 'De bello Pollentino sive Gothico'},
['Panegyricus de sexto consulatu Honorii Augusti'] = {['year'] = '404', ['rlTitle'] = 'Panegyricus de sexto consulatu Honorii Augusti'},
['Carmina minora'] = {}}
data['Claudius Claudianus'].aliases = {
['Against Rufinus'] = 'In Rufinum',
['On the Gildonic War'] = 'In Gildonem',
['De bello Gildonico'] = 'In Gildonem',
['Epithalamium de Nuptiis Honorii Augusti'] = 'Fescennina',
['Laud. Stil.'] = 'De consulatu Stilichonis',
['De Laudibus Stilichonis'] = 'De consulatu Stilichonis',
['De bello Pollentino'] = 'De bello Gothico',
['On the Gothic War'] = 'De bello Gothico',
['B. Get.'] = 'De bello Getico',
['Bell. Get.'] = 'De bello Getico',
['De bello Getico'] = 'De bello Gothico',
['B. Gild.'] = 'In Gildonem',
['Bell. Gild.'] = 'In Gildonem',
['Cons. Mall. Theod.'] = 'Panegyricus de Consulatu Flavii Manlii Theodori',
['Cons. Olyb. et Prob.'] = 'Panegyricus de consulatu Probini et Olybrii',
['Cons. Stil.'] = 'De Consulatu Stilichonis',
['III. Cons. Hon.'] = 'Panegyricus de tertio consulatu Honorii Augusti',
['De Tertio Consulatu Honorii'] = 'Panegyricus de tertio consulatu Honorii Augusti',
['IV. Cons. Hon.'] = 'Panegyricus de quarto consulatu Honorii Augusti',
['De Quarto Consulatu Honorii'] = 'Panegyricus de quarto consulatu Honorii Augusti',
['VI. Cons. Hon.'] = 'Panegyricus de sexto consulatu Honorii Augusti',
['De Sexto Consulatu Honorii'] = 'Panegyricus de sexto consulatu Honorii Augusti',
['Epith.'] = 'Epithalamium',
['in Eutr.'] = 'In Eutropium',
['In Eutr.'] = 'In Eutropium',
['in Eutropium'] = 'In Eutropium',
['in Rufin.'] = 'In Rufinum',
['In Rufin.'] = 'In Rufinum',
['Laud. Ser.'] = 'De Laudibus Serenae Reginae',
['Nupt. Hon. et Mar.'] = 'De Nuptiis Honorii et Mariae',
['Rapt. Pros.'] = 'De Raptu Proserpinae'
}
data['Aulus Cornelius Celsus'] = {
aLink = 'Aulus Cornelius Celsus',
year = 'c. 25 BC – c. 50 CE',
rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#Caput ', {'.numToRoman', '.ref2'}, '#', '.ref3'},
works = {['De medicina'] = {['wLink'] = 'De Medicina', ['rlTitle'] = 'De medicina (Celsus)', ['rlFormat'] = 1}},
aliases = {
[false] = 'De medicina'
},
}
data['Flavius Sosipater Charisius'] = {}
data['Flavius Sosipater Charisius'].aLink ='Charisius'
data['Flavius Sosipater Charisius'].year = 'c. AD 375'
data['Flavius Sosipater Charisius'].xrlFormat1 = {'https://archive.org/details/grammaticilatini01keil/page/', '.ref1', '/mode/1up'}
data['Flavius Sosipater Charisius'].works = {['Artis Grammaticae libri V.'] = {['xrlFormat'] = 1}}
data['Flavius Sosipater Charisius'].aliases = {
[false] = 'Artis Grammaticae libri V.'
}
data['Charles IV'] = {}
data['Charles IV'].aLink = 'Charles IV, Holy Roman Emperor'
data['Charles IV'].year = '1316-1378 CE'
data['Charles IV'].rlFormat1 = {'s:la:', '.rlTitle', "/", ".ref1"}
data['Charles IV'].works = {['Vita Caroli IV'] = {['rlTitle'] = 'Vita Caroli IV', ['year'] = '1350 CE', ['rlFormat'] = 1}}
data['Chiron Centaurus'] = {}
data['Chiron Centaurus'].aLink = 'Mulomedicina Chironis#Author'
data['Chiron Centaurus'].year = '4th-century CE'
data['Chiron Centaurus'].rlFormat1 = {'s:la:', '.rlTitle', "/", ".ref1"}
data['Chiron Centaurus'].works = {['Mulomedicina Chironis'] = {['rlTitle'] = 'Mulomedicina Chironis', ['year'] = '4th-century CE', ['rlFormat'] = 1}}
data['Cicero'] = {}
data['Cicero'].aLink = 'Cicero'
data['Cicero'].year = '106–43 BC'
data['Cicero'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Cicero'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Cicero'].rlFormat3 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Cicero'].rlFormat4 = {'s:la:', '.rlTitle'}
data['Cicero'].rlFormat5 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Cicero'].rlFormat6 = {'s:la:', '.rlTitle', '/Oratio ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Cicero'].rlFormat7 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Cicero'].rlFormat8 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}}
data['Cicero'].rlFormat9 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman','.ref1'}, '#', '.ref2'}
data['Cicero'].rlFormat12 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Cicero'].rlFormat13 = {'s:la:', '.rlTitle', '/Actio ', {'.numToRoman', '.ref1'}, '/Liber ', {'.numToRoman', '.ref2'}, '#', '.ref3'}
data['Cicero'].rlFormat16 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', {'.lower', {'.numToRoman', '.ref3'}}}
data['Cicero'].works = {
['Academica'] = {['year'] = '45 BCE', ['wLink'] = 'Academica (Cicero)', ['rlTitle'] = 'Academica priora', ['rlFormat'] = 2},
['Aratus'] = {['year'] = 'c. 89 BCE'},
['Brutus'] = {['year'] = '46 BC', ['wLink'] = 'Brutus (Cicero)', ['rlTitle'] = 'Brutus', ['rlFormat'] = 2},
['In Catilinam orationes'] = {['year'] = '63 BC', ['wLink'] = 'Catilinarian orations', ['rlTitle'] = 'In L. Catilinam orationes', ['rlFormat'] = 6},
['Cato maior de senectute'] = {['year'] = '44 BCE', ['wLink'] = 'Cato Maior de Senectute', ['rlTitle'] = 'Cato maior de senectute', ['rlFormat'] = 2},
['De divinatione'] = {['year'] = '44 BC', ['wLink'] = 'De Divinatione', ['rlTitle'] = 'De divinatione', ['rlFormat'] = 5},
['De domo sua'] = {['year'] = '57 BC', ['rlTitle'] = 'Pro domo sua', ['rlFormat'] = 2},
['De fato'] = {['year'] = '45 BC', ['wLink'] = 'De fato', ['rlTitle'] = 'De fato (Marcus Tullius Cicero)', ['rlFormat'] = 2},
['De finibus bonorum et malorum'] = {['year'] = '45 BC', ['rlTitle'] = 'De finibus bonorum et malorum', ['wLink'] = 'De finibus bonorum et malorum', ['rlFormat'] = 7},
['De haruspicum responsis'] = {['year'] = '57 BC', ['rlTitle'] = 'De haruspicum responsis', ['rlFormat'] = 2},
['De imperio Pompei'] = {['year'] = '66 BC', ['wLink'] = 'De Imperio Cn. Pompei', ['rlTitle'] = 'De imperio Cn. Pompei ad Quirites', ['rlFormat'] = 2},
['De inventione'] = {['year'] = '84 BC', ['wLink'] = 'De Inventione', ['rlTitle'] = 'De inventione', ['rlFormat'] = 7},
['De lege agraria'] = {['year'] = '63 BC', ['rlTitle'] = 'De lege agraria (Contra Rullum)', ['rlFormat'] = 8},
['De legibus'] = {['year'] = '52–51 BCE', ['wLink'] = 'De Legibus', ['rlTitle'] = 'De legibus', ['rlFormat'] = 9},
['De natura deorum'] = {['year'] = '45 BC', ['wLink'] = 'De Natura Deorum', ['rlTitle'] = 'De natura deorum', ['rlFormat'] = 7},
['De officiis'] = {['year'] = '44 BC', ['wLink'] = 'De Officiis', ['rlTitle'] = 'De officiis', ['rlFormat'] = 7},
['De optimo genere oratorum'] = {['year'] = '52 BC', ['wLink'] = 'De Optimo Genere Oratorum', ['rlTitle'] = 'De optimo genere oratorum', ['rlFormat'] = 2},
['De oratore'] = {['year'] = '55 BC', ['wLink'] = 'De Oratore', ['rlTitle'] = 'De oratore', ['rlFormat'] = 7},
['De partitione oratoria'] = {['year'] = '54 BC', ['wLink'] = 'A Dialogue Concerning Oratorical Partitions', ['rlTitle'] = 'De partitione oratoria', ['rlFormat'] = 2},
['De provinciis consularibus'] = {['year'] = '56 BC', ['rlTitle'] = 'De provinciis consularibus', ['rlFormat'] = 1},
['De re publica'] = {['year'] = '54 - 51 BC', ['wLink'] = 'De re publica', ['rlTitle'] = 'De re publica', ['rlFormat'] = 7},
['Divinatio in Caecilium'] = {['year'] = '70 BCE', ['wLink'] = 'Divinatio in Caecilium'},
['Epistulae ad Atticum'] = {['year'] = '68–44 BCE', ['rlTitle'] = 'Epistulae (Marcus Tullius Cicero)/Epistulae ad Atticum', ['wLink'] = 'Epistulae ad Atticum', ['rlFormat'] = 3},
['Epistulae ad Brutum'] = {['year'] = '43 BCE', ['rlTitle'] = 'Epistulae (Marcus Tullius Cicero)/Epistulae ad Brutum', ['wLink'] = 'Epistulae ad Brutum', ['rlFormat'] = 8},
['Epistulae ad familiares'] = {['year'] = '62–43 BC', ['rlTitle'] = 'Epistulae (Marcus Tullius Cicero)/Epistulae ad familiares', ['wLink'] = 'Epistulae ad Familiares', ['rlFormat'] = 3},
['Epistulae ad Quintum fratrem'] = {['year'] = 'c. 60–54 BCE', ['rlTitle'] = 'Epistulae (Marcus Tullius Cicero)/Epistulae ad Quintum fratrem', ['wLink'] = 'Epistulae ad Quintum Fratrem', ['rlFormat'] = 16},
['In Pisonem'] = {['year'] = '55 BC', ['rlTitle'] = 'In L. Calpurnium Pisonem', ['rlFormat'] = 12},
['In toga candida'] = {['year'] = '64 BC', ['wLink'] = 'In toga candida'},
['In Vatinium'] = {['year'] = '56 BC', ['rlTitle'] = 'In P. Vatinium testem interrogatio', ['rlFormat'] = 12},
['In Verrem'] = {['year'] = '70 BC', ['wLink'] = 'In Verrem', ['rlTitle'] = 'In Verrem', ['rlFormat'] = 13},
['Laelius de amicitia'] = {['year'] = '44 BC', ['wLink'] = 'Laelius de Amicitia', ['rlTitle'] = 'Laelius de amicitia', ['rlFormat'] = 2},
['Orator'] = {['year'] = '46 BC', ['wLink'] = 'Orator (Cicero)', ['rlTitle'] = 'Orator', ['rlFormat'] = 2},
['Paradoxa Stoicorum'] = {['year'] = '46 BC', ['wLink'] = 'Paradoxa Stoicorum', ['rlTitle'] = 'Paradoxa Stoicorum', ['rlFormat'] = 2},
['Philippicae'] = {['year'] = '44-43 BC', ['wLink'] = 'Philippicae', ['rlTitle'] = 'In M. Antonium Philippicae', ['rlFormat'] = 6},
['Post reditum ad Quirites'] = {['year'] = '57 BC', ['rlTitle'] = 'Post reditum ad Quirites', ['rlFormat'] = 2},
['Post reditum in senatu'] = {['year'] = '57 BC', ['rlTitle'] = 'Post reditum in senatu', ['rlFormat'] = 2},
['Pro Aemilio Scauro'] = {['year'] = '54 BC', ['rlTitle'] = 'Pro Aemilio Scauro', ['rlFormat'] = 2},
['Pro Archia poeta'] = {['year'] = '62 BC', ['wLink'] = 'Pro Archia Poeta', ['rlTitle'] = 'Pro A. Licinio Archia poeta', ['rlFormat'] = 2},
['Pro Balbo'] = {['year'] = '56 BC', ['rlTitle'] = 'Pro Cornelio Balbo', ['rlFormat'] = 2},
['Pro Caecina'] = {['year'] = '69 BC', ['wLink'] = 'Pro Caecina', ['rlTitle'] = 'Pro Aulo Caecina', ['rlFormat'] = 2},
['Pro Caelio'] = {['year'] = '56 BC', ['wLink'] = 'Pro Caelio', ['rlTitle'] = 'Pro Marco Caelio', ['rlFormat'] = 2},
['Pro Cluentio'] = {['year'] = '66 BC', ['wLink'] = 'Pro Cluentio', ['rlTitle'] = 'Pro Aulo Cluentio Habito', ['rlFormat'] = 12},
['Pro Flacco'] = {['year'] = '59 BC', ['rlTitle'] = 'Pro L. Valerio Flacco', ['rlFormat'] = 2},
['Pro Fonteio'] = {['year'] = '69 BC', ['rlTitle'] = 'Pro Marco Fonteio', ['rlFormat'] = 2},
['Pro Ligario'] = {['year'] = '46 BC', ['rlTitle'] = 'Pro Ligario', ['rlFormat'] = 2},
['Pro Marcello'] = {['year'] = '46 BC', ['wLink'] = 'Pro Marcello', ['rlTitle'] = 'Pro Marcello', ['rlFormat'] = 2},
['Pro Milone'] = {['year'] = '52 BC', ['wLink'] = 'Pro Milone', ['rlTitle'] = 'Pro Milone', ['rlFormat'] = 12},
['Pro Murena'] = {['year'] = '63 BC', ['rlTitle'] = 'Pro Lucio Murena', ['rlFormat'] = 2},
['Pro Plancio'] = {['year'] = '54 BC', ['rlTitle'] = 'Pro Cn. Plancio', ['rlFormat'] = 12},
['Pro rege Deiotaro'] = {['year'] = '46 BC', ['rlTitle'] = 'Pro rege Deiotaro', ['rlFormat'] = 2},
['Pro Quinctio'] = {['year'] = '81 BC', ['wLink'] = 'Pro Quinctio', ['rlTitle'] = 'Pro Publio Quinctio', ['rlFormat'] = 1},
['Pro Rabirio perduellonis reo'] = {['year'] = '63 BC', ['rlTitle'] = 'Pro C. Rabirio perduellionis reo ad Quirites', ['rlFormat'] = 2},
['Pro Rabirio Postumo'] = {['year'] = '54 BC', ['rlTitle'] = 'Pro C. Rabirio Postumo', ['rlFormat'] = 1},
['Pro Roscio Amerino'] = {['year'] = '80 BC', ['wLink'] = 'Pro Roscio Amerino', ['rlTitle'] = 'Pro Sexto Roscio Amerino', ['rlFormat'] = 2},
['Pro Roscio comoedo'] = {['year'] = '77 BC', ['rlTitle'] = 'Pro Quinto Roscio comoedo', ['rlFormat'] = 2},
['Pro Sestio'] = {['year'] = '56 BC', ['rlTitle'] = 'Pro Sestio', ['rlFormat'] = 2},
['Pro Sulla'] = {['year'] = '62 BC', ['rlTitle'] = 'Pro P. Sulla', ['rlFormat'] = 2},
['Pro Tullio'] = {['year'] = '71 BC', ['wLink'] = 'Pro Tullio', ['rlTitle'] = 'Pro Marco Tullio', ['rlFormat'] = 2},
['Topica'] = {['year'] = '44 BC', ['rlTitle'] = 'Topica (Marcus Tullius Cicero)', ['rlFormat'] = 2},
['Tusculanae disputationes'] = {['year'] = '45 BC', ['wLink'] = 'Tusculanae disputationes', ['rlTitle'] = 'Tusculanae disputationes', ['rlFormat'] = 7}}
data['Cicero'].aliases = {
['Ac.'] = 'Academica', ['Acad.'] = 'Academica',
['ad Brut.'] = 'Epistulae ad Brutum',
['ad Brutum'] = 'Epistulae ad Brutum',
['Aem. Scaur.'] = 'Pro Aemilio Scauro', ['For Aemilius Scaurus'] = 'Pro Aemilio Scauro',
['Against Verres'] = 'In Verrem',
['Agr.'] = 'De lege agraria',
['Am.'] = 'Laelius de amicitia',
['Arat.'] = 'Aratus',
['Arch.'] = 'Pro Archia poeta',
['ad Att.'] = 'Epistulae ad Atticum',
['ad Atticum'] = 'Epistulae ad Atticum',
['Att.'] = 'Epistulae ad Atticum',
['Balb.'] = 'Pro Balbo',
['For Balbus'] = 'Pro Balbo',
['Brut.'] = 'Epistulae ad Brutum',
['Caecin.'] = 'Pro Caecina',
['For Caecina'] = 'Pro Caecina',
['Cael.'] = 'Pro Caelio',
['For Caelius'] = 'Pro Caelio',
['Cat.'] = 'In Catilinam orationes',
['Catiline'] = 'In Catilinam orationes',
['Catiline orations'] = 'In Catilinam orationes',
['Catiline Orations'] = 'In Catilinam orationes',
['Catilinarian orations'] = 'In Catilinam orationes',
['Catilinarian Orations'] = 'In Catilinam orationes',
['Cat. M.'] = 'Cato maior de senectute',
['Cato Major'] = 'Cato maior de senectute',
['Clu.'] = 'Pro Cluentio',
['Deiot.'] = 'Pro rege Deiotaro',
['De Amicitia'] = 'Laelius de amicitia',
['De amicitia'] = 'Laelius de amicitia',
['De Divinatione'] = 'De divinatione',
['De Of.'] = 'De officiis',
['De of.'] = 'De officiis',
['De Officiis'] = 'De officiis',
['De Or.'] = 'De oratore',
['De or.'] = 'De oratore',
['de Or.'] = 'De oratore',
['De Oratore'] = 'De oratore',
['De Finibus'] = 'De finibus bonorum et malorum',
['De Haruspicum Responsis'] = 'De haruspicum responsis',
['De Haruspicum Responso'] = 'De haruspicum responsis',
['De senectute'] = 'Cato maior de senectute',
['Div.'] = 'De divinatione',
['Div. in Caecil.'] = 'Divinatio in Caecilium',
['Dom.'] = 'De domo sua',
['Epistulae ad Quintum Fratrem'] = 'Epistulae ad Quintum fratrem',
['Epistulae ad Familiares'] = 'Epistulae ad familiares',
['Fam.'] = 'Epistulae ad familiares',
['Fat.'] = 'De fato',
['Fin.'] = 'De finibus bonorum et malorum',
['Fl.'] = 'Pro Flacco', ['Flac.'] = 'Pro Flacco',
['Font.'] = 'Pro Fonteio', ['Fontei.'] = 'Pro Fonteio',
['Har. Resp.'] = 'De haruspicum responsis',
['Imp. Pomp.'] = 'De imperio Pompei',
['Inv.'] = 'De inventione',
['Lael.'] = 'Laelius de amicitia',
['Leg.'] = 'De legibus',
['Letters to Atticus'] = 'Epistulae ad Atticum',
['Letters to Friends'] = 'Epistulae ad familiares',
['Letters to friends'] = 'Epistulae ad familiares',
['Lig.'] = 'Pro Ligario',
['For Ligarius'] = 'Pro Ligario',
['Manil.'] = 'De imperio Pompei',
['Marcell.'] = 'Pro Marcello',
['Mil.'] = 'Pro Milone',
['For Milo'] = 'Pro Milone',
['Mur.'] = 'Pro Murena',
['For Murena'] = 'Pro Murena',
['N. D.'] = 'De natura deorum',
['De Natura Deorum'] = 'De natura deorum',
['Off.'] = 'De officiis',
['On Friendship'] = 'Laelius de amicitia',
['Opt. Gen.'] = 'De optimo genere oratorum',
['Or.'] = 'Orator',
['Par.'] = 'Paradoxa Stoicorum', ['Parad.'] = 'Paradoxa Stoicorum',
['Part. Or.'] = 'De partitione oratoria',
['Phil.'] = 'Philippicae',
['Pis.'] = 'In Pisonem',
['Planc.'] = 'Pro Plancio',
['For Plancius'] = 'Pro Plancio',
['Prov. Cons.'] = 'De provinciis consularibus',
['Q.'] = 'Epistulae ad Quintum fratrem', ['Q. Fr.'] = 'Epistulae ad Quintum fratrem',
['Quinct.'] = 'Pro Quinctio', ['Quint.'] = 'Pro Quinctio',
['Rab. Perd.'] = 'Pro Rabirio perduellonis reo',
['Rab. Post.'] = 'Pro Rabirio Postumo',
['Red. Quir.'] = 'Post reditum ad Quirites',
['Red. in Sen.'] = 'Post reditum in senatu',
['Rep.'] = 'De re publica',
['De Re Publica'] = 'De re publica',
['Rosc. Am.'] = 'Pro Roscio Amerino',
['Rosc. Com.'] = 'Pro Roscio comoedo',
['Scaur.'] = 'Pro Aemilio Scauro',
['Sen.'] = 'Cato maior de senectute',
['Sest.'] = 'Pro Sestio', ['Sext.'] = 'Pro Sestio',
['Sull.'] = 'Pro Sulla',
['Tog. Cand.'] = 'In toga candida',
['Top.'] = 'Topica',
['Tull.'] = 'Pro Tullio',
['For Tullius'] = 'Pro Tullio',
['Tusc.'] = 'Tusculanae disputationes',
['Tusculan Disputations'] = 'Tusculanae disputationes',
['Tusculanes'] = 'Tusculanae disputationes',
['Vatin.'] = 'In Vatinium',
['Verr.'] = 'In Verrem',
}
data['Claudian'] = {}
data['Claudian'].aLink = 'Claudian'
data['Claudian'].year = 'c. 370 - 404 CE'
data['Claudian'].works = {['Panegyricus de Sexto Consulatu Honorii'] = {}}
data['Columella'] = {}
data['Columella'].aLink = 'Columella'
data['Columella'].year = '4 AD – c. 70 CE'
data['Columella'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#','.ref2', '.period'}
data['Columella'].works = {['De re rustica'] = {['rlTitle'] = 'De re rustica', ['rlFormat'] = 1}}
data['Columella'].aliases = {
[false] = 'De re rustica',
['De Agricultura'] = 'De re rustica',
['De agricultura'] = 'De re rustica',
['De Re Rustica'] = 'De re rustica'
}
data['Cornelius Nepos'] = {}
data['Cornelius Nepos'].aLink = 'Cornelius Nepos'
data['Cornelius Nepos'].year = 'c. 110 BCE–c. 25 BCE'
data['Cornelius Nepos'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Cornelius Nepos'].works = {
['De viris illustribus I. Miltiades'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Miltiades', ['rlFormat'] = 1},
['De viris illustribus II. Themistocles'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Themistocles', ['rlFormat'] = 1},
['De viris illustribus III. Aristides'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Aristides', ['rlFormat'] = 1},
['De viris illustribus IV. Pausanias'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Pausanias', ['rlFormat'] = 1},
['De viris illustribus V. Cimon'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Cimon', ['rlFormat'] = 1},
['De viris illustribus VI. Lysander'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Lysander', ['rlFormat'] = 1},
['De viris illustribus VII. Alcibiades'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Alcibiades', ['rlFormat'] = 1},
['De viris illustribus VIII. Thrasybulus'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Thrasybulus', ['rlFormat'] = 1},
['De viris illustribus IX. Conon'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Conon', ['rlFormat'] = 1},
['De viris illustribus X. Dion'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Dion', ['rlFormat'] = 1},
['De viris illustribus XI. Iphicrates'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Iphicrates', ['rlFormat'] = 1},
['De viris illustribus XII. Chabrias'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Chabrias', ['rlFormat'] = 1},
['De viris illustribus XIII. Timotheus'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Timotheus', ['rlFormat'] = 1},
['De viris illustribus XIV. Datames'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Datames', ['rlFormat'] = 1},
['De viris illustribus XV. Epaminondas'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Epaminondas', ['rlFormat'] = 1},
['De viris illustribus XVI. Pelopidas'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Pelopidas', ['rlFormat'] = 1},
['De viris illustribus XVII. Agesilaus'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Agesilaus', ['rlFormat'] = 1},
['De viris illustribus XVIII. Eumenes'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Eumenes', ['rlFormat'] = 1},
['De viris illustribus XIX. Phocion'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Phocion', ['rlFormat'] = 1},
['De viris illustribus XX. Timoleon'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Timoleon', ['rlFormat'] = 1},
['De viris illustribus XXI. Reges'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Reges', ['rlFormat'] = 1},
['De viris illustribus XXII. Hamilcar'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Hamilcar', ['rlFormat'] = 1},
['De viris illustribus XXIII. Hannibal'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de excellentibus ducibus exterarum gentium/Hannibal', ['rlFormat'] = 1},
['De viris illustribus XXIV. Cato'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de Latinis historicis/M. Cato', ['rlFormat'] = 1},
['De viris illustribus XXV. Atticus'] = {['rlTitle'] = 'De viris illustribus (Cornelius Nepos)/Liber de Latinis historicis/Atticus', ['rlFormat'] = 1},
}
data['Cornelius Nepos'].aliases = {
['Ages.'] = 'De viris illustribus XVII. Agesilaus',
['Agesilaus'] = 'De viris illustribus XVII. Agesilaus',
['Alcib.'] = 'De viris illustribus VII. Alcibiades',
['Alcibiades'] = 'De viris illustribus VII. Alcibiades',
['Arist.'] = 'De viris illustribus III. Aristides',
['Aristides'] = 'De viris illustribus III. Aristides',
['Att.'] = 'De viris illustribus XXV. Atticus',
['Atticus'] = 'De viris illustribus XXV. Atticus',
['Cat.'] = 'De viris illustribus XXIV. Cato',
['Cato'] = 'De viris illustribus XXIV. Cato',
['Chabr.'] = 'De viris illustribus XII. Chabrias',
['Chabrias'] = 'De viris illustribus XII. Chabrias',
['Cim.'] = 'De viris illustribus V. Cimon',
['Cimon'] = 'De viris illustribus V. Cimon',
['Con.'] = 'De viris illustribus IX. Conon',
['Conon'] = 'De viris illustribus IX. Conon',
['Dat.'] = 'De viris illustribus XIV. Datames',
['Datames'] = 'De viris illustribus XIV. Datames',
['De Regibus'] = 'De viris illustribus XXI. Reges',
['De regibus'] = 'De viris illustribus XXI. Reges',
['Dion'] = 'De viris illustribus X. Dion',
['Epam.'] = 'De viris illustribus XV. Epaminondas',
['Epaminondas'] = 'De viris illustribus XV. Epaminondas',
['Eum.'] = 'De viris illustribus XVIII. Eumenes',
['Eumenes'] = 'De viris illustribus XVIII. Eumenes',
['Ham.'] = 'De viris illustribus XXII. Hamilcar',
['Hamilcar'] = 'De viris illustribus XXII. Hamilcar',
['Hann.'] = 'De viris illustribus XXIII. Hannibal',
['Hannibal'] = 'De viris illustribus XXIII. Hannibal',
['Iph.'] = 'De viris illustribus XI. Iphicrates',
['Iphicrates'] = 'De viris illustribus XI. Iphicrates',
['Lys.'] = 'De viris illustribus VI. Lysander',
['Lysander'] = 'De viris illustribus VI. Lysander',
['Milt.'] = 'De viris illustribus I. Miltiades',
['Miltiades'] = 'De viris illustribus I. Miltiades',
['Paus.'] = 'De viris illustribus IV. Pausanias',
['Pausanias'] = 'De viris illustribus IV. Pausanias',
['Pelop.'] = 'De viris illustribus XVI. Pelopidas',
['Pelopidas'] = 'De viris illustribus XVI. Pelopidas',
['Phoc.'] = 'De viris illustribus XIX. Phocion',
['Phocion'] = 'De viris illustribus XIX. Phocion',
['Reg.'] = 'De viris illustribus XXI. Reges',
['Reges'] = 'De viris illustribus XXI. Reges',
['Them.'] = 'De viris illustribus II. Themistocles',
['Themistocles'] = 'De viris illustribus II. Themistocles',
['Thras.'] = 'De viris illustribus VIII. Thrasybulus',
['Thrasybulus'] = 'De viris illustribus VIII. Thrasybulus',
['Tim.'] = 'De viris illustribus XX. Timoleon',
['Timol.'] = 'De viris illustribus XX. Timoleon',
['Timoleon'] = 'De viris illustribus XX. Timoleon',
['Timoth.'] = 'De viris illustribus XIII. Timotheus',
['Timotheus'] = 'De viris illustribus XIII. Timotheus',
['On the Eminent Commanders XVII. Agesilaus'] = 'De viris illustribus XVII. Agesilaus',
['On the Eminent Commanders VII. Alcibiades'] = 'De viris illustribus VII. Alcibiades',
['On the Eminent Commanders III. Aristides'] = 'De viris illustribus III. Aristides',
['On the Eminent Commanders XII. Chabrias'] = 'De viris illustribus XII. Chabrias',
['On the Eminent Commanders V. Cimon'] = 'De viris illustribus V. Cimon',
['On the Eminent Commanders IX. Conon'] = 'De viris illustribus IX. Conon',
['On the Eminent Commanders XIV. Datames'] = 'De viris illustribus XIV. Datames',
['On the Eminent Commanders X. Dion'] = 'De viris illustribus X. Dion',
['On the Eminent Commanders XV. Epaminondas'] = 'De viris illustribus XV. Epaminondas',
['On the Eminent Commanders XVIII. Eumenes'] = 'De viris illustribus XVIII. Eumenes',
['On the Eminent Commanders XXII. Hamilcar'] = 'De viris illustribus XXII. Hamilcar',
['On the Eminent Commanders XXIII. Hannibal'] = 'De viris illustribus XXIII. Hannibal',
['On the Eminent Commanders XI. Iphicrates'] = 'De viris illustribus XI. Iphicrates',
['On the Eminent Commanders VI. Lysander'] = 'De viris illustribus VI. Lysander',
['On the Eminent Commanders I. Miltiades'] = 'De viris illustribus I. Miltiades',
['On the Eminent Commanders IV. Pausanias'] = 'De viris illustribus IV. Pausanias',
['On the Eminent Commanders XVI. Pelopidas'] = 'De viris illustribus XVI. Pelopidas',
['On the Eminent Commanders XIX. Phocion'] = 'De viris illustribus XIX. Phocion',
['On the Eminent Commanders XXI. On Kings'] = 'De viris illustribus XXI. Reges',
['On the Eminent Commanders II. Themistocles'] = 'De viris illustribus II. Themistocles',
['On the Eminent Commanders VIII. Thrasybulus'] = 'De viris illustribus VIII. Thrasybulus',
['On the Eminent Commanders XX. Timoleon'] = 'De viris illustribus XX. Timoleon',
['On the Eminent Commanders XIII. Timotheus'] = 'De viris illustribus XIII. Timotheus',
['On the Latin Historians II. Atticus'] = 'De viris illustribus XXV. Atticus',
['On the Latin Historians I. Cato'] = 'De viris illustribus XXIV. Cato'
}
data['Diomedes Grammaticus'] = {}
data['Diomedes Grammaticus'].aLink = 'Diomedes Grammaticus'
data['Diomedes Grammaticus'].year = 'late 4th century CE'
data['Diomedes Grammaticus'].xrlFormat1 = {'https://archive.org/details/grammaticilatini01keil/page/', '.ref1', '/mode/1up'}
data['Diomedes Grammaticus'].works = {['Artis Grammaticae libri III'] = {['xrlFormat'] = 1}}
data['Diomedes Grammaticus'].aliases = {
[false] = 'Artis Grammaticae libri III'
}
data['Domitius Marsus'] = {}
data['Domitius Marsus'].aLink = 'Domitius Marsus'
data['Domitius Marsus'].works = {
['On the Death of Tibullus'] = {['rlTitle'] = 'On the Death of Tibullus', ['year'] = 'c. 19 BCE'},
}
data['Ennius'] = {}
data['Ennius'].aLink = 'Ennius'
data['Ennius'].year = '239 – 169 BCE'
data['Ennius'].rlFormat1 = {'s:la:', 'Annalium fragmenta', '#Liber ', {'.numToRoman', '.ref1'}}
data['Ennius'].works = {
['Achilles'] = {['rlTitle'] = 'Achilles', ['wLink'] = 'Achilles (Ennius)'},
['Andromacha'] = {['rlTitle'] = 'Andromacha', ['wLink'] = 'Andromacha'},
['Annales'] = {['rlTitle'] = 'Annalium fragmenta', ['wLink'] = 'Annales (Ennius)', ['rlFormat'] = 1},
['Ambracia'] = {['rlTitle'] = 'Ambracia', ['wLink'] = 'Ambracia (play)', ['year'] = '189 – 169 BCE', ['rlFormat'] = 1}
}
data['Ennius'].aliases = {
[false] = 'Annales'
}
data['Ennodius'] = {}
data['Ennodius'].aLink = 'Magnus Felix Ennodius'
data['Ennodius'].year = 'c. 494 – 521 CE'
data['Ennodius'].rlFormat1 = {'s:la:', 'Epistolae (Ennodius)'}
data['Ennodius'].works = {['Epistolae'] = {['rlFormat'] = 1}}
data['Erasmus'] = {}
data['Erasmus'].aLink = 'Erasmus'
data['Erasmus'].year = '1466–1536'
data['Erasmus'].rlFormat1 = {}
data['Erasmus'].works = {}
data['Eucheria'] = {}
data['Eucheria'].aLink = 'Eucheria'
data['Eucheria'].year = '5th-6th century CE'
data['Eucheria'].works = {
['Elegy'] = {['year'] = '5th-6th century CE', ['rlTitle'] = 'Elegy'}
}
data['Eutropius'] = {}
data['Eutropius'].aLink = 'Eutropius (historian)'
data['Eutropius'].year = 'c. 350 CE'
data['Eutropius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Eutropius'].works = {['Breviarium historiae romanae'] = {['rlTitle'] = 'Breviarium historiae romanae', ['year'] = 'c. 370', ['rlFormat'] = 1}}
data['Fabius Planciades Fulgentius'] = {}
data['Fabius Planciades Fulgentius'].aLink = 'Fabius Planciades Fulgentius'
data['Fabius Planciades Fulgentius'].year = '5th-6th c. CE'
data['Fabius Planciades Fulgentius'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Fabius Planciades Fulgentius'].works = {
['Expositio sermonum antiquorum'] = {['year'] = '5th c.', ['rlTitle'] = 'Expositio sermonum antiquorum', ['rlFormat'] = 1}
}
data['Finnur Jónsson'] = {}
data['Finnur Jónsson'].aLink = 'Finnur Jónsson'
data['Finnur Jónsson'].year = '1858-1934 CE'
data['Finnur Jónsson'].works = {['Historia Ecclesiastica Islandiæ'] = {['year'] = '1774'}}
data['Flavius Vopiscus'] = {}
data['Flavius Vopiscus'].year = 'c. 4th century CE'
data['Flavius Vopiscus'].rlFormat = {'s:la:', '.rlTitle', '/', '.ref1'}
data['Flavius Vopiscus'].works = {['Augustan History'] = {['wLink'] = 'Historia Augusta', ['rlTitle'] = 'Historia Augusta'}}
data['Flavius Vopiscus'].aliases = {
[false] = 'Augustan History',
['Historia Augusta'] = 'Augustan History'
}
data['Florus'] = {}
data['Florus'].year = 'c. 74-130 CE'
data['Florus'].aLink = 'Florus'
data['Florus'].rlFormat = {'s:la:','.rlTitle', '/Liber_', {'.lower', {'.convert', '.OrdinalNames', '.ref1'}}}
data['Florus'].works = {
['Flori Epitomae'] = {['wLink'] = 'Epitome of Roman History', ['alias'] = 'Epitome of Roman History', ['rlTitle'] = 'Flori Epitomae'}
}
data['Gaius'] = {}
data['Gaius'].aLink = 'Gaius (jurist)'
data['Gaius'].year = '130 - 180 CE'
data['Gaius'].works = {['Institutiones'] = {['year'] = 'c. 160'}}
data['Gaius Julius Caesar Strabo'] = {}
data['Gaius Julius Caesar Strabo'].aLink = 'Gaius Julius Caesar Strabo'
data['Gaius Julius Caesar Strabo'].year = 'c. 131 – 87 BCE'
data['Gaius Julius Caesar Strabo'].works = {
['Adrastus'] = {},
['Teuthras'] = {}
}
data['Gaius Julius Hyginus'] = {}
data['Gaius Julius Hyginus'].aLink = 'Gaius Julius Hyginus'
data['Gaius Julius Hyginus'].year = 'c. 64 BCE–17'
data['Gaius Julius Hyginus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Gaius Julius Hyginus'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Gaius Julius Hyginus'].works = {
['De astronomica'] = {['wLink'] = 'De Astronomica', ['rlTitle'] = 'De Astronomica', ['rlFormat'] = 1},
['Fabulae'] = {['rlTitle'] = 'Genealogiarum liber/Fabulae', ['rlFormat'] = 2}}
data['Gaius Julius Hyginus'].aliases = {
['Astr.'] = 'Astronomy',
['Astronomy'] = 'De astronomica',
['De Astronomica'] = 'De astronomica',
['Fab.'] = 'Fabulae'
}
data['Gaius Julius Victor'] = {}
data['Gaius Julius Victor'].aLink = 'Gaius Julius Victor'
data['Gaius Julius Victor'].year = 'AD 4th century'
data['Gaius Julius Victor'].xrlFormat1 = {'https://archive.org/details/rhetoreslatinimi00halm/page/', '.ref3', '/mode/1up'}
data['Gaius Julius Victor'].works = {
['Ars rhetorica Hermagorae, Ciceronis, Quintiliani, Aquili, Marconmanni, Tatiani'] = {['wLink'] = 'd:Q98141585', ['xrlFormat'] = 1}
}
data['Gaius Julius Victor'].aliases = {
['Ars rhetorica'] = 'Ars rhetorica Hermagorae, Ciceronis, Quintiliani, Aquili, Marconmanni, Tatiani',
['art. rhet.'] = 'Ars rhetorica Hermagorae, Ciceronis, Quintiliani, Aquili, Marconmanni, Tatiani',
['Art. Rhet.'] = 'Ars rhetorica Hermagorae, Ciceronis, Quintiliani, Aquili, Marconmanni, Tatiani',
['Rhet.'] = 'Ars rhetorica Hermagorae, Ciceronis, Quintiliani, Aquili, Marconmanni, Tatiani'
}
data['Gaius Lucilius'] = {}
data['Gaius Lucilius'].aLink = 'Gaius Lucilius'
data['Gaius Lucilius'].year = 'c. 165 BC – 103 BC'
data['Gaius Lucilius'].works = {['Saturae'] = {}}
data['Gaius Lucilius'].aliases = {
[false] = 'Saturae'
}
data['Galfridus Grammaticus'] = {}
data['Galfridus Grammaticus'].aLink = 'Geoffrey the Grammarian'
data['Galfridus Grammaticus'].year = '1440'
data['Galfridus Grammaticus'].works = {['Promptorium parvulorum sive clericorum dictionarius Anglo-Latinus Princeps'] = {['wLink'] = 'Promptorium parvulorum'}}
data['Galfridus Grammaticus'].aliases = {['PP'] = 'Promptorium parvulorum sive clericorum dictionarius Anglo-Latinus Princeps'}
data['Grattius'] = {}
data['Grattius'].aLink = 'Grattius'
data['Grattius'].works = {
['Carmen venaticum'] = {['year'] = 'c. 1–8 CE', ['rlTitle'] = 'Carmen venaticum', ['rlFormat'] = 1}}
data['Grattius'].aliases = {
[false] = 'Carmen venaticum',
['Cynegeticon'] = 'Carmen venaticum',
['Cynegetica'] = 'Carmen venaticum',
['Cyn.'] = 'Carmen venaticum',
['cyn.'] = 'Carmen venaticum'
}
data['Grattius'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Valerius Flaccus']= {}
data['Valerius Flaccus'].aLink = 'Gaius Valerius Flaccus'
data['Valerius Flaccus'].year = '? - c. 90 CE'
data['Valerius Flaccus'].rlFormat1 = {'s:la: Argonautica (Valerius Flaccus)', '/', {'.numToRoman', '.ref1'}, '#', {'.roundDown', '5', '.ref2'}}
data['Valerius Flaccus'].works = {['Argonautica'] = {['rlTitle'] = 'Argonautica (Gaius Valerius Flaccus)', ['year'] = 'c. 90', ['wLink'] = 'Argonautica (Valerius Flaccus)', ['rlFormat'] = 1}}
data['Valerius Flaccus'].aliases = {[false] = 'Argonautica'}
data['Gaudentius of Brescia'] = {}
data['Gaudentius of Brescia'].aLink = 'Gaudentius of Brescia'
data['Gaudentius of Brescia'].year = 'c. 327 - c. 410 CE'
data['Gilbertus Anglicus'] = {}
data['Gilbertus Anglicus'].aLink = 'Gilbertus Anglicus'
data['Gilbertus Anglicus'].year = 'c. 1180 – c. 1250'
data['Gilbertus Anglicus'].works = {['Compendium medicinae'] = {['year'] = 'c. 1240'}}
data['Gilbertus Anglicus'].aliases = {[false] = 'Compendium medicinae'}
data['Aegidius Romanus'] = {}
data['Aegidius Romanus'].aLink = 'Giles of Rome'
data['Aegidius Romanus'].year = 'c. 1243–1316'
data['Aegidius Romanus'].works = {['De regimine principum'] = {['year'] = 'c. 1280'}}
data['Gnaeus Naevius'] ={}
data['Gnaeus Naevius'].aLink = 'Gnaeus Naevius'
data['Gnaeus Naevius'].year = 'c. 270 – c. 201 BCE'
data['Gnaeus Naevius'].works = {
['Bellum Punicum'] = {},
['Clastidium'] = {['year'] = '222 - c. 201 BCE'}
}
data['Gregorius Magnus'] = {}
data['Gregorius Magnus'].aLink = 'Pope Gregory I'
data['Gregorius Magnus'].year = 'c. 540 - 604 CE'
data['Gregorius Magnus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '/', {'.numToRoman', '.ref2'}}
data['Gregorius Magnus'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Gregorius Magnus'].rlFormat3 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}}
data['Gregorius Magnus'].works = {
['Moralia in Job'] = {['year'] = 'c. 580', ['wLink'] = 'Moralia in Job'},
['Liber Regulae Pastoralis'] = {['rlTitle'] = 'Regulae Pastoralis', ['year'] = 'c. 590', ['wLink'] = 'Pastoral Care', ['rlFormat'] = 1},
['Dialogi'] = {['rlTitle'] = 'Dialogi (Gregorius Magnus)', ['year'] = '593', ['wLink'] = 'Dialogues (Pope Gregory I)', ['rlFormat'] = 2},
['Epistolae'] = {['rlTitle'] = 'Epistolae (Gregorius Magnus)', ['rlFormat'] = 3}}
data['Gregorius Magnus'].aliases = {
['Ep.'] = 'Epistolae',
['Regulae Pastoralis'] = 'Liber Regulae Pastoralis'
}
data['Gregorius Turonensis'] = {}
data['Gregorius Turonensis'].aLink = 'Gregory of Tours'
data['Gregorius Turonensis'].year = 'c. 538 – 594 CE'
data['Gregorius Turonensis'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period'}
data['Gregorius Turonensis'].works = {
['Historia Francorum'] = {['year'] = '574-593', ['rlTitle'] = 'Historiarum Francorum libri X', ['rlFormat'] = 1}
}
data['Hadrianus'] = {}
data['Hadrianus'].aLink = 'Hadrian'
data['Hadrianus'].year = '76 - 108 CE'
data['Hadrianus'].rlFormat1 = {'s:la:Carmina Hadriani quae exstant', '#', {'.numToRoman', '.ref1'}}
data['Hadrianus'].works = {['Carmina'] = {['rlFormat'] = 1}}
data['Herigerus Lobiensis'] = {}
data['Herigerus Lobiensis'].aLink = 'Heriger of Lobbes'
data['Herigerus Lobiensis'].year = 'c. 925–1007'
data['Herigerus Lobiensis'].xrlFormat1 = {'https://books.google.co.uk/books?id=XYemlSOJHEMC&pg=PA', '.ref1', '#v=onepage&f=false'}
data['Herigerus Lobiensis'].works = {['Historia miraculorum S. Ursmari'] = {['year'] = '990', ['xrlFormat'] = 1}}
data['Herigerus Lobiensis'].aliases = {['Miracula S. Ursmari'] = 'Historia miraculorum S. Ursmari'}
data['Horatius'] = {}
data['Horatius'].aLink = 'Horace'
data['Horatius'].year = '65 BC - 8 BC'
data['Horatius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '/Carmen ', {'.numToRoman', '.ref2'}, '#', {'.roundDown', '5', '.ref3'}}
data['Horatius'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '/Epistula ', {'.numToRoman', '.ref2'}, '#', {'.roundDown', '5', '.ref3'}}
data['Horatius'].rlFormat3 = {'s:la:', '.rlTitle', '/Epodos ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', '5', '.ref3'}}
data['Horatius'].rlFormat4 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '/Sermo ', {'.numToRoman', '.ref2'}, '#', {'.roundDown', '5', '.ref3'}}
data['Horatius'].works = {
['Ars Poetica'] = {['year'] = 'c. 19 BC', ['wLink'] = 'Ars Poetica (Horace)', ['rlTitle'] = 'Ars Poetica', ['rlFormat'] = 4},
['Carmina'] = {['year'] = '23-13 BC', ['wLink'] = 'Odes (Horace)', ['rlTitle'] = 'Carmina (Horatius)', ['rlFormat'] = 1},
['Epistulae'] = {['year'] = '20-14 BC', ['wLink'] = 'Epistles (Horace)', ['rlTitle'] = 'Epistulae (Horatius)', ['rlFormat'] = 2},
['Epodi'] = {['year'] = 'c. 30 BC', ['wLink'] = 'Epodes#Epodes_of_Horace', ['rlTitle'] = 'Epodi', ['rlFormat'] = 3},
['Sermones'] = {['year'] = 'c. 35 BC', ['wLink'] = 'Satires (Horace)', ['rlTitle'] = 'Sermones (Horatius)', ['rlFormat'] = 4}}
data['Horatius'].aliases = {
['C.'] = 'Carmina',
['Odes'] = 'Carmina',
['Epod.'] = 'Epodi',
['Epodes'] = 'Epodi',
['Epistles'] = 'Epistulae',
['S.'] = 'Sermones',
['Satires'] = 'Sermones',
['Saturae'] = 'Sermones'
}
data['Hyginus Gromaticus'] = {}
data['Hyginus Gromaticus'].aLink = 'Hyginus Gromaticus'
data['Hyginus Gromaticus'].year = '98–117 CE'
data['Hyginus Gromaticus'].works = {['De Constitutione Limitum'] = {}}
data['Hyginus Gromaticus'].aliases = {
['On the Establishment of Boundaries'] = 'De Constitutione Limitum',
['De Lim.'] = 'De Constitutione Limitum',
['De Limitibus'] = 'De Constitutione Limitum',
['Lim.'] = 'De Constitutione Limitum'
}
data['Innocentius III'] = {}
data['Innocentius III'].aLink = 'Pope Innocent III'
data['Innocentius III'].year = '1160 - 1216 CE'
data['Innocentius III'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Innocentius III'].works = {['Venerabilem'] = {['year'] = '1202 CE', ['rlTitle'] = 'Venerabilem', ['rlFormat'] = 1}}
data['Isidorus Hispalensis'] = {}
data['Isidorus Hispalensis'].aLink = 'Isidore of Seville'
data['Isidorus Hispalensis'].year = 'c. 560 – 636 CE'
data['Isidorus Hispalensis'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber_', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Isidorus Hispalensis'].works = {['Etymologiae'] = {['year'] = 'c. 600–625', ['wLink'] = 'Etymologiae', ['rlTitle'] = 'Etymologiarum libri XX', ['rlFormat'] = 1}}
data['Isidorus Hispalensis'].aliases = {
['Orig.'] = 'Etymologiae'
}
data['Hieronymus'] = {}
data['Hieronymus'].aLink = 'Jerome'
data['Hieronymus'].year = 'c. 347 - 420 CE'
data['Hieronymus'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period', '.ref2'}
data['Hieronymus'].rlFormat2 = {'s:la:', '.rlTitle', '/', '.ref1', '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data['Hieronymus'].rlFormat3 = {'s:la:', '.rlTitle', '#CAP._', {'.numToRoman', '.ref1'}}
data['Hieronymus'].rlFormat4 = {'s:la:', '.rlTitle', '#Cap._', {'.numToRoman', '.ref1'}, '.period'}
data['Hieronymus'].rlFormat5 = {'s:la:', '.rlTitle', '/', '.ref1', '#', '.ref2'}
data['Hieronymus'].works = {
['Adversus Jovinianum'] = {['year'] = '392', ['wLink'] = 'Against Jovinianus', ['rlTitle'] = 'Adversus Iovinianum (Hieronymus)', ['rlFormat'] = 1},
['Contra Pelagianos'] = {['rlTitle'] = 'Contra Pelagianos', ['rlFormat'] = 1},
['Commentaria in Isaiam'] = {['rlTitle'] = 'Commentaria in Isaiam (Hieronymus)', ['rlFormat'] = 2},
['Commentaria in Joelem'] = {['rlTitle'] = 'Commentaria in Ioelem (Hieronymus)', ['rlFormat'] = 3},
['Canticum Canticorum'] = {['rlTitle'] = 'Canticum Canticorum (Hieronymus)', ['rlFormat'] = 4},
['Epistolae'] = {['rlTitle'] = 'Epistolae (Hieronymus)', ['year'] = '4th century', ['rlFormat'] = 5},
['Vulgata'] = {['wLink'] = 'Vulgate', ['year'] = '405', ['rdFormat'] = {separators = {" ", ":", ":"}}}}
data['Hieronymus'].aliases = {
['Adversus Iovinianum'] = 'Adversus Jovinianum',
['Against Jovinianus'] = 'Adversus Jovinianum',
['Against the Pelagians'] = 'Contra Pelagianos',
['Biblia Sacra Vulgata'] = 'Vulgata',
['Cant. Cantic.'] = 'Canticum Canticorum',
['Commentaria in Ioelem'] = 'Commentaria in Joelem',
['Commentaries on Isaiah'] = 'Commentaria in Isaiam',
['Commentaries on Joel'] = 'Commentaria in Joelem',
['Cont. Pelag.'] = 'Adversus Pelagianos',
['Ep.'] = 'Epistolae',
['Epistulae'] = 'Epistolae',
['Homilies on the Song of Songs'] = 'Canticum Canticorum',
['in Isa.'] = 'Commentaria in Isaiam',
['in Joel.'] = 'Commentaria in Joelem',
['Letters'] = 'Epistolae',
['Vulg.'] = 'Vulgata',
}
data['Johannes Genuensis'] = {}
data['Johannes Genuensis'].aLink = 'John of Genoa'
data['Johannes Genuensis'].year = '–1298'
data['Johannes Genuensis'].xrlFormat1 = {'https://books.google.co.uk/books?id=Dw8EzQSVIOkC&pg=PP', '.ref1', '#v=onepage&f=false'}
data['Johannes Genuensis'].works = {
['Catholicon seu universale vocabularium ac summa grammatices'] = {['year'] = '1286', ['wLink'] = 'Catholicon (1286)', ['xrlFormat'] = 1}
}
data['Johannes Genuensis'].aliases = {[false] = 'Catholicon seu universale vocabularium ac summa grammatices'}
data['Johannes Keplerus'] = {}
data['Johannes Keplerus'].aLink = 'Johannes Kepler'
data['Johannes Keplerus'].year = '1571–1630 CE'
data['Johannes Keplerus'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Johannes Keplerus'].works =
{['Strena seu de nive sexangula'] = {['year'] = '1611', ['rlTitle'] = 'Strena seu de nive sexangula', ['rlFormat'] = 1}
}
data['Johannes Keplerus'].aliases = {
['Strena'] = 'Strena seu de nive sexangula'
}
data['John Cassian'] = {}
data['John Cassian'].aLink = 'John Cassian'
data['John Cassian'].year = 'c. 360–435 CE'
data['John Cassian'].works = {
['De institutis coenobiorum'] = {['year'] = 'c. 420'}
}
data['Julius Caesar'] = {}
data['Julius Caesar'].aLink = 'Julius Caesar'
data['Julius Caesar'].year = '100–44 BC'
data['Julius Caesar'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Julius Caesar'].works = {
['Commentarii de bello Gallico'] = {['year'] = 'c. 52 BC', ['wLink']='Commentarii de Bello Gallico', ['rlTitle']='Commentarii de bello Gallico', ['rlFormat']=1},
['Commentarii de bello civili'] = {['year'] = 'c. 48 BC', ['wLink'] = 'Commentarii de bello civili', ['rlTitle'] = 'Commentarii de bello civili', ['rlFormat'] = 1}
}
data['Julius Caesar'].aliases = {
['B. G.'] = 'Commentarii de bello Gallico',
['Bello Gallico'] = 'Commentarii de bello Gallico',
['Bellum Gallicum'] = 'Commentarii de bello Gallico',
['Commentarii de Bello Gallico'] = 'Commentarii de bello Gallico',
['De Bello Gallico'] = 'Commentarii de bello Gallico',
['De bello Gallico'] = 'Commentarii de bello Gallico',
['B. C.'] = 'Commentarii de bello civili',
['Bello Civili'] = 'Commentarii de bello civili',
['Bellum Civile'] = 'Commentarii de bello civili',
['Commentarii de Bello Civili'] = 'Commentarii de bello civili',
['De Bello Civili'] = 'Commentarii de bello civili',
['De bello civili'] = 'Commentarii de bello civili',
}
data['Julius Firmicus Maternus'] = {}
data['Julius Firmicus Maternus'].aLink = 'Julius Firmicus Maternus'
data['Julius Firmicus Maternus'].xrlFormat1 = {{'.convert', {'aData', 'astrChapters'}, '.ref1'}}
data['Julius Firmicus Maternus'].xrlFormat2 = {'https://archive.org/details/deerroreprofanar00firm/page/', {'.convert', {'aData', 'erroreChapters'}, '.ref1'}}
data['Julius Firmicus Maternus'].works = {
['Matheseos Libri VIII'] = {['year'] = 'c. 334–337', ['xrlFormat'] = 1},
['De Errore Profanarum Religionum'] = {['year'] = 'c. 343-350', ['xrlFormat'] = 2}
}
data['Julius Firmicus Maternus'].aliases = {
['Astr.'] = 'Matheseos Libri VIII',
['De Err.'] = 'De Errore Profanarum Religionum',
}
data['Julius Firmicus Maternus'].astrChapters = {
['Liber I'] = 'https://archive.org/details/matheseoslibrivi01firmuoft/page/n15',
['Liber II'] = 'https://archive.org/details/matheseoslibrivi01firmuoft/page/40',
['Liber III'] = 'https://archive.org/details/matheseoslibrivi01firmuoft/page/90',
['Liber IV'] = 'https://archive.org/details/matheseoslibrivi01firmuoft/page/194',
['Liber V'] = 'https://archive.org/details/matheseoslibrivi02firmuoft/page/n73',
['Liber VI'] = 'https://archive.org/details/matheseoslibrivi02firmuoft/page/67',
['Liber VII'] = 'https://archive.org/details/matheseoslibrivi02firmuoft/page/208',
['Liber VIII'] = 'https://archive.org/details/matheseoslibrivi02firmuoft/page/280'
}
data['Julius Firmicus Maternus'].erroreChapters = {
['Cap I'] = 'n53', ['Cap II'] = '4', ['Cap III'] = '6', ['Cap IV'] = '10',
['Cap V'] = '12', ['Cap VI'] = '14', ['Cap VII'] = '18', ['Cap VIII'] = '22',
['Cap IX'] = '24', ['Cap X'] = '26', ['Cap XI'] = '26', ['Cap XII'] = '26',
['Cap XIII'] = '30', ['Cap XIV'] = '34', ['Cap XV'] = '34', ['Cap XVI'] = '36',
['Cap XVII'] = '40', ['Cap XVIII'] = '42', ['Cap XIX'] = '46', ['Cap XX'] = '50',
['Cap XXI'] = '54', ['Cap XXII'] = '56', ['Cap XXIII'] = '58', ['Cap XXIV'] = '60',
['Cap XXV'] = '64', ['Cap XXVI'] = '66', ['Cap XXVII'] = '68', ['Cap XXVIII'] = '72',
['Cap XXIX'] = '80'
}
data['Julius Obsequens'] = {}
data['Julius Obsequens'].aLink = 'Julius Obsequens'
data['Julius Obsequens'].works = {
['Prodigiorum liber'] = {['rlTitle'] = 'Prodigiorum liber'}
}
data['Julius Paulus Prudentissimus'] = {}
data['Julius Paulus Prudentissimus'].aLink = 'Julius Paulus Prudentissimus'
data['Julius Paulus Prudentissimus'].xrlFormat1 = {'.xurl'}
data['Julius Paulus Prudentissimus'].works = {
['Pauli Sententiae'] = {['year'] = 'c. 300-400', ['xurl'] = 'https://books.google.com/books?id=-xA2urNyAAAC&pg=PR1#v=onepage&q&f=false', ['xrlFormat'] = 1},
}
data['Julius Paulus Prudentissimus'].aliases = {
['Sent.'] = 'Pauli Sententiae',
}
data['Iustinus'] = {}
data['Iustinus'].aLink = 'Justin (historian)'
data['Iustinus'].year = 'c. 2nd century'
data['Iustinus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Iustinus'].works = {['Epitoma Historiarum Philippicarum Pompeii Trogi'] = {['wLink'] = 'Epitome of the Philippic History of Pompeius Trogus', ['rlTitle'] = 'Epitoma Historiarum Philippicarum Pompeii Trogi', ['rlFormat'] = 1}}
data['Iustinus'].aliases = {
[false] = 'Epitoma Historiarum Philippicarum Pompeii Trogi',
['Epitome of the Philippic Histories'] = 'Epitoma Historiarum Philippicarum Pompeii Trogi',
['Epitome of the Philippic History of Pompeius Trogus'] = 'Epitoma Historiarum Philippicarum Pompeii Trogi'
}
data['Iustinianus'] = {}
data['Iustinianus'].aLink = 'Justinian I'
data['Iustinianus'].year = '482–565 CE'
data['Iustinianus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Iustinianus'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.convert', '.OrdinalNames', '.ref1'}}
data['Iustinianus'].works = {
['Digesta'] = {['year'] = '533', ['wLink'] = 'Digest (Roman law)', ['rlTitle'] = 'Digesta', ['rlFormat'] = 1},
['Institutiones'] = {['wLink'] = 'Institutes (Justinian)', ['rlTitle'] = 'Imperatoris Iustiniani Institutiones', ['rlFormat'] = 2}}
data['Iustinianus'].aliases = {
['Dig.'] = 'Digesta',
['Digest'] = 'Digesta',
['Inst.'] = 'Institutiones',
['Institutes'] = 'Institutiones'
}
data['Juvenalis'] = {}
data['Juvenalis'].aLink = 'Juvenal'
data['Juvenalis'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '/Satura ', {'.numToRoman', '.ref2'}, '#', {'.roundDown', 5, '.ref3'}}
data['Juvenalis'].works = {['Saturae'] = {['wLink'] = 'Satires (Juvenal)', ['rlTitle'] = 'Saturae (Iuvenalis, Bucheler)', ['year'] = '100–127 CE', ['rlFormat'] = 1}}
data['Juvenalis'].aliases = {
[false] = 'Saturae',
['Satires'] = 'Saturae'
}
data['Juvencus'] = {}
data['Juvencus'].aLink = 'Juvencus'
data['Juvencus'].works = {
['Evangeliorum libri quattuor'] = {['year'] = 'c. 330'}}
data['Juvencus'].aliases = {
['Evangeliorum libri'] = 'Evangeliorum libri quattuor'
}
data['Lactantius'] = {}
data['Lactantius'].aLink = 'Lactantius'
data['Lactantius'].year = 'c. 250–c. 325'
data['Lactantius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Lactantius'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Lactantius'].rlFormat3 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Lactantius'].works = {
['De ira Dei'] = {['rlTitle'] = 'De ira Dei', ['rlFormat'] = 1},
['De mortibus persecutorum'] = {['year'] = 'c. 316–c. 325', ['wLink'] = 'De mortibus persecutorum', ['rlTitle'] = 'De mortibus persecutorum', ['rlFormat'] = 2},
['Epitome Divinarum institutionum'] = {['year'] = 'c. 320–c. 325', ['rlTitle'] = 'Epitome Divinarum institutionum', ['rlFormat'] = 1},
['Institutiones Divinae'] = {['year'] = '303–311', ['wLink'] = 'The Divine Institutes', ['rlTitle'] = 'Divinarum institutionum', ['rlFormat'] = 3},
}
data['Lactantius'].aliases = {
[false] = 'Institutiones Divinae',
['De Ira D.'] = 'De ira Dei',
['Epit.'] = 'Epitome Divinarum institutionum',
['Inst.'] = 'Institutiones Divinae',
['Mort. Pers.'] = 'De mortibus persecutorum'
}
data['Leonardus Pisanus'] = {}
data['Leonardus Pisanus'].aLink = 'Fibonacci'
data['Leonardus Pisanus'].year = 'c. 1170 – c. 1250'
data['Leonardus Pisanus'].rlFormat1 = {'s:la:', '.rlTitle', '/', '.ref1'}
data['Leonardus Pisanus'].works = {
['Liber Abbaci'] = {['rlTitle'] = 'Liber abbaci', ['rlFormat'] = 1, ['wLink'] = 'Liber Abaci', ['year'] = '1202'}
}
data['Leonardus Pisanus'].aliases = {
['Liber Abaci'] = 'Liber Abbaci'
}
data['Livius Andronicus'] = {}
data['Livius Andronicus'].aLink = 'Livius Andronicus'
data['Livius Andronicus'].year = 'c. 284 – c. 204 BC'
data['Livius Andronicus'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Livius Andronicus'].works = {
['Odusia'] = {['wLink'] = 'Odyssia', ['rlTitle'] = 'Odusia (ed. Warmington)', ['rlFormat'] = 1}
}
data['Lucanus'] = {}
data['Lucanus'].aLink = 'Lucan'
data['Lucanus'].year = '39–65'
data['Lucanus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Lucanus'].works = {['Pharsalia'] = {['wLink'] = 'Pharsalia', ['year'] = '61–65 CE', ['rlTitle'] = 'Pharsalia', ['rlFormat'] = 1}}
data['Lucanus'].aliases = {
[false] = 'Pharsalia',
['De Bello Civili'] = 'Pharsalia',
['De bello civili'] = 'Pharsalia',
['The Civil War'] = 'Pharsalia',
['The civil war'] = 'Pharsalia'
}
data['Lucius Ampelius'] = {}
data['Lucius Ampelius'].year = '3rd century CE'
data['Lucius Ampelius'].works = {['Liber Memorialis'] = {['wLink'] = 'Liber Memorialis'}}
data['Lucius Ampelius'].aliases = {
[false] = 'Liber Memorialis',
['Mem.'] = 'Liber Memorialis'
}
data['Lucius Varius Rufus'] = {}
data['Lucius Varius Rufus'].aLink = 'Lucius Varius Rufus'
data['Lucius Varius Rufus'].year = 'c. 74 – 14 BC'
data['Lucretius'] = {}
data['Lucretius'].aLink = 'Lucretius'
data['Lucretius'].year = 'c. 99 BC – 55 BC'
data['Lucretius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Lucretius'].works = {['De rerum natura'] = {['wLink'] = 'De rerum natura', ['rlTitle'] = 'De rerum natura (Titus Lucretius Carus)', ['rlFormat'] = 1}}
data['Lucretius'].aliases = {
[false] = 'De rerum natura',
['De Rerum Natura'] = 'De rerum natura'
}
data['Macrobius'] = {}
data['Macrobius'].aLink = 'Macrobius'
data['Macrobius'].year = 'c. 400'
data['Macrobius'].rlFormat1 = {'s:la:', '.rlTitle', '#Sectio_', {'.numToRoman', '.ref1'}}
data['Macrobius'].xrlFormat1 = {'https://penelope.uchicago.edu/Thayer/L/Roman/Texts/Macrobius/Saturnalia/', '.ref1', '*.html#', '.ref2'}
data['Macrobius'].works = {
['Commentarii in Somnium Scipionis'] = {['wLink'] = 'Commentarii in Somnium Scipionis', ['rlTitle'] = 'Commentarii in Somnium Scipionis', ['rlFormat'] = 1},
['Saturnalia'] = {['year'] = 'c. 431', ['wLink'] = 'Saturnalia (Macrobius)', ['xrlFormat'] = 1}}
data['Macrobius'].aliases = {
['Commentary on the Dream of Scipio'] = 'Commentarii in Somnium Scipionis',
['S.'] = 'Saturnalia',
['Sat.'] = 'Saturnalia',
['Somn. Scip.'] = 'Commentarii in Somnium Scipionis'
}
data['Mallius Theodorus'] = {}
data['Mallius Theodorus'].aLink = 'Flavius Mallius Theodorus'
data['Mallius Theodorus'].year = '376–409'
data['Mallius Theodorus'].xrlFormat1 = {'https://archive.org/details/p2grammaticilatini06keil/page/', '.ref1', '/mode/1up'}
data['Mallius Theodorus'].works = {['De metris'] = {['xrlFormat'] = 1}}
data['Mallius Theodorus'].aliases = {
[false] = 'De metris',
['de Metr.'] = 'De metris'
}
data['Marcellus Empiricus'] = {}
data['Marcellus Empiricus'].aLink = 'Marcellus Empiricus'
data['Marcellus Empiricus'].year = 'c. 400'
data['Marcellus Empiricus'].works = {['De medicamentis'] = {}}
data['Marcellus Empiricus'].aliases = {
['Medic.'] = 'De medicamentis'
}
data['Marcus Atilius'] = {}
data['Marcus Atilius'].aLink = 'Marcus Atilius'
data['Marcus Atilius'].year = '2nd century BCE'
data['Marcus Iunianus Iustinus'] = {}
data['Marcus Iunianus Iustinus'].aLink = 'Justin (historian)'
data['Marcus Iunianus Iustinus'].year = '2nd century CE'
data['Marcus Iunianus Iustinus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Marcus Iunianus Iustinus'].works = {['Epitoma Historiarum Philippicarum Pompeii Trogi'] = {['rlTitle'] = 'Epitoma Historiarum Philippicarum Pompeii Trogi', ['wLink'] = 'Epitome of the Philippic History of Pompeius Trogus', ['rlFormat'] = 1}}
data['Marcus Iunianus Iustinus'].aliases = {['Epitoma'] = 'Epitoma Historiarum Philippicarum Pompeii Trogi'}
data['Marcus Pacuvius'] = {}
data['Marcus Pacuvius'].aLink = 'Pacuvius'
data['Marcus Pacuvius'].year = '220 – c. 130 BC'
data['Marcus Pacuvius'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Marcus Pacuvius'].works = {
['Tragoediae'] = {['rlTitle'] = 'Tragoediae (Pacuvius)', ['rlFormat'] = 1}}
data['Marcus Pacuvius'].aliases = {
['Antiope'] = 'Tragoediae',
['Hermione'] = 'Tragoediae',
['Medius'] = 'Tragoediae',
['Antiopa'] = 'Tragoediae',
['Armorum Iudicium'] = 'Tragoediae',
['Armorum Judicium'] = 'Tragoediae',
['Atalanta'] = 'Tragoediae',
['Chryses'] = 'Tragoediae',
['Dulorestes'] = 'Tragoediae',
['Hermiona'] = 'Tragoediae',
['Iliona'] = 'Tragoediae',
['Medus'] = 'Tragoediae',
['Niptra'] = 'Tragoediae',
['Paullus'] = 'Tragoediae',
['Pentheus'] = 'Tragoediae',
['Periboea'] = 'Tragoediae',
['Teucer'] = 'Tragoediae'
}
data['Marcus Terentius Varro'] = {}
data['Marcus Terentius Varro'].aLink = 'Marcus Terentius Varro'
data['Marcus Terentius Varro'].year = '116-27 BC'
data['Marcus Terentius Varro'].rlFormat1 = {'s:la:','.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Marcus Terentius Varro'].rlFormat2 = {'s:la:','.rlTitle', '/Liber_', {'.lower', {'.convert', '.OrdinalNames', '.ref1'}}}
data['Marcus Terentius Varro'].works = {
['Rerum rusticarum'] = {['rlTitle'] = 'Rerum rusticarum', ['rlFormat'] = 1},
['De Lingua Latina'] = {['rlTitle'] = 'De Lingua Latina (Varro, Schoppe)', ['rlFormat'] = 2}}
data['Marcus Terentius Varro'].aliases = {
['Agricultural Topics'] = 'Rerum rusticarum',
['De agricultura'] = 'Rerum rusticarum',
['De Agricultura'] = 'Rerum rusticarum',
['L. L.'] = 'De Lingua Latina',
['R. R.'] = 'Rerum rusticarum',
['Rerum Rusticarum'] = 'Rerum rusticarum',
['De re rustica'] = 'Rerum rusticarum',
['De Re Rustica'] = 'Rerum rusticarum',
['On the Latin Language'] = 'De Lingua Latina',
['Res Rusticae'] = 'Rerum rusticarum',
['Res rusticae'] = 'Rerum rusticarum'
}
data['Martialis'] = {}
data['Martialis'].aLink = 'Martial'
data['Martialis'].year = '38–104 CE'
data['Martialis'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', {'.roundDown', 5, '.ref3'}}
data['Martialis'].works = {['Epigrammata'] = {['year'] = '86–103 CE', ['rlTitle'] = 'Epigrammata (Martialis)', ['rlFormat'] = 1}}
data['Martialis'].aliases = {
[false] = 'Epigrammata',
['Ep.'] = 'Epigrammata',
['Epigrams'] = 'Epigrammata',
['Epigrammaton libri XII'] = 'Epigrammata'
}
data['Manilius'] = {}
data['Manilius'].aLink = 'Marcus Manilius'
data['Manilius'].year = '1st C. CE'
data['Manilius'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}}
data['Manilius'].works = {
['Astronomica'] = {['wLink'] = 'Astronomica (Manilius)', ['rlTitle'] = 'Astronomica', ['year'] = 'c. 30', ['rlFormat'] = 1}}
data['Nazarius'] = {}
data['Nazarius'].aLink = 'Nazarius (rhetorician)'
data['Nazarius'].year = 'c. 4th century'
data['Nazarius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Nazarius'].works = {['Panegyricus Constantini'] = {['year'] = '321', ['wLink'] = 'Panegyrici Latini', ['rlTitle'] = 'Panegyricus Constantini', ['rlFormat'] = 1}}
data['Nazarius'].aliases = {
['Pan. Const.'] = 'Panegyricus Constantini',
['Pan. ad Const.'] = 'Panegyricus Constantini',
['Panegyric of Constantine'] = 'Panegyricus Constantini'
}
data['Nonius Marcellus'] = {}
data['Nonius Marcellus'].aLink = 'Nonius Marcellus'
data['Nonius Marcellus'].year = 'c. 280'
data['Nonius Marcellus'].xrlFormat1 = {'https://archive.org/details/compendiosadoctr01noniuoft/page/n', {'.numAdd', '.ref1', 19}, '/mode/1up'}
data['Nonius Marcellus'].xrlFormat2 = {'https://archive.org/details/compendiosadoctr02noniuoft/page/n', {'.numAdd', '.ref1', 5}, '/mode/1up'}
data['Nonius Marcellus'].works = {
['De compendiosa doctrina I'] = {['wLink'] = 'd:Q3704098', ['xrlFormat'] = 1},
['De compendiosa doctrina II'] = {['wLink'] = 'd:Q3704098', ['xrlFormat'] = 2}}
data['Nonius Marcellus'].aliases = {
[false] = 'De compendiosa doctrina I',
['I'] = 'De compendiosa doctrina I',
['II'] = 'De compendiosa doctrina II'
}
data['Orderic Vitalis'] = {}
data['Orderic Vitalis'].aLink = 'Orderic Vitalis'
data['Orderic Vitalis'].year = '1075 - c. 1142'
data['Orderic Vitalis'].works = {
['Historia Ecclesiastica'] = {['wLink'] = 'Orderic Vitalis#The Historia Ecclesiastica', ['year'] = 'c. 1141'}}
data['Osbernus Glocestriensis'] = {}
data['Osbernus Glocestriensis'].aLink = 'Osbern of Gloucester'
data['Osbernus Glocestriensis'].year = '1123–1200'
data['Osbernus Glocestriensis'].xrlFormat1 = {'https://archive.org/details/bub_gb_q42EW3652gUC/page/', '.ref1', '/mode/1up'}
data['Osbernus Glocestriensis'].works = {['Liber Derivationum'] = {['year'] = '1150–1175', ['xrlFormat'] = 1}}
data['Osbernus Glocestriensis'].aliases = {
['Deriv.'] = 'Liber Derivationum',
['pref.'] = 'Liber Derivationum'
}
data['Ovidius'] = {}
data['Ovidius'].aLink = 'Ovid'
data['Ovidius'].year = '43 BC–c. 17 CE'
data['Ovidius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber_', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Ovidius'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.roundDown', 5, '.ref1'}}
data['Ovidius'].rlFormat3 = {'s:la:', '.rlTitle', '/Epistula_', {'.numToRoman', '.ref1'}}
data['Ovidius'].rlFormat4 = {'s:la:', '.rlTitle', '/', '.ref1', '.period', '.ref2', '#', {'.roundDown', 5, '.ref3'}}
data['Ovidius'].rlFormat5 = {'s:la:', '.rlTitle', '/Liber_', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Ovidius'].works = {
['Ars Amatoria'] = {['year'] = '2 CE', ['wLink'] = 'Ars Amatoria', ['rlTitle'] = 'Ars amatoria', ['rlFormat'] = 1},
['Medicamina Faciei Femineae'] = {['year'] = 'c. 2 CE', ['wLink'] = 'Medicamina Faciei Femineae', ['rlTitle'] = 'Medicamina Faciei Femineae', ['rlFormat'] = 2},
['Remedia Amoris'] = {['year'] = 'c. 2 CE', ['wLink'] = 'Remedia Amoris', ['rlTitle'] = 'Remedium Amoris', ['rlFormat'] = 2},
['Fasti'] = {['year'] = '8', ['wLink'] = 'Fasti (poem)', ['rlTitle'] = 'Fasti', ['rlFormat'] = 1},
['Heroides'] = {['wLink'] = 'Heroides', ['rlTitle'] = 'Heroides', ['rlFormat'] = 3},
['Ibis'] = {['year'] = '9', ['wLink'] = 'Ibis (Ovid)', ['rlTitle'] = 'Ibis', ['rlFormat'] = 2},
['Epistulae ex Ponto'] = {['year'] = '12–13', ['wLink'] = 'Epistulae ex Ponto', ['rlTitle'] = 'Epistulae ex Ponto', ['rlFormat'] = 1},
['Amores'] = {['year'] = '16 BC', ['wLink'] = 'Amores (Ovid)', ['rlTitle'] = 'Amores', ['rlFormat'] = 4},
['Tristia'] = {['wLink'] = 'Tristia', ['year'] = '8-12', ['rlTitle'] = 'Tristia', ['rlFormat'] = 5},
['Metamorphoses'] = {['year'] = '8', ['wLink'] = 'Metamorphoses', ['rlTitle'] = 'Metamorphoses (Ovidius)', ['rlFormat'] = 1}}
data['Ovidius'].aliases = {
['A. A.'] = 'Ars Amatoria',
['Am.'] = 'Amores',
['Cosmetics for the Female Face'] = 'Medicamina Faciei Femineae',
['F.'] = 'Fasti',
['Fast.'] = 'Fasti',
['H.'] = 'Heroides',
['Her.'] = 'Heroides',
['Ib.'] = 'Ibis',
['Letters from the Black Sea'] = 'Epistulae ex Ponto',
['M.'] = 'Metamorphoses',
['Med. Fac.'] = 'Medicamina Faciei Femineae',
['Met.'] = 'Metamorphoses',
['P.'] = 'Epistulae ex Ponto',
['Pont.'] = 'Epistulae ex Ponto',
['R. Am.'] = 'Remedia Amoris',
['Rem. Am.'] = 'Remedia Amoris',
['The Art of Love'] = 'Ars Amatoria',
['The Cure for Love'] = 'Remedia Amoris',
['The Festivals'] = 'Fasti',
['The Heroines'] = 'Heroides',
['The Ibis'] = 'Ibis',
['The Loves'] = 'Amores',
['Tr.'] = 'Tristia',
['Trist.'] = 'Tristia',
['Sorrows'] = 'Tristia'}
data['Pseudo-Ovidius'] = {}
data['Pseudo-Ovidius'].aLink = 'Ovid#Spurious works'
data['Pseudo-Ovidius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.roundDown', 5, '.ref1'}}
data['Pseudo-Ovidius'].works = {
['Consolatio ad Liviam'] = {},
['On Fishing'] = {['wLink'] = 'Ovid#Halieutica_("On_Fishing")', ['rlTitle'] = 'Halieutica', ['rlFormat'] = 1},
['Nux'] = {['wLink'] = 'Ovid#Nux_("The_Walnut_Tree")'}}
data['Pseudo-Ovidius'].aliases = {
['Cons.'] = 'Consolatio ad Liviam',
['Consolation to Livia'] = 'Consolatio ad Liviam',
['Hal.'] = 'Halieutica',
['The Walnut Tree'] = 'Nux',
['On Fishing'] = 'Halieutica'
}
data['Palladius'] = {}
data['Palladius'].aLink = 'Rutilius Taurus Aemilianus Palladius'
data['Palladius'].year = '4th c./5th c. AD'
data['Palladius'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data['Palladius'].works = {['Opus agriculturae'] = {['rlTitle'] = 'Opus agriculturae', ['rlFormat'] = 1}}
data['Palladius'].aliases = {
['De re rustica'] = 'Opus agriculturae',
[false] = 'Opus agriculturae'
}
data['Paulus Orosius'] = {}
data['Paulus Orosius'].aLink = 'Paulus Orosius'
data['Paulus Orosius'].year = 'c. 375/385 – c. 420 CE'
data['Paulus Orosius'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Paulus Orosius'].works = {
['Historiae adversum paganos'] = {['rlTitle'] = 'Historiae (Orosius)', ['year'] = 'c. 416/417 CE', ['rlFormat'] = 1},
['Commonitorium ad Augustinum'] = {['rlTitle'] = 'Commonitorium ad Augustinum', ['year'] = 'c. 409/414 CE'},
['De arbitrii libertate'] = {['rlTitle'] = 'De arbitrii libertate', ['year'] = '4th century CE'},
['De errore Priscillianistarum et Origenistarum'] = {['rlTitle'] = 'De errore Priscillianistarum et Origenistaru', ['year'] = '415 CE'}}
data['Paulus Orosius'].aliases = {
['Hist.'] = 'Historiae adversum paganos',
['Historiae'] = 'Historiae adversum paganos'
}
data['Persius'] = {}
data['Persius'].aLink = 'Persius'
data['Persius'].year = '34-62'
data['Persius'].rlFormat1 = {'s:la:', '.rlTitle', '/Satura ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Persius'].works = {['Saturae'] = {['year'] = 'c. 62', ['rlTitle'] = 'Saturae (Persius, Monti)', ['rlFormat'] = 1}}
data['Persius'].aliases = {
[false] = 'Saturae',
['Satires'] = 'Saturae',
['Satyrae'] = 'Saturae'
}
data['Petronius'] = {}
data['Petronius'].aLink = 'Petronius'
data['Petronius'].year = 'c. 27–66 CE'
data['Petronius'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Petronius'].works = {['Satyricon'] = {['wLink'] = 'Satyricon', ['rlTitle'] = 'Satyricon', ['rlFormat'] = 1}}
data['Petronius'].aliases = {[false] = 'Satyricon'}
data['Phaedrus'] = {}
data['Phaedrus'].aLink = 'Phaedrus (fabulist)'
data['Phaedrus'].year = 'c. 15 BCE-50 CE'
data['Phaedrus'].works = {
['Fables'] = {['year'] = 'c. 15 BCE-50 CE', ['rlTitle'] = 'Phaedri Augusti Liberti Fabularum Aesopiarum', ['rlFormat'] = 1},
}
data['Plautus'] = {}
data['Plautus'].aLink = 'Plautus'
data['Plautus'].year = 'c. 254–184 BC'
data['Plautus'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2', '.period', {'.roundDown', 5, '.ref3'}}
data['Plautus'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.roundDown', 5, '.ref1'}}
data['Plautus'].works = {
['Amphitruo'] = {['year'] = 'c. 190–185 BC', ['wLink'] = 'Amphitryon (Plautus play)', ['rlTitle'] = 'Amphitruo (Leo)', ['rlFormat'] = 1},
['Asinaria'] = {['year'] = 'c. 209 BC', ['wLink'] = 'Asinaria', ['rlTitle'] = 'Asinaria', ['rlFormat'] = 1},
['Aulularia'] = {['year'] = 'c. 186 BC', ['wLink'] = 'Aulularia', ['rlTitle'] = 'Aulularia', ['rlFormat'] = 1},
['Bacchides'] = {['year'] = 'c. 190 BC', ['wLink'] = 'Bacchides (play)', ['rlTitle'] = 'Bacchides', ['rlFormat'] = 1},
['Captivi'] = {['year'] = 'c. 200–190 BC', ['wLink'] = 'Captivi', ['rlTitle'] = 'Captivi', ['rlFormat'] = 1},
['Casina'] = {['year'] = 'c. 180 BC', ['wLink'] = 'Casina (play)', ['rlTitle'] = 'Casina (Plautus)', ['rlFormat'] = 1},
['Cistellaria'] = {['year'] = 'c. 203 BC', ['wLink'] = 'Cistellaria', ['rlTitle'] = 'Cistellaria', ['rlFormat'] = 1},
['Curculio'] = {['year'] = 'c. 190 BC', ['wLink'] = 'Curculio (play)', ['rlTitle'] = 'Curculio', ['rlFormat'] = 1},
['Epidicus'] = {['year'] = 'c. 190 BC', ['wLink'] = 'Epidicus', ['rlTitle'] = 'Epidicus', ['rlFormat'] = 1},
['Menaechmi'] = {['year'] = 'a. 200 BC', ['wLink'] = 'Menaechmi', ['rlTitle'] = 'Menaechmi', ['rlFormat'] = 1},
['Mercator'] = {['year'] = 'c. 206–188 BC', ['wLink'] = 'Mercator (play)', ['rlTitle'] = 'Mercator', ['rlFormat'] = 1},
['Miles Gloriosus'] = {['year'] = 'c. 206 BC', ['wLink'] = 'Miles Gloriosus (play)', ['rlTitle'] = 'Miles gloriosus', ['rlFormat'] = 1},
['Mostellaria'] = {['year'] = 'c. 200 BC', ['wLink'] = 'Mostellaria', ['rlTitle'] = 'Mostellaria', ['rlFormat'] = 1},
['Persa'] = {['year'] = 'c. 197 BC', ['wLink'] = 'Persa (play)', ['rlTitle'] = 'Persa', ['rlFormat'] = 1},
['Poenulus'] = {['year'] = 'c. 194 BC', ['wLink'] = 'Poenulus', ['rlTitle'] = 'Poenulus', ['rlFormat'] = 1},
['Pseudolus'] = {['year'] = 'c. 191 BC', ['wLink'] = 'Pseudolus', ['rlTitle'] = 'Pseudolus', ['rlFormat'] = 1},
['Rudens'] = {['year'] = 'c. 211 BC', ['wLink'] = 'Rudens (play)', ['rlTitle'] = 'Rudens', ['rlFormat'] = 1},
['Stichus'] = {['year'] = 'c. 200 BC', ['wLink'] = 'Stichus', ['rlTitle'] = 'Stichus', ['rlFormat'] = 1},
['Trinummus'] = {['year'] = 'c. 195 BC', ['wLink'] = 'Trinummus', ['rlTitle'] = 'Trinummus', ['rlFormat'] = 1},
['Truculentus'] = {['year'] = 'c. 189 BC', ['wLink'] = 'Truculentus', ['rlTitle'] = 'Truculentus', ['rlFormat'] = 1},
['Vidularia'] = {['year'] = 'early 2nd century BC', ['wLink'] = 'la:Vidularia (Plautus)'}}
data['Plautus'].aliases = {
['Am.'] = 'Amphitruo',
['Amph.'] = 'Amphitruo',
['Amphitryon'] = 'Amphitruo',
['As.'] = 'Asinaria',
['Asin.'] = 'Asinaria',
['Aul.'] = 'Aulularia',
['Ba.'] = 'Bacchides',
['Bacch.'] = 'Bacchides',
['Cap.'] = 'Captivi',
['Capt.'] = 'Captivi',
['Cas.'] = 'Casina',
['Cist.'] = 'Cistellaria',
['Curc.'] = 'Curculio',
['Ep.'] = 'Epidicus',
['Epid.'] = 'Epidicus',
['Men.'] = 'Menaechmi',
['Merc.'] = 'Mercator',
['Mil.'] = 'Miles Gloriosus',
['Miles gloriosus'] = 'Miles Gloriosus',
['Most.'] = 'Mostellaria',
['Per.'] = 'Persa',
['Pers.'] = 'Persa',
['Poen.'] = 'Poenulus',
['Ps.'] = 'Pseudolus',
['Rud.'] = 'Rudens',
['Stich.'] = 'Stichus',
['The Comedy of Asses'] = 'Asinaria',
['The Little Carthaginian'] = 'Poenulus',
['The Little Punic Man'] = 'Poenulus',
['Trin.'] = 'Trinummus',
['Truc.'] = 'Truculentus',
['Vid.'] = 'Vidularia',
['Vidul.'] = 'Vidularia'
}
data['Plinius Maior'] = {}
data['Plinius Maior'].aLink = 'Pliny the Elder'
data['Plinius Maior'].year = '23–79'
data['Plinius Maior'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Plinius Maior'].works = {['Naturalis Historia'] = {['wLink'] = 'Natural History (Pliny)', ['rlTitle'] = 'Naturalis Historia', ['year'] = '77-79', ['rlFormat'] = 1}}
data['Plinius Maior'].aliases = {
[false] = 'Naturalis Historia',
['Nat.'] = 'Naturalis Historia',
['Natural History'] = 'Naturalis Historia',
['Naturalis Historiae'] = 'Naturalis Historia',
}
data['Plinius Minor'] = {}
data['Plinius Minor'].aLink = 'Pliny the Younger'
data['Plinius Minor'].year = '61 - c. 112 CE'
data['Plinius Minor'].rlFormat1 = {'s:la:Epistularum liber ', {'.numToRoman', '.ref1'}, ' (Gaius Plinius Caecilius Secundus)', '#', '.ref2', '.period', '.ref3'}
data['Plinius Minor'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Plinius Minor'].works = {
['Epistulae'] = {['wLink'] = 'Epistulae (Pliny)', ['rlFormat'] = 1},
['Panegyricus'] = {['rlTitle'] = 'Panegyricus (Plinius)', ['rlFormat'] = 2}
}
data['Plinius Minor'].aliases = {
['Ep.'] = 'Epistulae',
['Epistles'] = 'Epistulae',
['Pan.'] = 'Panegyricus'
}
data['Pomponius Mela'] = {}
data['Pomponius Mela'].aLink = 'Pomponius Mela'
data['Pomponius Mela'].year = '–c. 45'
data['Pomponius Mela'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber_', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data['Pomponius Mela'].works = {['De chorographia'] = {['year'] = 'c. 43', ['rlTitle'] = 'De chorographia', ['rlFormat'] = 1}}
data['Pomponius Mela'].aliases = {
[false] = 'De chorographia',
['A Description of the World'] = 'De chorographia',
['On Chorography'] = 'De chorographia'
}
data['Priscianus'] = {}
data['Priscianus'].aLink = 'Priscian'
data['Priscianus'].year = 'c. 500 CE'
data['Priscianus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Priscianus'].works = {['Institutiones grammaticae'] = {['rlTitle'] = 'Institutiones grammaticae', ['rlFormat'] = 1}}
data['Priscianus'].aliases = {
[false] = 'Institutiones grammaticae',
['Inst.'] = 'Institutiones grammaticae'
}
data['Propertius'] = {}
data['Propertius'].aLink = 'Propertius'
data['Propertius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', {'.roundDown', 5, '.ref3'}}
data['Propertius'].works = {['Elegiae'] = {['year'] = '30-16 BC', ['rlTitle'] = 'Elegiae (Propertius)', ['rlFormat'] = 1}}
data['Propertius'].aliases = {
[false] = 'Elegiae',
['Elegies'] = 'Elegiae'
}
data['Prudentius'] = {}
data['Prudentius'].aLink = 'Prudentius'
data['Prudentius'].year = '348–c. 413 CE'
data['Prudentius'].works = {
['Psychomachia'] = {['wLink'] = 'Psychomachia'}}
data['Publilius Syrus'] = {}
data['Publilius Syrus'].aLink = 'Publilius Syrus'
data['Publilius Syrus'].year = 'c. 50 BC'
data['Publilius Syrus'].works = {['Sententiae'] = {['wLink'] = 'Sententiae'}}
data['Publius Terentius Afer'] = {}
data['Publius Terentius Afer'].aLink = 'Terence'
data['Publius Terentius Afer'].year = 'c. 185-159 BC'
data['Publius Terentius Afer'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Publius Terentius Afer'].works = {
['Adelphoe'] = {['year'] = '160 BC', ['wLink'] = 'Adelphoe', ['rlTitle'] = 'Adelphoe (ed. Kauer-Lindsay)', ['rlFormat'] = 1},
['Andria'] = {['year'] = '166 BC', ['wLink'] = 'Andria (comedy)', ['rlTitle'] = 'Andria', ['rlFormat'] = 1},
['Eunuchus'] = {['year'] = '161 BC', ['wLink'] = 'Eunuchus', ['rlTitle'] = 'Eunuchus', ['rlFormat'] = 1},
['Heauton Timorumenos'] = {['year'] = '163 BC', ['wLink'] = 'Heauton Timorumenos', ['rlTitle'] = 'Heautontimorumenos', ['rlFormat'] = 1},
['Hecyra'] = {['year'] = '165 BC', ['wLink'] = 'Hecyra', ['rlTitle'] = 'Hecyra', ['rlFormat'] = 1},
['Phormio'] = {['year'] = '161 BC', ['wLink'] = 'Phormio (play)', ['rlTitle'] = 'Phormio', ['rlFormat'] = 1}}
data['Publius Terentius Afer'].aliases = {
['Ad.'] = 'Adelphoe',
['And.'] = 'Andria',
['Eun.'] = 'Eunuchus',
['Heaut.'] = 'Heauton Timorumenos',
['Hec.'] = 'Hecyra',
['Phorm.'] = 'Phormio',
['The Eunuch'] = 'Eunuchus',
['The Self-Tormentor'] = 'Heauton Timorumenos'
}
data['Quintus Aurelius Symmachus'] = {}
data['Quintus Aurelius Symmachus'].aLink = 'Quintus Aurelius Symmachus'
data['Quintus Aurelius Symmachus'].year = 'c. 345–402'
data['Quintus Aurelius Symmachus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#EPIST._', {'.numToRoman', '.ref2'}, '.period'}
data['Quintus Aurelius Symmachus'].works = {['Books of Letters'] = {['rlTitle'] = 'Libri Decem Epistolarum', ['rlFormat'] = 1}}
data['Quintus Aurelius Symmachus'].aliases = {
[false] = 'Books of Letters'
}
data['Quintus Curtius Rufus'] = {}
data['Quintus Curtius Rufus'].aLink = 'Quintus Curtius Rufus'
data['Quintus Curtius Rufus'].year = '1st century CE'
data['Quintus Curtius Rufus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Quintus Curtius Rufus'].works = {['Historiae Alexandri Magni'] = {['year'] = 'c. 50 CE', ['wLink'] = 'Histories of Alexander the Great', ['rlTitle'] = 'Historia Alexandri Magni regis Macedonum', ['rlFormat'] = 1}}
data['Quintus Curtius Rufus'].aliases = {
[false] = 'Historiae Alexandri Magni'
}
data['Quintus Gargilius Martialis'] = {}
data['Quintus Gargilius Martialis'].aLink = 'Quintus Gargilius Martialis'
data['Quintus Gargilius Martialis'].year = 'c. 250 CE'
data['Quintus Gargilius Martialis'].works = {['P. Vegeti Renati Digestorum artis mulomedicinae'] = {['year'] = 'c. 260'}}
data['Quintilianus'] = {}
data['Quintilianus'].aLink = 'Quintilian'
data['Quintilianus'].year = 'c. 35–100 CE'
data['Quintilianus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '/Caput ', {'.numToRoman', '.ref2'}, '#', '.ref3'}
data['Quintilianus'].rlFormat2 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Quintilianus'].works = {
['Institutio oratoria'] = {['year'] = 'c. 95', ['wLink'] = 'Institutio Oratoria', ['rlTitle'] = 'Institutio oratoria', ['rlFormat'] = 1},
['Declamationes maiores'] = {['rlTitle'] = 'Declamationes maiores', ['rlFormat'] = 2}}
data['Quintilianus'].aliases = {
[false] = 'Institutio oratoria',
['Decl.'] = 'Declamationes maiores',
['Declamations'] = 'Declamationes maiores',
['De institutione oratoria'] = 'Institutio oratoria',
['De Institutione Oratoria'] = 'Institutio oratoria',
['Inst.'] = 'Institutio oratoria',
['Institutes of Oratory'] = 'Institutio oratoria',
['Institutio Oratoria'] = 'Institutio oratoria'
}
data['Gaius Sallustius Crispus'] = {}
data['Gaius Sallustius Crispus'].aLink = 'Sallust'
data['Gaius Sallustius Crispus'].year = '86 – c. 35 BC'
data['Gaius Sallustius Crispus'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Gaius Sallustius Crispus'].rlFormat2 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Gaius Sallustius Crispus'].works = {
['Bellum Catilinae'] = {['year'] = 'c. 42 BCE', ['wLink'] = 'The Conspiracy of Catiline', ['rlTitle'] = 'De Catilinae coniuratione', ['rlFormat'] = 2},
['Bellum Jugurthinum'] = {['year'] = 'c. 40 BCE', ['rlTitle'] = 'Bellum Iugurthinum', ['rlFormat'] = 1}}
data['Gaius Sallustius Crispus'].aliases = {
['Bellum Iugurthinum'] = 'Bellum Jugurthinum',
['De Bello Jugurthino'] = 'Bellum Jugurthinum',
['De bello Jugurthino'] = 'Bellum Jugurthinum',
['De Catilinae coniuratione'] = 'Bellum Catilinae',
['J.'] = 'Bellum Jugurthinum',
['C.'] = 'Bellum Catilinae'
}
data['Salvianus'] = {}
data['Salvianus'].aLink = 'Salvian'
data['Salvianus'].year = '400–470'
data['Salvianus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Salvianus'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Salvianus'].rlFormat3 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}}
data['Salvianus'].works = {
['Adversus avaritiam'] = {['rlTitle'] = 'Adversus avaritiam', ['rlFormat'] = 1},
['Epistolae'] = {['rlTitle'] = 'Epistolae (Salvianus)', ['rlFormat'] = 2},
['De gubernatione Dei'] = {['rlTitle'] = 'De gubernatione Dei', ['rlFormat'] = 3}}
data['Salvianus'].aliases = {
['Against Avarice'] = 'Adversus avaritiam',
['Avar.'] = 'Adversus avaritiam',
['Ep.'] = 'Epistolae',
['Epistles'] = 'Epistolae',
['Epistulae'] = 'Epistolae',
['Gub. Dei'] = 'De gubernatione Dei',
['On the Government of God'] = 'De gubernatione Dei'
}
data['Santra'] = {}
data['Santra'].aLink = 'Santra (Roman author)'
data['Santra'].year = 'c. 1st century BCE'
data['Santra'].works = {
['Nuptiae Bacchi'] = {['rlTitle'] = 'Nuptiae Bacchi'},
['De Antiquitate Verborum'] = {['rlTitle'] = 'De Antiquitate Verborum'}
}
data['Scribonius Largus'] = {}
data['Scribonius Largus'].aLink = 'Scribonius Largus'
data['Scribonius Largus'].year = 'c. 1–c. 50 CE'
data['Scribonius Largus'].works = {['Compositiones medicamentorum'] = {['year'] = 'c. 43–46', ['wLink'] = 'de:Compositiones', ['rlTitle'] = 'Compositiones medicamentorum'}}
data['Scribonius Largus'].aliases = {
[false] = 'Compositiones medicamentorum',
['Conpositiones'] = 'Compositiones medicamentorum',
['Conpositiones medicamentorum'] = 'Compositiones medicamentorum',
['Compositiones'] = 'Compositiones medicamentorum'
}
data['Seneca Maior'] = {}
data['Seneca Maior'].aLink = 'Seneca the Elder'
data['Seneca Maior'].year = 'c. 54 BC–c. 39 CE'
data['Seneca Maior'].rlFormat1 = {'s:la:', '.rlTitle', '#', 'Liber ', {'.numToRoman', '.ref1'}}
data['Seneca Maior'].works = {
['Controversiae'] = {['year'] = 'c. 37–41 CE', ['rlTitle'] = 'Controversiae', ['rlFormat'] = 1}}
data['Seneca Minor'] = {}
data['Seneca Minor'].aLink = 'Seneca the Younger'
data['Seneca Minor'].year = 'c. 4 BC–65 CE'
data['Seneca Minor'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Seneca Minor'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Seneca Minor'].rlFormat3 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Seneca Minor'].rlFormat4 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Seneca Minor'].rlFormat5 = {'s:la:', '.rlTitle', '#', {'.roundDown', 5, '.ref1'}}
data['Seneca Minor'].rlFormat6 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Seneca Minor'].rlFormat7 = {'s:la:', '.rlTitle', '#Actvs ', {'.numToRoman', '.ref1'}, '.period'}
data['Seneca Minor'].rlFormat8 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period', '.ref2'}
data['Seneca Minor'].rlFormat9 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', '.ref3'}
data['Seneca Minor'].rlFormat10 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Seneca Minor'].works = {
['Agamemnon'] = {['wLink'] = 'Agamemnon (Seneca)', ['rlTitle'] = 'Agamemnon', ['rlFormat'] = 5},
['Apocolocyntosis divi Claudii'] = {['wLink'] = 'Apocolocyntosis', ['year'] = '54', ['rlTitle'] = 'Apocolocyntosis divi Claudii', ['rlFormat'] = 4},
['Consolatio ad Helviam'] = {['wLink'] = 'Consolatio ad Helviam', ['year'] = 'c. 42', ['rlTitle'] = 'Ad Helviam Matrem, de Consolatione', ['rlFormat'] = 8},
['Consolatio ad Marciam'] = {['wLink'] = 'De Consolatione ad Marciam', ['year'] = 'c. 40', ['rlTitle'] = 'Ad Marciam, de Consolatione', ['rlFormat'] = 8},
['Consolatio ad Polybium'] = {['wLink'] = 'Consolatio ad Polybium', ['rlTitle'] = 'Ad Polybium, de Consolatione', ['rlFormat'] = 8},
['De Beneficiis'] = {['wLink'] = 'De Beneficiis', ['rlTitle'] = 'De Beneficiis', ['year'] = 'c. 59', ['rlFormat'] = 2},
['De brevitate vitae'] = {['wLink'] = 'De Brevitate Vitae (Seneca)', ['rlTitle'] = 'De brevitate vitae', ['rlFormat'] = 1},
['De ira'] = {['wLink'] = 'De Ira', ['year'] = 'c. 45', ['rlTitle'] = 'De ira', ['rlFormat'] = 9},
['De vita beata'] = {['wLink'] = 'De Vita Beata', ['rlTitle'] = 'De vita beata', ['year'] = 'c. 58', ['rlFormat'] = 1},
['Epistulae morales ad Lucilium'] = {['wLink'] = 'Epistulae Morales ad Lucilium', ['rlTitle'] = 'Epistulae morales ad Lucilium', ['year'] = 'c. 65', ['rlFormat'] = 3},
['Hercules furens'] = {['wLink'] = 'Hercules (Seneca)', ['rlTitle'] = 'Hercules furens', ['rlFormat'] = 5},
['Hercules Oetaeus'] = {['wLink'] = 'Hercules Oetaeus', ['rlTitle'] = 'Hercules Oetaeus', ['rlFormat'] = 5},
['Medea'] = {['wLink'] = 'Medea (Seneca)', ['rlTitle'] = 'Medea', ['rlFormat'] = 6},
['Naturales quaestiones'] = {['wLink'] = 'Naturales quaestiones', ['rlTitle'] = 'Quaestiones Naturales', ['year'] = '62-64', ['rlFormat'] = 2},
['Phaedra'] = {['wLink'] = 'Phaedra (Seneca)', ['year'] = 'c. 54', ['rlTitle'] = 'Phaedra', ['rlFormat'] = 6},
['Phoenissae'] = {['wLink'] = 'Phoenissae (Seneca)', ['rlTitle'] = 'Phoenissae', ['rlFormat'] = 5},
['Octavia'] = {['wLink'] = 'Octavia (play)', ['rlTitle'] = 'Octavia', ['rlFormat'] = 5},
['Oedipus'] = {['wLink'] = 'Oedipus (Seneca)', ['rlTitle'] = 'Oedipus', ['rlFormat'] = 5},
['Thyestes'] = {['wLink'] = 'Thyestes (Seneca)', ['rlTitle'] = 'Thyestes', ['rlFormat'] = 7},
['Troades'] = {['wLink'] = 'Troades (Seneca)', ['rlTitle'] = 'Troades', ['rlFormat'] = 5},
['De constantia sapientis'] = {['wLink'] = 'De Constantia Sapientis', ['year'] = 'c. 55', ['rlTitle'] = 'De constantia sapientis', ['rlFormat'] = 10}
}
data['Seneca Minor'].aliases = {
['Agam.'] = 'Agamemnon',
['Apocolocyntosis'] = 'Apocolocyntosis divi Claudii',
['Ben.'] = 'De Beneficiis',
['Brev.'] = 'De brevitate vitae',
['Br.'] = 'De brevitate vitae',
['Cons. ad Helv.'] = 'Consolatio ad Helviam',
['Cons. Helv.'] = 'Consolatio ad Helviam',
['Cons. ad Marc.'] = 'Consolatio ad Marciam',
['Cons. Marc.'] = 'Consolatio ad Marciam',
['Cons. ad Polyb.'] = 'Consolatio ad Polybium',
['Cons. Polyb.'] = 'Consolatio ad Polybium',
['Const.'] = 'De constantia sapientis',
['Divi Claudii apotheosis per saturam'] = 'Apocolocyntosis divi Claudii',
['Ep.'] = 'Epistulae morales ad Lucilium',
['Epistles'] = 'Epistulae morales ad Lucilium',
['Epistulae morales ad Lucilium'] = 'Epistulae morales ad Lucilium',
['Helv.'] = 'Consolatio ad Helviam',
['Herc. Fur.'] = 'Hercules furens',
['Hercules Furens'] = 'Hercules furens',
['Herc. Oet.'] = 'Hercules Oetaeus',
['Hippol.'] = 'Phaedra',
['Hippolytus'] = 'Phaedra',
['Ira'] = 'De ira',
['Lud. Mort. Claud.'] = 'Apocolocyntosis divi Claudii',
['Ludus de morte Claudii'] = 'Apocolocyntosis divi Claudii',
['Marc.'] = 'Consolatio ad Marciam',
['Med.'] = 'Medea',
['Nat.'] = 'Naturales quaestiones',
['Octav.'] = 'Octavia',
['Oedip.'] = 'Oedipus',
['On the Firmness of the Wise'] = 'De constantia sapientis',
['Ph.'] = 'Phaedra',
['Phaedr.'] = 'Phaedra',
['Phoen.'] = 'Phoenissae',
['Polyb.'] = 'Consolatio ad Polybium',
['Q. N.'] = 'Naturales quaestiones',
['Thyest.'] = 'Thyestes',
['Troad.'] = 'Troades',
['Vit. Beat.'] = 'De vita beata'
}
data['Servius Honoratus'] = {}
data['Servius Honoratus'].aLink = 'Servius (grammarian)'
data['Servius Honoratus'].year = 'c. 4th-5th century'
data['Servius Honoratus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2'}
data['Servius Honoratus'].works = {
['In Vergilii Aeneidem commentarii'] = {['rlTitle'] = 'In Vergilii Aeneidem commentarii', ['rlFormat'] = 1}}
data['Servius Honoratus'].aliases = {
['A.'] = 'In Vergilii Aeneidem commentarii',
['Aen.'] = 'In Vergilii Aeneidem commentarii',
['Aeneis'] = 'In Vergilii Aeneidem commentarii',
['Commentarii in Vergilii Aeneidem'] = 'In Vergilii Aeneidem commentarii',
['Verg. A.'] = 'In Vergilii Aeneidem commentarii',
['In Vergilii Aeneidem Commentarii'] = 'In Vergilii Aeneidem commentarii'
}
data['Sextus Julius Frontinus'] = {}
data['Sextus Julius Frontinus'].aLink = 'Frontinus'
data['Sextus Julius Frontinus'].year = 'c. 40–103 CE'
data['Sextus Julius Frontinus'].xrlFormat1 = {'https://penelope.uchicago.edu/Thayer/L/Roman/Texts/Frontinus/De_Aquis/', '.ref1', '*.html#', '.ref1', '.', '.ref2'}
data['Sextus Julius Frontinus'].xrlFormat2 = {'https://penelope.uchicago.edu/Thayer/L/Roman/Texts/Frontinus/Strategemata/', '.ref1', '*.html#', '.ref2', '.', '.ref3'}
data['Sextus Julius Frontinus'].works = {
['De Aqueductibus Urbis Romae'] = {['wLink'] = 'De aquaeductu', ['year'] = '96–103', ['xrlFormat'] = 1},
['Strategematica'] = {['wLink'] = 'Strategemata', ['year'] = '88–96',['xrlFormat'] = 2}}
data['Sextus Julius Frontinus'].aliases = {
['Aquaed.'] = 'De Aqueductibus Urbis Romae',
['Strat.'] = 'Strategematica'
}
data['Sextus Pompeius Festus'] = {}
data['Sextus Pompeius Festus'].aLink = 'Sextus Pompeius Festus'
data['Sextus Pompeius Festus'].year = 'c. 2nd century'
data['Sextus Pompeius Festus'].rlFormat1 = {'s:la:', '.rlTitle'}
data['Sextus Pompeius Festus'].works = {
['De verborum significatione'] = {['wLink'] = 'De verborum significatione', ['rlTitle'] = 'Fragmentum de significatione verborum', ['rlFormat'] = 1}}
data['Sextus Pompeius Festus'].aliases = {
[false] = 'De verborum significatione'
}
data['Sidonius Apollinaris'] = {}
data['Sidonius Apollinaris'].aLink = 'Sidonius Apollinaris'
data['Sidonius Apollinaris'].year = 'c. 430–c. 489'
data['Sidonius Apollinaris'].rlFormat1 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', {'.roundDown', 5, '.ref2'}}
data['Sidonius Apollinaris'].rlFormat2 = {'s:la:', '.rlTitle', '#EPISTULA_', {'.numToRoman', '.ref2'}, '_', '.ref1'}
data['Sidonius Apollinaris'].works = {
['Carmina'] = {['rlTitle'] = 'Carmina (Sidonius Apollinaris)', ['rlFormat'] = 1},
['Epistulae'] = {['rlTitle'] = 'Epistularum Libri IX', ['rlFormat'] = 2}}
data['Sidonius Apollinaris'].aliases = {
['Carm.'] = 'Carmina',
['Ep.'] = 'Epistulae',
['Letters'] = 'Epistulae'
}
data['Silius Italicus'] = {}
data['Silius Italicus'].aLink = 'Silius Italicus'
data['Silius Italicus'].year = 'c. 26–c. 101'
data['Silius Italicus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Silius Italicus'].works = {
['Punica'] = {['wLink'] = 'Punica (poem)', ['rlTitle'] = 'Punica', ['year'] = ' c. 83–96', ['rlFormat'] = 1}}
data['Silius Italicus'].aliases = {
[false] = 'Punica'
}
data['Solinus'] = {}
data['Solinus'].aLink = 'Gaius Julius Solinus'
data['Solinus'].year = 'c. 250 CE'
data['Solinus'].rlFormat1 = {'s:la:', 'De rebus mirabilibus', '#', {'.numToRoman', '.ref1'}, '.period', '.ref2'}
data['Solinus'].works = {['De mirabilibus mundi'] = {['rlTitle'] = 'De mirabilibus mundi', ['rlFormat'] = 1}}
data['Solinus'].aliases = {
[false] = 'De mirabilibus mundi'
}
data['Suetonius'] = {}
data['Suetonius'].aLink = 'Suetonius'
data['Suetonius'].year = 'c. 69-122'
data['Suetonius'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Suetonius'].rlFormat2 = {'s:la:', '.rlTitle', '/', '.ref1', '#', '.ref2'}
data['Suetonius'].rlFormat3 = {'s:la:', '.rlTitle', '/', '.ref1'}
data['Suetonius'].rdFormat = {separators = {' ', '.period', '.period'}}
data['Suetonius'].works = {
['De grammaticis et rhetoribus'] = {['rlTitle'] = 'De viris illustribus (Suetonius)/De grammaticis et rhetoribus', ['rlFormat'] = 1},
['De vita Caesarum'] = {['year'] = '121', ['wLink'] = 'The Twelve Caesars', ['rlTitle'] = 'De vita Caesarum libri VIII', ['rlFormat'] = 2},
['De poetis'] = {['rlTitle'] = 'De viris illustribus (Suetonius)/De poetis', ['rlFormat'] = 3},}
data['Suetonius'].aliases = {
[false] = 'De vita Caesarum',
['The Twelve Caesars'] = 'De vita Caesarum',
['De vita Caesarum libri VIII'] = 'De vita Caesarum',
['Lives of the Grammarians'] = 'De grammaticis et rhetoribus',
['Lives of the Poets'] = 'De poetis',
['De Poetis'] = 'De poetis',
['Gram.'] = 'De grammaticis et rhetoribus',
['Gramm.'] = 'De grammaticis et rhetoribus'
}
data['Sulpicius Severus'] = {}
data['Sulpicius Severus'].aLink = 'Sulpicius Severus'
data['Sulpicius Severus'].year = 'c. 363–c. 425'
data['Sulpicius Severus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Sulpicius Severus'].rlFormat2 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period', {'.numToRoman', '.ref2'}}
data['Sulpicius Severus'].rlFormat3 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Sulpicius Severus'].works = {
['Chronica'] = {['rlTitle'] = 'Chronicorum libri duo', ['rlFormat'] = 1},
['Dialogi'] = {['rlTitle'] = 'Dialogi (Sulpicius)', ['rlFormat'] = 2},
['Vita Sancti Martini'] = {['rlTitle'] = 'Vita Sancti Martini', ['rlFormat'] = 3}}
data['Sulpicius Severus'].aliases = {
['Chronicle'] = 'Chronica',
['Chronicorum libri duo'] = 'Chronica',
['Dial.'] = 'Dialogi',
['Dialogues'] = 'Dialogi',
['Life of St. Martin'] = 'Vita Sancti Martini'
}
data['Statius'] = {}
data['Statius'].aLink = 'Statius'
data['Statius'].year = 'c. 45 – 96 CE'
data['Statius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Statius'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period', {'.roundDown', 5, '.ref3'}}
data['Statius'].works = {
['Thebais'] = {['wLink'] = 'Thebaid (Latin poem)', ['rlTitle'] = 'Thebais', ['rlFormat'] = 1},
['Silvae'] = {['wLink'] = 'Silvae', ['rlTitle'] = 'Silvae', ['rlFormat'] = 2, ['year'] = '89–96'},
['Achilleis'] = {['wLink'] = 'Achilleid', ['rlTitle'] = 'Achilleis', ['rlFormat'] = 1, ['year'] = '94–96'}}
data['Statius'].aliases = {
['Ach.'] = 'Achilleis',
['Achil'] = 'Achilleis',
['Achilleid'] = 'Achilleis',
['Thebaid'] = 'Thebais',
['Th.'] = 'Thebais',
['Theb.'] = 'Thebais',
['S.'] = 'Silvae',
['Silv.'] = 'Silvae'
}
data['Tacitus'] = {}
data['Tacitus'].aLink = 'Tacitus'
data['Tacitus'].year = 'c. 56 – 117 CE'
data['Tacitus'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Tacitus'].rlFormat2 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Tacitus'].works = {
['Agricola'] = {['year'] = 'c. 98', ['wLink'] = 'Agricola (book)', ['rlTitle'] = 'De vita et moribus Iulii Agricolae', ['rlFormat'] = 1},
['Annales'] = {['wLink'] = 'Annals (Tacitus)', ['year'] = 'c. 117', ['rlTitle'] = 'Ab excessu divi Augusti (Annales)', ['rlFormat'] = 2},
['Dialogus de oratoribus'] = {['wLink'] = 'Dialogus de oratoribus', ['year'] = 'c. 102', ['rlTitle'] = 'Dialogus de oratoribus', ['rlFormat'] = 1},
['Germania'] = {['wLink'] = 'Germania (book)', ['year'] = 'c. 98', ['rlTitle'] = 'De origine et situ Germanorum (Germania)', ['rlFormat'] = 1},
['Historiae'] = {['wLink'] = 'Histories (Tacitus)', ['year'] = 'c. 100–110', ['rlTitle'] = 'Historiae (Tacitus)', ['rlFormat'] = 2}}
data['Tacitus'].aliases = {
['A.'] = 'Annales',
['Agr.'] = 'Agricola',
['An.'] = 'Annales',
['Ann.'] = 'Annales',
['Annals'] = 'Annales',
['Dial.'] = 'Dialogus de oratoribus',
['G.'] = 'Germania',
['Germ.'] = 'Germania',
['H.'] = 'Historiae',
['Hist.'] = 'Historiae',
['Histories'] = 'Historiae',
['Or.'] = 'Dialogus de oratoribus'
}
data['Tertullianus'] = {}
data['Tertullianus'].aLink = 'Tertullian'
data['Tertullianus'].year = 'c. 160 – c. 225 CE'
data['Tertullianus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}, '.period'}
data['Tertullianus'].rlFormat2 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Tertullianus'].rlFormat3 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Tertullianus'].rlFormat4 = {'s:la:', '.rlTitle', '#CAPUT_', {'.numToRoman', '.ref1'}, '.period'}
data['Tertullianus'].rlFormat5 = {'s:la:', '.rlTitle', '#', '.ref1'}
data['Tertullianus'].rlFormat6 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period'}
data['Tertullianus'].rlFormat7 = {'s:la:', '.rlTitle', '#', '.ref1', '.period', '.ref2'}
data['Tertullianus'].rlFormat8 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}, '.period', '.ref2'}
data['Tertullianus'].works = {
['Ad uxorem'] = {['rlTitle'] = 'Ad uxorem', ['rlFormat'] = 1},
['Adversus Marcionem'] = {['year'] = '207-208', ['rlTitle'] = 'Adversus Marcionem', ['rlFormat'] = 2},
['Apologeticus'] = {['wLink'] = 'Apologeticus', ['rlTitle'] = 'Apologeticus (Tertullianus)', ['rlFormat'] = 3},
['De anima'] = {['rlTitle'] = 'De anima (Tertullianus)', ['rlFormat'] = 3},
['De carne Christi'] = {['year'] = 'c. 203–206', ['wLink'] = 'De Carne Christi', ['rlTitle'] = 'De carne Christi', ['rlFormat'] = 4},
['De corona militis'] = {['rlTitle'] = 'De corona militis', ['rlFormat'] = 5},
['De cultu feminarum'] = {['rlTitle'] = 'De cultu feminarum', ['rlFormat'] = 6},
['De fuga in persecutione'] = {},
['De jejuniis'] = {},
['De paenitentia'] = {['rlTitle'] = 'De paenitentia (Tertullianus)', ['rlFormat'] = 7},
['De praescriptionibus hereticorum'] = {['rlTitle'] = 'De praescriptione haereticorum', ['rlFormat'] = 8},
['De pudicitia'] = {},
['De spectaculis'] = {['wLink'] = 'De Spectaculis', ['rlTitle'] = 'De spectaculis', ['rlFormat'] = 8},
['De resurrectione carnis'] = {['rlTitle'] = 'De resurrectione carnis', ['rlFormat'] = 5},
['De virginibus velandis'] = {['rlTitle'] = 'De virginibus velandis', ['rlFormat'] = 4},
['Idololatria'] = {['rlTitle'] = 'De idolatria', ['rlFormat'] = 6},
['Monogamia'] = {}}
data['Tertullianus'].aliases = {
['ad Uxor.'] = 'Ad uxorem',
['Anim.'] = 'De anima',
['Apol.'] = 'Apologeticus',
['Carn. Christ.'] = 'De carne Christi',
['Cor. Mil.'] = 'De corona militis',
['Cult. Fem.'] = 'De cultu feminarum',
['De ieiuniis'] = 'De jejuniis',
['Fug. in Pers.'] = 'De fuga in persecutione',
['Idol.'] = 'Idololatria',
['Jejun.'] = 'De jejuniis',
['Marc.'] = 'Adversus Marcionem',
['Monog.'] = 'Monogamia',
['Paen.'] = 'De paenitentia',
['Praes. Her.'] = 'De praescriptionibus hereticorum',
['Pudic.'] = 'De pudicitia',
['Spect.'] = 'De spectaculis',
['Virg. Vel.'] = 'De virginibus velandis'
}
data['Thomas Burnet'] = {}
data['Thomas Burnet'].aLink = 'Thomas Burnet'
data['Thomas Burnet'].year = 'c. 1635 - 1715 CE'
data['Thomas Burnet'].works = {['Thesaurus medicinae practicae'] = {['year'] = '1698'}}
data['Tiberianus'] = {}
data['Tiberianus'].aLink = 'Tiberianus (poet)'
data['Tiberianus'].year = 'c. 4th century CE'
data['Tiberianus'].rlFormat1 = {'s:la:', 'Pervigilium Veneris'}
data['Tiberianus'].works = {['Pervigilium Veneris'] = {['wLink'] = 'Pervigilium Veneris', ['rlFormat'] = 1}}
data['Albius Tibullus'] = {}
data['Albius Tibullus'].aLink = 'Tibullus'
data['Albius Tibullus'].year = 'c. 50-19 BC'
data['Albius Tibullus'].rlFormat1 = {'s:la:', '.rlTitle', '/', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Albius Tibullus'].works = {
['Elegiae'] = {['rlTitle'] = 'Elegiae (Albius Tibullus)', ['rlFormat'] = 1}}
data['Albius Tibullus'].aliases = {
[false] = 'Elegiae',
['Elegies'] = 'Elegiae'
}
data['Titus Livius'] = {}
data['Titus Livius'].aLink = 'Livy'
data['Titus Livius'].year = '59 BC – 17 CE'
data['Titus Livius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Titus Livius'].works = {['Ab urbe condita'] = {['year'] = '27–25 BC', ['wLink'] = 'History of Rome (Livy)', ['rlTitle'] = 'Ab urbe condita', ['rlFormat'] = 1}}
data['Titus Livius'].aliases = {
[false] = 'Ab urbe condita',
['Ab Urbe Condita'] = 'Ab urbe condita',
['From the Founding of the City'] = 'Ab urbe condita',
['History of Rome'] = 'Ab urbe condita',
['The History of Rome'] = 'Ab urbe condita',
['The history of Rome'] = 'Ab urbe condita'
}
data['Valerius Aedituus'] = {}
data['Valerius Aedituus'].aLink = 'Valerius Aedituus'
data['Valerius Aedituus'].year = 'c. 150-100 BCE'
data['Valerius Aedituus']. works = {
['Fragment 1'] = {['rlTitle'] = 'Fragment 1'},
['Fragment 2'] = {['rlTitle'] = 'Fragment 2'}
}
data['Valerius Maximus'] = {}
data['Valerius Maximus'].aLink = 'Valerius Maximus'
data['Valerius Maximus'].year = '1st c. CE'
data['Valerius Maximus'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.numToRoman', '.ref2'}}
data['Valerius Maximus']. works = {['Factorum et dictorum memorabilium'] = {['rlTitle'] = 'Factorum et dictorum memorabilium libri IX', ['year'] = '14-37', ['rlFormat'] = 1}}
data['Valerius Maximus'].aliases = {[false] = 'Factorum et dictorum memorabilium'}
data['Vegetius'] = {}
data['Vegetius'].aLink = 'Publius Flavius Vegetius Renatus'
data['Vegetius'].year = 'c. 360 – 400 CE'
data['Vegetius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}}
data['Vegetius'].works = {['De Re Militari'] = {['wLink'] = 'De Re Militari', ['rlTitle'] = 'Epitoma rei militaris', ['rlFormat'] = 1}}
data['Vegetius'].aliases = {
['Mil.'] = 'De Re Militari'
}
data['Venantius Fortunatus'] = {}
data['Venantius Fortunatus'].aLink = 'Venantius Fortunatus'
data['Venantius Fortunatus'].year = 'c. 530–c. 600'
data['Venantius Fortunatus'].rlFormat1 = {'s:la:', '.rlTitle', '#', {'.numToRoman', '.ref1'}}
data['Venantius Fortunatus'].works = {['Vita Germani'] = {['rlTitle'] = 'Vita Germani (Venantius)', ['rlFormat'] = 1}}
data['Venantius Fortunatus'].aliases = {
['The Life of Germain'] = 'Vita Germani',
['Vit. Germ.'] = 'Vita Germani'
}
data['Victor III'] = {}
data['Victor III'].aLink = 'Pope Victor III'
data['Victor III'].year = 'c. 1026–1087'
data['Vergilius'] = {}
data['Vergilius'].aLink = 'Virgil'
data['Vergilius'].year = '70–19 BC'
data['Vergilius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Vergilius'].rlFormat2 = {'s:la:', '.rlTitle', '/Ecloga ', {'.numToRoman', '.ref1'}, '#', {'.roundDown', 5, '.ref2'}}
data['Vergilius'].works = {
['Aeneis'] = {['year'] ='29–19 BC', ['wLink'] = 'Aeneid', ['rlTitle'] = 'Aeneis', ['rlFormat'] = 1},
['Eclogae'] = {['year'] = 'c. 41-39 BC', ['wLink'] = 'Eclogues', ['rlTitle'] = 'Eclogae vel bucolica', ['rlFormat'] = 2},
['Georgicon'] = {['year'] = 'c. 37-30 BC', ['wLink'] = 'Georgics', ['rlTitle'] = 'Georgicon (Greenough)', ['rlFormat'] = 1},
['Copa'] = {},
['Culex'] = {},
['Moretum'] = {},
['Ciris'] = {},
['Catalepton'] = {}}
data['Vergilius'].aliases = {
['A.'] = 'Aeneis',
['Aen.'] = 'Aeneis',
['Aeneid'] = 'Aeneis',
['Bucolics'] = 'Eclogae',
['Cat.'] = 'Catalepton',
['Cir.'] = 'Ciris',
['Cop.'] = 'Copa',
['Cul.'] = 'Culex',
['E.'] = 'Eclogae',
['Ecl.'] = 'Eclogae',
['Eclogues'] = 'Eclogae',
['G.'] = 'Georgicon',
['Georg.'] = 'Georgicon',
['Georgica'] = 'Georgicon',
['Georgics'] = 'Georgicon',
['M.'] = 'Moretum',
['Mor.'] = 'Moretum',
['The Barmaid'] = 'Copa',
['The Gnat'] = 'Culex',
['The Pesto'] = 'Moretum',
['The Sea-Bird'] = 'Ciris',
['Trifles'] = 'Catalepton'
}
data['Vitruvius'] = {}
data['Vitruvius'].aLink = 'Vitruvius'
data['Vitruvius'].year = 'c. 80 - 15 BC'
data['Vitruvius'].rlFormat1 = {'s:la:', '.rlTitle', '/Liber ', {'.numToRoman', '.ref1'}, '#', '.ref2', '.period', '.ref3'}
data['Vitruvius'].works = {['De architectura'] = {['year'] = 'c. 15 BC', ['wLink'] = 'De architectura', ['rlTitle'] = 'De architectura', ['rlFormat'] = 1}}
data['Vitruvius'].aliases = {
[false] = 'De architectura'
}
data['William of Malmesbury'] = {}
data['William of Malmesbury'].aLink = 'William of Malmesbury'
data['William of Malmesbury'].year = 'c. 1095 - c. 1143'
data['William of Malmesbury'].works = {
['Gesta Regum Anglorum'] = {['year'] = '1125', ['wLink'] = 'Gesta Regum Anglorum'},
['Gesta Pontificum Anglorum'] = {['year'] = '1125', ['wLink'] = 'Gesta Pontificum Anglorum'},
['Historia Novella'] = {['year'] = '1142'}}
return {['data'] = data}
5xd712lc80lbol67mqhpirpjnlfrmud
Module:Quotations/date validation
828
38960
178394
2026-10-24T05:21:33Z
GinawaSaHapon
3989
Nilikha ang pahina na may 'local canonical_AD = 'KP' local canonical_BCE = 'BKP' local AD_limit = 999 -- maximum year to append CE local export = {} local function validate_year(yearstring) local year = tonumber(yearstring) if (year == nil) then return false end if (year <= 0) then return false end return year end local function validate_tp(tpstring) -- validates ad, bc, bce, ... local tpstring = string.upper(tpstring) local tpstring = string.gsub(tpstring, "%.", "") local...'
178394
Scribunto
text/plain
local canonical_AD = 'KP'
local canonical_BCE = 'BKP'
local AD_limit = 999 -- maximum year to append CE
local export = {}
local function validate_year(yearstring)
local year = tonumber(yearstring)
if (year == nil) then
return false
end
if (year <= 0) then
return false
end
return year
end
local function validate_tp(tpstring)
-- validates ad, bc, bce, ...
local tpstring = string.upper(tpstring)
local tpstring = string.gsub(tpstring, "%.", "")
local bcetable = {["BC"] = true, ["BCE"] = true, ["BKP"] = true}
local adtable = {["AD"] = true, ["CE"] = true, ["KP"] = true}
if bcetable[tpstring] then
return canonical_BCE
end
if adtable[tpstring] then
return canonical_AD
end
return false
end
local function validate_approx(approxstring)
approxstring = string.lower(approxstring)
approxstring = string.gsub(approxstring, "%.", "")
local approx_table = {["a"] = true,
["c"] = true,
["circa"] = true,
["approx"] = true}
if approx_table[approxstring] then
return "a"
end
return false
end
local function parse_date(datestring)
local result = {}
local separators = {'-', '–'}
local canonical_separator = '-'
for i, separator in pairs(separators) do -- replace any nonstandard separators
datestring = string.gsub(datestring, separator, canonical_separator)
end
local datetable = mw.text.split(datestring, canonical_separator)
for i, yearstring in ipairs(datetable) do
local yeartable_temp = mw.text.split(yearstring, ' ')
local yeartable = {}
for i, v in ipairs(yeartable_temp) do -- remove any empty strings
if (v ~= '') then
table.insert(yeartable, v)
end
end
if (#yeartable == 1) then
-- only year is specified
table.insert(result, {'e', validate_year(yeartable[1]), "?"})
end
if (#yeartable == 2) then
-- either year, BCE/AD or c, year
local yt1 = validate_year(yeartable[1])
local yt2 = validate_year(yeartable[2])
if (yt1 ~= false) then -- year, BCE/AD
table.insert(result, {'e', yt1, validate_tp(yeartable[2])})
end
if (yt1 == false) then -- c, year
table.insert(result, {validate_approx(yeartable[1]), yt2, "?"})
end
end
if (#yeartable == 3) then
-- c, year, BCE/AD
table.insert(result, {validate_approx(yeartable[1]), validate_year(yeartable[2]), validate_tp(yeartable[3])})
end
end
for i, v in pairs(result) do
for i_, v_ in pairs(v) do
if (v_ == false) then
return false
end
end
end
if (#result == 1) then
if result[1][3] == "?" then
result[1][3] = canonical_AD
end
return result
end
if (#result == 2) then
-- add in missing time periods
if result[1][3] == "?" then
if result[2][3] == "?" then
result[1][3] = canonical_AD
result[2][3] = canonical_AD
end
if result[2][3] == canonical_AD then
result[1][3] = canonical_AD
end
if result[2][3] == canonical_BCE then
result[1][3] = canonical_BCE
end
end
if result[1][3] == canonical_AD then
if result[2][3] == "?" then
result[2][3] = canonical_AD
end
if result[2][3] == canonical_BCE then
return false
end
end
if result[1][3] == canonical_BCE then
if result[2][3] == "?" then
result[2][3] = canonical_BCE
end
end
-- validate time ranges
if result[1][3] == result[2][3] then
if result[1][3] == canonical_BCE then
if result[2][2] > result[1][2] then
return false
end
else
if result[2][2] < result[1][2] then
return false
end
end
else
if result[1][3] == canonical_AD and result[2][3] == canonical_BCE then
return false
end
end
return result
end
return false
end
local function display_date(parsed_date)
local separator = ' – '
local CE = "<small class='ce-date'>[[Appendix:Glossary#CE|<span title=\"Glossary and display preference\">KP</span>]]</small>"
local BCE = "<small class='ce-date'>[[Appendix:Glossary#BCE|<span title=\"Glossary and display preference\">BKP</span>]]</small>"
local circa = "''[[circa|c.]]''"
local result = {}
for i, v in ipairs(parsed_date) do
local s = ""
if v[1] == 'a' then
s = s..circa.." "
end
s = s..tostring(v[2]).." "
if v[3] == canonical_BCE then
s = s..BCE
end
if v[3] == canonical_AD then
if (v[2] <= AD_limit) then
s = s..CE
end
end
table.insert(result, mw.text.trim(s))
end
return table.concat(result, separator)
end
function export.main(datestring)
local parsed_date = parse_date(datestring)
if (parsed_date ~= false) then
return display_date(parsed_date)
end
return datestring
end
return export
291llnmqnwgi6zaav5awowwpovsyy8z
Padron:la-adecl
10
38961
178403
2026-10-24T07:00:10Z
GinawaSaHapon
3989
Nilikha ang pahina na may '{{#invoke:la-nominal|show_adj}}<!-- --><noinclude>{{documentation}}</noinclude>'
178403
wikitext
text/x-wiki
{{#invoke:la-nominal|show_adj}}<!--
--><noinclude>{{documentation}}</noinclude>
tcdna2j208sidwaggcrk6yhomb3kreq
Module:la-adj/table
828
38962
178404
2026-10-24T07:09:33Z
GinawaSaHapon
3989
Nilikha ang pahina na may 'local export = {} local m_table = require("Module:table") local m_inflection_table = require("Module:inflection-table") local function convert(data, conv) local col = {} local row = {} local marked = {} local slots = {} local function add(i,j) local col = col[i][j] local row = row[i][j] if col==0 or row==0 then return "" end local entry = data.finish_show_form(data, slots[i][j]) if col==1 then if row==1 then return '\n| ' .. entry...'
178404
Scribunto
text/plain
local export = {}
local m_table = require("Module:table")
local m_inflection_table = require("Module:inflection-table")
local function convert(data, conv)
local col = {}
local row = {}
local marked = {}
local slots = {}
local function add(i,j)
local col = col[i][j]
local row = row[i][j]
if col==0 or row==0 then
return ""
end
local entry = data.finish_show_form(data, slots[i][j])
if col==1 then
if row==1 then
return '\n| ' .. entry
else
return '\n| rowspan=' .. row .. ' | ' .. entry
end
else
if row==1 then
return '\n| colspan=' .. col .. ' | ' .. entry
else
return '\n| colspan=' .. col .. ' rowspan=' .. row .. ' | ' .. entry
end
end
end
for i=1,#conv do
col[i] = {}
row[i] = {}
marked[i] = {}
slots[i] = {}
for j=1,#conv[i] do
col[i][j] = 1
row[i][j] = 1
marked[i][j] = false
slots[i][j] = {conv[i][j]}
end
end
-- Return true if the contents of the two slots are equal in every
-- way. This means the forms are the same, the footnote text is the
-- same, and the accelerator lemmas are the same. We need to compare
-- the accelerator lemmas because in some cases different slots have
-- different lemmas (e.g. when noneut=1 is set, the masculine slots
-- will have the masculine lemma but the feminine slots will have the
-- feminine lemma).
local function slots_equal(slot1, slot2)
return m_table.deepEquals(data.forms[slot1], data.forms[slot2]) and
m_table.deepEquals(data.notetext[slot1], data.notetext[slot2]) and
(data.accel[slot1] and data.accel[slot1].lemma or nil) ==
(data.accel[slot2] and data.accel[slot2].lemma or nil)
end
--merge identical cells within a row
for i=1,#conv do for j=1,#conv[i] do
if col[i][j] ~= 0 then
for k=j+1,#conv[i] do
local slotij = conv[i][j]
local slotik = conv[i][k]
if not slots_equal(slotij, slotik) then
break
end
col[i][j] = col[i][j] + 1
col[i][k] = 0
row[i][k] = 0
for _, slot in ipairs(slots[i][k]) do
table.insert(slots[i][j], slot)
end
slots[i][k] = nil
end
end
end end
--final
for i=1,#conv do
for j=1,#conv[i] do
conv[i][j] = add(i,j)
end
conv[i] = table.concat(conv[i])
end
return conv
end
local function make_table_mfn_pl(data, mfonly)
local conv = {
{"nom_pl_m"},
{"gen_pl_m"},
{"dat_pl_m"},
{"acc_pl_m"},
{"abl_pl_m"},
{"voc_pl_m"},
{"loc_pl_m"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | maramihan'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[palagyo]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[paari]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[patanggap]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[paakusa]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[palayo]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[pabanggit]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[panlunan]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_mfn_sg(data, mfonly)
local conv = {
{"nom_sg_m"},
{"gen_sg_m"},
{"dat_sg_m"},
{"acc_sg_m"},
{"abl_sg_m"},
{"voc_sg_m"},
{"loc_sg_m"},
}
conv = convert(data, conv)
local output = data.title .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | isahan'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[palagyo]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[paari]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[patanggap]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[paakusa]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[palayo]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[pabanggit]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[panlunan]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_n_pl(data)
local conv = {
{"nom_pl_n"},
{"gen_pl_n"},
{"dat_pl_n"},
{"acc_pl_n"},
{"abl_pl_n"},
{"voc_pl_n"},
{"loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | maramihan'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. 'neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[palagyo]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[paari]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[patanggap]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[paakusa]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[palayo]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[pabanggit]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[panlunan]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_n_sg(data)
local conv = {
{"nom_sg_n"},
{"gen_sg_n"},
{"dat_sg_n"},
{"acc_sg_n"},
{"abl_sg_n"},
{"voc_sg_n"},
{"loc_sg_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | singular'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. 'neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_mf_and_n_pl(data)
local conv = {
{"nom_pl_m", "nom_pl_n"},
{"gen_pl_m", "gen_pl_n"},
{"dat_pl_m", "dat_pl_n"},
{"acc_pl_m", "acc_pl_n"},
{"abl_pl_m", "abl_pl_n"},
{"voc_pl_m", "voc_pl_n"},
{"loc_pl_m", "loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masc./fem.'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_mf_and_n_sg(data)
local conv = {
{"nom_sg_m", "nom_sg_n"},
{"gen_sg_m", "gen_sg_n"},
{"dat_sg_m", "dat_sg_n"},
{"acc_sg_m", "acc_sg_n"},
{"abl_sg_m", "abl_sg_n"},
{"voc_sg_m", "voc_sg_n"},
{"loc_sg_m", "loc_sg_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | singular'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masc./fem.'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f_pl(data)
local conv = {
{"nom_pl_m", "nom_pl_f"},
{"gen_pl_m", "gen_pl_f"},
{"dat_pl_m", "dat_pl_f"},
{"acc_pl_m", "acc_pl_f"},
{"abl_pl_m", "abl_pl_f"},
{"voc_pl_m", "voc_pl_f"},
{"loc_pl_m", "loc_pl_f"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f_sg(data)
local conv = {
{"nom_sg_m", "nom_sg_f"},
{"gen_sg_m", "gen_sg_f"},
{"dat_sg_m", "dat_sg_f"},
{"acc_sg_m", "acc_sg_f"},
{"abl_sg_m", "abl_sg_f"},
{"voc_sg_m", "voc_sg_f"},
{"loc_sg_m", "loc_sg_f"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | singular'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f_and_n_pl(data)
local conv = {
{"nom_pl_m", "nom_pl_f", "nom_pl_n"},
{"gen_pl_m", "gen_pl_f", "gen_pl_n"},
{"dat_pl_m", "dat_pl_f", "dat_pl_n"},
{"acc_pl_m", "acc_pl_f", "acc_pl_n"},
{"abl_pl_m", "abl_pl_f", "abl_pl_n"},
{"voc_pl_m", "voc_pl_f", "voc_pl_n"},
{"loc_pl_m", "loc_pl_f", "loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="3" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f_and_n_sg(data)
local conv = {
{"nom_sg_m", "nom_sg_f", "nom_sg_n"},
{"gen_sg_m", "gen_sg_f", "gen_sg_n"},
{"dat_sg_m", "dat_sg_f", "dat_sg_n"},
{"acc_sg_m", "acc_sg_f", "acc_sg_n"},
{"abl_sg_m", "abl_sg_f", "abl_sg_n"},
{"voc_sg_m", "voc_sg_f", "voc_sg_n"},
{"loc_sg_m", "loc_sg_f", "loc_sg_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="3" | singular'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_mfn(data, mfonly)
local conv = {
{"nom_sg_m"},
{"gen_sg_m"},
{"dat_sg_m"},
{"acc_sg_m"},
{"abl_sg_m"},
{"voc_sg_m"},
{"loc_sg_m"},
{"nom_pl_m"},
{"gen_pl_m"},
{"dat_pl_m"},
{"acc_pl_m"},
{"abl_pl_m"},
{"voc_pl_m"},
{"loc_pl_m"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | singular'
output = output .. '\n|class="separator" rowspan="999"|'
output = output .. '\n!class="outer" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.')
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. conv[8]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. conv[9]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. conv[10]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. conv[11]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. conv[12]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
output = output .. conv[13]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
output = output .. conv[14]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_n(data)
local conv = {
{"nom_sg_n"},
{"gen_sg_n"},
{"dat_sg_n"},
{"acc_sg_n"},
{"abl_sg_n"},
{"voc_sg_n"},
{"loc_sg_n"},
{"nom_pl_n"},
{"gen_pl_n"},
{"dat_pl_n"},
{"acc_pl_n"},
{"abl_pl_n"},
{"voc_pl_n"},
{"loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" | singular'
output = output .. '\n|class="separator" rowspan="999"|'
output = output .. '\n!class="outer" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! ' .. 'neuter'
output = output .. '\n! ' .. 'neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. conv[8]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. conv[9]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. conv[10]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. conv[11]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. conv[12]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
output = output .. conv[13]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
output = output .. conv[14]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_mf_and_n(data)
local conv = {
{"nom_sg_m", "nom_sg_n"},
{"gen_sg_m", "gen_sg_n"},
{"dat_sg_m", "dat_sg_n"},
{"acc_sg_m", "acc_sg_n"},
{"abl_sg_m", "abl_sg_n"},
{"voc_sg_m", "voc_sg_n"},
{"loc_sg_m", "loc_sg_n"},
{"nom_pl_m", "nom_pl_n"},
{"gen_pl_m", "gen_pl_n"},
{"dat_pl_m", "dat_pl_n"},
{"acc_pl_m", "acc_pl_n"},
{"abl_pl_m", "abl_pl_n"},
{"voc_pl_m", "voc_pl_n"},
{"loc_pl_m", "loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | singular'
output = output .. '\n|class="separator" rowspan="999"|'
output = output .. '\n!class="outer" colspan="2" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masc./fem.'
output = output .. '\n! neuter'
output = output .. '\n! masc./fem.'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. conv[8]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. conv[9]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. conv[10]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. conv[11]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. conv[12]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
output = output .. conv[13]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
output = output .. conv[14]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f(data)
local conv = {
{"nom_sg_m", "nom_sg_f"},
{"gen_sg_m", "gen_sg_f"},
{"dat_sg_m", "dat_sg_f"},
{"acc_sg_m", "acc_sg_f"},
{"abl_sg_m", "abl_sg_f"},
{"voc_sg_m", "voc_sg_f"},
{"loc_sg_m", "loc_sg_f"},
{"nom_pl_m", "nom_pl_f"},
{"gen_pl_m", "gen_pl_f"},
{"dat_pl_m", "dat_pl_f"},
{"acc_pl_m", "acc_pl_f"},
{"abl_pl_m", "abl_pl_f"},
{"voc_pl_m", "voc_pl_f"},
{"loc_pl_m", "loc_pl_f"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="2" | singular'
output = output .. '\n|class="separator" rowspan="999"|'
output = output .. '\n!class="outer" colspan="2" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. conv[8]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. conv[9]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. conv[10]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. conv[11]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. conv[12]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
output = output .. conv[13]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
output = output .. conv[14]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
local function make_table_m_and_f_and_n(data)
local conv = {
{"nom_sg_m", "nom_sg_f", "nom_sg_n"},
{"gen_sg_m", "gen_sg_f", "gen_sg_n"},
{"dat_sg_m", "dat_sg_f", "dat_sg_n"},
{"acc_sg_m", "acc_sg_f", "acc_sg_n"},
{"abl_sg_m", "abl_sg_f", "abl_sg_n"},
{"voc_sg_m", "voc_sg_f", "voc_sg_n"},
{"loc_sg_m", "loc_sg_f", "loc_sg_n"},
{"nom_pl_m", "nom_pl_f", "nom_pl_n"},
{"gen_pl_m", "gen_pl_f", "gen_pl_n"},
{"dat_pl_m", "dat_pl_f", "dat_pl_n"},
{"acc_pl_m", "acc_pl_f", "acc_pl_n"},
{"abl_pl_m", "abl_pl_f", "abl_pl_n"},
{"voc_pl_m", "voc_pl_f", "voc_pl_n"},
{"loc_pl_m", "loc_pl_f", "loc_pl_n"},
}
conv = convert(data, conv)
local output = data.title
output = output .. '\n\n'
output = output .. m_inflection_table.make_top{
title = '-',
palette = 'cyan',
class = 'sticky-left-column',
lang = "la",
}
output = output .. '\n!class="outer" | '
output = output .. '\n!class="outer" colspan="3" | singular'
output = output .. '\n|class="separator" rowspan="999"|'
output = output .. '\n!class="outer" colspan="3" | plural'
output = output .. '\n|-'
output = output .. '\n! '
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n! neuter'
output = output .. '\n! masculine'
output = output .. '\n! feminine'
output = output .. '\n! neuter'
output = output .. '\n|- data-case="nom"'
output = output .. '\n! [[nominative case|nominative]]'
output = output .. conv[1]
output = output .. conv[8]
output = output .. '\n|- data-case="gen"'
output = output .. '\n! [[genitive case|genitive]]'
output = output .. conv[2]
output = output .. conv[9]
output = output .. '\n|- data-case="dat"'
output = output .. '\n! [[dative case|dative]]'
output = output .. conv[3]
output = output .. conv[10]
output = output .. '\n|- data-case="acc"'
output = output .. '\n! [[accusative case|accusative]]'
output = output .. conv[4]
output = output .. conv[11]
output = output .. '\n|- data-case="abl"'
output = output .. '\n! [[ablative case|ablative]]'
output = output .. conv[5]
output = output .. conv[12]
output = output .. '\n|- data-case="voc"'
output = output .. '\n! [[vocative case|vocative]]'
output = output .. conv[6]
output = output .. conv[13]
if data.loc then
output = output .. '\n|- data-case="loc"'
output = output .. '\n! [[locative case|locative]]'
output = output .. conv[7]
output = output .. conv[14]
end
output = output .. '\n' .. m_inflection_table.make_bottom{}
if data.footnotes and data.footnotes ~= '' then
output = output .. '\n' .. data.footnotes
end
return output
end
function export.make_table(data)
local forms, output = data.forms
if not forms.nom_sg_n and not forms.nom_pl_n then
if forms.nom_sg_f or forms.nom_pl_f then
if data.num == "pl" then
output = make_table_m_and_f_pl(data)
elseif data.num == "sg"
then output = make_table_m_and_f_sg(data)
else
output = make_table_m_and_f(data)
end
else
local mfonly = data.noneut and not data.nomf
if data.num == "pl" then
output = make_table_mfn_pl(data, mfonly)
elseif data.num == "sg" then
output = make_table_mfn_sg(data, mfonly)
else
output = make_table_mfn(data, mfonly)
end
end
elseif data.nomf then
if data.num == "pl" then output = make_table_n_pl(data)
elseif data.num == "sg" then output = make_table_n_sg(data)
else output = make_table_n(data) end
elseif not forms.nom_sg_f and not forms.nom_pl_f then
if data.num == "pl" then output = make_table_mf_and_n_pl(data)
elseif data.num == "sg" then output = make_table_mf_and_n_sg(data)
else output = make_table_mf_and_n(data) end
else
if data.num == "pl" then output = make_table_m_and_f_and_n_pl(data)
elseif data.num == "sg" then output = make_table_m_and_f_and_n_sg(data)
else output = make_table_m_and_f_and_n(data) end
end
return output
end
return export
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet:
b7j1bzg1ft9dhxktaomdz3cvj6oxijf
Module:inflection-table
828
38963
178405
2026-10-24T07:10:53Z
GinawaSaHapon
3989
Nilikha ang pahina na may 'local export = {} local M = require("Module:module loader").init({ require = { parameters = "Module:parameters", }, loadData = { headword_data = "Module:headword/data", }, }) local concat = table.concat local insert = table.insert local WRAPPER_CLASS = "inflection-table-wrapper" local TABLE_CLASS = "inflection-table" local TITLE_CLASS = "inflection-table-title" local NO_TITLE_CLASS = "inflection-table-no-title" local NOTES_CLASS = "inflection-table-not...'
178405
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
parameters = "Module:parameters",
},
loadData = {
headword_data = "Module:headword/data",
},
})
local concat = table.concat
local insert = table.insert
local WRAPPER_CLASS = "inflection-table-wrapper"
local TABLE_CLASS = "inflection-table"
local TITLE_CLASS = "inflection-table-title"
local NO_TITLE_CLASS = "inflection-table-no-title"
local NOTES_CLASS = "inflection-table-notes"
local COLLAPSIBLE_CLASSES = "inflection-table-collapsible inflection-table-collapsed no-vc"
local VS_SWITCHER_CLASS = "vsSwitcher"
local VS_TOGGLE_CLASS = "vsToggleElement"
local BOX_CLASS = "inflection-box"
local BOX_CONTENT_CLASS = "inflection-box-content"
local BOX_NARROW_CLASS = "inflection-table-narrow"
local TR_ALONGSIDE_CLASS = "tr-alongside"
local FLOW_VERTICAL_CLASS = "flow-vertical"
local NO_TITLE_MARKER = "-"
local DEFAULT_PALETTE = "grey"
local DEFAULT_TOGGLE_CATEGORY = "inflection"
local DEFAULT_TITLE_FORMAT = "Inflection of ''%s''"
local VERTICAL_FLOW = "vertical"
local BASE_STYLE = "width: fit-content"
-- Palettes recognized by [[MediaWiki:Gadget-Palette.css]].
local PALETTES = {
red = true,
scarlet = true,
orange = true,
amber = true,
yellow = true,
lime = true,
green = true,
teal = true,
cyan = true,
blue = true,
indigo = true,
purple = true,
magenta = true,
rose = true,
grey = true,
brown = true,
}
local top_params = {
title = true,
tall = true,
class = true,
["min-width"] = true,
palette = true,
category = true,
lang = true,
["vs-category"] = true,
vsToggleElement = true,
}
local bottom_params = {
notes = true,
}
local box_top_params = {
title = true,
flow = true,
category = true,
}
local function nonempty(value)
return value ~= nil and value ~= "" and value or nil
end
-- Builds the opening <div> and the wikitable header. The markup is deliberately
-- unbalanced -- {{inflection-table-bottom}} closes both -- so this is assembled
-- as text rather than through mw.html, which cannot emit an unclosed node.
function export.make_top(args)
local palette = args.palette or DEFAULT_PALETTE
if not PALETTES[palette] then
error(("Unrecognized palette '%s'; see [[MediaWiki:Gadget-Palette.css]] for the recognized palettes.")
:format(palette))
end
local no_title = args.title == NO_TITLE_MARKER
local wrapper_classes = { WRAPPER_CLASS }
if no_title then
insert(wrapper_classes, NO_TITLE_CLASS)
end
if nonempty(args.tall) then
insert(wrapper_classes, COLLAPSIBLE_CLASSES)
end
if nonempty(args.class) then
insert(wrapper_classes, args.class)
end
local style = BASE_STYLE
local min_width = nonempty(args["min-width"])
if min_width then
style = ("%s; min-width: %s"):format(style, min_width)
end
local vs_category = nonempty(args["vs-category"])
local table_classes = { TABLE_CLASS }
if nonempty(args.lang) then
insert(table_classes, ("%s-%s"):format(TABLE_CLASS, args.lang))
end
if vs_category then
insert(table_classes, VS_SWITCHER_CLASS)
end
local lines = {
('<div class="%s" style="%s" data-wikt-palette-p="%s" data-toggle-category="%s">'):format(
concat(wrapper_classes, " "),
style,
palette,
args.category or DEFAULT_TOGGLE_CATEGORY
),
('{| class="%s"%s'):format(
concat(table_classes, " "),
vs_category and (' data-toggle-category="%s"'):format(vs_category) or ""
),
}
if not no_title then
insert(lines, ('|+ class="%s%s" | %s'):format(
TITLE_CLASS,
nonempty(args.vsToggleElement) and " " .. VS_TOGGLE_CLASS or "",
args.title or DEFAULT_TITLE_FORMAT:format(M.headword_data.pagename)
))
insert(lines, "|-")
end
return concat(lines, "\n") .. "\n"
end
-- Builds the opening markup for {{inflection-box-top}}, a wrapper holding
-- several complete inflection tables side by side. Boxes always place
-- transliterations alongside, so that class is fixed. No palette is emitted:
-- each table inside the box carries its own.
-- {{inflection-table-bottom}} closes this too.
function export.make_box_top(args)
local no_title = args.title == NO_TITLE_MARKER
local classes = {
WRAPPER_CLASS,
BOX_CLASS,
BOX_NARROW_CLASS,
}
if no_title then
insert(classes, NO_TITLE_CLASS) -- zeroes the wrapper's border and padding
else
insert(classes, COLLAPSIBLE_CLASSES)
end
insert(classes, TR_ALONGSIDE_CLASS)
if args.flow == VERTICAL_FLOW then
insert(classes, FLOW_VERTICAL_CLASS)
end
local style, table_style = BASE_STYLE, ""
if no_title then
style = style .. "; background: none"
table_style = ' style="background: none"'
end
local lines = {
('<div class="%s" style="%s" data-toggle-category="%s">'):format(
concat(classes, " "),
style,
args.category or DEFAULT_TOGGLE_CATEGORY
),
('{| class="%s"%s'):format(BOX_CONTENT_CLASS, table_style),
}
if not no_title then
insert(lines, ('|+ class="%s" | %s'):format(
TITLE_CLASS,
args.title or DEFAULT_TITLE_FORMAT:format(M.headword_data.pagename)
))
end
insert(lines, "|-")
insert(lines, "|")
return concat(lines, "\n") .. "\n"
end
-- Closes the wikitable and the wrapper opened by make_top, with the notes block
-- in between.
function export.make_bottom(args)
local notes = args and nonempty(args.notes)
if not notes then
-- The blank line is what the template emitted; kept so the parser sees
-- byte-identical wikitext.
return "|}\n\n</div>"
end
return ('|}\n<div class="%s">\n%s\n</div>\n</div>'):format(NOTES_CLASS, notes)
end
local function split_args(args)
local top_args, bottom_args = {}, {}
for k, v in pairs(args or {}) do
if bottom_params[k] then
bottom_args[k] = v
else
top_args[k] = v
end
end
return top_args, bottom_args
end
-- Builds a complete table around `contents`.
function export.make_table(args, contents)
local top_args, bottom_args = split_args(args)
return export.make_top(top_args) .. contents .. export.make_bottom(bottom_args)
end
-- As export.make_table, for boxes.
function export.make_box(args, contents)
local top_args, bottom_args = split_args(args)
return export.make_box_top(top_args) .. contents .. export.make_bottom(bottom_args)
end
-- Implementation of {{inflection-table-top}}. Other modules should call
-- make_top directly instead.
function export.top(frame)
local args = M.parameters.process(frame:getParent().args, top_params, nil, "inflection-table", "top")
return export.make_top(args)
end
-- Implementation of {{inflection-table-bottom}}. See the note on export.top.
function export.bottom(frame)
local args = M.parameters.process(frame:getParent().args, bottom_params, nil, "inflection-table", "bottom")
return export.make_bottom(args)
end
-- Implementation of {{inflection-box-top}}. See the note on export.top.
function export.box_top(frame)
local args = M.parameters.process(frame:getParent().args, box_top_params, nil, "inflection-table", "box_top")
return export.make_box_top(args)
end
-- Boxes close exactly like plain tables, so these are aliases rather than
-- separate implementations.
export.make_box_bottom = export.make_bottom
export.box_bottom = export.bottom
return export
mas35tbdkeuyo7w6frl7ehgr6r1c24b
बन्दर
0
38964
178406
2026-10-24T08:40:50Z
Hiyuune
5522
Nilikha ang pahina na may '=={{=hi=}}== ===Pangngalan=== {{hi-noun|m}} # {{alt sp|hi|बंदर}} ====Paukulan==== {{hi-ndecl|<M>}}'
178406
wikitext
text/x-wiki
=={{=hi=}}==
===Pangngalan===
{{hi-noun|m}}
# {{alt sp|hi|बंदर}}
====Paukulan====
{{hi-ndecl|<M>}}
7un22qh25hscyhew8s1lqo4jr4n97z0