Módulo:Imagem

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:Imagem/doc

-- Este módulo permite gerar uma imagem, limpando as configurações para evitar erros 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
-- Remova todas as categorias, links internos, tags externas e html para manter apenas texto simples.
local function limpezaAlt( texto )
				if type( texto ) == 'string' and texto:match( '[%[<\n]' )  then
												local function textoDoLink( l, t )
																return ( t ~= '' and t ) or l
												end
												texto = texto
												-- limpeza das categorias
																:gsub( '%[%[[%s_]*[Cc]ategoria[%s_]*:.-%]%]', '' )
																:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
												-- limpeza dos ficheiros
																:gsub( '%[%[[Ff]icheiro:[^%[%]]+%]%]', '' )
																:gsub( '%[%[[Ff]ile:[^%[%]]+%]%]', '' )
																:gsub( '%[%[[Ii]magem?:[^%[%]]+%]%]', '' )
												-- limpeza das ligações internas
																:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', textoDoLink )
												-- limpeza das ligações externas
																:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
																:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
												-- limpeza das listas
																:gsub( '\n[*#][^\n]+', '')
																:gsub( '<li.-</li>', '' )
												-- limpeza das balizas html
																:gsub( '%b<>', '' )
												-- limpeza dos retornos de linha
																:gsub( '\n', ' ' )
				end
				return trim( texto )
end
local function valida( valor, lista )
				for i, v in ipairs( lista ) do
								lista[v] = v
				end
				return lista[v]
end
-- Gere a chamada para o arquivo de imagem.
-- Se o parâmetro de imagem (nome do arquivo) estiver vazio, a função não retorna nada
function p.imagem( rawArgs )
				argsList = { 'image', 'imagem', 'format', 'formato', 'upright', 'tamanho', 'border', 'borda', 'legenda', 'alt', 'link', 'page', 'página', 'class', 'classe', 'lang', 'língua', 'align', 'valign' }
				local args = {}
				for _, v in ipairs( argsList ) do
								args[ v ] = trim( rawArgs[ v ] )
				end
				if not args.imagem then
								return
				end
			
				-- analisar o nome do ficheiro
				local imagem = args.imagem
								:gsub( '%[%[[%s_]*[Cc]ategoria[%s_]*:.-%]%]', '' )
								:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
								:gsub( '%[%[[Ff]icheiro:([^|%[%]]+).+', '%1' )
								:gsub( '%[%[[Ii]magem?:([^|%[%]]+).+', '%1' )
								:gsub( '%[%[[Ff]ile:([^|%[%]]+).+', '%1' )
			
				-- analisar a legenda
				local legende = args[ 'legenda' ] and args[ 'legenda' ]
								:gsub( '%[%[[%s_]*[Cc]ategoria?[%s_]*:.-%]%])', '' )
			
				-- analisar o tamanho
				local tamanho = args.tamanho and args.tamanho:gsub( '%s', '' ):gsub( '(%d)$', '%1px' )
				if tamanho and not ( tamanho:match '%d+x?%d*px' or tamanho:match 'x%d+px' ) then
								tamanho = nil
				end
			
				-- analisar texto alternativo
				local alt = limpezaAlt( args.alt )
			
				-- gerar o link
				local wiki = { imagem }
				table.insert( wiki, valida( args.formato, { 'thumb', 'framless', 'frame', 'vinheta', 'semquadro', 'quadro', 'thumbnail', } ) )
				table.insert( wiki, args.borda and 'borda' )
				table.insert( wiki, tamanho )
				if tonumber( args.upright )
								and not tamanho
								and valida(args.formato, { 'thumb', 'vinheta', 'thumbnail', 'framless', 'semquadro', } )
				then
								table.insert( wiki, 'upright=' .. args.upright )
				end
				table.insert( wiki, valida( args.align, { 'left', 'right', 'center', 'none', 'esquerda', 'direita', 'centro' } ) )
				table.insert( wiki, valida( args.valign, { 'top', 'text-top', 'super', 'baseline', 'sub', 'middle', 'text-bottom', 'bottom', 'topo', 'topo-texto', 'sup', 'base', 'meio', 'base-texto', 'base', } ) )
				table.insert( wiki, alt and 'alt=' .. alt )
				table.insert( wiki, args.link and 'link=' .. args.link )
				table.insert( wiki, args.page and 'página=' .. args.page )
				table.insert( wiki, args.classe and 'classe=' .. args.classe )
				if args.lang and imagem:match( '.svg' ) then
								table.insert( wiki, 'língua=' .. args.lang )
				end
				table.insert( wiki, legenda )
			
				return '[[ficheiro:' .. table.concat( wiki, '|' ) .. ']]'
end
function p.infoboxV2( frame )
				local args = frame.args
			
				if args.alt == '' then
								args.alt = 'imagem ilustrativa de artigo ' .. mw.title.getCurrentTitle().text
				end
			
				local tamanho = args.tamanho:gsub( '%D', '' )
				tamanho = tonumber( tamanho ) or 280
				if tamanho > 280 then
								tamanho = 280
				end
				args.tamanho = tamanho .. 'px'
			
				return p.imagem( args )
end
return p