De Muysc cubun - Lengua Muisca

m
m
Línea 1: Línea 1:
 
local p = {}
 
local p = {}
  
-- Limpia el nombre de la página:
+
-- 1. Limpia el nombre de la página: "nysqua(2)" -> "nysqua"
-- quita espacios y cualquier sufijo tipo (2), (3), etc.
 
 
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()", "")
     return pageName
+
    -- Quita números sueltos por si acaso
 +
    pageName = mw.ustring.gsub(pageName, "%d+", "")
 +
     return mw.text.trim(pageName)
 
end
 
end
  
-- Detecta la clase aunque venga como:
+
-- 2. Normaliza la clase para que el script sepa qué terminación buscar
-- "sq.", "sq", "sq. intr.", "sq. tr.", "su.", "su", etc.
 
 
local function normalizeClass(rawClass)
 
local function normalizeClass(rawClass)
 
     rawClass = mw.text.trim(rawClass or "")
 
     rawClass = mw.text.trim(rawClass or "")
Línea 20: Línea 21:
 
         return "su."
 
         return "su."
 
     end
 
     end
 
 
     return ""
 
     return ""
 
end
 
end
  
-- Detecta transitividad si quieres mostrarla
+
-- 3. Extrae la raíz pura: "nysqua" -> "ny"
local function normalizeTrans(rawTrans, rawClass)
 
    rawTrans = mw.text.trim(rawTrans or "")
 
    rawClass = mw.text.trim(rawClass or "")
 
 
 
    local combined = mw.ustring.lower(rawTrans .. " " .. rawClass)
 
 
 
    if mw.ustring.find(combined, "intr") then
 
        return "intr."
 
    elseif mw.ustring.find(combined, "tr") then
 
        return "tr."
 
    end
 
 
 
    return ""
 
end
 
 
 
-- Obtiene la raíz:
 
-- 1) si hay |raiz=, la usa
 
-- 2) si no, quita -squa o -suca del título
 
 
local function getRoot(pageName, clase, manualRoot)
 
local function getRoot(pageName, clase, manualRoot)
 
     manualRoot = mw.text.trim(manualRoot or "")
 
     manualRoot = mw.text.trim(manualRoot or "")
Línea 49: Línea 31:
 
     end
 
     end
  
     local root = cleanPageName(pageName)
+
     local fullVerb = cleanPageName(pageName)
 +
    local root = fullVerb
  
 
     if clase == "sq." then
 
     if clase == "sq." then
         root = mw.ustring.gsub(root, "squa$", "")
+
         root = mw.ustring.gsub(fullVerb, "squa$", "")
 
     elseif clase == "su." then
 
     elseif clase == "su." then
         root = mw.ustring.gsub(root, "suca$", "")
+
         root = mw.ustring.gsub(fullVerb, "suca$", "")
 +
    end
 +
   
 +
    -- Si la clase no se especificó o no coincide, intento genérico
 +
    if root == fullVerb then
 +
        root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "")
 
     end
 
     end
  
Línea 60: Línea 48:
 
end
 
end
  
 +
-- Funciones auxiliares para las bases verbales
 
local function buildPerfective(root)
 
local function buildPerfective(root)
 
     return root
 
     return root
Línea 65: Línea 54:
  
 
local function buildImperfective(root, clase)
 
local function buildImperfective(root, clase)
     if clase == "sq." then
+
     if clase == "su." then
        return root .. "-squa"
+
         return root .. "suca"
    elseif clase == "su." then
 
         return root .. "-suca"
 
 
     else
 
     else
         return root .. "-squa" -- fallback
+
         return root .. "squa"
 
     end
 
     end
 
end
 
end
  
 
local function buildIrrealis(root)
 
local function buildIrrealis(root)
     return root .. "-nga"
+
     return root .. "nga"
 
end
 
end
  
 +
-- FUNCIÓN PRINCIPAL
 
function p.render(frame)
 
function p.render(frame)
 
     local args = frame:getParent().args
 
     local args = frame:getParent().args
  
    -- Puede venir como clase= sq. o clase= sq. intr.
 
 
     local rawClass = args.clase or args.tipo or ""
 
     local rawClass = args.clase or args.tipo or ""
    local rawTrans = args.trans or ""
 
 
     local manualRoot = args.raiz or ""
 
     local manualRoot = args.raiz or ""
  
 
     local clase = normalizeClass(rawClass)
 
     local clase = normalizeClass(rawClass)
    local trans = normalizeTrans(rawTrans, rawClass)
 
 
 
     local pageName = mw.title.getCurrentTitle().text
 
     local pageName = mw.title.getCurrentTitle().text
 
     local root = getRoot(pageName, clase, manualRoot)
 
     local root = getRoot(pageName, clase, manualRoot)
  
     if root == "" then
