-- Ce module regroupe des fonctions utilisées par les brique d'infobox V2.
local p = {}
-- Retire toutes catégories, liens internes, externes et balises html pour ne garder que le texte brut.
local function nettoyageTexte( texte )
if type( texte ) == 'string' then
if texte:match( '[%[<]' ) then
local function texteDuLien( l, t )
return ( t ~= '' and t ) or l
end
-- nettoyage des catégories
texte = texte
:gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' )
:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
-- nettoyage des liens internes
:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', texteDuLien )
-- nettoyage des liens externes
:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
-- nettoyage des balises html
:gsub( '%b<>', '' )
end
return texte
end
end
-- Génère l'appel au ficher image.
-- Paramètres :
-- * image : nom du fichier
-- * légende :
-- * taille : taille en px à laquelle l'image doit être affichée
-- * alt : alternative textuelle à l'image
-- * link : page vers laquelle redirige un click sur l'image
-- * border : s'il faut afficher une bordure à l'image
-- * page : pour les image multipage (djvu), page à afficher
-- Tous les paramètres sont obligatoires, mais peuvent contenir une chaine vide.
function p.image( frame )
local args = frame.args
-- analyse du nom de fichier
local image = args.image
:gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' )
:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
:gsub( '%[%[[Ff]ichier:([^|%[%]]+).+', '%1' )
:gsub( '%[%[[Ii]mage:([^|%[%]]+).+', '%1' )
:gsub( '%[%[[Ff]ile:([^|%[%]]+).+', '%1' )
-- analyse de la légende
local legende = args[ 'légende' ]
:gsub( '%[%[[%s_]*[Cc]at[ée]gor[yi]e?[%s_]*:.-%]%])', '' )
-- analyse de la taille
local taille = args.taille:gsub( '%D', '' )
taille = tonumber( taille ) or 280
if taille > 280 then
taille = 280
end
-- analyse de l'alternative
local alt = nettoyageTexte( args.alt )
-- génération du lien
local wiki = { image }
table.insert( wiki, taille .. 'px' )
if legende ~= '' then
table.insert( wiki, legende )
end
if args.border ~= '' then
table.insert( wiki, 'border' )
end
if alt == '' then
alt = 'image illustrative de l’article ' .. mw.title.getCurrentTitle().text
end
table.insert( wiki, 'alt=' .. alt )
if args.link ~= '' then
table.insert( wiki, 'link=' .. args.link )
end
if args.page ~= '' then
table.insert( wiki, 'page=' .. args.page )
end
return '[[fichier:' .. table.concat( wiki, '|' ) .. ']]'
end
return p