% Estilo para Listas de Presenca
% Tipos de Listas de Presenca:
%      Tipo 1 (BCC):           Matricula Nome Login Assinaturas
%      Tipo 2 (Espec):                   Nome Login Assinaturas
%      Tipo 3 (UFPR):    Curso Matricula Nome       Assinaturas
%
% Autores: Armando Luiz Nicolini Delgado (UFPR)
%
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{listaPresenca}
              [2005/07/13 v2.0 Formato para Listas de Presenca da UFPR]
%
% Leitura de lista de presenca em formato ASCII
% Resultado coloca em arquivo Lista.tex que deve ser incluida no
% arquivo tex do usuario, dentro do bloco \begin{document}
%
\def\@readLista{}
\def\readListaBCC{}
\def\readListaESPEC{}
\def\readListaUFPR{}
%
% Style Options 
%
\DeclareOption{bcc}{\readListaBCC}
\DeclareOption{espec}{\readListaESPEC}
\DeclareOption{ufpr}{\readListaUFPR}
%
% Default options
%
\ExecuteOptions{bcc}
\ProcessOptions
%
%
% Formatacao e manipulacao de datas
%
%% \usepackage[ddmmyy]{datetime}
%% \usepackage[portuges]{isodate}
%% \usepackage[portuges]{datenumber}
\RequirePackage{datenumber}

% Manipulacao de strings
\RequirePackage{substr,lista,notacao}

% Manipulacao de tabelas longas
\RequirePackage{longtable,hhline}

%
% Estruturas e macros para Feriados, Eventos e Final de Aulas
%
\def\fimaulas#1{\def\@dataFinalAulas{#1}}
\def\@dataFinalAulas{30/11}

\def\feriados#1{\def\@feriados@datas{#1}}
\def\@feriados@datas{}

\def\evento#1#2{\@eventos{#1}{#2}}
\def\@eventos#1#2{
      \rightappenditem#1\to\@eventos@data
      \rightappenditem#2\to\@eventos@title
}
\def\@eventos@data{}
\def\@eventos@title{}

%
% Carrega lista de feriados = Datas separadas por espaco
% Cada data deve estar indicada como DD/MM
% Exemplo: \feriados{01/01 21/04 02/11 15/11}
% Carrega tambem lista de eventos (provas, exames, trabalho, etc.)
% Cada data deve estar indicada como DD/MM (dois digitos para dia E mes),
% seguida do titulo do evento. 
%
% Cada evento deve ser indicado por uma macro \evento
% Exemplo: \evento{12/04}{Prova 1}
%
% O final das aulas deve ser indicado pela macro \fimaulas
% Exemplo: \fimaulas{04/12}
%
\input{eventos.tex}

% Transforma um digito em dois
\def\twodigits#1{\ifnum#1<10 0\fi#1}

% Operador MODULO (package datetime.sty)
\newcount\@modctr
\newcount\@modres

\def\modulo#1#2{%
  \@modres=#1\relax
  \@modctr=\@modres\relax
  \divide \@modctr by #2\relax
  \multiply \@modctr by #2\relax
  \advance \@modres by -\@modctr
  \the\@modres
}

\newcounter{weekdayINI}
\newcounter{weekdayFIM}
\newcounter{FimAulas}
\newif\ifDiaDeAula

