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 "")
    -- Quita el bloque de paréntesis: (2), (3), etc.
 
 
     pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
 
     pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
    -- Quita números sueltos por si acaso
 
 
     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 para que el script sepa qué terminación buscar
+
-- 2. Normaliza la clase
-- La abreviatura "sq." debe buscar squa, la abreviatura "su." debe buscar suca
 
 
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
        return "sq."
 
     elseif mw.ustring.find(rawClass, "su") then
 
        return "su."
 
    end
 
 
     return ""
 
     return ""
 
end
 
end
  
-- 3. Extrae la raíz pura: "nysqua" -> "ny"
+
-- 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
        return manualRoot
 
    end
 
  
 
     local fullVerb = cleanPageName(pageName)
 
     local fullVerb = cleanPageName(pageName)
Línea 41: Línea 32:
 
     end
 
     end
 
      
 
      
    -- Si la clase no se especificó o no coincide, intento genérico
 
 
     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
  
-- Funciones auxiliares para las bases verbales
+
--- FUNCIÓN PARA CREAR TABLAS ---
local function buildPerfective(root)
+
local function createVerbTable(title, root, persons, suffixes, applySpecialRule)
     return root
+
    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 function buildImperfective(root, clase)
+
        local row = html:tag("tr")
    if clase == "su." then
+
        row:tag("td"):css("font-weight", "bold"):wikitext(label)
         return root .. "-suca"
+
        -- Columna Perfectivo
    else
+
        row:tag("td"):wikitext(prefix .. root .. (suffixes.perf or ""))
         return root .. "-squa"
+
         -- Columna Imperfectivo
 +
        row:tag("td"):wikitext(prefix .. root .. (suffixes.imperf or ""))
 +
        -- Columna Irrealis
 +
         row:tag("td"):wikitext(prefix .. root .. (suffixes.irreal or ""))
 
     end
 
     end
end
 
  
local function buildIrrealis(root)
+
     return html
     return root .. "-nga"
 
 
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 persons = {
+
    --------------------------------------------------------
 +
    -- 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"
 
     }
 
     }
  
     local perfectiveBase = buildPerfective(root)
+
     --------------------------------------------------------
     local imperfectiveBase = buildImperfective(root, clase)
+
     -- CONFIGURACIÓN TABLA 2 (Nueva Serie)
     local irrealisBase = buildIrrealis(root)
+
     --------------------------------------------------------
 
+
     local persons2 = {
    -- Identificamos la primera letra de la raíz para la regla morfofonológica
+
        {"1.ª sg.", "cha-"},
    -- Usamos ustring por si hubiera caracteres especiales
+
         {"2.ª sg.", "ma-"},
     local firstChar = mw.ustring.lower(mw.ustring.sub(root, 1, 1))
+
         {"3.ª", ""}, -- Prefijo cero
    -- También checamos si empieza por "ch" (que son dos letras)
+
        {"1.ª pl.", "chi-"},
    local firstTwo = mw.ustring.lower(mw.ustring.sub(root, 1, 2))
+
        {"2.ª pl.", "mi-"}
 
+
     }
    local html = mw.html.create("table")
+
     local suffixes2 = {
        :addClass("wikitable")
+
         perf = "-ia",
         :css("width", "100%")
+
         imperf = "-sca",
         :css("max-width", "600px")
+
        irreal = "-nga"
 
+
    }
    -- (Encabezado igual...)
 
    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")
 
 
 
     for _, personData in ipairs(persons) do
 
        local label = personData[1]
 
         local prefix = personData[2]
 
 
 
        -- APLICACIÓN DE LA REGLA: 1.ª sg. + (n, z, t, ch)
 
         if 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")
+
    -- Generar ambas tablas
        row:tag("td"):css("font-weight", "bold"):wikitext(label)
+
    local result = "### Serie Primaria\n" .. tostring(createVerbTable("Conjugación Tipo 1", root, persons1, suffixes1, true))
        row:tag("td"):wikitext(prefix .. perfectiveBase)
+
    result = result .. "\n### Serie Secundaria\n" .. tostring(createVerbTable("Conjugación Tipo 2", root, persons2, suffixes2, false))
        row:tag("td"):wikitext(prefix .. imperfectiveBase)
 
        row:tag("td"):wikitext(prefix .. irrealisBase)
 
    end
 
  
     return tostring(html)
+
     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