Module:Country data
--[[
This module is intended to replace the functionality of
[[Modèle:Drapeau2/Libellé]] and related
templates. It provides several methods, including
]]
local p = {};
-- Chargement de la banque de données des langues avec gestion d'erreur. local gdata local linguistic = require "Module:Linguistique" local success, resultat = pcall (mw.loadData, "Module:Country data/liste" )
-- chargement des données if success then
gdata = resultat
else
-- Banque de données à minima en cas de bogue dans le Module:Langue/Data
gdata={
['france']={item="Q142", flag= "Flag_of_France.svg", name ="France"} } end
local gdomain local success, resultat = pcall (mw.loadData, "Module:Drapeau/Domaine" ) if success then gdomain = resultat end
local function _getCompetition(c,aaaa)
local rep="";
if(c=="CM" or c=="coupedumonde") then
rep="à la Coupe du monde"
elseif(c=="CE" or c=="euro") then
rep="au championnat d'Europe"
elseif(c=="ChM") then
rep="au championnat du monde"
elseif(c=="CAN" or c=="coupedesconfederations") then
rep="à la Coupe des Confédérations"
elseif(c=="en" ) then
rep="en"
elseif(c=="jo" ) then
rep="aux Jeux olympiques"
elseif(c=="jp" ) then
rep="aux Jeux paralympiques"
end
--edition
if(aaaa ~= nil and aaaa ~= "") then
if(c=="jo" or c=="jp" ) then
local o=gdomain.jo["_"..aaaa];
if(o ~= nil) then
rep=rep.." "..o
end
else
rep=rep.." "..aaaa
end
end
return rep
end
function printIcon(filescr, alt, size, border) if (border ~= "no") or (border == false) then border='border|' end if not alt then alt = end
return '' ..
'' .. border .. alt ..'' ..
'';
end
local function getData(datatable, typedata, topic, year) -- récupères les données stockées sur datatable -- typedata = flag ou nom -- datedata = year -- domain = arméée etc.) local val = datatable[typedata] --(typedata = nom, drapeau, etc.) if not topic then --(topic = army, air force, etc.) topic = 'default' end local alt
-- si val est une chaîne, la retourner, sinon, ça doit être une table if type(val) == 'string' then return val end if type(val) ~= 'table' then return error('demande invalide') end
-- s'il existe une valeur spéciale pour ce topic (comme une valeur spéciale de flag pour topic = army : soit une chaîne, soit une table avec des valeurs chronologiques if type(val[topic]) == 'table' then val = val[topic] end if type(val[topic]) == 'string' then return val[topic] end
alt = datatable[typedata].alt
local numericdate if year then numericdate = tonumber(year) end if numericdate then local bestdate = -10000 for i, j in pairs (datatable[typedata]) do local k = tonumber(i) if k and (k < numericdate) and (k > bestdate) then val = j bestdate = k end end end if not type(val) == 'string' then return nil end return val, alt end
local function printLabel(data, topic) local label if not name then return getData(data, 'name') end end
local function printLink(areadata, topic) if areadata.link then return areadata.link[topic] or areadata.link['default'] end return mw.wikibase.sitelink(data.item) end
local function applyregex(str, areadata) local cio = 'code CIO (en attente)' --require('Module:Wikidata')._formatStatements({entity= areadata.item, property= 'P984'}) or '??'
local label = getData(areadata, 'name') local of = linguistic.of(label, areadata.genre)
str = mw.ustring.gsub(str, '$de$label', of) str = mw.ustring.gsub(str, '$label', label) str = mw.ustring.gsub(str, '$cio', 'cio')
if string.find(str, '$gentile') then local function get(genre) return getData(areadata, 'adjective', genre) end local gentileMS, gentileFS, gentileMP, gentileFP = get('ms'), get('fs'), get('mp'), get('fp') str = mw.ustring.gsub(str, '$gentileMS', gentileMS) str = mw.ustring.gsub(str, '$gentileFS', gentileFS) str = mw.ustring.gsub(str, '$gentileMP', gentileMP) str = mw.ustring.gsub(str, '$gentileFP', gentileFP) end return str end
local function standardText(areadata, topicdata) -- format standards stockées dans Module:Drapeau/domain local link = topicdata.link local label = topicdata.label return link, label end
local function getDatatable(zone) zone = mw.ustring.lower(zone) if gdata[zone] then return require('Module:Country data/' .. gdata[zone]) else -- si le module existe mais n'est pas dans la liste return require('Module:Country data/' .. zone) end end
function p.List(frame)
return p.list(frame)
end
function p.standarddisplay(zone, args) if not zone then return nil end -- nettoyage des paramètres if not args then args = {} end for i, j in pairs(args) do args[i] = mw.text.trim(j) -- remove whitespaces if args[i] == then args[i] = nil end end
-- ajout des valeurs par défaut
local size = args["size"] or '20x15' local flagtype = args["type"]
local domain if args['domain'] and gdomain then domain = args['domain'] domain = mw.ustring.lower(string.gsub(domain, " ", "")) domain = linguistic.toascii(domain) domain = gdomain.domainlist["domain"] end if args["domain"] and not domain then return error("domaine non reconnu:" .. args["domain"]) end local align = args["align"] or 'left' local link = args["lien"] local label = args["label"] local year = args[2] or args["année"] or local align = args["align"] or "left" local target = args["target"] local competition = args["compétition"] local extra =
-- chargement des données if not zone then return nil -- error('paramètre 1 (pays) manquant') end local success, data = pcall(getDatatable, zone) if not success then if args.strict then return error('lieu non reconnu') end return zone, false -- false == échec end -- image local flagimage, alt = getData(data, 'flag', domain, year) local icon -- le fichier mis en forme if flagimage then icon = printIcon(flagimage, alt, size, border) end if (label == '-') then return icon end
if domain then link, label = standardText(data, domain) end
if (not link) then link = printLink(data, flagtype) end if (not label) then label = printLabel(data, flagtype) end
if competition then competition = _getCompetition(linguistic.toascii(args["compétition"]),args["édition"]) end
if link and competition then link = link .. ' ' .. competition end
if link then text = '' .. label .. '' end if target then text = target .. ' (' .. text .. ')' end
if string.find(text, '$') then -- si les données sont extraites d'un formulaire standard comme module:Drapeau/domain text = applyregex(text, data) end
local val if align == 'right' then val = text .. ' ' ..icon else val = icon .. ' ' .. text end return val, true -- true indique le succès end
function p.drapeau(frame) -- pour appel depuis un modèle : nom du pays local success, val = pcall(p._drapeau, frame.args)
if success then return val end
-- return p._drapeau(frame.args) return frame.args[1] end
return p