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

local Contexto = {}

local SEPARATORS = {
    ["y"] = " y ",
    ["o"] = " o ",
    ["e"] = " e ",
    ["u"] = " u ",
    ["_"] = " ",
    [","] = ", "
}

function Contexto.listar(frame)
    -- local debugstr = ""

    -- suponemos que se invoca directamente
    local params = frame.args

    -- debugstr = debugstr .. "fargs[1]=" .. tostring(params[1])

    if params[1] == nil then
        -- suponemos que se invoca sin argumentos, se toman los de la plantilla que la invoca.
        params = frame:getParent().args

        -- debugstr = debugstr .. "; pargs[1]=" .. tostring(params[1])
    end

    if not params[1] then
        return ""
    end

    -- param *leng*
    local arg_leng = params.leng
    -- debugstr = debugstr .. "; leng=" .. tostring(arg_leng)

    local output = {}
    local lastIsSep = true
    local base = 0

    -- si tiene etiqueta, viene de una enumeración de etiquetas:
    -- {{et1|nota=aaa|et2|nota2=bbb|...|etN}}
    --
    -- Esto quiere decir que ya se ha expandido la primera etiqueta,
    -- y hay que desplazar las notas

    if params.etiqueta then
        lastIsSep = false
        base = 1
    end

    for idx in ipairs(params) do
        local arg = params[idx]

        -- debugstr = debugstr .. "; [" .. idx .."]=" .. tostring(arg)

        local sep = SEPARATORS[arg]
        if sep then
            table.insert(output, sep)
            lastIsSep = true
        elseif arg and mw.ustring.len(arg) > 0 then
            if not lastIsSep then
                -- separador de lista
                table.insert(output, SEPARATORS[","])
            end
            lastIsSep = false

            -- se comprueba si hay que invocar plantilla
            local template = mw.title.makeTitle( 'Template', arg )
--             if not template then
--                 error("comprobando existencia:" .. mw.allToString("etiqueta", params.etiqueta, "arg", arg, "base", base, "idx", idx))
--             end

            if template and template.exists then
                -- se expande la plantilla
                arg = frame:expandTemplate{title = arg, args = { leng = arg_leng, ["sub"]="1" } }
            end

            table.insert(output, arg)

            -- comprueba si existe nota
            local n_nota = base + idx
            local idx_nota = "nota" .. n_nota
            local arg_nota
            if n_nota == 1 then
                arg_nota = params.nota or params[idx_nota]
            else
                arg_nota = params[idx_nota]
            end

            if arg_nota and mw.ustring.len(arg_nota) > 0 then
                table.insert(output, " (" .. arg_nota .. ")")
            end
        end
    end

    -- return table.concat(output) .. " DEBUG " .. debugstr
    return table.concat(output)
end

local function args2str(args)
    local out = {}
    for k, v in pairs(args) do
        table.insert(out, "k: ".. tostring(k) .. ", v: " .. tostring(v))
    end

    return table.concat(out, "\n\n")
end

function Contexto.testParentFrame(frame)
    local params = frame:getParent().args

    return args2str(params)
end

function Contexto.testFrame(frame)
    local params = frame.args

    return args2str(params)
end

return Contexto