De Muysc cubun - Lengua Muisca
La documentación para este módulo puede ser creada en Módulo:Conjugador/doc
local p = {}
-- 1. Limpia el nombre de la página: "nysqua(2)" -> "nysqua"
local function cleanPageName(pageName)
pageName = mw.text.trim(pageName or "")
-- Quita el bloque de paréntesis: (2), (3), etc.
pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
-- Quita números sueltos por si acaso
pageName = mw.ustring.gsub(pageName, "%d+", "")
return mw.text.trim(pageName)
end
-- 2. Normaliza la clase para que el script sepa qué terminación buscar
-- La abreviatura "sq." debe buscar squa, la abreviatura "su." debe buscar suca
local function normalizeClass(rawClass)
rawClass = mw.text.trim(rawClass or "")
rawClass = mw.ustring.lower(rawClass)
if mw.ustring.find(rawClass, "sq") then
return "sq."
elseif mw.ustring.find(rawClass, "su") then
return "su."
end
return ""
end
-- 3. Extrae la raíz pura: "nysqua" -> "ny"
local function getRoot(pageName, clase, manualRoot)
manualRoot = mw.text.trim(manualRoot or "")
if manualRoot ~= "" then
return manualRoot
end
local fullVerb = cleanPageName(pageName)
local root = fullVerb
if clase == "sq." then
root = mw.ustring.gsub(fullVerb, "squa$", "")
elseif clase == "su." then
root = mw.ustring.gsub(fullVerb, "suca$", "")
end
-- Si la clase no se especificó o no coincide, intento genérico
if root == fullVerb then
root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "")
end
return root
end
-- Funciones auxiliares para las bases verbales
local function buildPerfective(root)
return root
end
local function buildImperfective(root, clase)
if clase == "su." then
return root .. "-suca"
else
return root .. "-squa"
end
end
local function buildIrrealis(root)
return root .. "-nga"
end
-- FUNCIÓN PRINCIPAL
function p.render(frame)
local args = frame:getParent().args
local rawClass = args.clase or args.tipo or ""
local manualRoot = args.raiz or ""
local clase = normalizeClass(rawClass)
local pageName = mw.title.getCurrentTitle().text
local root = getRoot(pageName, clase, manualRoot)
if root == "" or root == pageName then
return "<span style='color:red;'>Error: No se pudo extraer la raíz de '" .. pageName .. "'. Revisa la clase (sq. o su.).</span>"
end
local persons = {
{"1.ª sg.", "z-"},
{"2.ª sg.", "m-"},
{"3.ª", "a-"},
{"1.ª pl.", "chi-"},
{"2.ª pl.", "mi-"}
}
local perfectiveBase = buildPerfective(root)
local imperfectiveBase = buildImperfective(root, clase)
local irrealisBase = buildIrrealis(root)
-- Identificamos la primera letra de la raíz para la regla morfofonológica
-- Usamos ustring por si hubiera caracteres especiales
local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1))
-- También checamos si empieza por "ch" (que son dos letras)
local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2))
local html = mw.html.create("table")
:addClass("wikitable")
:css("width", "100%")
:css("max-width", "600px")
-- (Encabezado igual...)
local header = html:tag("tr")
header:tag("th"):wikitext("Persona")
header:tag("th"):wikitext("Perfectivo")
header:tag("th"):wikitext("Imperfectivo")
header:tag("th"):wikitext("Irrealis")
for _, personData in ipairs(persons) do
local label = personData[1]
local prefix = personData[2]
-- APLICACIÓN DE LA REGLA: 1.ª sg. + (n, z, t, ch)
if label == "1.ª sg." then
if firstChar == "n" or firstChar == "z" or firstChar == "t" or firstTwo == "ch" then
prefix = "i-"
end
end
local row = html:tag("tr")
row:tag("td"):css("font-weight", "bold"):wikitext(label)
row:tag("td"):wikitext(prefix .. perfectiveBase)
row:tag("td"):wikitext(prefix .. imperfectiveBase)
row:tag("td"):wikitext(prefix .. irrealisBase)
end
return tostring(html)
end
return p
