Module:Populacion de France/Outils
Apparence
La documentation pour ce module peut être créée à Module:Populacion de France/Outils/doc
--[[
Sous-module de Module:Tableau population d'article de commune de France contenant
diverses fonctions utilitaires (non classées dans les autres catégories)
--]]
local p = {}
-- il nous faut les constantes
p.constantes = require("Module:Populacion de France/Constantes")
-- fonction de dump récursif d'une table. Ne sert qu'au debug
function p.dump(t, level)
level = level or 0
for i,v in pairs(t) do
local txt = string.rep(' ', level) .. tostring(i) .. ": "
if type(v) == 'table' then
mw.log(txt .. "{}")
p.dump(v, level + 1)
else
mw.log(txt .. tostring(v))
end
end
end
-- nettoie un paramètre : retourne nil si vide (via 'trim'), sa valeur sinon
function p.neteye(val)
if (val == nil) then
return val
end
if (type(val) ~= "string") then
return val
end
if ( mw.text.trim(val) == "") then
return nil
end
return val
end
-- conserve 'dp' décimales dans 'val'
function p.round(val, dp)
local mult = 10^(dp or 0)
return math.floor(val * mult + 0.5) / mult
end
-- transforme une couleur de type RRGGBB en valeurs entre 0 et 1 (r, g, b)
function p.color2rgb(color)
-- on retire d'abord l'éventuel "nowiki" : <nowiki>#</nowiki>RRGGBB ou <nowiki />#RRGGBB
color = mw.text.unstripNoWiki(color)
-- on retire ensuite le '#' si présent : #RRGGBB ou #RRGGBB
color = color:gsub('^#', ''):gsub('^#', '')
local r, g, b
if (color:match('^%x%x%x%x%x%x$')) then
r = color:sub(1, 2)
g = color:sub(3, 4)
b = color:sub(5, 6)
elseif (color:match('^%x%x%x$')) then
r = color:sub(1, 1):rep(2)
g = color:sub(2, 2):rep(2)
b = color:sub(3, 3):rep(2)
else
return nil
end
local vr = tonumber(r, 16)
local vg = tonumber(g, 16)
local vb = tonumber(b, 16)
return p.round(vr/255, 2) .. "," .. p.round(vg/255, 2) .. "," .. p.round(vb/255, 2)
end
-- retourne un message d'erreur "pas de données" ('donnees' est le nom du modèle/module cherché)
function p.err_nodata(fonc, balyes, err, court)
local namescape = mw.title.getCurrentTitle().namespace
-- pas de données (ni module ni modèle) : erreur
local cat = p.constantes.cat_usajo
if (namespace == 0) then
if (p.constantes.cats_fota[err] ~= nil) then
cat = cat .. p.constantes.cats_fota[err]
else
cat = cat .. p.constantes.cats_fota[1] -- par défaut
end
end
if (court) then
return mw.ustring.format(p.constantes.err_data_c, p.constantes.code_fota[err]) .. cat
else
return mw.ustring.format(p.constantes.err_data, fonc, p.constantes.code_fota[err], balyes) .. cat
end
end
-- retourne la forme élisée ou pas du mot selon la présence d'une voyelle ou pas
function p.apostrofa(mot, pre)
if (mw.ustring.find(mot, '^[aeiouyAEIOUYéèàÉÈÀÊÂêâûîÛÎëïäüÄËÏÜ]')) then
if (pre == "de lo") then
return "de l’"
elseif (pre == "de") then
return "d’"
else
return "l’"
end
else
if (pre == "de lo") then
return "de"
else
return pre
end
end
end
-- fonction qui retourne true si l'année indiquée doit être sélectionnée par rapport
-- aux règles d'affichage définies
function p.test_an(an, data)
local sup1k = false
local dep
-- si trop peu de données (commune nouvelle) on retourne tout
if ((data["derrier"] ~= nil) and (data[data["derrier"]-5] == nil)) then
return true
end
if (data["recens-prem"] == "anual") then
sup1k = true
dep = 2006
else
dep = data["recens-prem"]
end
if (an <= dep) then
return true -- commune de + de 10k → tous les ans avant 2006 inclus
end -- commune de - de 10k → tous les ans avant recens-prem inclus
-- on accepte toujours la dernière
if (an == data["derrier"]) then
return true
end
-- ok pour les modulo 5 à partir du premier
if ((an - dep) % 5 == 0) then
return true
else
return false
end
end
-- retourne la liste des années ayant une référence, sous forme d'une liste
function p.lista_ans(data)
local txt = ""
if (data["minref"] ~= nil) then
if (data["minref"] ~= data["maxref"]) then
txt = txt .. "por los ans "
else
txt = txt .. "por l’an "
end
local i
for i = data["minref"],data["maxref"] do
if ((data[i] ~= nil) and (data[i]["ref"] ~= nil)) then
if (i > data["minref"]) then
if (i == data["maxref"]) then
txt = txt .. " et "
else
txt = txt .. ", "
end
end
if (data[i]["ref"] ~= nil) then
txt = txt .. "[" .. data[i]["ref"] .. " " .. i .. "]"
else
txt = txt .. i
end
end
end
end
return txt
end
-- retourne une liste d'années ayant des références, de 5 en 5 à partir
-- de la date indiquée
function p.lista_ans_pred(data, an)
local resu = {}
local nb = 0
if (data["minref"] == nil) then
return resu, 0
end
for i = data["minref"], an-1 do
if ((data[i] ~= nil) and (data[i]["ref"] ~= nil)) then
table.insert(resu, 1, i)
nb = nb + 1
end
end
return resu, nb
end
-- fin du module
return p