Mòdul:ca-verb
Aparença
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 {{ca-conj}} per a generar la taula de conjugació d’un verb en català. Vegeu la plantilla per al seu ús.
El casos irregulars estan tractats en submòduls: Especial:Cerca per prefix/Mòdul:ca-verb/.
La taula és generada per Mòdul:ca-verb/taula amb els estils definits a Plantilla:navbar/styles.css i Mòdul:ca-verb/styles.css.
Addicionalment, amb el paràmetre bot=1, o qualsevol valor, genera una llista per a facilitar la lectura per un bot.
--[=[
Creació de taules de conjugació de verbs en català.
Terminologia:
forma = cant + à + ve + m
radical = cant
vocal = à
temps = ve
persona = m
tema = cantà
desinència = vem
terminació = àvem
]=]--
local p = {}
local lang = {code = "ca", name = "català", sc = "Latn"}
local m_util = require("Module:utilitats")
local m_entrada = require("Module:ca-lema")
local name_space = mw.title.getCurrentTitle().nsText
-- TODO: traslladar a mòdul:ca-general
local function senseAccents(word)
word = mw.ustring.gsub(word, "à", "a")
word = mw.ustring.gsub(word, "[èé]", "e")
word = mw.ustring.gsub(word, "([gq]u)í", "%1i")
word = mw.ustring.gsub(word, "([aeiou])í", "%1ï")
word = mw.ustring.gsub(word, "í", "i")
word = mw.ustring.gsub(word, "[òó]", "o")
word = mw.ustring.gsub(word, "ú", "u")
return word
end
local function llistaZones(llista, zona)
local zones = {}
for k, v in pairs(llista) do
if zona[v == "or" and "ori" or v == "n-occ" and "nocc" or v] then
table.insert(zones, v)
end
end
return #zones > 3 and "" or table.concat(zones, ", ")
end
-- Alternança consonàntica del radical per canvi de vocal posterior (aou) a vocal anterior (ei)
-- TODO: traslladar a mòdul:ca-general
local function fixRadical_aou_ei(stem)
return (stem:gsub("qu$", "qü"):gsub("c$", "qu"):gsub("ç$", "c"):gsub("gu$", "gü"):gsub("g$", "gu"):gsub("j$", "g"))
end
-- Alternança consonàntica del radical per canvi de vocal anterior (ei) a vocal posterior (aou)
-- TODO: traslladar a mòdul:ca-general
local function fixRadical_ei_aou(stem)
return (stem:gsub("c$", "ç"):gsub("qu$", "c"):gsub("qü$", "qu"):gsub("g$", "j"):gsub("gu$", "g"):gsub("gü$", "gu"))
end
-- Create the various base stems that endings are attached to.
local function makeRadical(radical, conj)
radical.monosil = not require("Module:ca-general").sil(radical.simple):find("·")
radical.desinencia0 = radical.simple
if conj == "ar" then
if radical.desinencia0:find("[eiï]n$") then
if not radical.monosil then -- accent excepte monosíl·labs
local accent_e_tancat = m_util.llista({"afaen", "beren", "gangren",
"entren", "desentren", "estren", "destren", "reestren",
"desfren", "desenfren", "enfren", "refren", "sofren",
"orden", "desorden", "contraorden", "reorden"})
if accent_e_tancat[radical.simple] then
radical.desinencia0 = radical.desinencia0:gsub("en$", "én")
else
radical.desinencia0 = radical.desinencia0:gsub("en$", "èn")
radical.desinencia0 = mw.ustring.gsub(radical.desinencia0, "[iï]n$", "ín")
end
end
elseif mw.ustring.find(radical.desinencia0, "[aeiïou]s+$") then
if not radical.monosil then -- accent excepte monosíl·labs
local accent_e_tancat = m_util.llista({"contrapes", "repes", "sospes"})
local accent_o_tancat = m_util.llista({"aboss", "afarross", "desemboss", "endoss", "emborross", "emboss", "esboss", "reemboss"})
if accent_e_tancat[radical.desinencia0] then
radical.desinencia0 = radical.desinencia0:gsub("es+$", "és")
elseif mw.ustring.find(radical.desinencia0, "ess$") and not mw.ustring.find(radical.desinencia0, "d[ie]sfress") then
radical.desinencia0 = radical.desinencia0:gsub("ess$", "és")
elseif accent_o_tancat[radical.desinencia0] then
radical.desinencia0 = radical.desinencia0:gsub("os+$", "ós")
else
radical.desinencia0 = radical.desinencia0:gsub("as+$", "às")
radical.desinencia0 = radical.desinencia0:gsub("es+$", "ès")
radical.desinencia0 = mw.ustring.gsub(radical.desinencia0, "[iï]s+$", "ís")
radical.desinencia0 = radical.desinencia0:gsub("os+$", "òs")
radical.desinencia0 = radical.desinencia0:gsub("us+$", "ús")
end
elseif radical.desinencia0 == "us" or radical.desinencia0 == "caus" then
radical.desinencia0 = radical.desinencia0:gsub("us$", "ús")
else
radical.desinencia0 = radical.desinencia0:gsub("([aeiou])ss$", "%1s")
end
elseif radical.desinencia0:find("[^aeiou][ei]$") or radical.desinencia0:find("[gq]ui$") then
radical.desinencia0i = radical.desinencia0 .. "i" -- model crei, canvii, guii, però esglai
radical.desinencia0 = nil -- regular en alguerès: canvio pronunciat canvic
elseif radical.desinencia0:find("[aeiou]j$") then
radical.desinencia0 = radical.desinencia0:gsub("i?j$", "ig") -- model puig, però enfastig, viatj
elseif radical.desinencia0:find("o$") or radical.desinencia0:find("[^aeiougq]u$") then
radical.desinencia0 = radical.desinencia0 .. "u" -- model llou però creu, adequo
elseif radical.desinencia0:find("[gq]u$") then
radical.desinencia0 = nil
elseif radical.desinencia0:find("[aeiou]v$") then
radical.desinencia0u = radical.desinencia0:gsub("v$", "u") -- balear -var: llev > lleu
else
radical.desinencia0 = mw.ustring.gsub(radical.desinencia0, "l·l$", "l")
radical.desinencia0 = radical.desinencia0:gsub("nn$", "n")
end
end
radical.aton = radical.aton or radical.simple
if conj == "ar" or conj == "velar" then
radical.davant_aou = radical.simple
radical.davant_e = fixRadical_aou_ei(radical.simple) -- alternança consonàntica davant vocal anterior (ei)
if radical.davant_e:find("[gq]ui$") then
radical.davant_i = radical.davant_e
else
radical.davant_i = radical.davant_e:gsub("([aeiou])i$", "%1") -- reducció i final davant i
end
radical.aton_e = radical.davant_e
radical.aton_i = radical.davant_i
if radical.davant_e:find("tregu$") or radical.davant_e:find("[hj]egu$") then
radical.aton_e = radical.davant_e:gsub("egu$", "agu") -- velar àton de -jeure, -treure
radical.aton_i = radical.aton_e
end
else
radical.davant_aou = fixRadical_ei_aou(radical.simple) -- alternança consonàntica davant vocal posterior (aou)
radical.davant_e = radical.simple
radical.davant_i = radical.simple
radical.aton_e = radical.simple
radical.aton_i = radical.simple
end
radical.gradual = radical.gradual or radical.simple -- beu-
radical.gradual_aton = radical.gradual_aton or radical.gradual -- jau-, trau-
radical.sonor = radical.sonor or radical.simple -- bev-
radical.antihiat = radical.antihiat or radical.simple -- cai-ent
radical.antihiat_iA = (radical.antihiat_i and radical.antihiat_i:gsub("e$", "è") or radical.sonor) -- què-iem
radical.antihiat_i = radical.antihiat_i or radical.sonor -- que-ia
radical.sord = radical.gradual:gsub("b$", "p"):gsub("c$", "ç")
radical.sord_A = radical.sord
if not radical.monosil and radical.simple:find("en$") then
if radical.simple:find("[ct]en") then
radical.sord_A = radical.simple:gsub("en$", "én")
else
radical.sord_A = radical.simple:gsub("en$", "èn")
end
end
return radical
end
local function makeGer(radical, vocal, zona)
local formes = {}
formes[1] = {}
if radical.antihiat ~= radical.simple then
formes[1][1] = radical.antihiat .. vocal .. "nt"
if zona.val then
formes[2] = {}
formes[2][1] = radical.simple .. vocal .. "nt"
formes[2]["nota"] = "val"
end
else
formes[1][1] = radical.sonor .. vocal .. "nt"
end
return formes
end
local function makePart(part_ms, zona, part_2, zona_2)
local part_fs = m_entrada.forma_femenina(part_ms):gsub("ssa$", "sa"):gsub("([^gq])uida$", "%1uita")
local part_mp, part_mp2 = m_entrada.forma_plural(part_ms) -- i.e. vists/vistos
part_mp = part_mp:gsub("ssos$", "sos"):gsub("es$", "esos")
local formes = {}
formes[1] = {}
formes[1]["m-s"] = part_ms
formes[1]["f-s"] = part_fs
if part_mp2 == "" then
formes[1]["m-p"] = part_mp
else
formes[1]["m-p"] = part_mp2
formes[1]["m-p2"] = part_mp
end
formes[1]["f-p"] = m_entrada.forma_plural(part_fs)
-- Participis alternatius
if (part_2 or "") ~= "" then
if type(zona_2) == "table" or (zona_2 or "") == "" or zona[zona_2 or "x"] then
formes[2] = {}
formes[2]["m-s"] = part_2
if senseAccents(part_ms) ~= senseAccents(part_2) then
part_fs = m_entrada.forma_femenina(part_2):gsub("ssa$", "sa"):gsub("uida$", "uita"):gsub("frida$", "frita")
formes[2]["f-s"] = part_fs
formes[2]["m-p"] = m_entrada.forma_plural(part_2):gsub("ssos$", "sos"):gsub("es$", "esos")
formes[2]["f-p"] = m_entrada.forma_plural(part_fs)
end
if type(zona_2) == "table" then
formes[2]["nota"] = llistaZones(zona_2, zona)
elseif (zona_2 or "") ~= "" then
formes[2]["nota"] = zona_2
end
end
end
return formes
end
local function makePresInd1(radical, zona)
local hiat = radical.davant_e:find("[eio]$") or radical.davant_e:find("[^aeiougq]u$") or (radical.davant_i ~= radical.davant_e)
local formes = {}
formes[1] = {}
if zona.centr or zona.nocc or radical.desinencia0 == nil then
formes[1][1] = radical.simple .. "o"
end
formes[1][2] = radical.davant_e .. "es"
formes[1][3] = radical.simple .. "a"
if zona.occ or zona.sept or zona.centr or zona.alg then
formes[1][4] = radical.davant_e .. "em"
end
if zona.occ or zona.sept or zona.centr then
formes[1][5] = radical.davant_e .. "eu"
end
formes[1][6] = radical.davant_e .. "en"
local fila = 2
if zona.val then
formes[fila] = {}
formes[fila][1] = radical.davant_e .. "e"
formes[fila]["nota"] = "val"
fila = fila + 1
end
if zona.sept then
formes[fila] = {}
formes[fila][1] = radical.davant_i .. (hiat and "ï" or "i")
formes[fila]["nota"] = "sept"
fila = fila + 1
end
if zona.bal or zona.alg then
formes[fila] = {}
if radical.desinencia0 then
formes[fila][1] = radical.desinencia0
end
formes[fila][5] = radical.simple .. "au"
if zona.bal and zona.alg then
formes[fila]["nota"] = "bal, alg"
formes[fila+1] = {}
if radical.desinencia0i then
formes[fila+1][1] = radical.desinencia0i
end
formes[fila+1][4] = radical.simple .. "am"
formes[fila+1]["nota"] = "bal"
elseif zona.bal then
formes[fila][4] = radical.simple .. "am"
formes[fila]["nota"] = "bal"
if radical.desinencia0i then
formes[fila+1] = {}
formes[fila+1][1] = radical.desinencia0i
formes[fila+1]["nota"] = "bal"
end
else
formes[fila]["nota"] = "alg"
end
end
return formes
end
local function makePresInd2(radical, vocal, zona)
local formes = {}
formes[1] = {}
if (zona.centr or zona.nocc) then
formes[1][1] = radical.davant_aou .. "o"
end
formes[1][2] = mw.ustring.gsub(radical.sord, "ç$", "ce") .. "s"
formes[1][3] = radical.sord_A
formes[1][4] = radical.sonor .. "em"
formes[1][5] = radical.sonor .. "eu"
formes[1][6] = radical.gradual .. "en"
local fila = 2
if vocal == "g" then
formes[1][1] = radical.desinencia0
if radical.antihiat ~= radical.simple then
formes[1][4] = radical.antihiat .. "em"
formes[1][5] = radical.antihiat .. "eu"
if zona.val then
formes[2] = {}
formes[2][4] = radical.simple .. "em"
formes[2][5] = radical.simple .. "eu"
formes[2]["nota"] = "val"
fila = fila + 1
end
elseif zona.val and mw.ustring.find(radical.sord_A, "èn$") then
formes[2] = {}
formes[2][3] = mw.ustring.gsub(radical.sord_A, "èn$", "én")
formes[2]["nota"] = "val"
end
if radical.antihiat_i ~= radical.antihiat and zona.bal then
formes[fila] = {}
formes[fila][4] = radical.antihiat_i .. "im"
formes[fila][5] = radical.antihiat_i .. "is"
formes[fila]["nota"] = "bal"
end
else
if zona.val or zona.bal or zona.alg then
formes[fila] = {}
formes[fila][1] = radical.sord
formes[fila]["nota"] = llistaZones({"val", "bal", "alg"}, zona)
fila = fila + 1
end
if zona.sept then
formes[fila] = {}
formes[fila][1] = radical.simple .. "i"
formes[fila]["nota"] = "sept"
end
end
return formes
end
local function makePresInd3(radical, tipus, zona)
local hiat = radical.simple:find("[aeio]$") or radical.simple:find("[^gq]u$")
local formes = {}
local fila = 1
if tipus == "incoativa" or tipus == "mixta" then
formes[1] = {}
if zona.centr then
formes[1][1] = radical.simple .. "eixo"
end
if zona.ori then
formes[1][2] = radical.simple .. "eixes"
formes[1][3] = radical.simple .. "eix"
formes[1][6] = radical.simple .. "eixen"
end
formes[1][4] = radical.simple .. (hiat and "ïm" or "im")
formes[1][5] = radical.simple .. (hiat and "ïu" or "iu")
fila = 2
if zona.bal then
formes[fila] = {}
formes[fila][1] = radical.simple .. "esc"
formes[fila]["nota"] = "bal"
fila = fila + 1
end
if zona.sept then
formes[fila] = {}
formes[fila][1] = radical.simple .. "eixi"
formes[fila]["nota"] = "sept"
fila = fila + 1
end
if zona.occ then
formes[fila] = {}
if zona.val then
formes[fila][1] = radical.simple .. (hiat and "ïsc" or "isc")
end
formes[fila][2] = radical.simple .. (hiat and "ïxes" or "ixes")
formes[fila][3] = radical.simple .. (hiat and "ïx" or "ix")
formes[fila][6] = radical.simple .. (hiat and "ïxen" or "ixen")
formes[fila]["nota"] = "occ"
fila = fila + 1
if zona.nocc then
formes[fila] = {}
formes[fila][1] = radical.simple .. (hiat and "ïxo" or "ixo")
formes[fila]["nota"] = "n-occ"
fila = fila + 1
end
end
if (zona.val or zona.sept) and radical.simple:find("o$") and not radical.simple:find("ro$") then -- oir i derivats
formes[fila] = {}
formes[fila][2] = radical.simple .. "us"
formes[fila][3] = radical.simple .. "u"
formes[fila][6] = radical.simple .. "uen"
formes[fila]["nota"] = llistaZones({"val", "sept"}, zona)
fila = fila + 1
end
end
if tipus == "pura" or tipus == "mixta" then
local radical0 = radical.tonic:gsub("d$" , "t") .. (hiat and "u" or "")
local radical_accent = (radical.simple == "llu" or radical.simple == "pru") and radical.simple or radical.simple:gsub("u$", "ú")
formes[fila] = {}
if zona.centr or zona.nocc then
formes[fila][1] = fixRadical_ei_aou(radical.tonic) .. "o"
end
formes[fila][2] = radical0 .. ((radical0 == "brunz" or radical0:find("fug$") or radical0:find("x$")) and "es" or "s")
formes[fila][3] = radical.desinencia0 .. (hiat and "u" or "")
if tipus == "pura" then
formes[fila][4] = radical.simple .. (hiat and "ïm" or "im")
formes[fila][5] = radical.simple .. (hiat and "ïu" or "iu")
end
formes[fila][6] = radical.tonic .. "en"
fila = fila + 1
if hiat then
formes[fila] = {}
formes[fila][1] = radical.simple .. "u"
formes[fila][2] = radical_accent .. "s"
formes[fila][3] = radical_accent
fila = fila + 1
elseif zona.val or zona.bal or (zona.alg and tipus == "pura") then
formes[fila] = {}
formes[fila][1] = radical.desinencia0
if tipus == "pura" then
formes[fila]["nota"] = llistaZones({"bal", "val", "alg"}, zona)
else
formes[fila]["nota"] = llistaZones({"bal", "val"}, zona)
end
fila = fila + 1
end
if zona.sept then
formes[fila] = {}
formes[fila][1] = radical.tonic .. (hiat and "ï" or "i")
formes[fila]["nota"] = "sept"
end
end
return formes
end
local function makeImperfInd(radical, vocal, zona)
local arrel = radical.simple .. "av"
local arrelA = radical.simple .. "àv"
if vocal == "e" then
arrel = radical.antihiat_i .. ((radical.antihiat_i:find("[ao]$") or radical.antihiat_i:find("[^gq]u$")) and "ï" or "i")
arrelA = radical.antihiat_iA .. (radical.antihiat_iA == radical.antihiat_i and "í" or "i")
elseif vocal == "i" then
arrel = radical.antihiat_i .. ((radical.antihiat_i:find("[aeo]$") or radical.antihiat_i:find("[^gq]u$")) and "ï" or "i")
arrelA = radical.antihiat_iA .. (radical.antihiat_iA == radical.antihiat_i and "í" or "i")
end
local formes = {}
formes[1] = {}
formes[1][1] = arrel .. "a"
formes[1][2] = arrel .. "es"
formes[1][3] = arrel .. "a"
formes[1][4] = arrelA .. "em"
formes[1][5] = arrelA .. "eu"
formes[1][6] = arrel .. "en"
if mw.ustring.find(arrelA, "èi$") and zona.val then
arrelA = mw.ustring.gsub(arrelA, "èi$", "éi")
formes[2] = {}
formes[2][4] = arrelA .. "em"
formes[2][5] = arrelA .. "eu"
formes[2]["nota"] = "val"
end
return formes
end
local function makePass(radical, vocal, zona)
local tema = radical.simple .. "a"
local temaA = radical.simple .. "à"
if vocal == "e" then
tema = radical.aton_e .. "e"
temaA = radical.aton_e .. "é"
elseif vocal == "i" then
tema = radical.simple .. ((radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$"))and "ï" or "i")
temaA = radical.simple .. "í"
end
local formes = {}
formes[1] = {}
formes[1][1] = radical.aton_i .. "í"
formes[1][2] = tema .. "res"
formes[1][3] = temaA
formes[1][4] = temaA .. "rem"
formes[1][5] = temaA .. "reu"
formes[1][6] = tema .. "ren"
if tema:find("vengue$") and zona.bal then
local radical_alt = tema:gsub("gue$", "")
formes[2] = {}
formes[2][1] = radical_alt .. "í"
formes[2][2] = radical_alt .. "eres"
formes[2][3] = radical_alt .. "é"
formes[2][4] = radical_alt .. "érem"
formes[2][5] = radical_alt .. "éreu"
formes[2][6] = radical_alt .. "eren"
formes[2]["nota"] = "bal"
end
return formes
end
local function makeFutAndCond(tema)
local fut = {}
fut[1] = {}
fut[1][1] = tema .. "ré"
fut[1][2] = tema .. "ràs"
fut[1][3] = tema .. "rà"
fut[1][4] = tema .. "rem"
fut[1][5] = tema .. "reu"
fut[1][6] = tema .. "ran"
local cond = {}
cond[1] = {}
cond[1][1] = tema .. "ria"
cond[1][2] = tema .. "ries"
cond[1][3] = tema .. "ria"
cond[1][4] = tema .. "ríem"
cond[1][5] = tema .. "ríeu"
cond[1][6] = tema .. "rien"
return fut, cond
end
local function makePresSubj12(radical, vocal, zona)
local tema = radical.davant_e .. "e"
if vocal == "e" then
tema = radical.davant_aou .. "a"
end
local hiat = radical.davant_e:find("[eio]$") or radical.davant_e:find("[^aeiougq]u$") or (radical.davant_i ~= radical.davant_e)
local formes = {}
local fila = 1
formes[1] = {}
formes[1][4] = radical.davant_e .. "em"
formes[1][5] = radical.davant_e .. "eu"
if zona.ori then
formes[1][1] = radical.davant_i .. (hiat and "ï" or "i")
formes[1][2] = radical.davant_i .. (hiat and "ïs" or "is")
formes[1][3] = radical.davant_i .. (hiat and "ï" or "i")
formes[1][6] = radical.davant_i .. (hiat and "ïn" or "in")
fila = fila + 1
end
if zona.occ or (vocal == "e" and zona.bal) then
if fila ~= 1 then
formes[fila] = {}
end
formes[fila][1] = tema
formes[fila][2] = radical.davant_e .. "es"
formes[fila][3] = tema
formes[fila][6] = radical.davant_e .. "en"
formes[fila]["nota"] = llistaZones({"occ", "bal"}, zona)
end
return formes
end
local function makePresSubj3(radical, tipus, zona)
local tema = radical.simple .. ((radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$"))and "ï" or "i")
local formes = {}
local fila = 1
if tipus == "incoativa" or tipus == "mixta" then
if zona.centr or zona.sept or zona.alg or zona.occ then
formes[fila] = {}
formes[fila][4] = tema .. "m"
formes[fila][5] = tema .. "u"
if zona.centr or zona.sept or zona.alg then
formes[fila][1] = radical.simple .. "eixi"
formes[fila][2] = radical.simple .. "eixis"
formes[fila][3] = radical.simple .. "eixi"
formes[fila][6] = radical.simple .. "eixin"
end
fila = fila + 1
end
if zona.occ then
formes[fila] = {}
formes[fila][1] = tema .. "sca"
formes[fila][2] = tema .. "sques"
formes[fila][3] = tema .. "sca"
formes[fila][6] = tema .. "squen"
formes[fila]["nota"] = "occ"
fila = fila + 1
end
if zona.bal then
formes[fila] = {}
formes[fila][1] = radical.simple .. "esqui"
formes[fila][2] = radical.simple .. "esquis"
formes[fila][3] = radical.simple .. "esqui"
formes[fila][4] = tema .. "guem"
formes[fila][5] = tema .. "gueu"
formes[fila][6] = radical.simple .. "esquin"
formes[fila]["nota"] = "bal"
fila = fila + 1
end
if tipus == "mixta" then
if zona.centr or zona.sept or zona.bal then
formes[fila] = {}
formes[fila][1] = radical.simple .. "i"
formes[fila][2] = radical.simple .. "is"
formes[fila][3] = radical.simple .. "i"
formes[fila][6] = radical.simple .. "in"
formes[fila]["nota"] = llistaZones({"centr", "bal", "sept"}, zona)
fila = fila + 1
end
if zona.nocc or zona.bal then
formes[fila] = {}
formes[fila][1] = radical.simple .. "a"
formes[fila][2] = radical.simple .. "es"
formes[fila][3] = radical.simple .. "a"
formes[fila][6] = radical.simple .. "en"
formes[fila]["nota"] = llistaZones({"n-occ", "bal"}, zona)
end
end
elseif tipus == "pura" then
local hiat = radical.simple:find("u$")
formes[fila] = {}
if zona.ori then
formes[fila][1] = radical.tonic .. (hiat and "ï" or "i")
formes[fila][2] = radical.tonic .. (hiat and "ïs" or "is")
formes[fila][3] = radical.tonic .. (hiat and "ï" or "i")
formes[fila][6] = radical.tonic .. (hiat and "ïn" or "in")
end
if zona.occ or zona.centr or zona.sept or zona.alg then
formes[fila][4] = radical.simple .. (hiat and "ïm" or "im")
formes[fila][5] = radical.simple .. (hiat and "ïu" or "iu")
end
fila = fila + 1
if zona.occ then
formes[fila] = {}
formes[fila][1] = fixRadical_ei_aou(radical.tonic) .. "a"
formes[fila][2] = radical.tonic .. "es"
formes[fila][3] = fixRadical_ei_aou(radical.tonic) .. "a"
formes[fila][6] = radical.tonic .. "en"
formes[fila]["nota"] = "occ"
fila = fila + 1
end
if zona.bal then
formes[fila] = {}
formes[fila][4] = radical.simple .. (hiat and "ïguem" or "iguem")
formes[fila][5] = radical.simple .. (hiat and "ïgueu" or "igueu")
formes[fila]["nota"] = "bal"
fila = fila + 1
end
end
return formes
end
local function makeImperfSubj(radical, vocal, zona)
local tema = radical.aton_e .. "e"
local temaA = radical.aton_e .. "é"
local temaval = radical.simple .. "a"
local temavalA = radical.simple .. "à"
if vocal == "e" then
temaval = radical.davant_e .. "e"
temavalA = radical.davant_e .. "é"
elseif vocal == "i" then
tema = radical.simple .. ((radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$")) and "ï" or "i")
temaA = radical.simple .. "í"
temaval = tema
temavalA = temaA
end
local formes = {}
local fila = 1
if zona.ori or zona.nocc then
formes[fila] = {}
if zona.sept or zona.centr or zona.bal or zona.nocc then
formes[fila][1] = temaA .. "s"
formes[fila][3] = temaA .. "s"
end
if zona.ori then
formes[fila][2] = tema .. "ssis"
formes[fila][4] = temaA .. "ssim"
formes[fila][5] = temaA .. "ssiu"
formes[fila][6] = tema .. "ssin"
end
fila = fila + 1
end
if zona.sept or zona.centr or zona.nocc or (zona.bal and (vocal == "e" or vocal == "i")) then
formes[fila] = {}
formes[fila][2] = tema .. "sses"
formes[fila][4] = temaA .. "ssem"
formes[fila][5] = temaA .. "sseu"
formes[fila][6] = tema .. "ssen"
fila = fila + 1
end
if zona.bal and vocal == "a" then
formes[fila] = {}
formes[fila][1] = radical.simple .. "às"
formes[fila][2] = radical.simple .. "assis"
formes[fila][3] = radical.simple .. "às"
formes[fila][4] = radical.simple .. "àssim"
formes[fila][5] = radical.simple .. "àssiu"
formes[fila][6] = radical.simple .. "assin"
formes[fila]["nota"] = "bal"
fila = fila + 1
end
if (zona.bal or zona.val) and vocal == "a" then
formes[fila] = {}
formes[fila][2] = radical.simple .. "asses"
formes[fila][4] = radical.simple .. "àssem"
formes[fila][5] = radical.simple .. "àsseu"
formes[fila][6] = radical.simple .. "assen"
formes[fila]["nota"] = llistaZones({"val", "bal"}, zona) .. " (1)"
fila = fila + 1
end
if zona.val then
formes[fila] = {}
formes[fila][1] = temaval .. "ra"
formes[fila][2] = temaval .. "res"
formes[fila][3] = temaval .. "ra"
formes[fila][4] = temavalA .. "rem"
formes[fila][5] = temavalA .. "reu"
formes[fila][6] = temaval .. "ren"
formes[fila]["nota"] = "val"
fila = fila + 1
end
if tema:find("vengue$") and zona.bal then
local radical_alt = tema:gsub("gue$", "")
formes[fila] = {}
formes[fila][1] = radical_alt .. "és"
formes[fila][2] = radical_alt .. "essis"
formes[fila][3] = radical_alt .. "és"
formes[fila][4] = radical_alt .. "éssim"
formes[fila][5] = radical_alt .. "éssiu"
formes[fila][6] = radical_alt .. "essin"
formes[fila]["nota"] = "bal"
end
return formes
end
local function makeImp(forma_ind, forma_subj)
local imp = {}
for fila in ipairs(forma_ind) do
if forma_ind[fila][3] or forma_ind[fila][5] then
if not imp[forma_ind[fila]["nota"] or "aa"] then
imp[forma_ind[fila]["nota"] or "aa"] = {}
end
imp[forma_ind[fila]["nota"] or "aa"][2] = imp[forma_ind[fila]["nota"] or "aa"][2] or forma_ind[fila][3]
imp[forma_ind[fila]["nota"] or "aa"][5] = imp[forma_ind[fila]["nota"] or "aa"][5] or forma_ind[fila][5]
end
end
for fila in ipairs(forma_subj) do
if forma_subj[fila][3] or forma_subj[fila][4] or forma_subj[fila][6] then
if not imp[forma_subj[fila]["nota"] or "aa"] then
imp[forma_subj[fila]["nota"] or "aa"] = {}
end
imp[forma_subj[fila]["nota"] or "aa"][3] = imp[forma_subj[fila]["nota"] or "aa"][3] or forma_subj[fila][3]
imp[forma_subj[fila]["nota"] or "aa"][4] = imp[forma_subj[fila]["nota"] or "aa"][4] or forma_subj[fila][4]
imp[forma_subj[fila]["nota"] or "aa"][6] = imp[forma_subj[fila]["nota"] or "aa"][6] or forma_subj[fila][6]
end
end
local formes = {}
local fila = 1
for k in m_util.spairs(imp) do
formes[fila] = {}
for j = 2, 6 do
if imp[k][j] then
formes[fila][j] = imp[k][j]
end
end
if k ~= "aa" then
formes[fila]["nota"] = k
end
fila = fila + 1
end
return formes
end
local function makePartNo(radical, zona)
if zona.alt and (zona.centr or zona.bal or zona.occ) then
local formes = {}
formes["m-s"] = radical.aton .. "ut"
formes["f-s"] = radical.aton .. "uda"
formes["m-p"] = radical.aton .. "uts"
formes["f-p"] = radical.aton .. "udes"
formes["nota"] = llistaZones({"centr", "occ", "bal"}, zona)
return formes
end
return
end
local function makePresIndNo1(radical, zona)
local formes = {}
if zona.bal and radical.desinencia0u then
formes[1] = {}
formes[1][1] = radical.desinencia0u
formes[1]["nota"] = "bal"
end
return next(formes) and formes
end
local function makePresIndNo2(radical, zona, pres_ind)
local formes = {}
if radical.simple:find("pren$") then
if (zona.alt and (zona.sept or zona.bal or zona.val)) or zona.alg then
formes[1] = {}
formes[1][4] = radical.simple .. "im"
formes[1][5] = radical.simple .. "iu"
if zona.alt then
formes[1]["nota"] = llistaZones({"val", "bal", "sept", "alg"}, zona)
else
formes[1]["nota"] = llistaZones({"alg"}, zona)
end
end
elseif zona.alt and (zona.sept or zona.centr or zona.nocc) then
formes[1] = {}
formes[1][2] = radical.simple .. "es"
formes[1][3] = radical.simple .. "e"
formes[1]["nota"] = llistaZones({"centr", "n-occ", "sept"}, zona)
if formes[1][2] == pres_ind[1][2] then formes[1][2] = nil end
end
return next(formes) and formes
end
local function makePresIndNo3(radical, zona)
if (zona.alt and zona.bal) or zona.alg then
local formes = {}
formes[1] = {}
formes[1][1] = radical.simple .. "eix"
if zona.alt then
formes[1]["nota"] = llistaZones({"bal", "alg"}, zona)
else
formes[1]["nota"] = llistaZones({"alg"}, zona)
end
return formes
end
return
end
local function makeImperfIndNo1(radical, zona)
if zona.alt and (zona.sept or zona.centr or zona.nocc) then
local formes = {}
local fila = 1
if zona.centr or zona.nocc then
formes[fila] = {}
formes[fila][4] = radical.simple .. "àvom"
formes[fila][5] = radical.simple .. "avo"
formes[fila]["nota"] = llistaZones({"centr", "n-occ"}, zona)
fila = fila + 1
end
if zona.sept then
formes[fila] = {}
formes[fila][1] = radical.simple .. "avi"
formes[fila]["nota"] = "sept"
fila = fila + 1
end
if zona.nocc then
formes[fila] = {}
formes[fila][1] = radical.simple .. "aia"
formes[fila][2] = radical.simple .. "aies"
formes[fila][3] = radical.simple .. "aia"
formes[fila][4] = radical.simple .. "àiem"
formes[fila][5] = radical.simple .. "àieu"
formes[fila][6] = radical.simple .. "aien"
formes[fila]["nota"] = "n-occ"
end
return formes
end
return
end
local function makeImperfIndNo2(radical, zona)
if (zona.alt and zona.nocc) or zona.alg then
local tema = radical.sonor .. (radical.sonor:find("[aeio]$") and "ï" or "i")
local formes = {}
local fila = 1
if zona.alt and zona.nocc then
formes[1] = {}
formes[1][1] = tema .. "va"
formes[1][2] = tema .. "ves"
formes[1][3] = tema .. "va"
formes[1][4] = radical.sonor .. "ívem"
formes[1][5] = radical.sonor .. "íveu"
formes[1][6] = tema .. "ven"
formes[1]["nota"] = "n-occ"
formes[2] = {}
formes[2][4] = radical.sonor .. "ívom"
formes[2][5] = radical.sonor .. "ívou"
formes[2]["nota"] = "n-occ"
fila = 3
end
local radical = radical.antihiat .. (radical.antihiat:find("e$") and "i" or "")
formes[fila] = {}
formes[fila][1] = radical .. "eva"
formes[fila][2] = radical .. "eves"
formes[fila][3] = radical .. "eva"
formes[fila][4] = radical .. "évem"
formes[fila][5] = radical .. "éveu"
formes[fila][6] = radical .. "even"
if zona.alt then
formes[fila]["nota"] = llistaZones({"n-occ", "alg"}, zona)
else
formes[fila]["nota"] = llistaZones({"alg"}, zona)
end
return formes
end
return
end
local function makeImperfIndNo3(radical, conj, zona)
if (zona.alt and zona.nocc) or zona.alg then
local tema = radical.simple .. ((radical.simple:find("[aeio]$") or radical.simple:find("[^gq]u$")) and "ï" or "i")
local formes = {}
formes[1] = {}
formes[1][1] = tema .. "va"
formes[1][2] = tema .. "ves"
formes[1][3] = tema .. "va"
formes[1][4] = radical.simple .. "ívem"
formes[1][5] = radical.simple .. "íveu"
formes[1][6] = tema .. "ven"
if zona.alt then
formes[1]["nota"] = llistaZones({"n-occ", "alg"}, zona)
else
formes[1]["nota"] = llistaZones({"alg"}, zona)
end
if zona.alt and zona.nocc and conj == "incoativa" then
formes[2] = {}
formes[2][1] = radical.simple .. "igueva"
formes[2][2] = radical.simple .. "igueves"
formes[2][3] = radical.simple .. "igueva"
formes[2][4] = radical.simple .. "iguévem"
formes[2][5] = radical.simple .. "iguéveu"
formes[2][6] = radical.simple .. "igueven"
formes[2]["nota"] = "n-occ"
end
return formes
end
return
end
local function makePassNo(radical, zona)
if zona.alt and zona.bal then
local formes = {}
formes[1] = {}
formes[1][1] = radical.simple .. "igué"
formes[1][2] = radical.simple .. "igueres"
formes[1][3] = radical.simple .. "igué"
formes[1][4] = radical.simple .. "iguérem"
formes[1][5] = radical.simple .. "iguéreu"
formes[1][6] = radical.simple .. "igueren"
formes[1]["nota"] = "bal"
return formes
end
return
end
local function makeFutNo(tema, zona)
-- Usat en 2a conj., velar només en alguerès
local velar = tema:find("gue$")
if zona.alg or (not velar and zona.alt and (zona.sept or zona.centr or zona.nocc)) then
local formes = {}
formes[1] = {}
formes[1][1] = tema .. "ré"
formes[1][2] = tema .. "ràs"
formes[1][3] = tema .. "rà"
formes[1][4] = tema .. "rem"
formes[1][5] = tema .. "reu"
formes[1][6] = tema .. "ran"
if velar then
formes[1]["nota"] = "alg"
else
formes[1]["nota"] = llistaZones({"centr", "n-occ", "sept", "alg"}, zona)
end
return formes
end
return
end
local function makeCondNo13(tema, zona)
if zona.alg then
local formes = {}
formes[1] = {}
formes[1][1] = tema .. "riva"
formes[1][2] = tema .. "rives"
formes[1][3] = tema .. "riva"
formes[1][4] = tema .. "rívem"
formes[1][5] = tema .. "ríveu"
formes[1][6] = tema .. "riven"
formes[1]["nota"] = "alg"
return formes
end
return
end
local function makeCondNo2(tema, zona)
local vocal = tema:find("gue$") and "g" or string.sub(tema, -1)
if zona.alg or (vocal == "e" and zona.alt and (zona.sept or zona.centr or zona.nocc)) then
local formes = {}
local fila = 1
if vocal == "g" and zona.alg or (vocal == "e" and zona.alt and (zona.sept or zona.centr or zona.nocc)) then
formes[fila] = {}
formes[fila][1] = tema .. "ria"
formes[fila][2] = tema .. "ries"
formes[fila][3] = tema .. "ria"
formes[fila][4] = tema .. "ríem"
formes[fila][5] = tema .. "ríeu"
formes[fila][6] = tema .. "rien"
if vocal == "g" then
formes[fila]["nota"] = "alg"
else
formes[fila]["nota"] = llistaZones({"centr", "n-occ", "sept"}, zona)
end
fila = fila + 1
end
if zona.alg then
formes[fila] = {}
formes[fila][1] = tema .. "riva"
formes[fila][2] = tema .. "rives"
formes[fila][3] = tema .. "riva"
formes[fila][4] = tema .. "rívem"
formes[fila][5] = tema .. "ríveu"
formes[fila][6] = tema .. "riven"
formes[fila]["nota"] = "alg"
end
return formes
end
return
end
local function makePresSubjNo(radical, vocal, zona)
if zona.alt and zona.nocc then
local tema = radical.davant_aou
local formes = {}
formes[1] = {}
formes[1][2] = tema .. "os"
formes[1][3] = tema .. "o"
if vocal == "a" then
formes[1][1] = radical.simple .. "o"
formes[1][4] = radical.davant_e .. "eguem"
formes[1][5] = radical.davant_e .. "egueu"
end
formes[1]["nota"] = "n-occ"
return formes
end
return
end
local function makePresSubjNoVelar(radical, zona)
if zona.alt and (zona.centr or zona.occ) then
local formes = {}
local fila = 1
if zona.centr or zona.nocc then
formes[fila] = {}
formes[fila][2] = radical.simple .. "os"
formes[fila][3] = radical.simple .. "o"
formes[fila]["nota"] = llistaZones({"centr", "n-occ"}, zona)
fila = fila + 1
end
if zona.occ then
formes[fila] = {}
formes[fila][4] = radical.simple .. "am"
formes[fila][5] = radical.simple .. "au"
formes[fila]["nota"] = "occ"
end
return formes
end
return
end
local function makePresSubjNo3(radical, zona)
if zona.alt and (zona.nocc or zona.bal) then
local formes = {}
local fila = 1
if zona.nocc then
local tema = radical.simple .. ((radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$")) and "ï" or "i")
formes[1] = {}
formes[1][1] = tema .. "xa"
formes[1][2] = tema .. "xes"
formes[1][3] = tema .. "xa"
formes[1][4] = radical.simple .. "isquem"
formes[1][5] = radical.simple .. "isqueu"
formes[1][6] = tema .. "xen"
formes[1]["nota"] = "n-occ"
formes[2] = {}
formes[2][2] = tema .. "xos"
formes[2][3] = tema .. "xo"
formes[2]["nota"] = "n-occ"
fila = 3
end
if zona.bal then
formes[fila] = {}
formes[fila][1] = radical.simple .. "esca"
formes[fila][2] = radical.simple .. "esques"
formes[fila][3] = radical.simple .. "esca"
formes[fila][6] = radical.simple .. "esquen"
formes[fila]["nota"] = "bal"
end
return formes
end
return
end
local function makeImperfSubjNo(radical, zona)
if zona.alg or (zona.alt and (zona.sept or zona.centr or zona.nocc)) then
local formes = {}
local fila = 1
if (zona.alt and zona.sept) or zona.alg then
formes[fila] = {}
formes[fila][1] = radical.davant_e .. "essi"
if zona.alg then
formes[fila][3] = radical.davant_e .. "essi"
end
formes[fila]["nota"] = llistaZones({"sept", "alg"}, zona)
fila = fila + 1
end
if zona.alt and (zona.centr or zona.nocc) then
formes[fila] = {}
formes[fila][1] = radical.davant_e .. "essa"
formes[fila]["nota"] = llistaZones({"centr", "n-occ"}, zona)
fila = fila + 1
end
if zona.alt and zona.nocc then
formes[fila] = {}
formes[fila][1] = radical.davant_e .. "eguessa"
formes[fila][2] = radical.davant_e .. "eguesses"
formes[fila][3] = radical.davant_e .. "egués"
formes[fila][4] = radical.davant_e .. "eguéssom"
formes[fila][5] = radical.davant_e .. "eguéssou"
formes[fila][6] = radical.davant_e .. "eguessen"
formes[fila]["nota"] = "n-occ"
end
return formes
end
return
end
local function makeImperfSubjNoVelar(radical, zona)
if (zona.alt and (zona.centr or zona.nocc)) or zona.alg then
local formes = {}
local fila = 1
if zona.alt and zona.centr then
local radical = (radical.antihiat ~= radical.simple and radical.antihiat or radical.sonor)
formes[fila] = {}
formes[fila][1] = radical .. "és"
formes[fila][2] = radical .. "esses"
formes[fila][3] = radical .. "és"
formes[fila][4] = radical .. "éssem"
formes[fila][5] = radical .. "ésseu"
formes[fila][6] = radical .. "essen"
formes[fila]["nota"] = "centr"
fila = fila + 1
end
if zona.alt and zona.nocc then
local radical = radical.desinencia0:gsub("c$", "")
formes[fila] = {}
formes[fila][1] = radical .. "guessa"
formes[fila][4] = radical .. "guéssom"
formes[fila][5] = radical .. "guéssou"
formes[fila]["nota"] = "n-occ"
fila = fila + 1
end
if zona.alg then
local radical = (radical.aton == radical.simple and radical.desinencia0:gsub("c$", "") or radical.aton)
formes[fila] = {}
formes[fila][1] = radical .. "guessi"
formes[fila][3] = radical .. "guessi"
formes[fila]["nota"] = "alg"
end
return formes
end
return
end
local function makeImperfSubjNo3(radical, zona)
if zona.alt or zona.alg then
local formes = {}
local fila = 1
if zona.alt and (zona.sept or zona.centr or zona.nocc or zona.bal) then
formes[fila] = {}
formes[fila][1] = radical.simple .. "igués"
formes[fila][2] = radical.simple .. "iguesses"
formes[fila][3] = radical.simple .. "igués"
formes[fila][4] = radical.simple .. "iguéssem"
formes[fila][5] = radical.simple .. "iguésseu"
formes[fila][6] = radical.simple .. "iguessen"
formes[fila]["nota"] = llistaZones({"centr", "bal", "sept", "n-occ"}, zona)
fila = fila + 1
end
if (zona.alt and zona.sept) or zona.alg then
local tema = radical.simple .. ((radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$")) and "ï" or "i")
formes[fila] = {}
formes[fila][1] = tema .. "ssi"
if zona.alg then
formes[fila][3] = tema .. "ssi"
end
formes[fila]["nota"] = llistaZones({"sept", "alg"}, zona)
fila = fila + 1
end
if zona.alt and zona.val then
formes[fila] = {}
formes[fila][1] = radical.simple .. "iguera"
formes[fila][2] = radical.simple .. "igueres"
formes[fila][3] = radical.simple .. "iguera"
formes[fila][4] = radical.simple .. "iguérem"
formes[fila][5] = radical.simple .. "iguéreu"
formes[fila][6] = radical.simple .. "igueren"
formes[fila]["nota"] = "val"
end
return formes
end
return
end
-- Primera conjugació (-ar)
local function conj1(infinitiu, zona)
local forma = {}
local categories = {}
local title = "Primera conjugació regular"
local radical = {}
radical.simple = name_space == "Plantilla" and "-" or string.sub(infinitiu, 1, -3)
radical = makeRadical(radical, "ar")
forma.inf = radical.simple .. "ar"
forma.ger = makeGer(radical, "a", zona)
local part2 = "" -- participis alternatius
local part2_zona = ""
if radical.simple == "mat" then
part2 = "mort"
elseif radical.simple == "despert" then
part2 = "despert"
part2_zona = "bal"
end
forma.part = makePart(radical.simple .. "at", zona, part2, part2_zona)
forma["pres-ind"] = makePresInd1(radical, zona)
forma["imperf-ind"] = makeImperfInd(radical, "a", zona)
forma["pass"] = makePass(radical, "a", zona)
forma["fut"], forma["cond"] = makeFutAndCond(radical.simple .. "a")
forma["pres-subj"] = makePresSubj12(radical, "a", zona)
forma["imperf-subj"] = makeImperfSubj(radical, "a", zona)
forma["imp"] = makeImp(forma["pres-ind"], forma["pres-subj"])
forma["no-pres-ind"] = makePresIndNo1(radical, zona)
forma["no-imperf-ind"] = makeImperfIndNo1(radical, zona)
forma["no-cond"] = makeCondNo13(radical.simple .. "a", zona)
forma["no-pres-subj"] = makePresSubjNo(radical, "a", zona)
forma["no-imperf-subj"] = makeImperfSubjNo(radical, zona)
forma["nota"] = (zona.bal or zona.val) and "Notes: (1) en baleàric en àmbits restringits i en valencià en registres molt formals." or ""
local irregulars = m_util.llista({"aguar", "anar", "dar", "donar", "estar"})
if irregulars[forma.inf] then
forma = require("Module:ca-verb/" .. forma.inf).make_irregulars(forma, zona)
if forma.inf == "donar" then
title = title .. ", amb accents diacrítics"
elseif forma.inf == "aguar" then
title = "Primera conjugació amb hiat rizotònic irregular"
else
title = "Primera conjugació irregular"
end
elseif radical.davant_e ~= radical.simple then
title = title .. ", amb alternança consonàntica en el radical"
elseif radical.simple:find("[eio]$") or radical.simple:find("[^aeiougq]u$")then
title = title .. ", amb hiat entre el radical i la desinència"
elseif radical.desinencia0 and radical.desinencia0 ~= radical.simple then
title = title .. ", amb radical modificat sense desinència"
end
return forma, title, categories
end
-- Segona conjugació (-re o -er)
local function conj2(infinitiu, zona)
local forma = {}
local categories = {}
local title = "Segona conjugació regular"
local radical = {}
local vocal = string.sub(infinitiu, -2) == "er" and "e" or ""
if string.sub(infinitiu, -4) == "ndre" then -- excepcions en formes velaritzades
radical.simple = senseAccents(string.sub(infinitiu, 1, -4))
vocal = "d"
elseif mw.ustring.find(infinitiu, "[np]éixer$") and not mw.ustring.find(infinitiu, "conéixer$") then
radical.simple = mw.ustring.gsub(infinitiu, "éixer$", "aix")
elseif infinitiu == "ésser" or infinitiu == "esser" then
radical.simple = "s"
else
radical.simple = senseAccents(string.sub(infinitiu, 1, -3))
end
radical = makeRadical(radical, "er")
forma.inf = infinitiu
forma.ger = makeGer(radical, "e", zona)
local part = radical.davant_aou .. "ut"
-- Participis irregulars
local part2 = ""
local part2_zona = ""
if radical.simple:find("met$") then
if radical.monosil then
part = radical.simple:gsub("et$", "es")
else
part = radical.simple:gsub("et$", "ès")
part2 = radical.simple:gsub("et$", "és")
part2_zona = "val"
end
title = title .. ", participi irregular"
elseif radical.simple:find("torc$") then
part2 = radical.simple:gsub("torc$", "tort")
part2_zona = "eiv"
end
forma.part = makePart(part, zona, part2, part2_zona)
forma["pres-ind"] = makePresInd2(radical, "e", zona)
forma["imperf-ind"] = makeImperfInd(radical, "e", zona)
forma["pass"] = makePass(radical, "e", zona)
forma["fut"], forma["cond"] = makeFutAndCond(radical.simple .. vocal)
forma["pres-subj"] = makePresSubj12(radical, "e", zona)
forma["imperf-subj"] = makeImperfSubj(radical, "e", zona)
forma["imp"] = makeImp(forma["pres-ind"], forma["pres-subj"])
forma["no-pres-ind"] = makePresIndNo2(radical, zona, forma["pres-ind"])
forma["no-imperf-ind"] = makeImperfIndNo2(radical, zona)
if vocal == "" then
forma["no-fut"] = makeFutNo(radical.davant_e .. "e", zona)
forma["no-cond"] = makeCondNo2(radical.davant_e .. "e", zona)
end
forma["no-pres-subj"] = makePresSubjNo(radical, "e", zona)
forma["no-imperf-subj"] = makeImperfSubjNo(radical, zona)
if radical.simple:find("[np]aix$") then
forma = require("Module:ca-verb/néixer").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("coneix$") then
forma = require("Module:ca-verb/conèixer").make_irregulars(forma, zona)
title = "Segona conjugació amb alternança consonàntica en el radical"
elseif radical.simple:find("pareix$") then
forma = require("Module:ca-verb/aparèixer").make_irregulars(forma, zona)
title = "Segona conjugació amb alternança consonàntica en el radical"
elseif radical.simple:find("eix$") then
forma = require("Module:ca-verb/eixer").make_irregulars(forma, zona)
title = "Segona conjugació amb alternança consonàntica en el radical"
elseif radical.simple:find("any$") or radical.simple:find("feny$") then
forma = require("Module:ca-verb/pertànyer").make_irregulars(forma, zona)
title = "Segona conjugació amb algunes formes velaritzades"
elseif radical.simple:find("eny$") then
forma = require("Module:ca-verb/empènyer").make_irregulars(forma, zona)
title = "Segona conjugació amb algunes formes velaritzades"
elseif radical.simple == "cab" then
forma = require("Module:ca-verb/cabre").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("corr$") then
forma = require("Module:ca-verb/córrer").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("f$") then
forma = require("Module:ca-verb/fer").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple == "ess" or radical.simple == "s" then
forma = require("Module:ca-verb/ésser").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple == "pod" then
forma = require("Module:ca-verb/poder").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple == "sab" then
forma = require("Module:ca-verb/saber").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple == "hav" then
forma = require("Module:ca-verb/haver").make_irregulars(forma, zona)
title = "Verb auxiliar"
elseif radical.simple:find("c$") or radical.simple:find("b$") then
title = title .. ", amb alternança consonàntica en el radical"
elseif infinitiu == "nòmer" then
forma = require("Module:ca-verb/nòmer").make_irregulars(forma, zona)
title = title .. " defectiva"
end
return forma, title, categories
end
-- Segona conjugació (-dre, -ure) velaritzada
local function conj2Velar(infinitiu, zona)
local forma = {}
local categories = {}
local title = "Segona conjugació amb formes velaritzades"
local radical = {}
local radical_velar = {}
if infinitiu:find("ir$") then
radical.simple = infinitiu:gsub("([tv])enir$", "%1in"):gsub("dir$", "di"):gsub("ir$", "")
elseif infinitiu:find("dur$") then
radical.simple = infinitiu:sub(1, -2)
else
radical.simple = string.sub(infinitiu, 1, infinitiu:find("er$") and -3 or -4) -- exc. caler, valer, voler
end
radical_velar.simple = radical.simple .. "g"
radical.aton = radical.simple
if radical.simple:find("tre$") or radical.simple:find("[hj]e$") then
radical.aton = radical.simple:gsub("e$", "a")
radical_velar.aton = radical.aton .. "g"
end
if radical.simple:find("[aeio]$") then
radical.gradual = radical.simple .. "u"
radical.gradual_aton = radical.aton .. "u"
if radical.simple:find("[bdl]e$") or radical.simple:find("[lm]o$") or radical.simple:find("h[ae]$") or radical.simple:find("cri$") then
if not radical.simple:find("clo$") then
radical.sonor = radical.aton .. "v"
title = title .. " amb alternaça consonàntica"
end
end
if radical.simple:find("[^bdhl][ae]$") and radical.simple ~= "ra" then
radical.antihiat = radical.aton .. "i" -- caient
radical.antihiat_i = radical.antihiat:gsub("[ae]i$", "e"):gsub("ce$", "que") -- queia
title = title .. " i vocal antihiàtica"
if radical.simple:find("ca$") then
radical_velar.simple = radical.simple .. "ig"
end
elseif radical.simple:find("ri$") and not radical.simple:find("cri$") then
radical.antihiat_i = radical.simple:gsub("i$", "e")
end
end
radical = makeRadical(radical, "er")
radical_velar = makeRadical(radical_velar, "velar")
radical.desinencia0 = radical_velar.simple:gsub("g$", "c")
forma.inf = infinitiu
forma.ger = makeGer(radical, "e", zona)
-- Participis irregulars
local part = radical_velar.aton_e .. "t"
local part2 = ""
local part2_zona = ""
if radical.simple:find("[cst]ol$") then
if radical.simple ~= "sol" then
part = radical.simple .. "t"
end
elseif radical.simple:find("mol$") then
part = radical.simple:gsub("mol$", "molt")
elseif radical.simple:find("ven$") then
part = radical.simple .. "ut"
part2 = radical_velar.simple .. "ut"
elseif radical.simple == "roman" then
part = "romàs"
elseif radical.simple:find("[^v]en$") then
if radical.monosil then
part = radical.simple:gsub("en$", "es")
else
part = radical.simple:gsub("en$", "ès")
part2 = radical.simple:gsub("en$", "és")
part2_zona = "val"
end
elseif radical.simple:find("pon$") then
part = radical.simple:gsub("n$", "st")
elseif radical.simple == "fon" then
part = "fos"
part2 = "fus"
part2_zona = "bal"
elseif radical.simple == "enfon" then
part = "enfús"
elseif radical.simple:find("on$") then
part = radical.monosil and radical.simple:gsub("on$", "os") or radical.simple:gsub("on$", "ós")
elseif radical.simple == "ra" then
part2 = "ras"
elseif radical.simple:find("ri$") and not radical.simple:find("cri$") then
part2 = radical.simple .. "st"
part2_zona = "val"
elseif radical.simple == "commo" then
part2 = "commòs"
elseif radical.simple:find("co$") then
part2 = part
part = radical.simple:gsub("co$", "cuit")
elseif radical.simple:find("clo$") then
part = radical.monosil and radical.simple .. "s" or radical.simple:gsub("o$", "òs")
elseif radical.simple:find("tr[ae]$") then
part = radical.simple:gsub("[ae]$", "et")
elseif radical.simple:find("ve$") then
part = radical.simple:gsub("ve$", "vist")
end
forma.part = makePart(part, zona, part2, part2_zona)
forma["pres-ind"] = makePresInd2(radical, "g", zona)
forma["imperf-ind"] = makeImperfInd(radical, "e", zona)
forma["pass"] = makePass(radical_velar, "e", zona)
forma["fut"], forma["cond"] = makeFutAndCond(radical.gradual_aton .. (radical.gradual_aton:find("u$") and "" or "d"))
forma["pres-subj"] = makePresSubj12(radical_velar, "e", zona)
forma["imperf-subj"] = makeImperfSubj(radical_velar, "e", zona)
forma["imp"] = makeImp(forma["pres-ind"], forma["pres-subj"])
if zona.alt then
forma["no-ger"] = radical_velar.aton_e .. "ent"
if part ~= radical_velar.aton_e .. "t" and part2 ~= radical_velar.aton_e .. "t" then
forma["no-part"] = makePartNo(radical_velar, zona)
if forma["no-part"] then
title = title .. ", participi irregular"
end
end
end
if radical.simple:find("pren$") then
forma["no-pres-ind"] = makePresIndNo2(radical, zona, forma["pres-ind"])
end
forma["no-imperf-ind"] = makeImperfIndNo2(radical, zona)
if radical.simple:find("[ln]") then
forma["no-fut"] = makeFutNo(radical_velar.davant_e .. "e", zona)
forma["no-cond"] = makeCondNo2(radical_velar.davant_e .. "e", zona)
else
forma["no-cond"] = makeCondNo2(radical.gradual_aton, zona)
end
forma["no-pres-subj"] = makePresSubjNoVelar(radical_velar, zona)
forma["no-imperf-subj"] = makeImperfSubjNoVelar(radical, zona)
-- formes irregulars
if radical.simple:find("[bdl]e$") or radical.simple:find("[lm]o$") then
forma = require("Module:ca-verb/beure").make_irregulars(forma, zona)
elseif radical.simple:find("ve$") then
forma = require("Module:ca-verb/veure").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("scri$") then
forma = require("Module:ca-verb/escriure").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("vi$") then
forma = require("Module:ca-verb/viure").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple == "vol" then
forma = require("Module:ca-verb/voler").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif radical.simple:find("[tv]in$") then
forma = require("Module:ca-verb/mantenir").make_irregulars(forma, zona, infinitiu)
if infinitiu:find("[tv]enir$") then
title = "Tercera conjugació irregular amb formes velaritzades i alternança vocàlica"
else
title = title .. " i alternança vocàlica"
end
elseif infinitiu:find("dir$") then
forma = require("Module:ca-verb/dir").make_irregulars(forma, zona)
title = title .. " amb infinitiu irregular"
elseif infinitiu:find("dur$") then
forma = require("Module:ca-verb/dur").make_irregulars(forma, zona)
title = title .. " amb infinitiu irregular"
elseif radical.simple == "sol" then
forma = require("Module:ca-verb/soler").make_irregulars(forma, zona)
title = "Segona conjugació defectiva"
elseif infinitiu:find("^h[ea]ure$") then
forma = require("Module:ca-verb/heure").make_irregulars(forma, zona)
title = "Segona conjugació irregular"
elseif infinitiu == "riure" or infinitiu == "somriure" then
forma = require("Module:ca-verb/riure").make_irregulars(forma, zona)
end
return forma, title, categories
end
-- Tercera conjugació
local function conj3(infinitiu, zona, tipus_conj)
local forma = {}
local categories = {}
tipus_conj = tipus_conj or "incoativa"
local title = "Tercera conjugació " .. tipus_conj
local radical = {}
radical.simple = name_space == "Plantilla" and "-" or string.sub(infinitiu, 1, -3)
if tipus_conj == "incoativa" and (radical.simple == "brunz" or radical.simple:find("cud$") or radical.simple:find("ru[mp]$") or radical.simple:find("[en]sum$") or radical.simple:find("ment$")) then
tipus_conj = "mixta"
title = title .. " i també pura"
end
radical = makeRadical(radical, "ir")
radical.tonic = radical.simple
if radical.simple:find("[bc]oll$")
or (radical.simple:find("sort$") and radical.simple ~= "assort")
or radical.simple == "escop" or radical.simple == "grony" or radical.simple == "croix"
then
radical.tonic = radical.simple:reverse():gsub("o", "u", 1):reverse()
title = title .. " amb alternança vocàlica en el radical"
end
radical.desinencia0 = radical.tonic:gsub("fug$", "fuig"):gsub("d$", "t")
forma.inf = radical.simple .. "ir"
forma.ger = makeGer(radical, "i", zona)
local part = ""
local part2 = ""
local part2_zona = ""
if radical.simple:find("cobr$") or radical.simple == "sofr" or radical.simple == "ofer" then
part = radical.simple:gsub("e?r$", "ert")
if radical.simple:find("fe?r$") then
part2 = radical.simple .. "it"
part2_zona = {"bal", "val", "alg"}
end
elseif radical.simple:find("compl$") or radical.simple:find("establ$") or radical.simple == "rebl" or radical.simple == "supl" then
part = radical.simple .. "ert"
part2 = radical.simple .. "it"
part2_zona = {"bal", "val", "alg"}
elseif radical.simple:find("imprim$") then
part = radical.simple:gsub("im$", "ès")
part2 = radical.simple:gsub("im$", "és")
part2_zona = {"val"}
elseif radical.simple:find("freg$") then
part2 = radical.simple:gsub("freg$", "frit")
part2_zona = {"bal"}
elseif radical.simple:find("fug$") then
part2 = radical.simple:gsub("fug$", "fuit")
part2_zona = {"bal"}
title = title .. " amb alternances en el radical"
end
if part == "" then
if radical.simple:find("[aeo]$") or radical.simple:find("[^gq]u$") then
part = radical.simple .. "ït"
title = title .. " amb hiat entre el radical i la desinència"
else
part = radical.simple .. "it"
end
else
title = title .. ", amb participi irregular"
end
forma.part = makePart(part, zona, part2, part2_zona)
forma["pres-ind"] = makePresInd3(radical, tipus_conj, zona)
forma["imperf-ind"] = makeImperfInd(radical, "i", zona)
forma["pass"] = makePass(radical, "i", zona)
forma["fut"], forma["cond"] = makeFutAndCond(radical.simple .. "i")
forma["pres-subj"] = makePresSubj3(radical, tipus_conj, zona)
forma["imperf-subj"] = makeImperfSubj(radical, "i", zona)
forma["imp"] = makeImp(forma["pres-ind"], forma["pres-subj"])
if tipus_conj ~= "pura" then
forma["no-pres-ind"] = makePresIndNo3(radical, zona)
end
forma["no-imperf-ind"] = makeImperfIndNo3(radical, tipus_conj, zona)
if tipus_conj == "incoativa" then
forma["no-pass"] = makePassNo(radical, zona)
end
forma["no-cond"] = makeCondNo13(radical.simple .. "i", zona)
if tipus_conj == "pura" and radical.tonic == radical.simple then
forma["no-pres-subj"] = makePresSubjNo(radical, "i", zona)
elseif tipus_conj == "incoativa" or tipus_conj == "mixta" then
forma["no-pres-subj"] = makePresSubjNo3(radical, zona)
end
forma["no-imperf-subj"] = makeImperfSubjNo3(radical, zona)
if mw.ustring.find(radical.simple, "ü$") then
forma = require("Module:ca-verb/argüir").make_irregulars(forma, zona)
title = title .. " amb hiat entre el radical i la desinència"
elseif radical.simple:find("fr?eg$") or radical.simple:find("lleg$") or radical.simple:find("teix$") or radical.simple:find("teny$") then
forma = require("Module:ca-verb/llegir").make_irregulars(forma, zona)
title = title .. " amb variants pures amb alternança vocàlica"
elseif radical.simple == "fer" or radical.simple == "corfer" or radical.simple == "entrefer" or radical.simple == "malfer" or radical.simple == "pened" then
forma = require("Module:ca-verb/ferir").make_irregulars(forma, zona)
title = title .. " amb variants pures"
elseif radical.simple:find("vest$") or radical.simple == "engol" or radical.simple == "reny" then
forma = require("Module:ca-verb/vestir").make_irregulars(forma, zona)
title = title .. " amb variants pures amb alternança vocàlica"
elseif radical.simple:find("ompl$") and not radical.simple:find("compl$") then
forma = require("Module:ca-verb/omplir").make_irregulars(forma, zona)
title = title .. " amb algunes formes velaritzades"
elseif radical.simple:find("obr$") and not radical.simple:find("[cpx]obr$") then
forma = require("Module:ca-verb/obrir").make_irregulars(forma, zona)
title = title .. " amb algunes formes velaritzades"
elseif radical.simple:find("mor$") and tipus_conj == "pura" then
forma = require("Module:ca-verb/morir").make_irregulars(forma, zona)
elseif radical.simple:find("cos$") or radical.simple == "toss" then
forma = require("Module:ca-verb/cosir").make_irregulars(forma, zona)
title = title .. " amb alternança vocàlica en el radical"
elseif radical.simple:find("llu$") and not radical.simple:find("e[ns]$") then
forma = require("Module:ca-verb/lluir").make_irregulars(forma, zona)
title = title .. ", i formes incoatives quan s'empra figuradament"
elseif radical.simple == "eix" or radical.simple:find("[es]eix$") then
forma = require("Module:ca-verb/eixir").make_irregulars(forma, zona)
title = "Tercera conjugació irregular"
end
return forma, title, categories
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function p.show(frame)
local args = frame:getParent().args
local pagename = args.pagename or mw.title.getCurrentTitle().subpageText
local infinitiu = args.inf or (pagename:find("[-']") and mw.text.split(pagename, "[-']")[1] or pagename)
local conj_type = args[1]
if conj_type == nil then
if name_space ~= "" then
conj_type = "ar"
elseif infinitiu:find("[ln]dre$") or infinitiu:find("ure$") or infinitiu:find("[tv]enir$") or infinitiu:find("dur$") then
conj_type = "re_velar"
else
conj_type = string.sub(infinitiu, -2)
end
end
local function setParamZone(zone)
if args[zone] == "no" or args[zone] == "-" then
return false
end
return true
end
local zona = {}
zona.ori = setParamZone("or")
zona.centr = zona.ori and setParamZone("centr")
zona.sept = zona.ori and setParamZone("sept")
zona.bal = zona.ori and setParamZone("bal")
zona.eiv = zona.bal
zona.alg = zona.ori and setParamZone("alg")
zona.occ = setParamZone("occ") and (setParamZone("nocc") or setParamZone("val"))
zona.nocc = zona.occ and setParamZone("nocc")
zona.val = zona.occ and setParamZone("val")
zona.alt = setParamZone("alt")
local forma, title, categories
if conj_type == "ar" or conj_type == "1" then
forma, title, categories = conj1(infinitiu, zona)
elseif conj_type == "er" or conj_type == "re" or conj_type == "2" then
forma, title, categories = conj2(infinitiu, zona)
elseif conj_type == "re_velar" or conj_type == "2velar" then
forma, title, categories = conj2Velar(infinitiu, zona)
elseif conj_type == "ir" or conj_type == "3" then
forma, title, categories = conj3(infinitiu, zona, "incoativa")
elseif conj_type == "ir_pur" or conj_type == "3pura" then
forma, title, categories = conj3(infinitiu, zona, "pura")
elseif conj_type == "3mixta" then
forma, title, categories = conj3(infinitiu, zona, "mixta")
else
error("Tipus de conjugació desconegut '" .. conj_type .. "'")
end
if args.def then
table.insert(categories, 'Verbs defectius en català')
end
forma.rizo = args.rizo
if forma.rizo == "ê" or mw.ustring.find(forma.rizo or "", "ə") then
if not string.find(infinitiu, "e[jg]ar", "-4") then
table.insert(categories, 'Verbs amb vocal rizotònica neutra')
end
end
if args.bot then
return require("Module:ca-verb/taula").make_bot_list(forma, args.def)
else
return require("Module:ca-verb/taula").make_table(forma, title, args.def, pagename) .. m_util.format_categories(categories, lang)
end
end
return p