Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/Calendar3.lua.html
--   http://anggtwu.net/LUA/Calendar3.lua
--          (find-angg "LUA/Calendar3.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/Calendar3.lua"))
--
-- «.Feriados»			(to "Feriados")
-- «.Feriados-2024.2»		(to "Feriados-2024.2")
-- «.Feriados-tests»		(to "Feriados-tests")
-- «.KTable»			(to "KTable")
-- «.NQuadros»			(to "NQuadros")
-- «.NQuadros-tests»		(to "NQuadros-tests")
-- «.NQuadros-emacsqs»		(to "NQuadros-emacsqs")
-- «.Dia»			(to "Dia")
-- «.Dia-tests»			(to "Dia-tests")
-- «.Materia0»			(to "Materia0")
-- «.Materia0-tests»		(to "Materia0-tests")
-- «.Materia0-quadros»		(to "Materia0-quadros")

-- (find-angg "LUA/lua50init.lua" "load_sqlite")
load_sqlite()


--  _____         _           _           
-- |  ___|__ _ __(_) __ _  __| | ___  ___ 
-- | |_ / _ \ '__| |/ _` |/ _` |/ _ \/ __|
-- |  _|  __/ |  | | (_| | (_| | (_) \__ \
-- |_|  \___|_|  |_|\__,_|\__,_|\___/|___/
--                                        
-- «Feriados»  (to ".Feriados")
--
Feriados = Class {
  type = "Feriados",
  from = function (bigstr)
      local T = VTable {}
      local pat = "^%s*(%S+)%s+(.*)"
      for _,li in ipairs(splitlines(bigstr)) do
        local when,rest = li:match(pat)
        if when:match":" then
          local date1,date2 = when:match("^([^:]+):(.*)")
          for _,date in ipairs(dates_between(date1,date2)) do
            table.insert(T, HTable {date,rest})
          end
        else
        table.insert(T, HTable {when,rest})
        end
      end
      local S = Set.new()
      for _,kv in ipairs(T) do S:add(kv[1], kv[2]) end
      return Feriados {T=T, S=S}
    end,
  __index = {
  },
}

-- «Feriados-2024.2»  (to ".Feriados-2024.2")
--
feriados_2024_2_bigstr = [=[
  2024-10-12             Nossa Senhora Aparecida
  2024-10-14:2024-10-18  Semana Acadêmica
  2024-10-28             Dia do Servidor Público
  2024-11-02             Finados
  2024-11-15             Proclamação da República
  2024-11-20             Dia da Consciência Negra
  2024-12-24             Véspera do Natal
  2024-12-25             Natal
  2024-12-31             Véspera do Ano Novo
  2024-12-23:2025-01-05  Recesso
]=]

feriados_2024_2 = Feriados.from(feriados_2024_2_bigstr)

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

= feriados_2024_2.T
= feriados_2024_2.S
= feriados_2024_2.S:ksc("\n")
for k,v in feriados_2024_2.S:gen() do
  print(k,v)
end

--]]

meses = VTable(split("jan fev mar abr mai jun jul ago set out nov dez"))

--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
= meses
= meses[5]

--]]



--  _  _______     _     _      
-- | |/ /_   _|_ _| |__ | | ___ 
-- | ' /  | |/ _` | '_ \| |/ _ \
-- | . \  | | (_| | |_) | |  __/
-- |_|\_\ |_|\__,_|_.__/|_|\___|
--                              
-- «KTable»  (to ".KTable")
-- (find-angg "LUA/lua50init.lua" "HTable-and-VTable")
--
KTable = Class {
  type    = "KTable",
  __tostring = mytostringv,
  __index = {
    ks = function (kt) return sortedkeys(kt) end,
    vs = function (kt)
        local A = VTable {}
        for _,k in ipairs(kt:ks()) do table.insert(A, kt[k]) end
        return A
      end,
    vsc = function (kt,sep)
        return table.concat(kt:vs(), sep or "\n")
      end,
  },
}


-- (find-sh "cd ~/2024.2-C2/ && ls *.jpg")
-- (find-angg "LUA/lua50init.lua" "Set")



