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

-- «.Calendar»	        (to "Calendar")
-- «.Calendar-tests»	(to "Calendar-tests")
-- «.Feriados»		(to "Feriados")
-- «.Feriados-tests»	(to "Feriados-tests")
-- «.Basic»		(to "Basic")
-- «.Basic-tests»	(to "Basic-tests")

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")
-- Based on: (find-angg "LUA/Calendar1.lua" "Calendar")

cal_mes_ndias_nonleap = 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_leap    = 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_ndias         = cal_mes_ndias_leap

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,
    testparse = function (cal, dstr)
        for yday,md,dds in cal:parse(datas) do
          print(yday, md, dds)
        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] = HTable {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)

--]]



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

basic_2023 = function ()
    cal_mes_ndias = cal_mes_ndias_leap
    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 "
  end

basic_2024 = function ()
    cal_mes_ndias = cal_mes_ndias_leap
    cal = Calendar.startingwith("mon")
    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 "
  end

basic_2024_1 = function ()
    basic_2024()
    firstday = cal.days["mar 18"]
    lastday  = cal.days["jul 17"]
  end

basic_2024_1_C2 = function ()
    basic_2024_1()
    diasdeaula = VTable(split("2a 3a 4a  ")):transp()
  end

basic_2024_1_C3 = function ()
    basic_2024_1()
    diasdeaula = VTable(split("2a    4a  ")):transp()
  end

basic_dias_de_aula = function () return cow(function ()
       local k,n = 0,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[i]
           k=k+1
           if fer
           then        coy(i, day, dds, dd, mes, k, nil, fer)
           else n=n+1; coy(i, day, dds, dd, mes, k, n,   nil)
           end
         end
       end
    end)
  end

-- «Basic-tests»  (to ".Basic-tests")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar2.lua"
basic_2024_1_C2()
basic_2024_1_C3()
= firstday
= lastday
= feriados
= feriados[101]
= feriados:blogme(101)
= feriados:latex (101)
= feriados:latex (102)   -- nil

for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
  print(day)
end
for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
  print(i,dds,dd,mes,k,n,fer)
end

= feriados

--]==]





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

Aulas = Class {
  type = "Aulas",
  from = function (bigstr)
      local aulas = Aulas(map(bitrim, splitlines(bigstr)))
      return aulas
    end,
  __tostring = function (as) return mytostringv(as) end,
  __index = {
    blogme = function (as, n)
        if as[n] then return format(" [GRAY %s]", bitrim(as[n])) end
      end,
    latex = function (as, n)
        if as[n] then return format(" %s", bitrim(as[n])) end
      end,
    blogme_all = function (as)
        local out = ""
        local add = function (...) out = out..format(...) end
        for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
          if fer
          then add("Aula %s (%s %s/%s) %s\n", k,dds,dd,mes, feriados:blogme(i) or "")
          else add("Aula %s (%s %s/%s) %s\n", k,dds,dd,mes, aulas:blogme(n) or n.."/"..k)
          end
        end
        return out
      end,
    latex_all = function (as)
        local out = ""
        local add = function (...) out = out..format(...) end
        for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
          if fer
          then add("%s & %s/%s (%s) & %s \\\\\n", k,dd,mes,dds, feriados:latex(i) or "")
          else add("%s & %s/%s (%s) & %s \\\\\n", k,dd,mes,dds, aulas:latex(n) or n.."/"..k)
          end
        end
        return out
      end,
  },
}

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

basic_2024_1_C3()
aulas = Aulas.from "Um \n Dois \n Tres \n Q \n C \n S \n S \n O"
= aulas
= aulas:blogme_all()
= aulas:latex_all()

--]==]




--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar2.lua"
basic_2024_1_C3()
aulas = Aulas.from(aulas_c3_bigstr)
= aulas
= aulas:blogme_all()
= aulas:latex_all()

for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
  if fer
  then printf("Aula %s (%s %s/%s) %s\n", k,dds,dd,mes, feriados:blogme(i) or "")
  else printf("Aula %s (%s %s/%s) %s\n", k,dds,dd,mes, aulas:blogme(n) or "")
  end
end

for i,day,dds,dd,mes,k,n,fer in basic_dias_de_aula() do
  if fer
  then printf("%s & %s/%s (%s) & %s \\\\\n", k,dd,mes,dds, feriados:latex(i) or "")
  else printf("%s & %s/%s (%s) & %s \\\\\n", k,dd,mes,dds, aulas:latex(n) or "")
  end
end

-- (c2m232plcp 2 "plano-de-curso")
-- (c2m232plca   "plano-de-curso")

--]==]

-- (c3m241plcp 2 "conteudo-programatico")
-- (c3m241plca   "conteudo-programatico")

aulas_c3_bigstr = [=[
Revisão de notações para conjuntos e técnicas básicas.
Revisão de notações para conjuntos e técnicas básicas.
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.
Variáveis dependentes e diferenciais.
Variáveis dependentes e diferenciais.
Fórmula de Taylor para funções vetoriais.
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.
Derivadas parciais.
Fórmula de Taylor para superfícies.
Plano tangente e reta normal.
Vetor gradiente.
Derivada direcional.
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.
Multiplicadores de Lagrange.
P2.
Revisão e dúvidas.
VR.
Revisão e dúvidas.
VS.
Vista de prova da VS.
]=]


aulas_c2_bigstr = [=[
Revisão de notações para conjuntos e técnicas básicas.
Revisão de notações para conjuntos e técnicas básicas.
Revisão de diferenciação.
Integral definida, integral como área, introdução aos TFCs, propriedades da integral.
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.
Frações parciais.
Exercícios de como estruturar contas e demonstrações.
Mudança de variável na integral definida.
Mudança de variável na integral indefinida.
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.
P1.
Funções não integráveis.
Volumes. Volume de sólidos de revolução.
Volumes. Volume de sólidos de revolução.
Integrais impróprias.                                              
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.
Vista de prova da VS.
]=]


--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar2.lua"
basic_2024_1_C2()
aulas = Aulas.from(aulas_c2_bigstr)
= aulas
= aulas:blogme_all()
= aulas:latex_all()

basic_2024_1_C3()
aulas = Aulas.from(aulas_c3_bigstr)
= aulas
= aulas:blogme_all()
= aulas:latex_all()

--]==]



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