Saltar para o conteúdo

Módulo:Info/calendário

Origem: Wikipédia, a enciclopédia livre.
-- Extensão do Módulo:Info para adicionar função de calendário

local ext = {}
ext. especial = {}

ext.especial['calendário'] = function(campo)
    if not campo[1] then
        return nil
    end
    local mes, ano = mw.ustring.match(campo[1], '(%d%d?)[^%d]+(%d%d%d%d)')
    if not mes or tonumber(mes) > 12 or tonumber(mes) == 0 then
        table.insert(debug.erros, 'mês do calendário não foi informado corretamente, use um número entre 1 e 12')
        return nil
    end
    mes, ano = tonumber(mes), tonumber(ano)
    nomedomes = ({'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro',
      'outubro', 'novembro', 'dezembro'})[mes]
    local diasnomes = mes == 2 and ano % 4 == 0 and (ano % 100 ~= 0 or ano % 400 == 0) and 29 or
      ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(mes)
    local dia1 = os.date('*t', os.time{year=ano, month=mes, day=1})['wday']
    local d = 1
    local semanas = {}
    while d <= diasnomes do  -- semana
        local semana = {}
        if #semanas == 0 then
            local ds = 1
            while ds < dia1 do
                table.insert(semana, '')
                ds = ds + 1
            end
        end
        while #semana < 7 do  -- dia
            if d <= diasnomes then
                table.insert(semana, '[[' .. d .. ' de ' .. nomedomes .. '|' .. d .. ']]')
                d = d + 1
            else
                table.insert(semana, '')
            end
        end
        table.insert(semanas, '<tr><td>' .. table.concat(semana, '</td><td>') .. '</td></tr>')
    end
    local tabela = {'<table style="width:100%; border-collapse:collapse"><tr>'}
    for n, d in ipairs{'D', 'S', 'T', 'Q', 'Q', 'S', 'S'} do
        table.insert(tabela, '<td style="font-weight:bold; ' .. cor3 .. '">' .. d .. '</td>')
    end
    return {table.concat(tabela, '') .. '</tr>\n' .. table.concat(semanas, '\n') .. '</table>'}
end

return ext