Módulo:Imagem
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