De Muysc cubun - Lengua Muisca

m
m
Línea 40: Línea 40:
 
--- FUNCIÓN PARA CREAR TABLAS ---
 
--- FUNCIÓN PARA CREAR TABLAS ---
 
local function createVerbTable(title, root, persons, suffixes, applySpecialRule)
 
local function createVerbTable(title, root, persons, suffixes, applySpecialRule)
     local html = mw.html.create("table")
+
    -- Creamos un contenedor plegable para la tabla
 +
     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-bottom", "2em") -- Un poco más de espacio entre tablas
+
         :css("margin-top", "0") -- Pegado al título
 
 
    -- Título de la tabla sobre el borde superior
 
    html:tag("caption")
 
        :css("font-weight", "bold")
 
        :css("font-size", "1.2em")
 
        :css("text-align", "left") -- Alineado a la izquierda para mejor lectura
 
        :css("padding-bottom", "0.5em")
 
        :wikitext(title)
 
  
     -- Encabezado de columnas
+
     -- 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 61: Línea 72:
 
     header:tag("th"):wikitext("Irrealis")
 
     header:tag("th"):wikitext("Irrealis")
  
     -- Lógica de prefijos y raíces
+
     -- 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))
Línea 69: Línea 80:
 
         local prefix = personData[2]
 
         local prefix = personData[2]
  
        -- Aplicación de la regla especial (Serie 1)
 
 
         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 78: Línea 88:
 
         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)
       
 
        -- Formateo de las celdas (Prefijo + Raíz + Sufijo)
 
 
         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 .. root .. (suffixes.imperf or ""))
Línea 85: Línea 93:
 
     end
 
     end
  
     return html
+
     return container
 
end
 
end
 +
  
 
-- FUNCIÓN PRINCIPAL
 
-- FUNCIÓN PRINCIPAL

Revisión del 08:49 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)
    -- Creamos un contenedor plegable para la tabla
    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("mw-collapsible-content") -- Contenido que se oculta
        :css("width", "100%")
        :css("max-width", "600px")
        :css("margin-top", "0") -- Pegado al título

    -- Encabezado de la tabla
    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")

    -- Lógica de generación de filas (igual que antes)
    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]

        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 container
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 = tostring(createVerbTable("Conjugación Tipo 1", root, persons1, suffixes1, true))
    result = result .. tostring(createVerbTable("Conjugación Tipo 2", root, persons2, suffixes2, false))

    return result
end

return p