Module:Country data
[voir] [modifier] [historique] [purger]
UtilisationModèle permettant d'afficher des informations en rapport avec un pays ou une zone géographique en utilisant les données de ses sous-modules, par exemple Module:Country data/canada, qu'il retrouve avec l'aide de Module:Country data/liste. Fonctions exportables
Modules externes et autres éléments dont ce module a besoin pour fonctionnerLa documentation de ce module est générée par le modèle {{Documentation module}}. --[[
This module is intended to replace the functionality of {{drapeau2}} and related
templates. It provides several methods, including
]]
local p = {};
local gdata = mw.loadData ("Module:Country data/liste" )
local dates = require "Module:date complexe"
local linguistic = require "Module:Linguistique"
local function _getCompetition(c,aaaa)
local gdomain = mw.loadData ( "Module:Drapeau/Domaine" ) -- chargé seulement sur les articles où ça sert, ça prend un peu de place
local symbs = {
['cm'] = "à la Coupe du monde",
['coupedumonde'] = "à la Coupe du monde",
['ce'] = "au championnat d'Europe",
['euro'] = "au championnat d'Europe",
['chm'] = "au championnat du monde",
['can'] = "à la Coupe des Confédérations",
['coupedesconfederations'] = "à la Coupe des Confédérations",
['en'] = "en",
['jo'] = "aux Jeux olympiques",
['jp'] = "aux Jeux paralympiques",
}
local str = symbs[string.lower(c or '')] or ""
--edition
if(aaaa ~= nil and aaaa ~= "") then
if(c=="jo" or c=="jp" ) then
local o=gdomain.jo["_"..aaaa];
if(o ~= nil) then
str = str .." "..o
end
else
str = str .." "..aaaa
end
end
return str
end
local function printFlag(flagfile, alt, displayformat)
displayformat = displayformat or {}
local size = displayformat.size or '20x15'
local border = 'border|'
if displayformat.border == '-' then
border = ''
end
if not alt then
alt = ''
end
return '<span class="flagicon">' ..
'[[Fichier:' .. flagfile .. '|' .. size ..'px|' .. border .. alt ..'|class=noviewer]]' ..
'</span>';
end
local function bestfordate(data, period) -- data contient une table dont les clés sont des dates au format ['2010'] = ou ['2010-05-04'] =
if type(data) == 'string' then
return data
end
-- très artisanal, à améliorer
if (not period) or (period == 'default') then
return data.default
end
local val = data.default
local bestdate = '-1000-01-01'
for i, j in pairs(data) do
if j ~= 'default' and dates.before(period, i) and dates.before(i, bestdate) then
val = j
bestdate = i
end -- bestdate est la date la plus récente antérieure ou égale à period, val est la donnée à cette date
end
return val
end
local function valueAtDate(data, period, topic) -- topic: type de drapeau, genre de l'adjectif, etc.
if type(data) == 'string' or type(data) == 'nil' then
return data
end
if type(data) ~= 'table' then
return error('mauvais datatabpe ' .. type(data))
end
topic = topic or "default"
if data[topic] then
return bestfordate(data[topic], period)
else
return bestfordate(data, period)
end
return error()
end
local function getData(datatable, typedata, topic, period) -- récupère la chaîne de caractère la plus appropriée dans la datatable
-- datatable: la table de sous module par exemple [[Module:Country data/grenade]]
-- typedata: "flag" / "name" / "adjective"
-- period: data in ISO format
-- topic: for instance "navy" for naval ensign
local val = datatable[typedata]
if not val then -- error handling ?
return nil
end
local val = valueAtDate(val, period, topic)
if type(val) ~= 'string' then -- error handling ?
return error(val)
end
return val
end
local function getAdjective(data, gender, number)
if not gender then
gender = 'm'
end
if not number then
number = 's'
end
if (gender ~= 'm' and gender ~= 'f') then
return error('gender devrait être m ou f mais est ' .. gender)
end
if (number ~= 's' and number ~= 'p') then
return error('number devrait être s ou p mais est ' .. number)
end
return getData(data, 'adjective', (gender .. number))
end
local function getDemonym (data, gender, number)
if data.demonym == nil then
return linguistic.ucfirst( getAdjective(data, gender, number) )
end
gender = gender or 'm'
number = number or 's'
if (gender ~= 'm' and gender ~= 'f') then
return error('gender devrait être m ou f mais est ' .. gender)
end
if (number ~= 's' and number ~= 'p') then
return error('number devrait être s ou p mais est ' .. number)
end
return getData(data, 'demonym', (gender .. number))
end
local function getLabel(data, topic, period, form)
local label
if (not form) or form == 'short' then
label = getData(data, 'shortname', topic, period)
end
if not label then
label = getData(data, 'name')
end
if (not label) and data.item then
label = mw.wikibase.label(getData(data, 'item'))
end
return label
end
local function getLink(data, topic, period)
local link = getData(data, 'link', topic, period)
if (not link) and data.item then
link = mw.wikibase.label(getData(data, 'item'))
end
return link
end
local function applyregex(str, areadata)
--[=[
refs [[mw:Extension:Scribunto/Lua reference manual#Pattern]]:
A ^ at the beginning of a pattern anchors the match at the beginning of the subject string.
A $ at the end of a pattern anchors the match at the end of the subject string.
At other positions, ^ and $ have no special meaning and represent themselves.
]=]
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 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
local function flagIcon(data, flagtype, period, displayformat)
local flagimage = getData(data, 'flag', flagtype, period)
if flagimage then
return printFlag(flagimage, '', displayformat)
end
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.flagsize or '20x15'
local flagtype = args.type
local align = args.align or 'left'
local link = args.link
local period = args.date
local competition = args.competition
local edition = args.edition
local extra = ''
local success, data = pcall(getDatatable, zone)
if not success then
if args.strict then
return error('lieu non reconnu')
end
return nil
end
-- image
local flag = flagIcon(data, flagtype, period)
if (args.label == '-') then
return flag, true
end
-- text
local text
local label = getLabel(data, flagtype)
local link = getLink(data, flagtype)
if competition then
competition = _getCompetition(linguistic.toascii(competition),args["édition"])
end
if link and competition then
link = link .. ' ' .. competition
end
if link then
text = '[[' .. link .. '|' .. label .. ']]'
end
-- si les données sont extraites d'un formulaire standard comme module:Drapeau/domain, appliquer des regex
if string.match(text, '%$') then
text = applyregex(text, data)
end
local val
if align == 'right' then
val = text .. ' ' .. flag
else
val = flag .. ' ' .. text
end
return val, true -- true indique le succès
end
-- fonction appelable avec #invoke
function p.standarddisplay2(frame)
result, success = p.standarddisplay(frame.args['pays'],frame.args)
return result
end
function p.nationality(zone, gender, number, topic, period)
local success, data = pcall(getDatatable, zone)
if not success then return
zone
end
local str = getAdjective(data, gender, number)
if not str then
return zone
end
local link = getLink(data, topic, period)
if link then
str = '[[' .. link .. '|' .. str .. ']]'
end
return str, true-- true indique le succès
end
function p.getNationality(args) -- pour obtenir la nationalité d'une personne sur Wikidata sous forme d'adjectifs
if not args then
return nil
end
local wikidata = require "Module:Wikidata"
local complexdate = require "Module:Date complexe"
if type(args) == 'string' then -- si un seul argument, c'est l'entité à utiliser
args = {item = args}
end
if args.args then -- si vient de frame
args = args.args
end
local item = args.item or args[1]
local linkback = args.linkback
-- établit la variable gender pour l'élément
local vals = {
['Q6581072'] = 'f',
['Q6581097'] = 'm',
default = '?'
}
local gender = args.gender
if not gender then
gender = wikidata.formatStatements{entity = item, property = 'P21', displayformat = 'raw'}
gender = vals[gender] or vals.default
end
-- désactivation si date de naissance avant l'Ère contemporaine : trop d'imprécisions et d'anachronismes
local mindate = args.mindate or '1789'
if mindate ~= "-" then
local birthdate = wikidata.formatStatements{entity = item, property = 'P569', displayformat = 'raw', numval = 1}
local deathdate = wikidata.formatStatements{entity = item, property = 'P570', displayformat = 'raw', numval = 1}
if ((not birthdate) or complexdate.before(mindate, birthdate)) and ((not deathdate) or complexdate.before(mindate, deathdate)) then
return nil
end
end
return wikidata.formatStatements{
property = 'P27',
showdate = true,
entity = item,
conjtype = args.conjtype or 'and',
removedupes = true,
linktopic = '-',
linkback = linkback,
displayformat =
function(snak)
local g = gender -- genre de la personne, pour affichage du gentilé
if g == '?' then -- si inconnu, au masculin
g = 'm'
end
local val, success = p.nationality(wikidata.getId(snak), g)
if not success then
val = wikidata.formatSnak(snak)
end
return val
end
}
end
return p
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia