Modulo:Wikilib

da Pokémon Central Wiki, l'enciclopedia Pokémon in italiano.
Vai alla navigazione Vai alla ricerca
Questo modulo non ha ancora un manuale. Creane uno!
--[[

In questa libreria si hanno funzioni relative
all'IO con MediaWiki: per esempio, le più comuni
processazioni dei parametri in input e i pattern
tipici per la creazione dell'output

--]]

local w = {}

local txt = require('Modulo:Wikilib/strings') -- luacheck: no unused
local tab = require('Modulo:Wikilib/tables') -- luacheck: no unused

-- Rimuove gli spazi vuoti all'inizio e alla fine di una stringa
w.trim = string.trim

--[[

Rende possibile la string interpolation in stile Python
es.: interp("${name} is ${value}", {name = "foo", value = "bar"}
vedi: http://lua-users.org/wiki/StringInterpolation

--]]
w.interp = string.interp

--[[

Ritorna una nuova table in cui tutte le stringhe vuote
o contenenti solo spazi sono sostituite da nil, e gli
altri valori sono eventualmente processati da una
funzione che prende in ingresso valore e chiave.

Ciò è utile poiché suddette stringhe valutano a true,
rendendo più verbosa la necessaria sostituzione con
valori default: infatti MediaWiki le usa per i parametri
posizionali e nominali vuoti. Es:
	{{#invoke: myModule | myFunction | aa || name= }}
	ha frame.args == {[1] = ' aa ', [2] = '', name = ''}

Bisogna tuttavia stare attenti quando si usano funzioni
che operano sui soli indici interi, come table.concat,
ipairs o l'operatore #: queste considerano come ultimo
indice quello precedente ad un valore nil, creado problemi
in presenza i buchi, cosa che questa funzione tende a
fare. Un esempio può essere:
	#{'aa', 'bb', nil, 'dd'} == 3

Se ne consiglia dunque l'uso solo in casi in cui si faccia
esclusivamente accesso diretto ai parametri.

--]]
w.emptyStringToNil = function(tab, funct)
	if funct then
		return table.map(tab, function(value, key)
			if tostring(value):find('%S') then
				return funct(value, key)
			end
			-- Nessun ritorno esplicito, quindi nil
		end)
	end
	return table.map(tab, function(value)
			if tostring(value):find('%S') then
				return value
			end
			-- Nessun ritorno esplicito, quindi nil
		end)
end

w.empty_string_to_nil = w.emptyStringToNil

--[[

Effettua il trim di tutti gli elementi di una table.
Il secondo parametro (default true) attiva il mapping
delle stringhe vuote o di soli spazi in nil.

--]]
w.trimAll = function(tab, emptyStringToNil)
	if emptyStringToNil == nil or emptyStringToNil then
		return w.emptyStringToNil(tab, string.trim)
	end
    return table.map(tab, string.trim)
end

w.trim_all = w.trimAll

--[[

Effettua il mapping di una table con una funzione
data a cui vengono passati gli elementi dopo il trim.
Il terzo parametro (default true) attiva il mapping
delle stringhe vuote o di soli spazi in nil.
Secondo e terzo parametro possono essere scambiati,
per maggior leggibilità in caso di chiamata con
funzione definita on-the-fly.

--]]
w.trimAndMap = function(tab, funct, emptyStringToNil)
	if type(funct) == 'boolean' then
		funct, emptyStringToNil = emptyStringToNil, funct
	end
	local callback = function(s, key)
		return funct(string.trim(s), key)
	end
	if emptyStringToNil == nil or emptyStringToNil then
		return w.emptyStringToNil(tab, callback)
	end
    return table.map(tab, callback)
end

w.trim_and_map = w.trimAndMap

--[[

Effettua il mapping di una tabella con la funzione
data, per poi concatenarla usando un eventuale
separatore.
Funzione e separatore possono essere scambiati,
per maggior leggibilità in caso di chiamata con
funzione definita on-the-fly.

--]]
w.mapAndConcat = function(tab, sep, funct)
	if type(sep) == 'function' then
		sep, funct = funct, sep
	end
	return table.concat(table.map(tab, funct, ipairs), sep)
end

w.map_and_concat = w.mapAndConcat

--[[

Generates the standard wikicode interface given a lua function. That is, a
function that copies and trims all elements in frame.args and then passes
them on to the lua interface unpacked.

--]]
w.stdWikicodeInterface = function(luaInterface)
    return function(frame)
        local p = w.trimAll(table.copy(frame.args))
        return luaInterface(table.unpack(p))
    end
end
w.std_wikicode_interface = w.stdWikicodeInterface

return w