De Muysc cubun - Lengua Muisca

m
m
Línea 2: Línea 2:
  
 
-- Limpia el nombre de la página:
 
-- Limpia el nombre de la página:
-- quita espacios y sufijos tipo (2), (3), etc.
+
-- 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 "")
     pageName = mw.ustring.gsub(pageName, "%s*%b()", "") -- quita (2), (3), etc.
+
     pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
 
     return pageName
 
     return pageName
 +
end
 +
 +
-- Detecta la clase aunque venga como:
 +
-- "sq.", "sq", "sq. intr.", "sq. tr.", "su.", "su", etc.
 +
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
 +
 +
-- Detecta transitividad si quieres mostrarla
 +
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
 
end
  
 
-- Obtiene la raíz:
 
-- Obtiene la raíz:
-- sq.  => quita -squa
+
-- 1) si hay |raiz=, la usa
-- su.  => quita -suca
+
-- 2) si no, quita -squa o -suca del título
-- si hay |raiz= manual, lo usa
 
 
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 20: Línea 50:
  
 
     local root = cleanPageName(pageName)
 
     local root = cleanPageName(pageName)
    clase = mw.text.trim(clase or "")
 
  
 
     if clase == "sq." then
 
     if clase == "sq." then
Línea 31: Línea 60:
 
end
 
end
  
-- Construye las bases TAM
 
 
local function buildPerfective(root)
 
local function buildPerfective(root)
 
     return root
 
     return root
 
end
 
end
  
local function buildImperfective(root)
+
local function buildImperfective(root, clase)
     return root .. "-squa"
+
     if clase == "sq." then
 +
        return root .. "-squa"
 +
    elseif clase == "su." then
 +
        return root .. "-suca"
 +
    else
 +
        return root .. "-squa" -- fallback
 +
    end
 
end
 
end
  
Línea 47: Línea 81:
 
     local args = frame:getParent().args
 
     local args = frame:getParent().args
  
     -- Parámetros
+
     -- Puede venir como clase= sq. o clase= sq. intr.
     local clase = mw.text.trim(args.clase or "")  -- sq. / su.
+
     local rawClass = args.clase or args.tipo or ""
     local trans = mw.text.trim(args.trans or "")  -- intr. / tr. (opcional)
+
     local rawTrans = args.trans or ""
     local manualRoot = mw.text.trim(args.raiz or "")
+
     local manualRoot = args.raiz or ""
 +
 
 +
    local clase = normalizeClass(rawClass)
 +
    local trans = normalizeTrans(rawTrans, rawClass)
  
 
     local pageName = mw.title.getCurrentTitle().text
 
     local pageName = mw.title.getCurrentTitle().text
Línea 68: Línea 105:
  
 
     local perfectiveBase = buildPerfective(root)
 
     local perfectiveBase = buildPerfective(root)
     local imperfectiveBase = buildImperfective(root)
+
     local imperfectiveBase = buildImperfective(root, clase)
 
     local irrealisBase = buildIrrealis(root)
 
     local irrealisBase = buildIrrealis(root)
  
Línea 76: Línea 113:
 
         :css("text-align", "left")
 
         :css("text-align", "left")
  
    -- Cabecera
 
 
     local header = html:tag("tr")
 
     local header = html:tag("tr")
 
     header:tag("th"):wikitext("Persona")
 
     header:tag("th"):wikitext("Persona")
Línea 83: Línea 119:
 
     header:tag("th"):wikitext("Irrealis")
 
     header:tag("th"):wikitext("Irrealis")
  
    -- Filas
 
 
     for _, personData in ipairs(persons) do
 
     for _, personData in ipairs(persons) do
 
         local label = personData[1]
 
         local label = personData[1]
Línea 95: Línea 130:
 
     end
 
     end
  
     local output = ""
+
     return tostring(html)
    output = output .. string.format("<div><b>Página:</b> %s</div>", pageName)
 
    output = output .. string.format("<div><b>Clase léxica:</b> %s %s</div>", clase, trans)
 
    output = output .. string.format("<div><b>Raíz detectada:</b> %s</div>", root)
 
    output = output .. "<div><b>Hipótesis TAM:</b> perfectivo Ø · imperfectivo -squa · irrealis -nga</div>"
 
 
 
    output = output .. tostring(html)
 
 
 
    return output
 
 
end
 
end
  
 
return p
 
return p

Revisión del 20:19 24 mar 2026

La documentación para este módulo puede ser creada en Módulo:Conjugador/doc

local p = {}

-- Limpia el nombre de la página:
-- quita espacios y cualquier sufijo tipo (2), (3), etc.
local function cleanPageName(pageName)
    pageName = mw.text.trim(pageName or "")
    pageName = mw.ustring.gsub(pageName, "%s*%b()", "")
    return pageName
end

-- Detecta la clase aunque venga como:
-- "sq.", "sq", "sq. intr.", "sq. tr.", "su.", "su", etc.
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

-- Detecta transitividad si quieres mostrarla
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)
    manualRoot = mw.text.trim(manualRoot or "")
    if manualRoot ~= "" then
        return manualRoot
    end

    local root = cleanPageName(pageName)

    if clase == "sq." then
        root = mw.ustring.gsub(root, "squa$", "")
    elseif clase == "su." then
        root = mw.ustring.gsub(root, "suca$", "")
    end

    return root
end

local function buildPerfective(root)
    return root
end

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

local function buildIrrealis(root)
    return root .. "-nga"
end

function p.render(frame)
    local args = frame:getParent().args

    -- Puede venir como clase= sq. o clase= sq. intr.
    local rawClass = args.clase or args.tipo or ""
    local rawTrans = args.trans or ""
    local manualRoot = args.raiz or ""

    local clase = normalizeClass(rawClass)
    local trans = normalizeTrans(rawTrans, rawClass)

    local pageName = mw.title.getCurrentTitle().text
    local root = getRoot(pageName, clase, manualRoot)

    if root == "" then
        return "<span style='color:red;'>Error: no se pudo identificar la raíz.</span>"
    end

    local persons = {
        {"1sg", "z-"},
        {"2sg", "m-"},
        {"3",   "a-"},
        {"1pl", "chi-"},
        {"2pl", "mi-"}
    }

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

    local html = mw.html.create("table")
        :addClass("wikitable")
        :css("width", "auto")
        :css("text-align", "left")

    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]

        local row = html:tag("tr")
        row:tag("td"):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