Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/Calendar1.lua.html
--   http://anggtwu.net/LUA/Calendar1.lua
--          (find-angg "LUA/Calendar1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/Calendar1.lua"))

-- «.Calendar»	        (to "Calendar")
-- «.Calendar-tests»	(to "Calendar-tests")
-- «.Feriados»		(to "Feriados")
-- «.Feriados-tests»	(to "Feriados-tests")
-- «.Aulas»		(to "Aulas")
-- «.Aulas-tests»	(to "Aulas-tests")
-- «.diasdeaula-2024.1»	(to "diasdeaula-2024.1")
-- «.diasdeaula»	(to "diasdeaula")

VTable.__index.transp = function (vt)
    for _,k in ipairs(keys(vt)) do local v=vt[k]; vt[v]=k end
    return vt
  end

mod = function (a,b) return select(2, divmod(a,b)) end

--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"

= VTable {  10,   20}:transp()
= VTable { "a",  "b"}:transp()
= VTable {a=10, b=20}:transp()
= divmod(32, 10)
=    mod(32, 10)

--]]

--   ____      _                _            
--  / ___|__ _| | ___ _ __   __| | __ _ _ __ 
-- | |   / _` | |/ _ \ '_ \ / _` |/ _` | '__|
-- | |__| (_| | |  __/ | | | (_| | (_| | |   
--  \____\__,_|_|\___|_| |_|\__,_|\__,_|_|   
--                                           
-- «Calendar»  (to ".Calendar")

-- cal_mes_ndias = VTable {31, 28, 31, 30, 31, 30,   -- jan fev mar abr mai jun
--                         31, 31, 30, 31, 30, 31}   -- jul ago set out nov dez
cal_mes_ndias    = VTable {31, 29, 31, 30, 31, 30,   -- jan fev mar abr mai jun
                           31, 31, 30, 31, 30, 31}   -- jul ago set out nov dez
cal_mes = VTable(split"jan fev mar abr mai jun jul ago set out nov dez"):transp()
cal_mon = VTable(split"jan feb mar apr may jun jul aug sep oct nov dec"):transp()
cal_dds = VTable(split"dom  2a  3a  4a  5a  6a sab"):transp()
cal_wkd = VTable(split"sun mon tue wed tue fri sat"):transp()
cal_wkdn = function (s) return cal_dds[s] or cal_wkd[s] end

Calendar = Class {
  type = "Calendar",
  new  = function (jan1)
      return Calendar {jan1 = cal_wkdn(jan1)}
    end,
  startingwith = function (jan1)
      return Calendar.new(jan1):makedays():transp()
    end,
  __index = {
    wkdn = function (cal, yday)
        local n = yday + cal.jan1 - 1
        return mod(n-1, 7) + 1
      end,
    makedays = function (cal)
        local days = VTable {}
        for monthn=1,12 do
          local mes = cal_mes[monthn]
          local mon = cal_mon[monthn]
          local mdays = cal_mes_ndias[monthn]
          for mday=1,mdays do
            local yday = #days + 1
            local wkdn = cal:wkdn(yday)
            local dds  = cal_dds[wkdn]
            local wkd  = cal_wkd[wkdn]
            local day  = HTable {month=mon, mes=mes,
                                 day=mday, yday=yday, dd=format("%02d", mday),
                                 dds=dds, wkd=wkd, wkdn=wkdn}
             table.insert(days, day)
          end
        end
        cal.days = days
        return cal
      end,
    transp = function (cal)
        for i=1,#cal.days do
          local day = cal.days[i]
          local mes_dd = day.mes.." "..day.dd
          local mon_dd = day.month.." "..day.dd
          cal.days[mes_dd] = day
          cal.days[mon_dd] = day
        end
        return cal
      end,
    --
    format = function (cal, fmt, d)
        local day = cal.days[d]
        return (fmt:gsub("<(.-)>", day))
      end,
    parse = function (cal, dstr) return cow(function ()
          for dd,mmm in dstr:gmatch("([0-9]+)/([a-z]+)") do
            local mmm_dd = mmm.." "..dd
            local day = cal.days[mmm_dd]
            local yday = day.yday
            coy(yday, mmm_dd, day.dds)
          end
        end)
      end,
  },
}

-- «Calendar-tests»  (to ".Calendar-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"

-- 2024:
cal = Calendar.startingwith("mon")
= cal.days[4]
= cal.days[60]
= cal.days[61]
= cal:format("<dd>/<mes>", 4)

-- 2023:
cal = Calendar.new("sun")
= cal:wkdn(4)
= cal:wkdn(7)
= cal:wkdn(8)
= cal:wkdn(10)

cal = Calendar.startingwith("sun")
= cal.days[4]
= cal:format("<dd>/<mes>", 4)

--]]





--  _____         _           _           
-- |  ___|__ _ __(_) __ _  __| | ___  ___ 
-- | |_ / _ \ '__| |/ _` |/ _` |/ _ \/ __|
-- |  _|  __/ |  | | (_| | (_| | (_) \__ \
-- |_|  \___|_|  |_|\__,_|\__,_|\___/|___/
--                                        
-- «Feriados»  (to ".Feriados")

Feriados = Class {
  type    = "Feriados",
  __tostring = function (fe) return mytostringv(fe) end,
  __index = {
    add = function (fe, bigstr)
        local datas,cor,label = bigstr:match("^(.-)::%s*(%S+)%s+(.*)")
        for yday,md,dds in cal:parse(datas) do
          fe[yday] = {cor, bitrim(label)}
        end
      end,
    blogme = function (fe, yday)
        if fe[yday] then return format(" [%s %s]", fe[yday][1], fe[yday][2]) end
      end,
    latex = function (fe, yday)
        if fe[yday] then return format(" \\it %s", fe[yday][2]) end
      end,
  },
}

-- «Feriados-tests»  (to ".Feriados-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"

-- 2024:
cal = Calendar.startingwith("mon")
feriados = Feriados {}
= feriados
feriados:add " 01/jan 29/mar 10/apr 21/apr 01/may 07/sep :: FER Feriado    "
feriados:add " 12/oct 02/nov 15/nov 20/nov 25/dez 31/dez :: FER Feriado    "
feriados:add " 12/feb 13/feb 14/feb 30/may 31/may 28/oct 24/dec :: FER Ponto facultativo  "
= feriados

-- 2023:
cal = Calendar.startingwith("sun")
feriados = Feriados {}
= feriados
feriados:add " 07/set 12/out 02/nov 15/nov 20/nov :: FER Feriado           "
feriados:add " 08/set 13/out 03/nov               :: FER Ponto facultativo "
feriados:add " 16/out 17/out 18/out 19/out 20/out :: FER Semana Acadêmica  "
feriados:add " 03/out              :: FER Vou repor esta aula em outro dia "
= feriados
= feriados:blogme(290)
= feriados:blogme(-42)

--]]




--     _         _           
--    / \  _   _| | __ _ ___ 
--   / _ \| | | | |/ _` / __|
--  / ___ \ |_| | | (_| \__ \
-- /_/   \_\__,_|_|\__,_|___/
--                           
-- «Aulas»  (to ".Aulas")

Aulas = Class {
  type = "Aulas",
  from = function (bigstr)
      local aulas = Aulas(splitlines(bigstr))
      aulas.n = 0
      return aulas
    end,
  __tostring = function (as) return mytostringv(as) end,
  __index = {
    incr = function (as) as.n = as.n + 1; return as end,
    blogme = function (as, n)
        n = n or as.n
        if as[n] then return format(" [GRAY %s]", bitrim(as[n])) end
      end,
    latex = function (as, n)
        n = n or as.n
        if as[n] then return format(" %s", bitrim(as[n])) end
      end,
  },
}

-- «Aulas-tests»  (to ".Aulas-tests")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"
aulas = Aulas.from [[
  um
  dois
]]
= aulas
= aulas:blogme(1)
= aulas:blogme(2)
= aulas:blogme(3)
= aulas:blogme()
= aulas:incr():blogme()
= aulas:incr():blogme()
= aulas:incr():blogme()

--]==]