+
     if root == "" or root == pageName then
         return "<span style='color:red;'>Error: no se pudo identificar la raíz.</span>"
+
         return "<span style='color:red;'>Error: No se pudo extraer la raíz de '" .. pageName .. "'. Revisa la clase (sq. o su.).</span>"
 
     end
 
     end
  
 
     local persons = {
 
     local persons = {
         {"1sg", "z-"},
+
         {"1.ª sg. (yo)", "z-"},
         {"2sg", "m-"},
+
         {"2.ª sg. (tú)", "m-"},
         {"3",   "a-"},
+
         {"3.ª (él/ella)", "a-"},
         {"1pl", "chi-"},
+
         {"1.ª pl. (nosotros)", "chi-"},
         {"2pl", "mi-"}
+
         {"2.ª pl. (ustedes)", "mi-"}
 
     }
 
     }
  
Línea 108: Línea 92:
 
     local irrealisBase = buildIrrealis(root)
 
     local irrealisBase = buildIrrealis(root)
  
 +
    -- Construcción de la tabla HTML
 
     local html = mw.html.create("table")
 
     local html = mw.html.create("table")
 
         :addClass("wikitable")
 
         :addClass("wikitable")
         :css("width", "auto")
+
         :css("width", "100%")
         :css("text-align", "left")
+
         :css("max-width", "600px")
  
 
     local header = html:tag("tr")
 
     local header = html:tag("tr")
 
     header:tag("th"):wikitext("Persona")
 
     header:tag("th"):wikitext("Persona")
     header:tag("th"):wikitext("Perfectivo")
+
     header:tag("th"):wikitext("Perfectivo (Raíz)")
 
     header:tag("th"):wikitext("Imperfectivo")
 
     header:tag("th"):wikitext("Imperfectivo")
 
     header:tag("th"):wikitext("Irrealis")
 
     header:tag("th"):wikitext("Irrealis")
Línea 124: Línea 109:
  
 
         local row = html:tag("tr")
 
         local row = html:tag("tr")
         row:tag("td"):wikitext(label)
+
         row:tag("td"):css("font-weight", "bold"):wikitext(label)
 
         row:tag("td"):wikitext(prefix .. perfectiveBase)
 
         row:tag("td"):wikitext(prefix .. perfectiveBase)
 
         row:tag("td"):wikitext(prefix .. imperfectiveBase)
 
         row:tag("td"):wikitext(prefix .. imperfectiveBase)

Revisión del 08:41 25 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 "")
    -- Quita el bloque de paréntesis: (2), (3), etc.
    pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
    -- Quita números sueltos por si acaso
    pageName = mw.ustring.gsub(pageName, "%d+", "")
    return mw.text.trim(pageName)
end

-- 2. Normaliza la clase para que el script sepa qué terminación buscar
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: "nysqua" -> "ny"
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
    
    -- Si la clase no se especificó o no coincide, intento genérico
    if root == fullVerb then
        root = mw.ustring.gsub(fullVerb, "s[uq]ua$", "")
    end

    return root
end

-- Funciones auxiliares para las bases verbales
local function buildPerfective(root)
    return root
end

local function buildImperfective(root, clase)
    if clase == "su." then
        return root .. "suca"
    else
        return root .. "squa"
    end
end

local function buildIrrealis(root)
    return root .. "nga"
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

    local persons = {
        {"1.ª sg. (yo)", "z-"},
        {"2.ª sg. (tú)", "m-"},
        {"3.ª (él/ella)", "a-"},
        {"1.ª pl. (nosotros)", "chi-"},
        {"2.ª pl. (ustedes)", "mi-"}
    }

    local perfectiveBase = buildPerfective(root)
    local imperfectiveBase = buildImperfective(root, clase)
    local irrealisBase = buildIrrealis(root)

    -- Construcción de la tabla HTML
    local html = mw.html.create("table")
        :addClass("wikitable")
        :css("width", "100%")
        :css("max-width", "600px")

    local header = html:tag("tr")
    header:tag("th"):wikitext("Persona")
    header:tag("th"):wikitext("Perfectivo (Raíz)")
    header:tag("th"):wikitext("Imperfectivo")
    header:tag("th"):wikitext("Irrealis")

    for _, personData in ipairs(persons) do
        local label = personData[1]
        local prefix = personData[2]

        local row = html:tag("tr")
        row:tag("td"):css("font-weight", "bold"):wikitext(label)
        row:tag("td"):wikitext(prefix .. perfectiveBase)
        row:tag("td"):wikitext(prefix .. imperfectiveBase)
        row:tag("td"):wikitext(prefix .. irrealisBase)
    end

    return tostring(html)
end

return p