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