De Muysc cubun - Lengua Muisca

m
m
Línea 1: Línea 1:
 
local p = {}
 
local p = {}
  
-- 1. Limpia el nombre de la página: "nysqua(2)" -> "nysqua"
+
-- 1. Limpieza y Normalización (Igual que antes)
 
local function cleanPageName(pageName)
 
local function cleanPageName(pageName)
 
     pageName = mw.text.trim(pageName or "")
 
     pageName = mw.text.trim(pageName or "")
Línea 9: Línea 9:
 
end
 
end
  
-- 2. Normaliza la clase
 
 
local function normalizeClass(rawClass)
 
local function normalizeClass(rawClass)
 
     rawClass = mw.text.trim(rawClass or "")
 
     rawClass = mw.text.trim(rawClass or "")
Línea 18: Línea 17:
 
end
 
end
  
-- 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 return manualRoot end
 
     if manualRoot ~= "" then return manualRoot end
 
 
     local fullVerb = cleanPageName(pageName)
 
     local fullVerb = cleanPageName(pageName)
 
     local root = fullVerb
 
     local root = fullVerb
 
+
     if clase == "sq." then root = mw.ustring.gsub(fullVerb, "squa$", "")
     if clase == "sq." then
+
     elseif clase == "su." then root = mw.ustring.gsub(fullVerb, "suca$", "") end
        root = mw.ustring.gsub(fullVerb, "squa$", "")
+
     if root == fullVerb then root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "") 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
  
--- FUNCIÓN PARA CREAR TABLAS ---
+
-- 2. Función que genera SOLO la tabla (sin el contenedor colapsable)
local function createVerbTable(title, root, persons, suffixes, applySpecialRule)
+
local function generateTableHtml(title, root, persons, suffixes, applySpecialRule)
    -- Creamos un contenedor plegable para la tabla
+
     local html = mw.html.create("table")
     local container = mw.html.create("div")
 
        :addClass("mw-collapsible")
 
        :addClass("mw-collapsed")
 
        :css("margin-bottom", "1.5em")
 
        -- Personaliza el texto de los botones de la Wikipedia
 
        :attr("data-expandtext", "Conjugar")
 
        :attr("data-collapsetext", "Ocultar")
 
 
 
    -- El título ahora vive en un div que actúa como encabezado del colapsable
 
    container:tag("div")
 
        :css("font-weight", "bold")
 
        :css("font-size", "1.1em")
 
        :css("padding", "5px")
 
        :css("background-color", "#f8f9fa")
 
        :css("border", "1px solid #a2a9b1")
 
        :wikitext(title)
 
 
 
    local html = container:tag("table")
 
 
         :addClass("wikitable")
 
         :addClass("wikitable")
        :addClass("mw-collapsible-content") -- Contenido que se oculta
 
 
         :css("width", "100%")
 
         :css("width", "100%")
 
         :css("max-width", "600px")
 
         :css("max-width", "600px")
         :css("margin-top", "0") -- Pegado al título
+
         :css("margin-bottom", "1em")
 +
 
 +
    -- Título de la tabla individual
 +
    html:tag("caption"):css("font-weight", "bold"):css("text-align", "left"):wikitext(title)
  
    -- Encabezado de la tabla
 
 
     local header = html:tag("tr")
 
     local header = html:tag("tr")
 
     header:tag("th"):wikitext("Persona")
 
     header:tag("th"):wikitext("Persona")
Línea 72: Línea 45:
 
     header:tag("th"):wikitext("Irrealis")
 
     header:tag("th"):wikitext("Irrealis")
  
    -- Lógica de generación de filas (igual que antes)
 
 
     local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1))
 
     local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1))
 
     local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2))
 
     local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2))
  
 
     for _, personData in ipairs(persons) do
 
     for _, personData in ipairs(persons) do
         local label = personData[1]
+
         local label, prefix = personData[1], personData[2]
        local prefix = 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 85: Línea 55:
 
             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)
Línea 92: Línea 61:
 
         row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or ""))
 
         row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or ""))
 
     end
 
     end
 
+
     return html
     return container
 
 
end
 
end
 
  
 
-- FUNCIÓN PRINCIPAL
 
-- FUNCIÓN PRINCIPAL
 
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 clase = normalizeClass(args.clase or args.tipo or "")
     local manualRoot = args.raiz or ""
+
     local root = getRoot(mw.title.getCurrentTitle().text, clase, 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
+
     if root == "" or root == mw.title.getCurrentTitle().text then
         return "<span style='color:red;'>Error: No se pudo extraer la raíz de '" .. pageName .. "'. Revisa la clase (sq. o su.).</span>"
+
         return "<span style='color:red;'>Error: No se pudo extraer la raíz.</span>"
 
     end
 
     end
  
     --------------------------------------------------------
+
     -- Definición de Series
    -- CONFIGURACIÓN TABLA 1 (Serie original)
+
     local serie1 = {
    --------------------------------------------------------
+
         persons = {{"1.ª sg.", "z-"}, {"2.ª sg.", "m-"}, {"3.ª", "a-"}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}},
     local persons1 = {
+
        suffixes = {perf = "", imperf = (clase == "su." and "-suca" or "-squa"), irreal = "-nga"},
         {"1.ª sg.", "z-"},
+
        rule = true
        {"2.ª sg.", "m-"},
 
        {"3.ª", "a-"},
 
        {"1.ª pl.", "chi-"},
 
        {"2.ª pl.", "mi-"}
 
 
     }
 
     }
     local suffixes1 = {
+
     local serie2 = {
         perf = "",
+
         persons = {{"1.ª sg.", "cha-"}, {"2.ª sg.", "ma-"}, {"3.ª", ""}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}},
        imperf = (clase == "su." and "-suca" or "-squa"),
+
         suffixes = {perf = "-ia", imperf = "-sca", irreal = "-nga"},
         irreal = "-nga"
+
        rule = false
 
     }
 
     }
  
     --------------------------------------------------------
