« Module:Country data » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
nettoyage
0x010D (discussion | contributions)
getDemonym : c'est l'adjectif qui doit être mis en majuscule, le gentilé devrait déjà y être
 
(18 versions intermédiaires par le même utilisateur non affichées)
Ligne 7 : Ligne 7 :


local gdata = mw.loadData ("Module:Country data/liste" )
local gdata = mw.loadData ("Module:Country data/liste" )
local dates = require "Module:date complexe"
local linguistic = require "Module:Linguistique"
local linguistic = require "Module:Linguistique"


Ligne 25 : Ligne 26 :
}
}


    local str = symbs[string.lower(c or '')] or ""
local str = symbs[string.lower(c or '')] or ""
   
    --edition
--edition
    if(aaaa ~= nil and aaaa ~= "") then
if(aaaa ~= nil and aaaa ~= "") then
        if(c=="jo"  or c=="jp" ) then
if(c=="jo"  or c=="jp" ) then
            local o=gdomain.jo["_"..aaaa];
local o=gdomain.jo["_"..aaaa];
            if(o ~= nil) then
if(o ~= nil) then
                str = str .." "..o
str = str .." "..o
            end          
end
        else
else
          str = str .." "..aaaa
  str = str .." "..aaaa
        end
end
    end
end


    return str
return str
end
end


Ligne 46 : Ligne 47 :
displayformat = displayformat or {}
displayformat = displayformat or {}
local size = displayformat.size or '20x15'
local size = displayformat.size or '20x15'
local border = displayformat.border or '1px' or 'border|'  
local border = 'border|'  
if (border ~= '-') then
if displayformat.border == '-' then
border = 'border|'
border = ''
end
end
Ligne 55 : Ligne 56 :
alt = ''
alt = ''
end
end
    return '<span class="flagicon">' ..
return '<span class="flagicon">' ..
                '[[Fichier:' .. flagfile .. '|' .. size ..'px|' .. border  .. alt ..']]' ..
'[[Fichier:' .. flagfile .. '|' .. size ..'px|' .. border  .. alt ..']]' ..
            '</span>';
'</span>';
end
end


Ligne 65 : Ligne 66 :
end
end


-- très artisanal, à amélio
-- très artisanal, à améliorer
if (not period) or (period == 'default') then
if (not period) or (period == 'default') then
return data.default
return data.default
end
end
local year, month, day
if type(period) == 'table' then
year, month, day = period.year, period.month, period.day
end
if type(period) == 'string' then
local pattern = "%d*"
year = period:match(pattern)
end
local val = data.default
local val = data.default
local numericyear = tonumber(year)-- ne prend en compte que les années // à améliorer
local bestdate = '-1000-01-01'
if numericyear then
for i, j in pairs(data) do
local bestdate = -10000
if j ~= 'default' and dates.before(period, i) and dates.before(i, bestdate) then -- si la valeur est plus récente que period moins récente que la best trouvée
for i, j in pairs (data) do
val = j
local k = tonumber(i)
bestdate = i
if k and (k < numericyear) and (k > bestdate) then
val = j
bestdate = k
end
end
end
end
end
Ligne 142 : Ligne 132 :
end
end
return getData(data, 'adjective', (gender .. number))
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 should be m or f is ' .. gender)
end
if (number ~= 's' and number ~= 'p') then
return error('number should be s or p is ' .. number)
end
return getData(data, 'demonym', (gender .. number))
end
end


Ligne 194 : Ligne 199 :
return require('Module:Country data/' .. zone)
return require('Module:Country data/' .. zone)
end
end
end
function p.List(frame)
    return p.list(frame)
end
end


Ligne 204 : Ligne 205 :
local flagimage = getData(data, 'flag', flagtype, period)
local flagimage = getData(data, 'flag', flagtype, period)
if flagimage then
if flagimage then
return printFlag(flagimage, alt, displayformat)
return printFlag(flagimage, '', displayformat)
end
end
end
end
Ligne 231 : Ligne 232 :
local edition = args.edition
local edition = args.edition
local extra = ''
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)
local success, data = pcall(getDatatable, zone)
Ligne 243 : Ligne 238 :
return error('lieu non reconnu')
return error('lieu non reconnu')
end
end
return zone, false -- false == échec
return nil
end
end
-- image
-- image
local flag = flagIcon(data, flagtype, period)
local flag = flagIcon(data, flagtype, period)
if (label == '-') then
if (args.label == '-') then
return flag
return flag, true
end
end


Ligne 288 : Ligne 283 :
zone
zone
end
end
 
local str = getAdjective(data, gender, number)
local str = getDemonym(data, gender, number)
if not str then
if not str then
return zone
return zone
Ligne 300 : Ligne 295 :
end
end


function p.drapeau(frame) -- pour appel depuis un modèle : {{#invoke:Country data|drapeau|nom du pays}}
 
local success, val = pcall(p._drapeau, frame.args)
function p.getNationality(args) -- pour obtenir la nationalité d'une personne sur Wikidata sous forme d'adjectifs
    if success then  
if not args then
    return val
return nil
    end
end
--    return p._drapeau(frame.args)
local wikidata = require "Module:Interface Wikidata".fromLua
return frame.args[1]
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]
-- é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}
if (not birthdate) or complexdate.before(mindate, birthdate) then
return nil
end
end
return wikidata.formatStatements{
property = 'P27',
vals = statements,
showdate = true,
entity = item,
conjtype = 'and',
removedupes = true,
linktopic = '-',
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
end


return p
return p

Dernière version du 30 novembre 2016 à 10:32

--[[ This module is intended to replace the functionality of Drapeau [[Modèle:Drapeau2/Libellé]] 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 '' .. '' .. border .. alt ..'' .. ''; 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 -- si la valeur est plus récente que period moins récente que la best trouvée val = j bestdate = i end 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('bad 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 should be m or f is ' .. gender) end if (number ~= 's' and number ~= 'p') then return error('number should be s or p is ' .. 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 should be m or f is ' .. gender) end if (number ~= 's' and number ~= 'p') then return error('number should be s or p is ' .. 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) 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 = '' .. 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

function p.nationality(zone, gender, number, topic, period) local success, data = pcall(getDatatable, zone) if not success then return zone end

local str = getDemonym(data, gender, number) if not str then return zone end local link = getLink(data, topic, period) if link then str = '' .. 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:Interface Wikidata".fromLua 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]

-- é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} if (not birthdate) or complexdate.before(mindate, birthdate) then return nil end end return wikidata.formatStatements{ property = 'P27', vals = statements, showdate = true, entity = item, conjtype = 'and', removedupes = true, linktopic = '-', 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