De Muysc cubun - Lengua Muisca
m |
Etiqueta: Deshacer |
||
| Línea 9: | Línea 9: | ||
end | end | ||
| − | + | local function normalizeClass(rawClass) | |
| − | local function | + | 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 "" | |
| − | |||
| − | |||
| − | if mw.ustring.find( | ||
| − | elseif mw.ustring.find( | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| Línea 37: | Línea 24: | ||
if clase == "sq." then root = mw.ustring.gsub(fullVerb, "squa$", "") | if clase == "sq." then root = mw.ustring.gsub(fullVerb, "squa$", "") | ||
elseif clase == "su." then root = mw.ustring.gsub(fullVerb, "suca$", "") end | 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 | return root | ||
end | end | ||
| − | -- 2. Función | + | -- 2. Función que genera la tabla con el título ARRIBA |
| − | local function generateTableHtml(title, root, persons, suffixes, applySpecialRule, colNames | + | local function generateTableHtml(title, root, persons, suffixes, applySpecialRule, colNames) |
| − | local wrapper = mw.html.create("div"):css("margin-bottom", "1.5em") | + | local wrapper = mw.html.create("div") |
| − | wrapper:tag("div"):css("font-weight", "bold"):css("font-size", "1.1em"):css("margin-bottom", "0.4em"):wikitext(title) | + | :css("margin-bottom", "1.5em") |
| + | :css("font-size", "14px") | ||
| + | |||
| + | -- Título encima de la tabla | ||
| + | wrapper:tag("div") | ||
| + | :css("font-weight", "bold") | ||
| + | :css("font-size", "1.1em") | ||
| + | :css("margin-bottom", "0.4em") | ||
| + | :css("color", "#202122") | ||
| + | :wikitext(title) | ||
| + | |||
| + | local html = wrapper:tag("table") | ||
| + | :addClass("wikitable") | ||
| + | :css("width", "100%") | ||
| + | :css("max-width", "600px") | ||
| + | :css("margin", "0") -- Reset para que pegue al título | ||
| − | |||
local header = html:tag("tr") | local header = html:tag("tr") | ||
header:tag("th"):wikitext("Persona") | header:tag("th"):wikitext("Persona") | ||
| − | + | header:tag("th"):wikitext(colNames[1]) | |
| + | header:tag("th"):wikitext(colNames[2]) | ||
| + | header:tag("th"):wikitext(colNames[3]) | ||
local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1)) | local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1)) | ||
| Línea 55: | Línea 59: | ||
for _, personData in ipairs(persons) do | for _, personData in ipairs(persons) do | ||
local label, prefix = personData[1], personData[2] | local label, prefix = personData[1], personData[2] | ||
| − | |||
| − | |||
if applySpecialRule and label == "1.ª sg." then | if applySpecialRule and label == "1.ª sg." then | ||
if firstChar == "n" or firstChar == "z" or firstChar == "t" or firstTwo == "ch" then | if firstChar == "n" or firstChar == "z" or firstChar == "t" or firstTwo == "ch" then | ||
| Línea 62: | Línea 64: | ||
end | end | ||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
local row = html:tag("tr") | local row = html:tag("tr") | ||
row:tag("td"):css("font-weight", "bold"):wikitext(label) | row:tag("td"):css("font-weight", "bold"):wikitext(label) | ||
| − | |||
| − | |||
row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or "")) | row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or "")) | ||
| − | + | row:tag("td"):wikitext(prefix .. root .. (suffixes.imperf or "")) | |
| − | row:tag("td"):wikitext(prefix .. | + | row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or "")) |
| − | |||
| − | row:tag("td"):wikitext(prefix .. | ||
end | end | ||
return wrapper | return wrapper | ||
end | end | ||
| + | -- FUNCIÓN PRINCIPAL | ||
function p.render(frame) | function p.render(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
| − | local | + | local clase = normalizeClass(args.clase or args.tipo or "") |
| − | local | + | local pageName = mw.title.getCurrentTitle().text |
| + | local root = getRoot(pageName, clase, args.raiz or "") | ||
| − | -- Series | + | if root == "" or root == pageName then |
| + | return "<span style='color:red;'>Error: No se pudo extraer la raíz.</span>" | ||
| + | end | ||
| + | |||
| + | -- Definición de Series con tus traducciones | ||
local serie1 = { | local serie1 = { | ||
title = "Serie de Flexión Verbal (Independiente)", | title = "Serie de Flexión Verbal (Independiente)", | ||
persons = {{"1.ª sg.", "z-"}, {"2.ª sg.", "m-"}, {"3.ª", "a-"}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}}, | persons = {{"1.ª sg.", "z-"}, {"2.ª sg.", "m-"}, {"3.ª", "a-"}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}}, | ||
| − | suffixes = {perf = "", imperf = ( | + | suffixes = {perf = "", imperf = (clase == "su." and "-suca" or "-squa"), irreal = "-nga"}, |
rule = true, | rule = true, | ||
cols = {"Perfectivo", "Imperfectivo", "Irrealis"} | cols = {"Perfectivo", "Imperfectivo", "Irrealis"} | ||
} | } | ||
| + | |||
local serie2 = { | local serie2 = { | ||
title = "Serie de Nominalización", | title = "Serie de Nominalización", | ||
| Línea 108: | Línea 101: | ||
} | } | ||
| − | local mainDiv = mw.html.create("div"):addClass("mw-collapsible"):addClass("mw-collapsed") | + | --- CONSTRUCCIÓN DEL CONTENEDOR COLAPSABLE --- |
| − | :css("border", "1px solid #a2a9b1"):css("padding", "15px"):css("background-color", "#fcfcfc") | + | local mainDiv = mw.html.create("div") |
| − | :attr("data-expandtext", "Conjugar"):attr("data-collapsetext", "Ocultar") | + | :addClass("mw-collapsible") |
| + | :addClass("mw-collapsed") | ||
| + | :css("border", "1px solid #a2a9b1") | ||
| + | :css("padding", "15px") | ||
| + | :css("background-color", "#fcfcfc") | ||
| + | :attr("data-expandtext", "Conjugar") | ||
| + | :attr("data-collapsetext", "Ocultar") | ||
| + | |||
| + | -- Encabezado del bloque colapsable (Título del verbo) | ||
| + | mainDiv:tag("div") | ||
| + | :css("font-weight", "bold") | ||
| + | :css("border-bottom", "1px solid #a2a9b1") | ||
| + | :css("margin-bottom", "15px") | ||
| + | :css("padding-bottom", "5px") | ||
| + | -- :wikitext("Paradigma de " .. root) | ||
| − | mainDiv:tag("div | + | local contentDiv = mainDiv:tag("div") |
| − | : | + | :addClass("mw-collapsible-content") |
| − | + | -- Añadimos las tablas con los títulos arriba | |
| − | + | contentDiv:node(generateTableHtml(serie1.title, root, serie1.persons, serie1.suffixes, serie1.rule, serie1.cols)) | |
| − | + | contentDiv:node(generateTableHtml(serie2.title, root, serie2.persons, serie2.suffixes, serie2.rule, serie2.cols)) | |
| − | contentDiv:node(generateTableHtml(serie1.title, root, serie1.persons, serie1.suffixes, serie1.rule, serie1.cols | ||
| − | |||
| − | contentDiv:node(generateTableHtml(serie2.title, root, serie2.persons, serie2.suffixes, serie2.rule, serie2.cols | ||
return tostring(mainDiv) | return tostring(mainDiv) | ||
Revisión del 22:14 26 mar 2026
La documentación para este módulo puede ser creada en Módulo:Conjugador/doc
local p = {}
-- 1. Limpieza y Normalización
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
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
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
-- 2. Función que genera la tabla con el título ARRIBA
local function generateTableHtml(title, root, persons, suffixes, applySpecialRule, colNames)
local wrapper = mw.html.create("div")
:css("margin-bottom", "1.5em")
:css("font-size", "14px")
-- Título encima de la tabla
wrapper:tag("div")
:css("font-weight", "bold")
:css("font-size", "1.1em")
:css("margin-bottom", "0.4em")
:css("color", "#202122")
:wikitext(title)
local html = wrapper:tag("table")
:addClass("wikitable")
:css("width", "100%")
:css("max-width", "600px")
:css("margin", "0") -- Reset para que pegue al título
local header = html:tag("tr")
header:tag("th"):wikitext("Persona")
header:tag("th"):wikitext(colNames[1])
header:tag("th"):wikitext(colNames[2])
header:tag("th"):wikitext(colNames[3])
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, prefix = personData[1], personData[2]
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)
row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or ""))
row:tag("td"):wikitext(prefix .. root .. (suffixes.imperf or ""))
row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or ""))
end
return wrapper
end
-- FUNCIÓN PRINCIPAL
function p.render(frame)
local args = frame:getParent().args
local clase = normalizeClass(args.clase or args.tipo or "")
local pageName = mw.title.getCurrentTitle().text
local root = getRoot(pageName, clase, args.raiz or "")
if root == "" or root == pageName then
return "<span style='color:red;'>Error: No se pudo extraer la raíz.</span>"
end
-- Definición de Series con tus traducciones
local serie1 = {
title = "Serie de Flexión Verbal (Independiente)",
persons = {{"1.ª sg.", "z-"}, {"2.ª sg.", "m-"}, {"3.ª", "a-"}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}},
suffixes = {perf = "", imperf = (clase == "su." and "-suca" or "-squa"), irreal = "-nga"},
rule = true,
cols = {"Perfectivo", "Imperfectivo", "Irrealis"}
}
local serie2 = {
title = "Serie de Nominalización",
persons = {{"1.ª sg.", "cha-"}, {"2.ª sg.", "ma-"}, {"3.ª", ""}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}},
suffixes = {perf = "-ia", imperf = "-sca", irreal = "-nga"},
rule = false,
cols = {"Nominalización Resultativa", "Nominalización Factual", "Nominalización Irrealis"}
}
--- CONSTRUCCIÓN DEL CONTENEDOR COLAPSABLE ---
local mainDiv = mw.html.create("div")
:addClass("mw-collapsible")
:addClass("mw-collapsed")
:css("border", "1px solid #a2a9b1")
:css("padding", "15px")
:css("background-color", "#fcfcfc")
:attr("data-expandtext", "Conjugar")
:attr("data-collapsetext", "Ocultar")
-- Encabezado del bloque colapsable (Título del verbo)
mainDiv:tag("div")
:css("font-weight", "bold")
:css("border-bottom", "1px solid #a2a9b1")
:css("margin-bottom", "15px")
:css("padding-bottom", "5px")
-- :wikitext("Paradigma de " .. root)
local contentDiv = mainDiv:tag("div")
:addClass("mw-collapsible-content")
-- Añadimos las tablas con los títulos arriba
contentDiv:node(generateTableHtml(serie1.title, root, serie1.persons, serie1.suffixes, serie1.rule, serie1.cols))
contentDiv:node(generateTableHtml(serie2.title, root, serie2.persons, serie2.suffixes, serie2.rule, serie2.cols))
return tostring(mainDiv)
end
return p
