Ir para o conteúdo

Módulo:Manutenção

De Wiki TokuDrive
Revisão de 05h22min de 5 de julho de 2026 por Tavoraadmin (discussão | contribs) (Importando predefinição/módulo da Wikipédia em português para manter layout)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

-- Configuração dos assuntos local assuntos = {

 ['de ambiente'] = {'ambiente', 'amb'},
 ['de arte'] = {'arte'},
 ['de biografia'] = {'biografia', 'bio'},
 ['de biografia histórica'] = {'bioh'},
 ['do Brasil'] = {'brasil', 'bra', 'br'},
 ['de ciência'] = {'ciência', 'ciencia', 'ci'},
 ['sobre cinema e TV'] = {'cinema', 'cine', 'tv'},
 ['de economia'] = {'economia', 'eco'},
 ['de empresa'] = {'empresa', 'emp'},
 ['de esporte'] = {'esporte', 'desp', 'esp'},
 ['de ficção'] = {'ficção', 'fic'},
 ['de futebol'] = {'futebol', 'fut'},
 ['de geografia'] = {'geografia', 'geo'},
 ['de geografia (África)'] = {'geo-af'},
 ['de geografia (América)'] = {'geo-am'},
 ['de geografia (Europa)'] = {'geo-eu'},
 ['de geografia (Extremo Oriente)'] = {'geo-eo'},
 ['de geografia (Médio Oriente)'] = {'geo-mo'},
 ['de geografia (Oceania/Pacífico)'] = {'geo-oc'},
 ['de história'] = {'história', 'hist'},
 ['de história (África)'] = {'hist-af'},
 ['de história (América)'] = {'hist-am'},
 ['de história (Europa)'] = {'hist-eu'},
 ['de história (Extremo Oriente)'] = {'hist-eo'},
 ['de história (Médio Oriente)'] = {'hist-mo'},
 ['de história (Oceania/Pacífico)'] = {'hist-oc'},
 ['de jogo'] = {'jogo'},
 ['de localidade'] = {'localidade', 'loc'},
 ['de lusofonia'] = {'lusofonia', 'lusof'},
 ['de música'] = {'música', 'musica', 'mús', 'mus'},
 ['de política'] = {'política', 'pol'},
 ['de Portugal'] = {'portugal', 'por', 'prt', 'pt'},
 ['de sociedade'] = {'sociedade', 'soc'},
 ['de saúde'] = {'saúde'},
 ['de tecnologia'] = {'tecnologia', 'tec'}

}

local m = {}

m.assuntos = {} -- inverte a tabela, de {['de ambiente']={'ambiente', 'amb'}, ...} para {['ambiente']='de ambiente', ['amb']='de ambiente', ...} for v, t in pairs(assuntos) do

 for _, k in ipairs(t) do
   m.assuntos[k] = v
 end

end assuntos = nil

-- verifica se o mês é válido e retorna o mês em letra minúscula local valida_mes = function(mes)

 local meses = {'[Jj]aneiro', '[Ff]evereiro', '[Mm]arço', '[Aa]bril', '[Mm]aio', '[Jj]unho',
   '[Jj]ulho', '[Aa]gosto', '[Ss]etembro', '[Oo]utubro', '[Nn]ovembro', '[Dd]ezembro'}
 for n, m in ipairs(meses) do
   if string.find(mes, '^' .. m .. ' de %d+$') then
     return string.lower(mes)
   end
 end

end

