Modulo:vec-lema
Inpostasion de letura
La documentazione per questo modulo può essere creata in Modulo:vec-lema/man
local export = {}
local pos_functions = {}
-- funsion d'entrada par mostrar el lema flesionà, l'ùgnola che vien invocà da un modelo
function export.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 = "vec", sc = "Latn", heads = {}, genders = {}, inflections = {}, categories = {}}
local lema = args.lema; if lema == "" then lema = nil end
-- asento e silabe eceto locusion
if not lema and not mw.ustring.find(pagename, "[^ ]+ [^ ]+") then
lema = require("Modulo:vec-zenerałe").sil(pagename, frame.args[2] or args[2])
end
table.insert(data.heads, lema)
local isLemma = frame.args['forma'] == nil and true or nil
local poscat = frame.args[1] or error("Manca spesifegasion co forma lesegal inte el primo paràmatro.")
if pos_functions[poscat] then
pos_functions[poscat].func(args, data, isLemma)
else
table.insert(data.categories, poscat .. " in vèneto")
end
if args.cat and args.cat ~= "" then
table.insert(data.categories, args.cat)
end
if args.bot then
return require("Modulo:lema").make_bot_list(data.inflections)
else
return require("Modulo:lema").full_headword(data)
end
end
-- Informasion de flesion par sostantivi
pos_functions["Sostantivo"] = {func = function(args, data, isLemma)
--[[ cod zenar-nome:
"m", "f", "mf"
"m-p", "f-p", "mf-p" plurale zeneral
"m-s", "f-s", "mf-s" singolar zeneral
"m-i", "f-i", "mf-i" invariabile in nome
"m-?", "f-?". "mf-?" sensa plurale conosesto
"mp", "fp", "mfp" flesionà in pluremo
]]
local genere = args[1] or ""
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, "-")) -- conversion a "m", "f", "m-f", "m-p", "f-p", "m-f-p"
end
-- Categoria gramategale
if mw.ustring.find(pagename, "[^ ]+ [^ ]+") then
if genere:find("p$") then
table.insert(data.categories, "Forme de locusion nominali in vèneto")
else
table.insert(data.categories, "Locusion nominali in vèneto")
end
elseif genere == "mf" then
table.insert(data.categories, "Sostantivi femenini e masculini in vèneto")
elseif genere == "mfp" then
table.insert(data.categories, "Forme de sostantivi plurali in vèneto")
elseif genere == "m" then
table.insert(data.categories, "Sostantivi mascułini in vèneto")
elseif genere == "mp" then
table.insert(data.categories, "Forme de sostantivi plurali in vèneto")
elseif genere == "f" then
if isLemma then
table.insert(data.categories, "Sostantivi femenini in vèneto")
else
table.insert(data.categories, "Forme de sostantivi in femenni in vèneto")
end
elseif genere == "fp" then
table.insert(data.categories, "Forme de sostantivi in plurale in vèneto")
else
if isLemma then
table.insert(data.categories, "Sostantivi in vèneto")
else
table.insert(data.categories, "Forme de sostantivi in vèneto")
end
end
-- plurale
if not (tipus == "?" or genere == "mp" or genere == "fp" or genere == "mfp") then
local plurale = args.p; if plurale == "" then plurale = nil end
if tipus == "i" then
table.insert(data.inflections, {label = "plurale invariabile"})
elseif tipus == "p" then
table.insert(data.inflections, {label = "plurale"})
elseif tipus == "s" then
if plurale then
table.insert(data.inflections, {label = "normalmente in singolar"})
else
table.insert(data.inflections, {label = "nomi in singolar"})
end
end
if plurale or not tipus then
local p, p2 = forma_plurale_nominal(pagename, genere)
plurale = plurale or p
local plurale2 = args.p2 or p2; if plurale2 == "" then plurale2 = nil end
local plurale_fem = args.pf or p2; if plurale_fem == "" then plurale_fem = nil end
if genere == "mf" and plurale_fem then
table.insert(data.inflections, {label = "plurale masculin", plurale, accel = "plural-form-of gender-m"})
table.insert(data.inflections, {label = "plurale femenin", plurale_fem, accel = "plural-form-of gender-f"})
else
local infl_parts = {label = "plurale", accel = "plural-form-of gender-" .. genere}
table.insert(infl_parts, plurale)
if plurale2 then
table.insert(infl_parts, plurale2)
end
table.insert(data.inflections, infl_parts)
end
if not mw.title.new(plurale).exists or (plurale2 and not mw.title.new(plurale2).exists) or (plurale_fem and not mw.title.new(plurale_fem).exists) then
table.insert(data.categories, "Termeni in vèneto co flesion da far")
end
end
end
-- femenin
local fem = args["f"]
if fem == "" then
fem = forma_femenina(pagename)
end
if fem then
table.insert(data.inflections, {label = "femenin", fem, accel = "femenin-form-of gender-f"})
end
end
}
-- Informasion de flesion par ajetivi
pos_functions["Ajetivi"] = {func = function(args, data, isLemma)
-- zènere: m (masculin), i (invariabile)
-- zènere fesionà: f, mp, fp, ip
local genere = args[1]; if genere == "" then genere = nil end
local locucio = mw.ustring.find(pagename, "[ ']")
if genere == nil then
if locucio then
genere = "loc"
else
genere = string.find(pagename, "e$") and "i" or "m"
end
elseif genere == "mf" then
genere = "i"
elseif genere == "mfp" then
genere = "ip"
end
genere = string.gsub(genere, "([^%-])p$", "%1%-p") -- conversion a "m-p", "f-p", "i-p"
table.insert(data.genders, genere)
--[[ plurales:
p= plurale masculin o plurale de zènere invariable
p2= segondo plurale masculin o invariable
pf = plurale femenin
]]
local p, p2 = forma_plurale(pagename, genere)
local plurale = args.p or p
local plurale2 = args.p2; if plurale2 == nil then plurale2 = p2 end
local plurale_fem = args.pf; if plurale_fem == "" then plurale_fem = nil end
-- Zènere invariabile
if genere == "i" then
table.insert(data.categories, "Ajetivi in vèneto")
table.insert(data.categories, "Ajetivi invariabili in vèneto")
if plurale_fem == nil then plurale_fem = p2 end
if plurale_fem ~= "" then
table.insert(data.inflections, {label = "plurale masculin", accel = "plural-form-of gender-m", plurale})
table.insert(data.inflections, {label = "plurale femenin", accel = "plural-form-of gender-f", plurale_fem})
elseif plurale2 ~= "" then
table.insert(data.inflections, {label = "plurale", accel = "plural-form-of gender-i", plurale, plurale2})
else
table.insert(data.inflections, {label = "plurale", accel = "plural-form-of gender-i", plurale})
end
-- Dopio zenaro
elseif genere == "m" then
table.insert(data.categories, "Ajetivi in vèneto")
local fem = args.f or forma_femenina(pagename)
local pf, pf2 = forma_plurale(fem, "f")
plurale_fem = plurale_fem or pf
table.insert(data.inflections, {label = "femenin", accel = "femenin-form-of gender-f", fem})
if plurale_fem == plurale then
table.insert(data.inflections, {label = "plurale invariabile", accel = "plural-form-of gender-i", plurale})
else
if plurale2 == "" then
table.insert(data.inflections, {label = "plurale masculin", accel = "plural-form-of gender-m", plurale})
else
table.insert(data.inflections, {label = "plurale masculin", accel = "plural-form-of gender-m", plurale, plurale2})
end
table.insert(data.inflections, {label = "plurale femenin", accel = "plural-form-of gender-f origin-" .. fem, plurale_fem})
end
if not mw.title.new(plurale).exists or not mw.title.new(fem).exists or not mw.title.new(plurale_fem).exists then
table.insert(data.categories, "Termeni in vèneto co flesion da far")
end
-- Forme fleteste
elseif genere == "f" then
table.insert(data.categories, "Forme de ajetivi in femenin in vèneto")
local pf, pf2 = forma_plurale(pagename, "f")
plurale_fem = plurale_fem or pf
table.insert(data.inflections, {label = "plurale", accel = "plural-form-of gender-f", plurale_fem})
elseif genere == "m-p" or genere == "f-p" or genere == "i-p" then
table.insert(data.categories, "Forme de ajetivi in plurale in vèneto")
elseif genere == "loc" then
table.insert(data.categories, "Locusion ajetivali in vèneto")
else
table.insert(data.categories, "Ajetivi in vèneto")
end
end
}
function forma_femenina(base)
local fem = base
fem = mw.ustring.gsub(fem, "a$", "esa")
fem = mw.ustring.gsub(fem, "[eo]$", "a") -- ecesion co -esa
fem = mw.ustring.gsub(fem, "tora$", "dora") -- co ecesion
return fem
end
-- Informasion de verbi
pos_functions["Verbi"] = {func = function(args, data, isLemma)
local tipus = args[2] or ""
local titol = pagename
formaPron = tipus:find("p")
locucio = titol:find(" ")
if locucio then
table.insert(data.categories, "Locusion verbali in vèneto")
elseif formaPron then
table.insert(data.categories, "Verbi pronominali in vèneto")
else
table.insert(data.categories, "Verbi in vèneto")
end
tipus = string.gsub(tipus, "[^atipm-]", "")
if tipus ~= "" then
local totsTipus = mw.text.split(tipus, "")
for i, tipusx in ipairs(totsTipus) do
if tipusx ~= "-" then
table.insert(data.genders, "v" .. tipusx)
end
end
end
local flexPron = args["p"]; if flexPron == "" then flexpron = nil end
local defetivo = args.defetivo; if defetivo ~= nil then defetivo = true end
if defetivo then
table.insert(data.inflections, {label = "defetivo"})
end
if flexPron then
table.insert(data.inflections, {label = "pronominal", flexPron})
end
end
}
-- Forma plurale
function forma_plurale_nominal(lema, gen)
if lema:find("[^ ]+ [^ ]+") then
local preposicions = {" a ", " al ", " co ", " da ", " del ", " de ła ", " de l'", " de ", " intrà ",
" in ", " par ", " sensa ", " soto ", " su ", " so ", " pa "}
for i, prep in ipairs(preposicions) do
offset = mw.ustring.find(lema, prep, 1, true)
if offset then
local part1 = mw.ustring.sub(lema, 1, offset-1)
local part2 = mw.ustring.sub(lema, offset)
local plurale = forma_plurale_nominal(part1, gen)
return plurale .. part2
end
end
local plurales = {}
for part in mw.text.gsplit(lema, " ", true) do
local partplurale = forma_plurale(part, gen)
table.insert(plurales, partplurale)
end
return table.concat(plurales, " ")
else
return forma_plurale(lema, gen)
end
end
function forma_plurale(moto, genere)
local plurale = moto
local plurale2 = ""
if mw.ustring.find(moto, "a$") and genere == "m" then
plurale = mw.ustring.gsub(moto, "a$", "i")
elseif mw.ustring.find(moto, "a$") and (genere == "mf" or genere == "i") then -- ista
plurale = mw.ustring.gsub(moto, "a$", "i")
plurale2 = mw.ustring.gsub(moto, "a$", "e")
elseif mw.ustring.find(moto, "a$") then
plurale = mw.ustring.gsub(plurale, "([cg])a$", "%1he") -- incluzion h servile
plurale = mw.ustring.gsub(plurale, "([^aàeèéiìoòóuù][cg])ia$", "%1e") --eliminasion e servili
plurale = mw.ustring.gsub(plurale, "a$", "e")
elseif mw.ustring.find(moto, "[^i]e$") then -- ie invariabile
plurale = mw.ustring.gsub(moto, "e$", "i")
-- TUTO: ecesion -ore o -ione
elseif mw.ustring.find(moto, "o$") then
plurale = mw.ustring.gsub(plurale, "fego$", "feghi") -- ecesion
plurale = mw.ustring.gsub(plurale, "([cg])o$", "%1hi") -- incluzion h servil
plurale = mw.ustring.gsub(plurale, "io$", "i") --eliminasion e servil
plurale = mw.ustring.gsub(plurale, "o$", "i")
end
-- se finise in [aeo], ze invariabile
-- TUTO: i monosílabi i ze invariabili
return plurale, plurale2
end
-- Funcions exportabili per a proves
function export.fem(frame)
return forma_femenina(frame.args[1])
end
function export.plurale(frame)
return forma_plurale(frame.args[1])
end
return export