--  _   _  ___                  _               
-- | \ | |/ _ \ _   _  __ _  __| |_ __ ___  ___ 
-- |  \| | | | | | | |/ _` |/ _` | '__/ _ \/ __|
-- | |\  | |_| | |_| | (_| | (_| | | | (_) \__ \
-- |_| \_|\__\_\\__,_|\__,_|\__,_|_|  \___/|___/
--                                              
-- «NQuadros»  (to ".NQuadros")
-- Número de (fotos de) quadros em cada dia.
--
NQuadros = Class {
  type  = "NQuadros",
  from0 = function (dir,sem) return NQuadros {dir=dir,sem=sem,ns=Set.new()} end,
  from  = function (dir,sem) return NQuadros.from0(dir,sem):registerfnames() end,
  __index = {
    splitdirname = function (nq) return nq.dir:match("^..(..)%.(.)%-C(.)") end,
    findpage = function (nq)
        local yy,s,m = nq:splitdirname()
        return format("find-c%sq%s%spage", m, yy, s)
      end,
    ls0 = function (nq) return format("cd ~/%s/ && ls *.jpg", nq.dir) end,
    ls  = function (nq) return getoutput(nq:ls0()) end,
    fnames = function (nq) return VTable(split(nq:ls())) end,
    pat = "^(....)(..)(..)%-..%-(.)",
    splitfname = function (nq,fname) return fname:match(nq.pat) end,
    register2 = function (nq,date,n) nq.ns:add(date,n) end,
    register4 = function (nq,yyyy,mm,dd,n)
        nq:register2(format("%s-%s-%s", yyyy,mm,dd), n+0)
      end,
    registerfnames = function (nq)
        for _,fname in ipairs(nq:fnames()) do
          local yyyy,mm,dd,n = nq:splitfname(fname)
          nq:register4(yyyy,mm,dd,n+0)
        end
        return nq
      end,
    gen2 = function (nq) return nq.ns:gen() end,
    gen3 = function (nq) return cow(function ()
            local now = 1
            for a,b in nq:gen2() do
              coy(a,b,now)
              now = now + b
            end
          end)
      end,
    findpages0 = function (nq)
        A = KTable {}
        for date,nqs,qinit in nq:gen3() do
          local mm,dd = date:match("....%-(..)%-(..)")
          local sexp = format('(%s %2s "%s/%s:")', nq:findpage(), qinit, dd, mm)
          A[date] = ";; "..sexp
        end
        return A
      end,
    findpages = function (nq) return nq:findpages0():vsc() end,
    --
    cqs0 = function (nq)
        local A = KTable {}
        for date,nqs,qinit in nq:gen3() do
          local yyyy,mm,dd = date:match("(....)%-(..)%-(..)")
          local yy,s,m = nq:splitdirname()
          local caepro = format("%s%sQ%s", m,nq.sem,qinit)
          local cq = format("[C %5s], [Qjpgs %s%s%s %s]",
                            caepro, yyyy,mm,dd, nqs)
          A[date] = cq
        end
        return A
      end,
    cqs = function (nq) return nq:cqs0():vsc() end,
    --
    emacsqs0 = function (nq)
        local A = KTable {}
        for date,nqs,qinit in nq:gen3() do
          local yyyy,mm,dd = date:match("(....)%-(..)%-(..)")
          local yy,s,m = nq:splitdirname()
          local ds = diasdasemana[db:weekday(date)]
          local emacsq = format(";; (find-c%sq%s%spage %2s \"%s %s/%s:\")",
                                m,yy,s, qinit, ds, dd,mm)
          A[date] = emacsq
        end
        return A
      end,
    emacsqs = function (nq) return nq:emacsqs0():vsc() end,
  },
}

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

nq = NQuadros {dir="2024.2-C2", sem="i", ns=Set.new()}
= nq:ls0()
= nq:ls()
= nq:fnames()
= nq:registerfnames()
for a,b   in nq:gen2() do print(a,b) end
for a,b,c in nq:gen3() do print(a,b,c) end

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
nq = NQuadros.from("2024.2-C2", "i")
= nq:findpages0()
= nq:findpages()
= nq:cqs0()
= nq:cqs()
= nq:emacsqs()

--]]