m.categorizar = function(frame)

 local config = frame.args
 local catbase, mes
 local cats = {}
 -- Esta função é só para manutenção de artigos
 if mw.title.getCurrentTitle().namespace ~= 0 then
   return
 end
 if config['1'] then
   catbase = config['1']
 else
   return
 end
 local catsecao = config['seção']
 local arg1 = config['arg1'] or '^Est[ae] .'
 local cat2 = config ['cat2']
 local args = frame:getParent().args or {}
 local secao = args['1'] and string.find(args['1'], '^Esta sec?ção')
 if secao and catsecao then
   catbase = catsecao
 elseif args['1'] and args['1'] ~=  then
   -- permite passar a data no primeiro argumento
   if valida_mes(args['1']) or string.match(args['1'], '^2%d%d%d$') then
     mes = args['1']
   -- se o primeiro argumento não é um assunto e não começa com Este ou Esta
   elseif not m.assuntos[args['1']] and not mw.ustring.find(args['1'], arg1) then
     table.insert(cats, '!Páginas com argumentos incorretos em marca de manutenção')
   end
 end
 
 -- categoria de data
 mes = mes or args['data'] or args['Data'] or args['date'] or args['Date']
 if mes then
   local vmes = valida_mes(mes)
   if not vmes then
     local ano = string.match(mes, '^2%d%d%d$')
     if ano then
     	mes = ano
     else
       table.insert(cats, '!Páginas com parâmetro de data formatado incorretamente')
       mes = nil
     end
   else
     mes = vmes
   end
 end
 if mes then
   local cat = '!Artigos ' .. catbase .. ' desde ' .. mes
   if mw.title.new(cat, 14).exists then
     table.insert(cats, cat)
   else
     -- se a categoria de mês não existir tenta ver se existe o mês com letra maiúscula
     cat = '!Artigos ' .. catbase .. ' desde ' .. string.gsub(mes, '^%a', string.upper)
     if mw.title.new(cat, 14).exists then
       table.insert(cats, cat)
     else
       -- se também não existe, tenta colocar somente o ano
       local ano = string.match(mes, '2%d%d%d')
       if ano then
         table.insert(cats, '!Artigos ' .. catbase .. ' desde ' .. ano)
       -- senão coloca na categoria base
       else
         table.insert(cats, '!Artigos ' .. catbase)
       end
     end
   end
   -- se tiver cat2, repete tudo para cat2
   if cat2 then
     cat = cat2 .. ' desde ' .. mes
     if mw.title.new(cat, 14).exists then
       table.insert(cats, cat)
     else
       cat = cat2 .. ' desde ' .. string.gsub(mes, '^%a', string.upper)
       if mw.title.new(cat, 14).exists then
         table.insert(cats, cat)
       else
         local ano = string.match(mes, '2%d%d%d')
         if ano then
           table.insert(cats, cat2 .. ' desde ' .. ano)
         else
           table.insert(cats, cat2)
         end
       end
     end
   end
 else -- não tem data válida, coloca a categoria base
   table.insert(cats, '!Artigos ' .. catbase)
   if cat2 then
     table.insert(cats, cat2)
   end
 end
 -- categoria de assunto
 local algum = false
 local semcat = false
 for k, v in pairs(args) do
   if string.find(k, '^%d%d-$') then
     v = string.lower(v)
     if m.assuntos[v] then
       algum = true
       local cat = '!Artigos ' .. m.assuntos[v] .. ' ' .. catbase
       if mw.title.new(cat, 14).exists then
         table.insert(cats, cat)
       else
         semcat = true
       end
     end
   else
     k = string.lower(k)
     if m.assuntos[k] and v ~=  then
       algum = true
       local cat = '!Artigos ' .. m.assuntos[k] .. ' ' .. catbase
       if mw.title.new(cat, 14).exists then
         table.insert(cats, cat)
       else
         semcat = true
       end
     end
   end
 end
 if not algum then
   local cat = '!Artigos ' .. catbase .. ' sem indicação de tema'
   if mw.title.new(cat, 14).exists then
     table.insert(cats, cat)
   end
 elseif semcat then
   local cat = '!Artigos ' .. catbase .. ' por assunto'
   local cat2 = '!Artigos ' .. catbase .. ' por tema'
   if mw.title.new(cat, 14).exists then
     table.insert(cats, cat)
   elseif mw.title.new(cat2, 14).exists then
     table.insert(cats, cat2)
   end
 end
 -- finalizando
 for i, cat in ipairs(cats) do
   cats[i] = 
 end
 return table.concat(cats)

end

return m