De Muysc cubun - Lengua Muisca

m
m
Línea 98: Línea 98:
 
     -- Título del bloque completo
 
     -- Título del bloque completo
 
     mainDiv:tag("div")
 
     mainDiv:tag("div")
        :css("font-weight", "bold")
 
 
         :css("margin-bottom", "10px")
 
         :css("margin-bottom", "10px")
        :css("border-bottom", "2px solid #3366cc")
 
        :wikitext("Flexión verbal de " .. root)
 
  
 
     -- Div que contiene las tablas (se oculta/muestra)
 
     -- Div que contiene las tablas (se oculta/muestra)

Revisión del 08:54 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("margin-bottom", "10px")

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