Mòdul:roa-oca-entrada
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Aquest mòdul presenta un lema en català antic amb la flexió i les categories corresponents ordenades. Actualment dóna suport a les plantilles {{roa-oca-nom}}. Vegeu la documentació de les plantilles per a la seva utilització.
El mòdul es basa en Mòdul:lema pel format general d'un lema. S'invoca amb una única funció flex
amb l'argument apropiat. Exemple: {{#invoke:roa-oca-lema|flex|Substantius}}
Genera les formes en plural a partir d'unes regles vàlides en la majoria de casos. Genera també les etiquetes necessàries per a l'edició accelerada de formes flexionades.
local p = {}
local lang = {code = "roa-oca", name = "català antic", 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"
-- "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 plural = {args.p, args.p2, args.p3, args.p4}
local fem = args["f"]
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, "")
table.insert(data.genders, table.concat(generes, "-")) -- conversió a "m", "f", "m-f", "m-p", "f-p", "m-f-p"
end
-- Categoria gramatical
if mw.ustring.find(pagename, "[^ ]+ [^ ]+") then
if isLemma then
table.insert(data.categories, "Locucions nominals en " .. lang.name)
else
table.insert(data.categories, "Formes de locucions nominals en " .. lang.name)
end
elseif isLemma then
table.insert(data.categories, "Substantius en " .. lang.name)
else
table.insert(data.categories, "Formes de substantius en " .. lang.name)
end
-- Plural
if isLemma and tipus ~= "?" 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
table.insert(data.inflections, {label = "només en singular"})
end
if tipus == nil then
local infl_parts = {label = "plural", accel = "plural-form-of gender-" .. genere}
local p1, p2, p3, p4 = p.forma_plural(pagename, genere)
local plural1 = plural[1] or p1
local plural2 = plural[2] or p2
local plural3 = plural[3] or p3
local plural4 = plural[4] or p4
if plural1 and plural1 ~= "" then table.insert(infl_parts, plural1) end
if plural2 and plural2 ~= "" then table.insert(infl_parts, plural2) end
if plural3 and plural3 ~= "" then table.insert(infl_parts, plural3) end
if plural4 and plural4 ~= "" then table.insert(infl_parts, plural4) end
table.insert(data.inflections, infl_parts)
end
end
-- Femení
if fem then
table.insert(data.inflections, {label = "femení", fem, accel = "femenina-form-of gender-f"})
end
end
}
function p.forma_plural(mot, genere)
local p1, p2, p3, p4 = '', '', '', ''
if string.find(mot, "[aeiou]$") then
p1 = mot .. 's'
if mw.ustring.find(mot, "[cçgj]a$") then
p2 = mw.ustring.gsub(mot, "([cçgj]a)$", {['ca']='ques',['ça']='ces',['ga']='gues',['ja']='ges'})
elseif string.find(mot, "([gq])ua$") then
p2 = string.gsub(mot, "([gq])ua$", "%1ües")
elseif string.find(mot, "a$") then
p2 = string.gsub(mot, "a$", "es")
end
elseif string.find(mot, "sc$") then -- cascs/casques/cascos
p1 = mot .. 's'
p2 = string.gsub(mot, "c$", "ques")
if genere == 'm' then
p3 = mot .. 'os'
end
elseif string.find(mot, "st$") then -- aquests/aquets/aquestes/aquestos
p1 = mot .. 's'
p2 = string.gsub(mot, "st$", "ts")
p3 = mot .. 'es'
if genere == 'm' then
p4 = mot .. 'os'
end
elseif string.find(mot, "nt$") then -- gents/gens
p1 = mot .. 's'
p2 = string.gsub(mot, "t$", "s")
elseif string.find(mot, "[aeiou]t$") then -- dits/ditz
p1 = mot .. 's'
p2 = mot .. 'z'
elseif string.find(mot, "s$") then -- mes/meses/mesos
p1 = mot
if mw.ustring.find(mot, "[aàéíoòu]s$") then
p2 = mw.ustring.gsub(mot, "([àéíò])s$", {['à']='as',['é']='es',['í']='is',['ò']='os'}) .. 'ses'
elseif mw.ustring.find(mot, "[eèóú]s$") then
p2 = mw.ustring.gsub(mot, "([àéíò])s$", {['è']='es',['ó']='os',['ú']='us'}) .. 'es'
else
p2 = mot .. 'es'
end
if genere == 'm' then
p3 = mw.ustring.gsub(p2, "es$", "os")
end
elseif string.find(mot, "ç$") then -- braç/braces/braços
p1 = mot
p2 = string.gsub(mot, "ç$", "ces")
if genere == 'm' then
p3 = mot .. 'os'
end
elseif string.find(mot, "ig$") then -- passeigs/passeits/passeges/passejos
p1 = mot .. 's'
p2 = string.gsub(mot, "g$", "ts")
p3 = string.gsub(mot, "ig$", "ges")
if genere == 'm' then
p4 = string.gsub(mot, "ig$", "jos")
end
elseif string.find(mot, "x$") then -- peixs/peis/peixes/peixos
p1 = mot .. 's'
p2 = string.gsub(mot, "x$", "s")
p3 = mot .. 'es'
if genere == 'm' then
p4 = mot .. 'os'
end
elseif mw.ustring.find(mot, "[àéèíóòú]$") then -- vocal accentuada -> sense accent + ns
p1 = mw.ustring.gsub(mot, "([àéèíóòú])$", {['à']='a',['è']='e',['é']='e',['í']='i',['ò']='o',['ó']='o',['ú']='u'}) .. 'ns'
elseif mw.ustring.find(mot, "[ei]n$") and not mw.ustring.find(mot, "[àèéíòóú]") then -- en/in -> accent ... + ens/ins
p1 = string.gsub(mot, "([aeiou])[^aeio]+[ei]n$", {['a']='à',['e']='è',['i']='í',['o']='ò',['u']='ú'})
p1 = p1 .. string.match(mot, "([^aeio]+[ei]n)$") .. 's'
else
p1 = mot .. 's'
end
return p1, p2, p3, p4
end
return p