Mòdul:ro-nom
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul de suport per la plantilla {{ro-nom-decl}}. Genera una taula de declinació d’un substantiu romanès. Vegeu la documentació de la plantilla per a la seva utilització.
local p = {}
local m_link = require("Mòdul:enllaç")
local lang = {code = "ro", name = "romanès", sc = "Latn"}
local function notEmpty(var)
if var == nil or (type(var) == 'string' and mw.text.trim(var) == '') then
return nil
end
return var
end
--[[ Cases:
nais: nominative and accusative indefinite singular; naip: ... plural
nads: n&a definite singular; nadp: ... plural
gdis: genitive and dative indefinite singular; gdip: ... plural
gdds: g&d definite singular; gddp: ... plural
vs: vocative singular; vp: vocative plural
]]
local function first_decl(nominative, plural, gender)
local decl = {}
if plural == "-" then
if mw.ustring.find(nominative, "[ou]ră$") then
plural = mw.ustring.gsub(nominative, "ă$", "i")
elseif mw.ustring.find(nominative, "cică$") then
plural = mw.ustring.gsub(nominative, "ică$", "ele")
elseif mw.ustring.find(nominative, "ă$") then
plural = mw.ustring.gsub(nominative, "ă$", "e")
else
plural = nominative .. "le"
end
end
decl.nais = nominative
decl.gdds = plural .. "i"
decl.gddp = plural .. "lor"
decl.vs = nominative
decl.naip = plural
decl.gdip = plural
decl.vp = plural
if mw.ustring.find(nominative, "ă$") then
decl.nads = mw.ustring.gsub(nominative, "ă$", "a")
if plural:find("i$") and gender == "m" then
decl.gdis = nominative
decl.nadp = plural .. "i"
else
decl.gdis = plural
decl.nadp = plural .. "le"
decl.vs2 = mw.ustring.gsub(nominative, "ă$", "o")
decl.vp = plural .. "lor"
end
else
decl.gdis = plural
decl.nads = nominative .. "ua"
decl.nadp = plural .. "le"
end
return decl
end
function second_decl(nominative, plural, gender)
local decl = {}
decl.nais = nominative
decl.gdis = nominative
decl.naip = plural
decl.gdip = plural
decl.gddp = plural .. "lor"
decl.vp = plural .. "lor"
if mw.ustring.find(nominative, "u$") then
decl.nads = nominative .. "l"
decl.gdds = nominative .. "lui"
decl.vs = nominative .. "le"
else
decl.nads = nominative .. "ul"
decl.gdds = nominative .. "ului"
decl.vs = nominative .. "ule"
decl.vs2 = nominative .. "e"
end
if gender == "m" then
decl.nadp = plural .. "i"
else
decl.nadp = plural .. "le"
end
return decl
end
function third_decl(nominative, plural, gender)
local decl = {}
decl.nais = nominative
decl.vs = nominative
decl.naip = plural
decl.gdip = plural
decl.gddp = plural .. "lor"
decl.vp = plural
if gender == "m" then
decl.gdis = nominative
decl.nads = nominative .. "le"
decl.gdds = nominative .. "lui"
decl.nadp = plural .. "i"
elseif gender == "n" then
decl.gdis = nominative
decl.nads = nominative .. "le"
decl.gdds = nominative .. "lui"
decl.nadp = plural .. "le"
elseif gender == "f" then
if plural == "-" then
plural = nominative:gsub("e$", "i")
end
decl.gdis = plural
decl.nadp = plural .. "le"
if nominative:find("ie$") then
decl.nads = nominative:gsub("e$", "a")
decl.gdds = nominative .. "i"
else
decl.nads = nominative .. "a"
decl.gdds = plural .. "i"
end
end
return decl
end
local function make_link(declension, case)
local ret = '-'
if notEmpty(declension[case]) then
ret = m_link.full_link({term = declension[case], lang = lang}, nil, false)
if notEmpty(declension[case .. "2"]) then
ret = ret .. ", " .. m_link.full_link({term = declension[case .. "2"], lang = lang}, nil, false)
end
end
return ret
end
local function make_table(declension, gender)
if declension.nais == nil and declension.naip == nil then
return ""
end
-- articles for the table
local art_na_s = (declension.nais and "(un)" or "")
local art_gd_s = (declension.gdis and "(unui)" or "")
if gender == "f" then
art_na_s = (declension.nais and "(o)" or " ")
art_gd_s = (declension.gdis and "(unei)" or "")
end
local art_na_p = (declension.naip and "(niște)" or "")
local art_gd_p = (declension.gdip and "(unor)" or "")
ret = [=[
{| class="wikitable" style="margin-left: 0.5em; float: left; font-size: 90%;"
|-
! rowspan="2" |
! colspan="3" style="font-weight: normal;" | ''Singular''
! colspan="3" style="font-weight: normal" | ''Plural''
|-
! colspan="2" style="font-weight: normal;" | ''Indefinit''
! style="font-weight: normal;" | ''Definit''
! colspan="2" style="font-weight: normal;" | ''Indefinit''
! style="font-weight: normal;" | ''Definit''
|-
! style="font-weight: normal; text-align: left;" | ''Nominatiu-acusatiu''
| style="border-right-width: 0px; padding-right: 0em;" | ]=] .. art_na_s .. [=[
| style="border-left-width: 0px;" | ]=] .. make_link(declension, "nais") .. [=[
| ]=] .. make_link(declension, "nads") .. [=[
| style="border-right-width: 0px; padding-right: 0em;" | ]=] .. art_na_p .. [=[
| style="border-left-width: 0px;" | ]=] .. make_link(declension, "naip") .. [=[
| ]=] .. make_link(declension, "nadp") .. [=[
|-
! style="font-weight: normal; text-align: left;" | ''Genitiu-datiu''
| style="border-right-width: 0px; padding-right: 0em;" | ]=] .. art_gd_s .. [=[
| style="border-left-width: 0px;" | ]=] .. make_link(declension, "gdis") .. [=[
| ]=] .. make_link(declension, "gdds") .. [=[
| style="border-right-width: 0px; padding-right: 0em;" | ]=] .. art_gd_p .. [=[
| style="border-left-width: 0px;" | ]=] .. make_link(declension, "gdip") .. [=[
| ]=] .. make_link(declension, "gddp") .. [=[
|-
! style="font-weight: normal; text-align: left;" | ''Vocatiu''
| style="border-right-width: 0px; padding-right: 0em;" |
| colspan="2" style="border-left-width: 0px;" | ]=] .. make_link(declension, "vs") .. [=[
| style="border-right-width: 0px; padding-right: 0em;" |
| colspan="2" style="border-left-width: 0px;" | ]=] .. make_link(declension, "vp") .. [=[
|}
<br clear="all>]=]
return ret
end
function p.show(frame)
local args = frame:getParent().args
local pagename = notEmpty(args.pagename) or mw.title.getCurrentTitle().subpageText
local gender = notEmpty(args[1])
local plural = notEmpty(args[2])
if not gender or plural == "?" or args.decl == "no" then
return
end
-- Make declension 1st, 2nd or 3rd
local declension = {}
if mw.ustring.find(pagename, "[ăai]$") and (gender == "f" or gender == "m") then
declension = first_decl(pagename, plural, gender)
elseif mw.ustring.find(pagename, "[^ăaei]$") and (gender == "m" or gender == "n") then
declension = second_decl(pagename, plural, gender)
elseif pagename:find("e$") then
declension = third_decl(pagename, plural, gender)
end
-- parameters provided
local cases = {"nai", "gdi", "nad", "gdd", "v"}
for i, case in ipairs(cases) do
declension[case .. "s"] = args[case .. "s"] or declension[case .. "s"]
declension[case .. "s2"] = args[case .. "s2"] or declension[case .. "s2"]
if plural == "-" then
declension[case .. "p"] = nil
declension[case .. "p2"] = nil
else
declension[case .. "p"] = args[case .. "p"] or declension[case .. "p"]
declension[case .. "p2"] = args[case .. "p2"] or declension[case .. "p2"]
end
end
-- Redlinks?
local categories = {}
for _, form in pairs(declension) do
if form ~= "" and not mw.title.new(form).exists then
table.insert(categories, "Termes en romanès amb flexions a crear")
break
end
end
if args.bot then
return require('Module:lema').make_bot_list(declension)
else
local ret = make_table(declension, gender)
if #categories > 0 then
ret = ret .. require("Module:utilitats").format_categories(categories, lang)
end
return ret
end
end
return p