La documentación pa esti módulu pue crease en Módulu:Llistes/usu

local llistes = {}
local existeCategoria = require('Módulu:Páxines').existeCategoria

-- Función que devuelve los elementos de la llista.
-- Solo s'obtienen los elementos informaos.
function llistes.ObtenerElementosLlista(frame)
    local Argumentos = frame.args;
    local parent     = frame:getParent();
    
    if not Argumentos[1] then
        Argumentos = parent.args;
    end    
    
    local categoria=Argumentos['categoría'] or ''
    local ordenar  =Argumentos['ordenar']   or ''
    
    separador =frame.args['separador'] or Argumentos['separador']
	conxuncion=frame.args['conxunción'] or Argumentos['conxunción']
    
    local ElementosLlista = {}    
    
    local i = 1;
    local j=0;
    while Argumentos[i]  do
      local TextoAMostrar
      if Argumentos[i] and not Argumentos[i]:match('^%s*$') then
      	j=j+1

      	-- Añadir l'enllaz si nun incluye ya unu
        local enllazar = frame.args.enllazar or parent.args.enllazar       

        if mw.ustring.find(Argumentos[i], '%[%[') then enllazar = 'no' end
    
      	if enllazar == 'sí' then
        -- Dixebrar desaniciando'l testu ente paréntesis del argumentu i-ésimu si ye de la forma 
        --   "Testu (lo que seya)".
        -- Esto solo va facese si después de los paréntesis nun hai nada. Exemplos:
        --   Alfonso Albacete (director) --> Alfonso Albacete
        --   [[Carlos Vera (árbitru de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]]
      	
      	  TextoAMostrar=Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i]
      	
      	  --Obtener l'espaciu de nomes de los argumentos
      	  local espacio_nombres=frame.args.nspace or parent.args.nspace or frame.args['espacio de nombres'] or parent.args['espacio de nombres'] or mw.title.getCurrentTitle().nsText
      	        	  
      	  if espacio_nombres == '' then
      	  	--Se accede a la función col argumentu espacio_nombres pero ta ensin informar      	  	
      	  	if Argumentos[i] == TextoAMostrar then
      	  		ElementosLlista[j] = mw.ustring.format('[[%s]]',TextoAMostrar)
      	    else
      	    	ElementosLlista[j] = mw.ustring.format('[[%s|%s]]',Argumentos[i],TextoAMostrar)
      	  	end
      	  else
      	  	--Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado.
      	 
            --Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a {{PAGENAME:Argumentos[i]}}
            --Por ejemplo, si argumentos[i] vale "Plantilla:A" se informa nombrepagina con "A".
            local nombrepagina
      	  
            local noError, pageObject = pcall(mw.title.new, Argumentos[i])
          
            if noError then 
            	nombrepagina = pageObject.text
            else 
            	nombrepagina = Argumentos[i]
            end      	  
            
      	    -- Enlazar tomando como espacio de nombres el recibido en el argumento o el global.
            ElementosLlista[j] = mw.ustring.format( '[[:%s:%s|%s]]',espacio_nombres,nombrepagina,TextoAMostrar)      	  	
      	  end
      	else
      	  TextoAMostrar     = Argumentos[i]
          ElementosLlista[j] = TextoAMostrar
        end
        
        -- Añadir el delimitador
        local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim
        
        if delimitador then ElementosLlista[j] = delimitador .. ElementosLlista[j] .. delimitador end
        
        --Añadir la categoría
        if categoria  ~= '' then
        	-- Utilizar argumentos[i] si existe la correspondiente categoría
        	local CategoriaElemento = existeCategoria(categoria:gsub('$1',Argumentos[i]))
        	
        	-- Si no existe ver si existe la categoría eliminando el texto entre paréntesis
        	if not CategoriaElemento and TextoAMostrar ~= Argumentos[i] then
        		CategoriaElemento = existeCategoria(categoria:gsub('$1',TextoAMostrar))
        	end
        	if CategoriaElemento then 
        		if ordenar == '' then
        		  ElementosLlista[j] = ElementosLlista[j] .. '[[' .. CategoriaElemento .. ']]'
        		else
        			ElementosLlista[j] = ElementosLlista[j] .. '[[' .. CategoriaElemento .. '|' .. ordenar .. ']]'	
        		end
        	end
        end
	  end
	  
	  i = i + 1;
    end
  
    return ElementosLlista
end
-- llista con los elementos separados por comas
function llistes.llista(frame)
	-- Obtener los elementos de la llista informados.
	local ElementosLlista= llistes.ObtenerElementosLlista(frame)
	
	if not ElementosLlista[1] then return end
	
	if not separador and not conxuncion then
		return mw.text.listToText(ElementosLlista,', ',' y ')
	elseif separador and not conxuncion then
		return mw.text.listToText(ElementosLlista, separador, separador)
	else
		-- Correxir el separador
		if separador == ',' then
			separador= ', '
		end
		-- Correxir la conxunción
		if conxuncion == 'o' then
			conxuncion = ' o '
		elseif conxuncion == 'y' then
			conxuncion = ' y '
		end
    	return mw.text.listToText(ElementosLlista, separador, conxuncion)
    end
end

function llistes.llistahtml(frame)
    local parent     = frame:getParent();	
	
	-- Obtener los elementos de la llista informados delimitándolos con 
	local ElementosLlista= llistes.ObtenerElementosLlista(frame)
	if not ElementosLlista[1] then return end
	
    -- Añadir a los elementos de la llista <li> y </li>	
    local i = 1;
    while ElementosLlista[i] do
      ElementosLlista[i] = '<li>' .. ElementosLlista[i] .. '</li>'	
      i = i + 1;
    end 
    -- Añadir la clase en su caso
    local clase = frame.args.clase or parent.args.clase
    if clase then
      return '<div' .. ' class="' .. clase ..'">' .. '<ul>' .. table.concat( ElementosLlista ) .. '</ul></div>'
    else
      --Devolver la llista
	  return '<ul>' .. table.concat( ElementosLlista ) .. '</ul>'    	
    end
end

return llistes