Mòdul:pt-entrada
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul de suport per les plantilles de lema en portugupès, com {{pt-nom}}.
Genera les formes en plural a partir d'unes regles vàlides en la majoria de casos.
local p = {}
local lang = {code = "pt", name = "portuguès", sc = "Latn"}
local pos_functions = {}
-- Funció d'entrada per mostrar el lema flexionat, l'única que s'invoca des d'una plantilla
function p.flex(frame)
local args = frame:getParent().args
pagename = args.pagename
if not pagename or pagename == "" then
pagename = mw.title.getCurrentTitle().subpageText
end
local data = {lang = lang, heads = {}, genders = {}, inflections = {}, categories = {}}
local lema = args.lema; if lema == "" then lema = nil end
table.insert(data.heads, lema)
local isLemma = frame.args['forma'] == nil and true or nil
local poscat = frame.args[1] or error("Falta especificar la categoria lèxica com a primer paràmetre.")
if pos_functions[poscat] then
pos_functions[poscat].func(args, data, isLemma)
else
table.insert(data.categories, poscat .. " en " .. lang.name)
end
if args.cat and args.cat ~= "" then
table.insert(data.categories, args.cat)
end
if args.bot then
return require("Mòdul:lema").make_bot_list(data.inflections)
else
return require("Mòdul:lema").full_headword(data)
end
end
-- Informació de flexió per a substantius
pos_functions["Substantius"] = {func = function(args, data, isLemma)
-- Codis gènere-nombre:
-- "m", "f", "mf", "mof"
-- "m-p", "f-p", "mf-p" pluralia tantum
-- "m-s", "f-s", "mf-s" només o normalment en singular
-- "m-i", "f-i", "mf-i" invariable en nombre
-- "m-?", "f-?", "mf-?" sense plural conegut
-- "mp", "fp", "mfp" flexionats en plural
local genere = args[1] or ""
local genere2 = args[g2]
local plural = args[2] or args.p
local plural2 = args.p2
local fem = args["f"]; if fem == "" then fem = nil end
local tipus = nil
local gn = mw.text.split(genere, "-")
if #gn > 1 then
genere = gn[1]
tipus = gn[2]
end
if genere == "" then
table.insert(data.genders, "?")
else
local generes = mw.text.split(genere, "")
local str_gender, sep = '', ''
for _, g in ipairs(generes) do
if g ~= "-" and g ~= "o" then
str_gender = str_gender .. sep
sep = '-'
else
sep = ''
end
str_gender = str_gender .. g
end
table.insert(data.genders, str_gender)
end
-- Categoria gramatical
if mw.ustring.find(pagename, "[^ ]+ [^ ]+") then
if genere:find("p$") then
table.insert(data.categories, "Formes de locucions nominals en " .. lang.name)
else
table.insert(data.categories, "Locucions nominals en " .. lang.name)
end
elseif isLemma == nil then
table.insert(data.categories, "Formes de substantius en " .. lang.name)
else
table.insert(data.categories, "Substantius en " .. lang.name)
end
-- Plural
if not (tipus == "?" or genere:find("p$")) then
if tipus == "i" then
table.insert(data.inflections, {label = "plural invariable"})
elseif tipus == "p" then
table.insert(data.inflections, {label = "plurale tantum"})
elseif tipus == "s" then
if plural then
table.insert(data.inflections, {label = "normalment en singular"})
else
table.insert(data.inflections, {label = "només en singular"})
end
end
if plural ~= nil or tipus == nil then
if plural == "" or plural == nil then
plural = forma_plural(pagename)
end
if plural then
local infl_parts = {label = "plural", accel = "plural-form-of gender-" .. genere}
table.insert(infl_parts, plural)
if plural2 ~= "" then
table.insert(infl_parts, plural2)
end
table.insert(data.inflections, infl_parts)
if not mw.title.new(plural).exists or (plural2 and plural2 ~= "" and not mw.title.new(plural2).exists) then
table.insert(data.categories, "Termes en portuguès amb flexions a crear")
end
end
end
end
-- Femení
if fem then
table.insert(data.inflections, {label = "femení", fem, accel = "femenina-form-of gender-f"})
if not mw.title.new(fem).exists then
table.insert(data.categories, "Termes en portuguès amb flexions a crear")
end
end
end
}
-- Forma plural, [[:en:Module:pt-plural]]
function forma_plural(lemma)
local accented_letters = {'á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô'}
local remove_accent = {['á']='a', ['é']='e', ['í']='i', ['ó']='o', ['ú']='u', ['â']='a', ['ê']='e', ['ô']='o'}
local vowels = {'a', 'e', 'i', 'o', 'u', 'ã', 'á', 'é', 'í', 'ó', 'ê', 'ô', 'ú'}
-- local functions
local function suffix(word, length)
return mw.ustring.sub(word, mw.ustring.len(word) - length + 1)
end
local function prefix(word, suf_length)
return mw.ustring.sub(word, 1, mw.ustring.len(word) - suf_length)
end
local function word_has_letter(word, array)
for c = 1, #array do
if (mw.ustring.find(word, array[c])) then
return true
end
end
return false
end
local function is_accented(word)
return word_has_letter(word, accented_letters)
end
local function is_vowel(letter)
return word_has_letter(letter, vowels)
end
local function has_space_or_hyphen(word)
return mw.ustring.find(word, "[ -]")
end
local function has_multiple_vowels(word)
local vowels = 0
for c = 1, mw.ustring.len(word) do
if (is_vowel(mw.ustring.sub(word, c, c))) then
vowels = vowels + 1
if (vowels >= 2) then return true end
end
end
return false
end
if (has_space_or_hyphen(lemma)) then return nil end
local suf3 = suffix(lemma, 3)
local pre3 = prefix(lemma, 3)
local suf2 = suffix(lemma, 2)
local pre2 = prefix(lemma, 2)
local suf1 = suffix(lemma, 1)
local pre1 = prefix(lemma, 1)
if suf1 == "l" then
if not is_accented(pre2) then
if suf2 == "il" then
return pre2 .. "is"
elseif suf2 == "el" then
return pre2 .. "éis"
elseif suf2 == "ol" then
return pre2 .. "óis"
end
end
return pre1 .. "is"
elseif suf1 == "m" then
return pre1 .. "ns"
elseif suf1 == "r" then
return lemma .. "es"
elseif suf1 == "x" then
return lemma
elseif suf1 == "z" then
return pre1 .. "ces"
elseif is_vowel(suf1) or suf1 == "n" then
if suf3 == "ção" or suf3 == "são" then
return pre2 .. "ões"
elseif suf2 == "ão" then
return nil
end
return lemma .. "s"
elseif suf1 == "s" then
local penult = mw.ustring.sub(suf2, 1, 1)
if not is_vowel(penult) then
return lemma
elseif is_accented(penult) then
return pre2 .. remove_accent[penult] .. "ses"
else
local antepenult = mw.ustring.sub(suf3, 1, 1)
if is_vowel(antepenult) then
return lemma .. "es"
else
return lemma
end
end
end
return nil
end
return p