Module:Émâge
La documentation pour ce module peut être créée à Module:Émâge/doc
-- Ce module permet de générer une image, en nettoyant les paramètres pour éviter d'avoir des erreurs de Lint : [[Special:LintErrors/bogus-image-options]].
local p = {}
local function trim( texto )
if type( texto ) == 'string' then
texto = texto:gsub( '^%s*(%S?.-)%s*$', '%1' )
if texto ~= '' then
return texto
end
end
return nil
end
-- Retire toutes catégories, liens internes, externes et balises html pour ne garder que le texte brut.
local function neteyajoAlt( texto )
if type( texto ) == 'string' and texto:match( '[%[<\n]' ) then
local function textoDuLim( l, t )
return ( t ~= '' and t ) or l
end
texto = texto
-- nettoyage des catégories
:gsub( '%[%[[%s_]*[Cc]atègori[ae][%s_]*:.-%]%]', '' )
:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
-- nettoyage des fichiers
:gsub( '%[%[[Ff]ichiér:[^%[%]]+%]%]', '' )
:gsub( '%[%[[Ff]ile:[^%[%]]+%]%]', '' )
:gsub( '%[%[[Éé]mâge:[^%[%]]+%]%]', '' )
-- nettoyage des liens internes
:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', textoDuLim )
-- nettoyage des liens externes
:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
-- nettoyage des listes
:gsub( '\n[*#][^\n]+', '')
:gsub( '<li.-</li>', '' )
-- nettoyage des balises html
:gsub( '%b<>', '' )
-- nettoyage des retour ligne
:gsub( '\n', ' ' )
end
return trim( texto )
end
local function valido( valor, lista )
for i, v in ipairs( lista ) do
if valor == v then
return valor
end
end
return nil
end
-- Génère l'appel au ficher image.
-- Si le paramètre image (nom du fichier) est vide, la fonction ne retourne rien
function p.image( rawArgs )
local argsList = { 'image', 'émâge', 'format', 'upright', 'talye', 'border', 'lègenda', 'alt', 'link', 'page', 'pâge', 'class', 'lang', 'lengoua', 'align', 'valign' }
local args = {}
for _, v in ipairs( argsList ) do
args[ v ] = trim( rawArgs[ v ] )
end
if not args.image then
return
end
-- analyse du nom de fichier
local image = args.image
:gsub( '%[%[[%s_]*[Cc]atègori[ae][%s_]*:.-%]%]', '' )
:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
:gsub( '%[%[[Ff]ichiér:([^|%[%]]+).+', '%1' )
:gsub( '%[%[[Éé]mâge:([^|%[%]]+).+', '%1' )
:gsub( '%[%[[Ff]ile:([^|%[%]]+).+', '%1' )
-- analyse de la légende
local legenda = args[ 'lègenda' ] and args[ 'lègenda' ]
:gsub( '%[%[[%s_]*[Cc]at[èe]gor[yi][ae]?[%s_]*:.-%]%])', '' )
-- analyse de la taille
local talye = args.talye and args.talye:gsub( '%s', '' ):gsub( '(%d)$', '%1px' )
if talye and not ( talye:match '%d+x?%d*px' or talye:match 'x%d+px' ) then
talye = nil
end
-- analyse de l'alternative
local alt = neteyajoAlt( args.alt )
-- génération du lien
local wiki = { image }
table.insert( wiki, valido( args.format, { 'thumb', 'frameless', 'frame', 'figura', 'sencâdro', 'câdro', 'thumbnail', } ) )
table.insert( wiki, args.border and 'border' )
table.insert( wiki, talye )
if tonumber( args.upright )
and not talye
and valido(args.format, { 'thumb', 'figura', 'thumbnail', 'frameless', 'sencâdro', } )
then
table.insert( wiki, 'upright=' .. args.upright )
end
table.insert( wiki, valido( args.align, { 'left', 'right', 'center', 'none', 'gôche', 'drêta', 'centro', 'centrâ' } ) )
table.insert( wiki, valido( args.valign, { 'top', 'text-top', 'super', 'baseline', 'sub', 'middle', 'text-bottom', 'bottom', 'amont', 'amont-tèxto', 'sup', 'bâsa', 'méten', 'avâl-tèxto', 'avâl', } ) )
table.insert( wiki, alt and 'alt=' .. alt )
table.insert( wiki, args.link and 'link=' .. args.link )
table.insert( wiki, args.page and 'pâge=' .. args.page )
table.insert( wiki, args.class and 'class=' .. args.class )
if args.lang and image:sub( -4 ):lower() == '.svg' then
table.insert( wiki, 'lengoua=' .. args.lang )
end
table.insert( wiki, legenda )
return '[[Fichiér:' .. table.concat( wiki, '|' ) .. ']]'
end
function p.enfocajonV2( frame )
local args = frame.args
if args.alt == '' then
args.alt = 'Émâge ilustrativa de l’articllo ' .. mw.title.getCurrentTitle().text
end
local talye = args.talye:gsub( '%D', '' )
talye = tonumber( talye ) or 280
if talye > 280 then
talye = 280
end
args.talye = talye .. 'px'
return p.image( args )
end
return p