Модул:la-noun
Usage[уреди]
{{la-noun|1|2|3|4|decl2=|g2=|gen2=}}
Required positional parameters[уреди]
|1=
- Display form of the headword (with macrons)
|2=
- Genitive with macrons (if any)
|3=
- Gender (one of
m, f, n, c, ?, m-p, f-p, n-p, c-p, ?-p
)
- Gender (one of
|4=
- Declension class (one of
first, second, third, fourth, fifth, irregular
)
- Declension class (one of
Optional named parameters[уреди]
|g2=
,|g3=
, …- Further genders, for nouns of multiple genders
|gen2=
,|gen3=
, …- Further genitives, for nouns with multiple genitives
|decl2=
,|decl3=
, …- Further declension classes, for multideclensional nouns
|indecl=
- Sets the noun to be indeclinable.
|1=
(|headN=
) and|4=
(|gN=
) may still be used in this circumstance.
- Sets the noun to be indeclinable.
Горња документација је укључена са странице Модул:la-noun/док. (уреди | историја) Уредници могу да експериментишу на подстраницама песак (направи | дуплирај) и тест (направи) овог модула. Подстранице овог модула. |
local export = {}
local lang = require("Модул:languages").getByCode("la")
local m_links = require("Модул:links")
local m_utilities = require("Модул:utilities")
local m_para = require("Модул:parameters")
NAMESPACE = NAMESPACE or mw.title.getCurrentTitle().nsText
PAGENAME = PAGENAME or mw.title.getCurrentTitle().text
local decl = require("Модул:la-noun/data")
local m_table = require("Модул:la-noun/table")
-- Canonical order of cases
local case_order = {
"nom_sg",
"gen_sg",
"dat_sg",
"acc_sg",
"abl_sg",
"voc_sg",
"loc_sg",
"nom_pl",
"gen_pl",
"dat_pl",
"acc_pl",
"abl_pl",
"voc_pl",
"loc_pl"
}
local ligatures = {
['Ae'] = 'Æ',
['ae'] = 'æ',
['Oe'] = 'Œ',
['oe'] = 'œ',
}
local function process(data,args)
local noteindex = 1
local notes = {}
local redlink = false
if data.num == "pl" and NAMESPACE == '' then
table.insert(data.categories, "Latin pluralia tantum")
elseif data.num == "sg" and NAMESPACE == '' then
table.insert(data.categories, "Latin singularia tantum")
end
for _, key in ipairs(case_order) do
if args[key] or data.forms[key] then
local user_specified = false
if args[key] then
val = args[key]
user_specified = true
else
val = data.forms[key]
end
if type(val) == "string" then
val = mw.text.split(val,"/")
end
if data.num == "pl" and key:find("sg") then
data.forms[key] = ""
elseif data.num == "sg" and key:find("pl") then
data.forms[key] = ""
elseif val == "" or val == {""} or val[1] == "-" or val[1] == "—" then
data.forms[key] = "—"
else
for i,form in ipairs(val) do
local word = data.prefix .. (data.n and mw.ustring.gsub(form,"m$","n") or form) .. data.suffix
if data.lig then
for digraph, lig in pairs(ligatures) do
word = mw.ustring.gsub(word, digraph, lig)
end
end
if data.notes[key .. i] and not user_specified then
val[i] = m_links.full_link({lang = lang, term = word}) .. '<sup style="color: red">' .. noteindex .. '</sup>'
table.insert(notes, '<sup style="color: red">' .. noteindex .. '</sup>' .. data.notes[key .. i])
noteindex = noteindex+1
else
val[i] = m_links.full_link({lang = lang, term = word})
end
if not redlink and NAMESPACE == '' then
local title = lang:makeEntryName(word)
local t = mw.title.new(title)
if t and not t.exists then
table.insert(data.categories,'Latin nouns with red links in their declension tables')
redlink = true
end
end
end
data.forms[key] = table.concat(val, "<br />")
end
end
end
data.footnote = table.concat(notes, "<br />") .. data.footnote
end
local function make_table(data)
if data.num == "sg" then
return m_table.make_table_sg(data)
elseif data.num == "pl" then
return m_table.make_table_pl(data)
else
return m_table.make_table(data)
end
end
function export.show(frame)
local data = {
title = "",
footnote = "",
num = "",
loc = false,
um = false,
forms = {},
notes = {},
categories = {},
types = {},
}
iparams = {
[1] = {required = true},
decl_type = {},
num = {},
}
local iargs = m_para.process(frame.args, iparams)
if iargs.decl_type ~= "" and iargs.decl_type ~= nil then
for name, val in ipairs(mw.text.split(iargs.decl_type, "-")) do
data.types[val] = true
end
end
params = {
[1] = {required = true},
noun = {},
num = {},
nom_sg = {},
gen_sg = {},
dat_sg = {},
acc_sg = {},
abl_sg = {},
voc_sg = {},
loc_sg = {},
nom_pl = {},
gen_pl = {},
dat_pl = {},
acc_pl = {},
abl_pl = {},
voc_pl = {},
loc_pl = {},
loc = {type = "boolean"},
um = {type = "boolean"},
genplum = {type = "boolean"},
n = {type = "boolean"},
lig = {type = "boolean"},
prefix = {},
suffix = {},
footnote = {},
}
if (iargs[1] == "2" and data.types.er) or iargs[1] == "3" then
params[2] = {}
end
local args = m_para.process(frame:getParent().args, params)
data.num = iargs.num or args.num or ""
data.loc = args.loc
data.lig = args.lig
data.um = args.um or args.genplum
data.prefix = args.prefix or ""
data.suffix = args.suffix or ""
data.footnote = args.footnote or ""
data.n = args.n and (data.suffix ~= "") -- Must have a suffix and n specified
decl[iargs[1]](data, args)
process(data,args)
if data.prefix .. data.suffix ~= "" then
table.insert(data.categories, "Kenny's testing category 6")
end
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
return export