aulas_c3_bigstr = [=[
Revisão de pontos e vetores.
Função vetorial de uma variável real: definição e exemplos, derivada.
Função vetorial de uma variável real: definição e exemplos, derivada.
Limite e continuidade. Definição e propriedades.
Fórmula de Taylor.
Fórmula de Taylor.
Funções reais de duas variáveis: gráficos e conjuntos de nível.
Funções reais de duas variáveis: gráficos e conjuntos de nível.
Plano tangente e reta normal.
Derivada direcional.
Derivadas parciais.
Derivadas parciais. Vetor gradiente.
Diferencial total. Funções homogêneas.
Derivadas parciais de ordens superiores.
Regra da cadeia.
P1.
Função diferenciável. Uma condição suficiente para diferenciabilidade.
Noções de conjuntos abertos e fechados no $\R^n$.
Noções de conjuntos abertos e fechados no $\R^n$.
Máximos e mínimos sobre um compacto.
Extremos relativos. Condição necessária para a existência de extremos relativos.
Ponto crítico. Teste da derivada segunda.
P2.
Revisão e dúvidas.
VR.
Revisão e dúvidas.
VS.
]=]



aulas_c2_bigstr = [=[
Revisão de diferenciação.
Integral definida, integral como área, introdução aos TFCs, propriedades da integral.
Revisão de como justificar cada passo de uma demonstração.
Definição de solução de EDO. Integração como EDO. Integral indefinida.
Integração por partes.
Frações parciais.
Exercícios de como estruturar contas e demonstrações.
Mudança de variáveis. Integrais de potências de senos e cossenos.
Substituição trigonométrica.
Substituição trigonométrica.
Substituição trigonométrica.
Somas de Riemann.
Somas de Riemann.
Somas de Riemann.
Somas de Riemann.
TFC1 e TFC2.
Mudança de variável na integral definida.
P1.
Funções não integráveis.
Integrais impróprias.                                              
Volumes. Volume de sólidos de revolução.
Comprimento de arco.                                        
Campos de direções. EDOs com variáveis separáveis.                                          
Condições iniciais.                                                                         
EDOs lineares de ordens 1 e 2 com coeficientes constantes.                                  
Espaço de soluções. A álgebra das funções infinitamente diferenciáveis de $\R$ em $\R$.     
Revisão de números complexos.                                                               
Identidades trigonométricas.
Soluções reais para o problema da vibração amortecida.                                      
EDOs exatas.
EDOs exatas.
EDOs lineares não homogêneas.
Introdução a variação de parâmetros.
Introdução a séries de Taylor e MacLaurin.
Revisão de sequências convergentes e divergentes.
Revisão de séries convergentes e divergentes. Teste da integral.
Teste da razão e da raiz. Raio de convergência.
Revisão e dúvidas.
P2.
Revisão e dúvidas.
Revisão e dúvidas.
VR.
Revisão e dúvidas.
Revisão e dúvidas.
VS.
]=]





