De Muysc cubun - Lengua Muisca
m |
m |
||
| Línea 4: | Línea 4: | ||
local function cleanPageName(pageName) | local function cleanPageName(pageName) | ||
pageName = mw.text.trim(pageName or "") | pageName = mw.text.trim(pageName or "") | ||
| − | |||
pageName = mw.ustring.gsub(pageName, "%s*%b()", "") | pageName = mw.ustring.gsub(pageName, "%s*%b()", "") | ||
| − | |||
pageName = mw.ustring.gsub(pageName, "%d+", "") | pageName = mw.ustring.gsub(pageName, "%d+", "") | ||
return mw.text.trim(pageName) | return mw.text.trim(pageName) | ||
end | end | ||
| − | -- 2. Normaliza la clase | + | -- 2. Normaliza la clase |
| − | |||
local function normalizeClass(rawClass) | local function normalizeClass(rawClass) | ||
rawClass = mw.text.trim(rawClass or "") | rawClass = mw.text.trim(rawClass or "") | ||
rawClass = mw.ustring.lower(rawClass) | rawClass = mw.ustring.lower(rawClass) | ||
| − | + | if mw.ustring.find(rawClass, "sq") then return "sq." | |
| − | if mw.ustring.find(rawClass, "sq") then | + | elseif mw.ustring.find(rawClass, "su") then return "su." end |
| − | |||
| − | elseif mw.ustring.find(rawClass, "su") then | ||
| − | |||
| − | |||
return "" | return "" | ||
end | end | ||
| − | -- 3. Extrae la raíz pura | + | -- 3. Extrae la raíz pura |
local function getRoot(pageName, clase, manualRoot) | local function getRoot(pageName, clase, manualRoot) | ||
manualRoot = mw.text.trim(manualRoot or "") | manualRoot = mw.text.trim(manualRoot or "") | ||
| − | if manualRoot ~= "" then | + | if manualRoot ~= "" then return manualRoot end |
| − | |||
| − | |||
local fullVerb = cleanPageName(pageName) | local fullVerb = cleanPageName(pageName) | ||
| Línea 41: | Línea 32: | ||
end | end | ||
| − | |||
if root == fullVerb then | if root == fullVerb then | ||
root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "") | root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "") | ||
end | end | ||
| − | |||
return root | return root | ||
end | end | ||
| − | -- | + | --- FUNCIÓN PARA CREAR TABLAS --- |
| − | local | + | local function createVerbTable(title, root, persons, suffixes, applySpecialRule) |
| − | + | local html = mw.html.create("table") | |
| − | end | + | :addClass("wikitable") |
| + | :css("width", "100%") | ||
| + | :css("max-width", "600px") | ||
| + | :css("margin-bottom", "1em") | ||
| + | |||
| + | -- Título de la tabla (opcional) | ||
| + | local caption = html:tag("caption"):css("font-weight", "bold"):wikitext(title) | ||
| + | |||
| + | -- Encabezado | ||
| + | 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") | ||
| + | |||
| + | -- Primera letra para la regla de la 1.ª sg de la Serie 1 | ||
| + | local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1)) | ||
| + | local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2)) | ||
| + | |||
| + | for _, personData in ipairs(persons) do | ||
| + | local label = personData[1] | ||
| + | local prefix = personData[2] | ||
| + | |||
| + | -- Regla especial solo si se activa (para la Serie 1) | ||
| + | if applySpecialRule and label == "1.ª sg." then | ||
| + | if firstChar == "n" or firstChar == "z" or firstChar == "t" or firstTwo == "ch" then | ||
| + | prefix = "i-" | ||
| + | end | ||
| + | end | ||
| − | local | + | local row = html:tag("tr") |
| − | + | row:tag("td"):css("font-weight", "bold"):wikitext(label) | |
| − | + | -- Columna Perfectivo | |
| − | + | row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or "")) | |
| − | + | -- Columna Imperfectivo | |
| + | row:tag("td"):wikitext(prefix .. root .. (suffixes.imperf or "")) | ||
| + | -- Columna Irrealis | ||
| + | row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or "")) | ||
end | end | ||
| − | |||
| − | + | return html | |
| − | return | ||
end | end | ||
| Línea 69: | Línea 87: | ||
function p.render(frame) | function p.render(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
| − | |||
local rawClass = args.clase or args.tipo or "" | local rawClass = args.clase or args.tipo or "" | ||
local manualRoot = args.raiz or "" | local manualRoot = args.raiz or "" | ||
| − | |||
local clase = normalizeClass(rawClass) | local clase = normalizeClass(rawClass) | ||
local pageName = mw.title.getCurrentTitle().text | local pageName = mw.title.getCurrentTitle().text | ||
| Línea 81: | Línea 97: | ||
end | end | ||
| − | local | + | -------------------------------------------------------- |
| + | -- CONFIGURACIÓN TABLA 1 (Serie original) | ||
| + | -------------------------------------------------------- | ||
| + | local persons1 = { | ||
{"1.ª sg.", "z-"}, | {"1.ª sg.", "z-"}, | ||
{"2.ª sg.", "m-"}, | {"2.ª sg.", "m-"}, | ||
| Línea 87: | Línea 106: | ||
{"1.ª pl.", "chi-"}, | {"1.ª pl.", "chi-"}, | ||
{"2.ª pl.", "mi-"} | {"2.ª pl.", "mi-"} | ||
| + | } | ||
| + | local suffixes1 = { | ||
| + | perf = "", | ||
| + | imperf = (clase == "su." and "-suca" or "-squa"), | ||
| + | irreal = "-nga" | ||
} | } | ||
| − | + | -------------------------------------------------------- | |
| − | + | -- CONFIGURACIÓN TABLA 2 (Nueva Serie) | |
| − | + | -------------------------------------------------------- | |
| − | + | local persons2 = { | |
| − | + | {"1.ª sg.", "cha-"}, | |
| − | + | {"2.ª sg.", "ma-"}, | |
| − | local | + | {"3.ª", ""}, -- Prefijo cero |
| − | + | {"1.ª pl.", "chi-"}, | |
| − | + | {"2.ª pl.", "mi-"} | |
| − | + | } | |
| − | + | local suffixes2 = { | |
| − | + | perf = "-ia", | |
| − | + | imperf = "-sca", | |
| − | + | irreal = "-nga" | |
| − | + | } | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | -- Generar ambas tablas | |
| − | + | local result = "### Serie Primaria\n" .. tostring(createVerbTable("Conjugación Tipo 1", root, persons1, suffixes1, true)) | |
| − | + | result = result .. "\n### Serie Secundaria\n" .. tostring(createVerbTable("Conjugación Tipo 2", root, persons2, suffixes2, false)) | |
| − | |||
| − | |||
| − | |||
| − | return | + | return result |
end | end | ||
return p | return p | ||
Revisión del 08:30 26 mar 2026
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 "")
pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
pageName = mw.ustring.gsub(pageName, "%d+", "")
return mw.text.trim(pageName)
end
-- 2. Normaliza la clase
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
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
if root == fullVerb then
root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "")
end
return root
end
--- FUNCIÓN PARA CREAR TABLAS ---
local function createVerbTable(title, root, persons, suffixes, applySpecialRule)
local html = mw.html.create("table")
:addClass("wikitable")
:css("width", "100%")
:css("max-width", "600px")
:css("margin-bottom", "1em")
-- Título de la tabla (opcional)
local caption = html:tag("caption"):css("font-weight", "bold"):wikitext(title)
-- Encabezado
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")
-- Primera letra para la regla de la 1.ª sg de la Serie 1
local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1))
local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2))
for _, personData in ipairs(persons) do
local label = personData[1]
local prefix = personData[2]
-- Regla especial solo si se activa (para la Serie 1)
if applySpecialRule and 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)
-- Columna Perfectivo
row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or ""))
-- Columna Imperfectivo
row:tag("td"):wikitext(prefix .. root .. (suffixes.imperf or ""))
-- Columna Irrealis
row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or ""))
end
return html
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
--------------------------------------------------------
-- CONFIGURACIÓN TABLA 1 (Serie original)
--------------------------------------------------------
local persons1 = {
{"1.ª sg.", "z-"},
{"2.ª sg.", "m-"},
{"3.ª", "a-"},
{"1.ª pl.", "chi-"},
{"2.ª pl.", "mi-"}
}
local suffixes1 = {
perf = "",
imperf = (clase == "su." and "-suca" or "-squa"),
irreal = "-nga"
}
--------------------------------------------------------
-- CONFIGURACIÓN TABLA 2 (Nueva Serie)
--------------------------------------------------------
local persons2 = {
{"1.ª sg.", "cha-"},
{"2.ª sg.", "ma-"},
{"3.ª", ""}, -- Prefijo cero
{"1.ª pl.", "chi-"},
{"2.ª pl.", "mi-"}
}
local suffixes2 = {
perf = "-ia",
imperf = "-sca",
irreal = "-nga"
}
-- Generar ambas tablas
local result = "### Serie Primaria\n" .. tostring(createVerbTable("Conjugación Tipo 1", root, persons1, suffixes1, true))
result = result .. "\n### Serie Secundaria\n" .. tostring(createVerbTable("Conjugación Tipo 2", root, persons2, suffixes2, false))
return result
end
return p
