Módulo:Manutenção
Aspeto
A documentação para este módulo pode ser criada na página Módulo:Manutenção/doc
-- 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', '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] = '[[Categoria:' .. cat .. ']]'
end
return table.concat(cats)
end
return m