Module:Population totale/Bac à sable

 Documentation[créer] [purger]
--[[
  Test : module pour calculer la population totale d'un groupement de communes
--]]

local p = {}

function p.erreur(texte)
	return '<span class="error" style="font-size: 0.9em;">' .. (texte or "Erreur non définie") .. '</span>'
end


--[[
  Retourne le total des populations des communes indiquées
  Paramètres :
    - paramètres non nommés : le nom des communes (titre des articles)
    - absent : gère que faire en cas de commune dont les données sont inconnues
     → "fatal" : ne traite pas les données (ne fait rien). Sinon l'entrée erronée est ignorée
    - erreur : méthode utilisée pour prévenir d'une erreur
     → "rien" : ne pas générer d'erreur
     → "texte" : insérer l'erreur dans le texte retourné
     → "cat" : insérer une catégorie d'erreur (Catégorie:Commune invalide pour Population totale)
--]]
function p.population(frame)
	local pargs = frame:getParent().args
	-- récupération des options
	local absent = frame.args["absent"] or pargs["absent"]
	local erreur = frame.args["erreur"] or pargs["erreur"]
	
	local err = ""  -- erreur à ajouter à la fin
	local db = ""   -- debug

	-- vérification paramètres
	if (absent ~= "fatal" and absent ~= nil) then
		return p.erreur("Paramètre 'absent' invalide.")
	end
	if (erreur ~= "rien" and erreur ~= "texte" and erreur ~= "cat" and erreur ~= nil) then
		return p.erreur("Paramètre 'erreur' invalide.")
	end
	if (erreur == nil) then erreur = "texte" end -- valeur par défaut
	
-- temp : pour tester
pargs = frame.args

	-- présence d'au moins une commune
	if (pargs[1] == nil) then
		p.erreur("Aucune commune fournie.")
	end
	
	db = "absent=" .. (absent or "nil") .. " ; erreur=" .. erreur .. " / "
	
	-- compte population
	local total = 0
	-- parcours des communes
	local i = 1
	while (pargs[i] ~= nil) do
		local c = mw.text.trim(pargs[i]) -- nettoyage
		local tmp = frame:preprocess("{{Population de France/dernière_pop||" .. c .. '}}')
		local res = true
		-- on récupère le nombre et on l'ajoute
		local val = tonumber(tmp)
		if (val == nil) then
			res = false
		else
			-- ok, on ajoute le nombre
			total = total + val
		end -- si pas un nombre on traite comme une erreur
		if (res == false) then -- if et pas else car res peut avoir changé de valeur
			-- une erreur
			if (absent == "fatal") then
				-- on quitte sans traiter. Type d'erreur à insérer ?
				if (erreur == "texte") then
					err = err .. p.erreur("Pas de données pour la commune '" .. pargs[i] .. "' (" .. (tmp or "") .. ") ")
				elseif (erreur == "cat") then
					err = "[[Catégorie:Commune invalide pour Population totale]]"
				end -- else "rien"
				return err -- on retourne juste l'erreur
			end
			-- pas fatal, on prépare l'erreur à ajouter (ou pas)
			if (erreur == "texte") then
				err = err .. p.erreur("Pas de données pour la commune '" .. pargs[i] .. "' (" .. (tmp or "") .. ") ")
			elseif (erreur == "cat") then
				err = "[[Catégorie:Commune invalide pour Population totale]]"
			end -- else "rien"
		end
		i = i + 1
	end
	
	-- on retourne la valeur calculée + les erreurs éventuelles
	return tostring(total) .. err
end

return p