-- «diasdeaula-2024.1»  (to ".diasdeaula-2024.1")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"
cal = Calendar.startingwith("mon")
feriados = Feriados {}
= feriados
feriados:add " 01/jan 29/mar 10/apr 21/apr 01/may 07/sep        :: FER Feriado    "
feriados:add " 12/oct 02/nov 15/nov 20/nov 25/dez 31/dez        :: FER Feriado    "
feriados:add " 12/feb 13/feb 14/feb 30/may 31/may 28/oct 24/dec :: FER Ponto facultativo "
= feriados

firstday = cal.days["mar 18"]
lastday  = cal.days["jul 17"]
diasdeaula = VTable(split("2a 3a 4a  ")):transp()  -- Calculo 2A
diasdeaula = VTable(split("2a    4a  ")):transp()  -- Calculo 3
= firstday
= lastday
= diasdeaula

aulas = Aulas.from(aulas_c2_bigstr)
aulas = Aulas.from(aulas_c3_bigstr)
= aulas

n = 1
aulas.n = 0
for i=firstday.yday,lastday.yday do
  local day = cal.days[i]
  local dds,dd,mes = day.dds,day.dd,day.mes
  if diasdeaula[dds] then
    local fer = feriados:blogme(day.yday)
    local aula = (not fer) and aulas:incr():blogme()
    printf("[BR] Aula %s (%s %s/%s)%s\n", n, dds, dd, mes, fer or aula or "")
    n = n + 1
  end