+
     --- CONSTRUCCIÓN DEL CONTENEDOR ÚNICO ---
     -- CONFIGURACIÓN TABLA 2 (Nueva Serie)
+
     local mainDiv = mw.html.create("div")
    --------------------------------------------------------
+
        :addClass("mw-collapsible")
    local persons2 = {
+
        :addClass("mw-collapsed")
         {"1.ª sg.", "cha-"},
+
         :css("border", "1px solid #a2a9b1")
         {"2.ª sg.", "ma-"},
+
         :css("padding", "10px")
         {"3.ª", ""}, -- Prefijo cero
+
         :css("background-color", "#fcfcfc")
         {"1.ª pl.", "chi-"},
+
         :attr("data-expandtext", "Conjugar")
         {"2.ª pl.", "mi-"}
+
         :attr("data-collapsetext", "Ocultar")
     }
+
 
     local suffixes2 = {
+
     -- Título del bloque completo
         perf = "-ia",
+
     mainDiv:tag("div")
         imperf = "-sca",
+
         :css("font-weight", "bold")
         irreal = "-nga"
+
         :css("margin-bottom", "10px")
     }
+
         :css("border-bottom", "2px solid #3366cc")
 +
        :wikitext("Flexión verbal de " .. root)
 +
 
 +
     -- Div que contiene las tablas (se oculta/muestra)
 +
    local contentDiv = mainDiv:tag("div")
 +
        :addClass("mw-collapsible-content")
  
     -- Generar ambas tablas
+
     -- Añadimos las tablas al contenido
     local result = tostring(createVerbTable("Conjugación Tipo 1", root, persons1, suffixes1, true))
+
     contentDiv:node(generateTableHtml("Serie Primaria (Absoluta)", root, serie1.persons, serie1.suffixes, serie1.rule))
     result = result .. tostring(createVerbTable("Conjugación Tipo 2", root, persons2, suffixes2, false))
+
     contentDiv:node(generateTableHtml("Serie Secundaria (Relativa)", root, serie2.persons, serie2.suffixes, serie2.rule))
  
     return result
+
     return tostring(mainDiv)
 
end
 
end
  
 
return p
 
return p

Revisión del 08:51 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 (Igual que antes)
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 SOLO la tabla (sin el contenedor colapsable)
local function generateTableHtml(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 individual
    html:tag("caption"):css("font-weight", "bold"):css("text-align", "left"):wikitext(title)

    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")

    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 html
end

-- FUNCIÓN PRINCIPAL
function p.render(frame)
    local args = frame:getParent().args
    local clase = normalizeClass(args.clase or args.tipo or "")
    local root = getRoot(mw.title.getCurrentTitle().text, clase, args.raiz or "")

    if root == "" or root == mw.title.getCurrentTitle().text then
        return "<span style='color:red;'>Error: No se pudo extraer la raíz.</span>"
    end

    -- Definición de Series
    local serie1 = {
        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
    }
    local serie2 = {
        persons = {{"1.ª sg.", "cha-"}, {"2.ª sg.", "ma-"}, {"3.ª", ""}, {"1.ª pl.", "chi-"}, {"2.ª pl.", "mi-"}},
        suffixes = {perf = "-ia", imperf = "-sca", irreal = "-nga"},
        rule = false
    }

    --- CONSTRUCCIÓN DEL CONTENEDOR ÚNICO ---
    local mainDiv = mw.html.create("div")
        :addClass("mw-collapsible")
        :addClass("mw-collapsed")
        :css("border", "1px solid #a2a9b1")
        :css("padding", "10px")
        :css("background-color", "#fcfcfc")
        :attr("data-expandtext", "Conjugar")
        :attr("data-collapsetext", "Ocultar")

    -- Título del bloque completo
    mainDiv:tag("div")
        :css("font-weight", "bold")
        :css("margin-bottom", "10px")
        :css("border-bottom", "2px solid #3366cc")
        :wikitext("Flexión verbal de " .. root)

    -- Div que contiene las tablas (se oculta/muestra)
    local contentDiv = mainDiv:tag("div")
        :addClass("mw-collapsible-content")

    -- Añadimos las tablas al contenido
    contentDiv:node(generateTableHtml("Serie Primaria (Absoluta)", root, serie1.persons, serie1.suffixes, serie1.rule))
    contentDiv:node(generateTableHtml("Serie Secundaria (Relativa)", root, serie2.persons, serie2.suffixes, serie2.rule))

    return tostring(mainDiv)
end

return p