-- «NQuadros-emacsqs»  (to ".NQuadros-emacsqs")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
-- (find-angg ".emacs" "c2q242")
  nq = NQuadros.from("2024.2-C2", "i")
= nq:emacsqs()

-- (find-angg ".emacs" "c3q242")
  nq = NQuadros.from("2024.2-C3", "i")
= nq:emacsqs()

--]]





--  ____  _       
-- |  _ \(_) __ _ 
-- | | | | |/ _` |
-- | |_| | | (_| |
-- |____/|_|\__,_|
--                
-- «Dia»  (to ".Dia")
--
Dia = Class {
  type = "Dia",
  __tostring = function (dia) return mytostring(dia) end,
  __index = {
    yyyy = function (dia) return dia.date:sub(1,4) end,
    mm   = function (dia) return dia.date:sub(6,7) end,
    dd   = function (dia) return dia.date:sub(9,10) end,
    mes  = function (dia) return meses[dia:mm()+0] end,
    format = function (dia,fmt)
        local f = function (s)
            return Dia.__index[s] and dia[s](dia) or dia[s]
          end
        return (fmt:gsub("<(.-)>", f))
      end,
    --
    -- [C 2jQ42], [Qjpgs 20241023 4]
    cq0 = function (dia) return current_cqs0 and current_cqs0[dia.date] end,
    cq  = function (dia) return dia:cq0() and ", "..dia:cq0() or "" end,
    --
    plc_feriado = function (dia)
        return dia:format("<a> & <dd>/<mes> (<ds>) & \\it <feriado> \\\\")
      end,
    plc_normal = function (dia)
        return dia:format("<a> & <dd>/<mes> (<ds>) & <prog> \\\\")
      end,
    plc = function (dia)
        return dia.feriado and dia:plc_feriado() or dia:plc_normal()
      end,
    blogme_feriado = function (dia)
        return dia:format("[BR] Aula <a> (<ds> <dd>/<mes>) [FER <feriado>]")
      end,
    blogme_normal = function (dia)
        return dia:format("[BR] Aula <a> (<ds> <dd>/<mes>) [GRAY <prog>]")
      end,
    blogme_normal = function (dia)
        return dia:format("[BR] Aula <a> (<ds> <dd>/<mes>[#, [C 2jQ?], [Qjpgs <yyyy><mm><dd> 4]]) [GRAY <prog>]")
      end,
    blogme_normal = function (dia)
        return dia:format("[BR] Aula <a> (<ds> <dd>/<mes><cq>) [GRAY <prog>]")
      end,
    blogme = function (dia)
        return dia.feriado and dia:blogme_feriado() or dia:blogme_normal()
      end,
  },
}

-- «Dia-tests»  (to ".Dia-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
d = Dia {date="2024-12-25"}
d = Dia {a=26, date="2024-11-18", ds="2a", prog="Bla"}
d = Dia {a=27, date="2024-11-20", ds="4a", feriado="Dia da Consciencia Negra"}
= d
= d:yyyy()
= d:mm()
= d:dd()
= d:mes()
= d:format("_<date>_<mes>_")
= d:format("<a> & <dd>/<mes> (<ds>) & <feriado> \\\\")
= d:plc_feriado()
= d:plc_normal()
= d:plc()
= d:blogme()

nq = NQuadros.from("2024.2-C2", "i")
= nq:cqs0()
= nq:cqs()
current_cqs0 = nq:cqs0()

d = Dia {a=42, date="2024-09-30", ds="9a", prog="Bla"}
= d:blogme()
d = Dia {a=42, date="2024-09-32", ds="9a", prog="Bla"}
= d:blogme()

--]]



--  __  __       _            _        ___  
-- |  \/  | __ _| |_ ___ _ __(_) __ _ / _ \ 
-- | |\/| |/ _` | __/ _ \ '__| |/ _` | | | |
-- | |  | | (_| | ||  __/ |  | | (_| | |_| |
-- |_|  |_|\__,_|\__\___|_|  |_|\__,_|\___/ 
--                                          
-- «Materia0»  (to ".Materia0")
--
Materia0 = Class {
  type = "Materia0",
  from = function (inicio,fim,dss0,feriados)
      dss0 = dss0 or "2a 4a"
      ferset = feriados and feriados.S or Set.new()
      local dss = Set.from(split(dss0))
      local dias0 = VTable {}
      for _,date in ipairs(dates_between(inicio,fim)) do
        local ds = diasdasemana[db:weekday(date)]
        if dss:has(ds) then
          table.insert(dias0, Dia {date=date, ds=ds, feriado=ferset:get(date)})
        end
      end
      local dias1 = VTable {}
      for _,dia in ipairs(dias0) do
        if not ferset:has(dia.date) then table.insert(dias1,dia) end
      end
      for a,dia in ipairs(dias0) do dia.a = a end
      for n,dia in ipairs(dias1) do dia.n = n end
      return Materia0 {inicio=inicio, fim=fim, dss0=dss0, dias0=dias0, dias1=dias1}
    end,
  __index = {
    setprog = function (m,n,prog)
        m.dias1[n].prog = prog
        return m
      end,
    setprogs = function (m,bigstr)
        local progs = splitlines(bigstr)
        PP(#progs, #m.dias1)
        local K = min(#progs, #m.dias1)
        for k=1,K do
          local prog = progs[k]
          m:setprog(k,bitrim(prog))
        end
        return m
      end,
    blogmes0 = function (m)
        local A = VTable {}
        for _,dia in ipairs(m.dias0) do table.insert(A, dia:blogme()) end
        return A
      end,
    blogmes = function (m) return table.concat(m:blogmes0(), "\n") end,
  },
}

-- «Materia0-tests»  (to ".Materia0-tests")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
= feriados_2024_2.S
= feriados_2024_2.S:has("2024-12-31")
= feriados_2024_2.S:get("2024-12-31")
C2 = Materia0.from("2024-09-23", "2025-02-06", "2a 3a 4a", feriados_2024_2)
C3 = Materia0.from("2024-09-23", "2025-02-06", "2a 4a",    feriados_2024_2)

= C2
= C2.dias0
= C3.dias0
= C2.dias1
= C3.dias1

C3:setprogs(C3_progs)
C2:setprogs(C2_progs)
= C3.dias0
= C2.dias0

nq = NQuadros.from("2024.2-C2", "j")
  current_cqs0 = nq:cqs0()
= current_cqs0
= C2.dias0
= C2.dias0[2]
= C2.dias0[2]:blogme()
= C2:blogmes0()
= C2:blogmes()

nq = NQuadros.from("2024.2-C3", "j")
  current_cqs0 = nq:cqs0()
= C3:blogmes()

--]==]


-- «Materia0-quadros»  (to ".Materia0-quadros")
-- (find-TH "2024.2-C2" "agora")
-- (find-TH "2024.2-C3" "agora")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
C2 = Materia0.from("2024-09-23", "2025-02-06", "2a 3a 4a", feriados_2024_2)
C3 = Materia0.from("2024-09-23", "2025-02-06", "2a 4a",    feriados_2024_2)
C2:setprogs(C2_progs)
C3:setprogs(C3_progs)

nq = NQuadros.from("2024.2-C2", "j")
  current_cqs0 = nq:cqs0()
= C2:blogmes()

nq = NQuadros.from("2024.2-C3", "j")
  current_cqs0 = nq:cqs0()
= C3:blogmes()

--]]




C3_progs = [=[
  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
]=]

--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Calendar3.lua"
C2 = Materia0.from("2024-09-23", "2025-02-06", "2a 3a 4a", feriados_2024_2)
C3 = Materia0.from("2024-09-23", "2025-02-06", "2a 4a",    feriados_2024_2)
C3:setprogs(C3_progs)
C2:setprogs(C2_progs)
= C3.dias0
= C3.dias1

= C2.dias0
= C2.dias1

= C3.dias0

--]]




C2_progs = [=[
  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
]=]







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