%
% Sequencia  de datas na lista de presenca
%
\newcommand{\putdata}[2]{
    % Arg 1 = dia da semana da 1a. aula
    % Arg 2 = dia da semana da 2a. aula
    % dia da semana = 1-7 (Segunda-Domingo)
  \ifnum #1 > 0
       \setcounter{FimAulas}{0}
       \setcounter{weekdayINI}{#1}
       \setcounter{weekdayFIM}{#2}
       \setstartyear{2000} \prevdate
  \fi
  \nextdate
  \loop
    \IfSubStringInString{\twodigits{\thedateday}/\twodigits{\thedatemonth}}{\@feriados@datas}%
                        {\DiaDeAulatrue}%
                        {\ifnum\value{datedayname}=\value{weekdayINI}\DiaDeAulafalse%
                          \else\ifnum\value{datedayname}=\value{weekdayFIM}\DiaDeAulafalse%
                          \else\DiaDeAulatrue\fi\fi}%
    \IfSubStringInString{\twodigits{\thedateday}/\twodigits{\thedatemonth}}{\@dataFinalAulas}%
                        {\setcounter{FimAulas}{1}}%
                        {\ifnum\value{FimAulas}>0 \setcounter{FimAulas}{2} \fi \relax}%
    \ifnum\value{FimAulas}>1 \DiaDeAulafalse \fi%
    \ifDiaDeAula{\nextdate}%
  \repeat%
  % Data: \twodigits{\thedateday}/\twodigits{\thedatemonth}/\twodigits{\modulo{\thedateyear}{100}}\\
  % Data: \twodigits{\thedateday}/\twodigits{\thedatemonth}/\thedateyear\\
  \parbox[c][3em]{25mm}{ \centering
    \ifnum\value{FimAulas}=0%
       Data: \twodigits{\thedateday}/\twodigits{\thedatemonth}\\%
    \fi
    \def\@evts@data{}
    \def\@evts@title{}
    \concatenate\@evts@data=\@eventos@data&\@evts@data
    \concatenate\@evts@title=\@eventos@title&\@evts@title
    \newif\if@still@has@eventos \@still@has@eventostrue

    \ifx\@evts@data\empty
      \relax
    \else
      \loop
          \lop\@evts@data\to\@data
          \lop\@evts@title\to\@title
          \ifx\@evts@data\empty
              \@still@has@eventosfalse
          \else
              \@still@has@eventostrue
          \fi
          \IfSubStringInString{\twodigits{\thedateday}/\twodigits{\thedatemonth}}{\@data}%
                              {\typeout{***** \twodigits{\thedateday}/\twodigits{\thedatemonth}}%
                              \ifnum\value{FimAulas}>1%
                                   Data: \twodigits{\thedateday}/\twodigits{\thedatemonth}\\%
                                \fi%
                                \textit{\@title} \@still@has@eventosfalse }
                              {~\typeout{===== \twodigits{\thedateday}/\twodigits{\thedatemonth}}}%
      \if@still@has@eventos \repeat
    \fi
  }
}

%
% Linhas para Assinatura
%
\newcommand{\sign}{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}
\newcommand{\hsign}{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}
\newcommand{\lsign}{\_\_\_\_\_\_\_\_\_\_\_\_\_\_}
\newcommand{\tsign}{\_\_\_\_\_\_\_\_\_\_\_}
\newcommand{\ssign}{\_\_\_\_\_\_\_\_}


%
% Tabela
%
\def\tipolista{}   % tipo: inicio, normal ou exame
\def\primaula{}    % dia da semana da 1a. aula
\def\segaula{}     % dia da semana da 2a. aula
                   % dia da semana = 1-7 (Segunda-Domingo)
\def\deflispres#1#2#3{
  \ifx#1\empty
    \def\tipolista{normal}
  \else
    \def\tipolista{#1}
  \fi
  \ifx#2\empty
    \def\primaula{2}
  \else
    \def\primaula{#2}
  \fi
  \ifx#3\empty
    \def\segaula{5}
  \else
    \def\segaula{#3}
  \fi
}

\newenvironment{lispres}
  {  \setlongtables
    %% PARA LISTA NORMAL (com alunos)
    \IfSubStringInString{\tipolista}{normal}{%
      \begin{longtable}{r|l|l|c|c|c|c|c|c|c|}%
        \hhline{~---------}%
        & \multicolumn{1}{|c|}{MATRÍCULA} & \multicolumn{1}{|c|}{NOME} & \parbox[c]{15mm}{\centering FALTAS\\{\small \textit{(dias-aula)}}} & \putdata{\primaula}{\segaula}  & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{}  \\%
%%        & MATRÍCULA & \multicolumn{1}{|c|}{NOME} & FALTAS & \putdata{\primaula}{\segaula}  & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{}  \\%
        \hhline{~=========}%
        & & & & & & & & & \\%
        \endhead%
        \hhline{~---------}%
        \endfoot%
      }%
      {
        %% PARA LISTA DE INICIO DE AULAS (sem nomes, apenas para assinar)
        \IfSubStringInString{\tipolista}{inicio}{%
          \begin{longtable}{r|l|c|c|c|c|c|c|}%
            \hhline{~-------}%
            & \multicolumn{1}{|c|}{NOME} & \putdata{\primaula}{\segaula}  & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{} & \putdata{-1}{}  \\%
            \hhline{~=======}%
            & & & & & & & \\%
            \endhead%
            \hhline{~-------}%
            \endfoot%
          }%
          {
            %% PARA EXAME FINAL
            \IfSubStringInString{\tipolista}{exame}{%
              \begin{longtable}{r|l|l|c|}%
                \hhline{~---}%
                & \multicolumn{1}{|c|}{MATRÍCULA} & \multicolumn{1}{|c|}{NOME} & \putdata{\primaula}{\segaula} \\%
                \hhline{~===}%
                & & & \\%
                \endhead%
                \hhline{~---}%
                \endfoot%
              }%
              {}%
           }%
       }%
   }
   {\end{longtable}}

\def\itemlista#1#2#3{
  \ifx#1.
     \gdef\RA{\lsign}%
     \gdef\NOME{\hsign}%
  \else
     \gdef\RA{#1}%
     \gdef\NOME{#2}%
  \fi
  %% PARA LISTA DEFINITIVA
  \IfSubStringInString{\tipolista}{normal}{%
       \nlinenum & \RA & \NOME & #3 & \lsign & \lsign & \lsign &
       \lsign & \lsign & \lsign \\[3mm]
  }%
  {
    %% PARA LISTA DE INICIO DE AULAS
    \IfSubStringInString{\tipolista}{inicio}{%
      \nlinenum & \NOME & \lsign & \lsign & \lsign & \lsign & \lsign &
      \lsign \\[3mm]%
    }%
    {
      %% PARA LISTA COM UM DIA SOMENTE (EXAME ou INICIO COM NOMES)
      \IfSubStringInString{\tipolista}{exame}{%
        \nlinenum & \RA & \NOME & \lsign \\[3mm]%
      }%
      {}}}%
}