end

n = 1
aulas.n = 0
for i=firstday.yday,lastday.yday do
  local day = cal.days[i]
  local dds,dd,mes = day.dds,day.dd,day.mes
  if diasdeaula[dds] then
    local fer  = feriados:latex(day.yday)
    local aula = (not fer) and aulas:incr():latex()
    printf("%s & %s/%s &%s \\\\\n",      n,      dd, mes, fer or aula or "")
    n = n + 1
  end
end


--]==]



-- «diasdeaula»  (to ".diasdeaula")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar1.lua"
cal      = Calendar.startingwith("sun")
feriados = Feriados {}
feriados:add " 07/set 12/out 02/nov 15/nov 20/nov :: FER Feriado           "
feriados:add " 08/set 13/out 03/nov               :: FER Ponto facultativo "
feriados:add " 16/out 17/out 18/out 19/out 20/out :: FER Semana Acadêmica  "
feriados:add " 03/out              :: FER Vou repor esta aula em outro dia "
= feriados

firstday = cal.days["ago 28"]
lastday  = cal.days["dec 20"]
diasdeaula = VTable(split("2a 3a 4a      ")):transp()  -- Calculo 2A
diasdeaula = VTable(split("      4a    6a")):transp()  -- Calculo 3
= firstday
= lastday
= diasdeaula

aulas = Aulas.from(aulas_c2_bigstr)
aulas = Aulas.from(aulas_c3_bigstr)
= aulas

n = 1
aulas.n = 0
for i=firstday.yday,lastday.yday do
  local day = cal.days[i]
  local dds,dd,mes = day.dds,day.dd,day.mes
  if diasdeaula[dds] then
    local fer = feriados:blogme(day.yday)
    local aula = (not fer) and aulas:incr():blogme()
    printf("[BR] Aula %s (%s %s/%s)%s\n", n, dds, dd, mes, fer or aula or "")
    n = n + 1
  end
end

n = 1
aulas.n = 0
for i=firstday.yday,lastday.yday do
  local day = cal.days[i]
  local dds,dd,mes = day.dds,day.dd,day.mes
  if diasdeaula[dds] then
    local fer  = feriados:latex(day.yday)
    local aula = (not fer) and aulas:incr():latex()
    printf("%s & %s/%s &%s \\\\\n",      n,      dd, mes, fer or aula or "")
    n = n + 1
  end
end



feriados = VTable {}
feriados_add = function (dms, label)
    for yday,md,dds in cal:parse(dms) do
      print(yday,md,dds, label)
      feriados[yday] = label
    end
  end
feriados_add(" 07/set 12/out 02/nov 15/nov 20/nov ", " [FER Feriado]")
feriados_add(" 08/set 13/out 03/nov ",               " [FER Ponto facultativo]")
feriados_add(" 16/out 17/out 18/out 19/out 20/out ", " [FER Semana Acadêmica]")
feriados_add(" 03/out             ", " [FER Vou repor esta aula em outro dia]")
= feriados



--]==]




-- Local Variables:
-- coding:  utf-8-unix
-- End: