Módulo:Imagem

Permanently protected module
Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Descrição

Este módulo tem como função verificar os parâmetros de uma imagem.

Outra documentação:

-- 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