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