%% -*-TeX-*-
 % ###################################################################
 % 
 %  FILE: "suprapint.cls"
 %                                    created: 2000-06-21 10:39:42 
 %                                last update: 2012-09-12 16:00:10 
 %  Author: Fr\'ed\'eric Boulanger
 %  E-mail: Frederic.Boulanger@supelec.fr
 %    mail: Sup\'elec - Service Informatique
 %          Plateau de Moulon, 3 rue Joliot-Curie, F-91192 Gif-sur-Yvette cedex
 %     www: http://wwwsi.supelec.fr/fb/
 %  
 % Copyright (c) 2000 Fr\'ed\'eric Boulanger
 % 
 % All rights reserved.
 % 
 %  Description: 
 %    Classe de documents LaTeX pour les rapports interne de Sup\'elec.
 %    
 %    S'utilise comme report sauf que \title accepte un titre compos\'e 
 %    de plus d'un paragraphe et que \maketitle construit une page de 
 %    couverture.
 %
 %    L'option "english" permet de rédiger un rapport en anglais
 %    Les options "francais" et "french", ou l'absence d'option, permet
 %    de produire un rapport en français
 %    
 %    \rapportnum donne le num\'ero du rapport (obligatoire). Ce num\'ero 
 %    doit \^etre de la forme AAAA-MM-JJ-SS-PN, o\`u AAAA est l'ann\'ee, MM 
 %    le mois, JJ le jour, SS le sigle du service et PN les initiales 
 %    de l'auteur (ex. 2000-06-21-SI-FB).
 %    
 %    \copyrightowner permet de pr\'eciser le propri\'etaire et l'ann\'ee du 
 %    copyright. Par d\'efaut, on a "Copyright Sup\'elec, AAAA".
 %    
 %    Avec \copyrightowner{ --- Service Informatique, 1997--2000}, on 
 %    obtient "Copyright Sup\'elec --- Service Informatique, 1997--2000"
 %    
 %    \auteur{<nom>}[<institution>]{<role>} ajoute un auteur à la table 
 %    des auteurs en indiquant son rôle, et si l'argument optionnel est 
 %    fourni, l'institution dont il dépend.
 %
 %    \version{<date>}{<version>}{<description>}{<auteur>} ajoute une
 %    version à la table des versions. <date> est la date de production
 %    de cette version, <version> identifie la version, <description> 
 %    indique ce à quoi correspond cette version, et <auteur> donne l'auteur
 %    principal de cette version.
 %  
 %  History
 % 
 %  modified   by  rev reason
 %  ---------- --- --- -----------
 %  2000-06-21 FBO 1.0 original
 %  2007-11-26 FBO 1.1 switch to geometry, forget about mltex
 %  2012-09-12 FBO 1.2 support for francais and english options
 %  2012-10-08 FBO 1.3 support multiple authors and versions
 % ###################################################################
 %%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{suprapint}[2012/10/08 v1.3 Internal reports at Supelec]
% intl
%%%%
\newcommand{\switchto@language}[1]{%
  \switch@name{#1}{resume}%
  \switch@name{#1}{rapport}%
  \switch@name{#1}{allrights}%
  \switch@name{#1}{history}%
  \switch@name{#1}{author}%
  \switch@name{#1}{authors}%
}
\newcommand{\switch@name}[2]{%
  \expandafter\ifx\csname #2@name@#1\endcsname\relax
  \else
    \expandafter\gdef\csname #2@name\endcsname{\csname #2@name@#1\endcsname}%
  \fi
}
%%%%
\newcommand{\resume@name@francais}{R\'esum\'e}
\newcommand{\rapport@name@francais}{Rapport interne}
\newcommand{\allrights@name@francais}{Tous droits r\'eserv\'es}
\newcommand{\history@name@francais}{Historique}
\newcommand{\author@name@francais}{Auteur}
\newcommand{\authors@name@francais}{Auteurs}
%
\newcommand{\resume@name@english}{Abstract}
\newcommand{\rapport@name@english}{Internal report}
\newcommand{\allrights@name@english}{All rights reserved}
\newcommand{\history@name@english}{History}
\newcommand{\author@name@english}{Author}
\newcommand{\authors@name@english}{Authors}
%
\DeclareOption{french}{%
  \switchto@language{francais}%
  \PassOptionsToClass{\CurrentOption}{report}%
}
\DeclareOption{francais}{%
  \switchto@language{francais}%
  \PassOptionsToClass{\CurrentOption}{report}%
}
\DeclareOption{english}{%
  \switchto@language{english}%
  \PassOptionsToClass{\CurrentOption}{report}%
}
%
\DeclareOption{*}{\PassOptionsToClass{\CurrentOption}{report}}
%% French by default
\ExecuteOptions{francais}
%%
\ProcessOptions\relax
\LoadClass[a4paper,twoside,openright]{report}
\RequirePackage[T1]{fontenc}

\ifx\pdfoutput\undefined
\else
  \ifnum\pdfoutput=0
  \else
    \RequirePackage[bookmarks,pdfpagemode=UseNone]{hyperref}
  \fi
\fi

\RequirePackage{geometry}
\geometry{%
  left=3cm, right=2.5cm,
  top=2cm, bottom=2cm
}
\RequirePackage{graphicx}
\RequirePackage{calc}

% tabularx permet de faire des tableaux à colonnes élastiques
\RequirePackage{tabularx}
% colortbl permet de colorer les cases/colonnes/lignes d'un tableau
\IfFileExists{colortbl.sty}{
  \RequirePackage{colortbl}
}{
  \newcommand{\doublerulesepcolor}{\@gobble@color}
  \newcommand{\rowcolor}{\@gobble@color}
  \newcommand{\cellcolor}{\@gobble@color}
  \ClassWarning{systematic}{%
    Le package colortbl est absent de cette installation.
    \MessageBreak Le rendu des tables d'historique et d'auteurs 
    \MessageBreak ne sera pas optimal.
  }
}
%%%%%%%%%%%%%%
% Version de hhline qui fonctionne même si ':' est actif
%%%%%%%%%%%%%%
\def\HH@box#1#2{\vbox{%
  \hrule \@height \arrayrulewidth \@width #1
  \vskip \doublerulesep
  \hrule \@height \arrayrulewidth \@width #2}}
\def\HH@add#1{\toks@\expandafter{\the\toks@#1}}

\def\HH@xexpast#1*#2#3#4\@@{%
   \@tempcnta #2
   \toks@={#1}\@temptokena={#3}%
   \let\the@toksz\relax \let\the@toks\relax
   \def\@tempa{\the@toksz}%
   \ifnum\@tempcnta >0 \@whilenum\@tempcnta >0\do
     {\edef\@tempa{\@tempa\the@toks}\advance \@tempcnta \m@ne}%
       \let \@tempb \HH@xexpast \else
       \let \@tempb \HH@xexnoop \fi
   \def\the@toksz{\the\toks@}\def\the@toks{\the\@temptokena}%
   \edef\@tempa{\@tempa}%
   \expandafter \@tempb \@tempa #4\@@}

\def\HH@xexnoop#1\@@{}
\def\hhline#1{\omit\@firstamptrue\@tempswafalse
\global\setbox\@ne\HH@box\doublerulesep\doublerulesep
  \xdef\@tempc{\ifx\extrarowheight\HH@undef\hskip-.5\arrayrulewidth\fi}%
    \HH@xexpast\relax#1*0x\@@\toks@{}\expandafter\HH@let\@tempa`}

\def\HH@let#1{\futurelet\@tempb\HH@loop}

\def\HH@loop{%
  \if\@tempb`\def\next##1{\the\toks@\cr}\else\let\next\HH@let
  \if\@tempb|\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
          \HH@add{\@tempc\vline\@tempc}\else
  \if\@tempb:\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
      \HH@add{\@tempc\HH@box\arrayrulewidth\arrayrulewidth\@tempc}\else
  \if\@tempb##\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
         \HH@add{\@tempc\vline\@tempc\copy\@ne\@tempc\vline\@tempc}\else
  \if\@tempb~\@tempswafalse
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \HH@add{\hfil}\else
  \if\@tempb-\@tempswafalse
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \HH@add{\leaders\hrule\@height\arrayrulewidth\hfil}\else
  \if\@tempb=\@tempswafalse
       \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
       \HH@add
          {\rlap{\copy\@ne}\leaders\copy\@ne\hfil\llap{\copy\@ne}}\else
  \if\@tempb t\HH@add{\rlap{\HH@box\doublerulesep\z@}}\else
  \if\@tempb b\HH@add{\rlap{\HH@box\z@\doublerulesep}}\else
  \PackageWarning{hhline}%
      {\meaning\@tempb\space ignored in \noexpand\hhline argument%
       \MessageBreak}%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi
  \next}
%%%%%%%%%%%%%%
%%%% Bilal %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\thepart{\Roman{part}}
\def\thesection {\arabic{section}}
\def\thesubsection {\thesection.\arabic{subsection}}
\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
\def\theparagraph {\thesubsubsection.\arabic{paragraph}}


\setcounter{secnumdepth}{3}          % num\'eroter jusqu'aux subsubsections

% On redefinit \title pour qu'il puisse recevoir plusieurs paragraphes
% en argument.
\renewcommand{\title}[1]{\long\def\@title{#1}}

% \rapportnum donne le numero du rapport qui doit \^etre sous la forme
% AAAA-MM-JJ-XX-PN ou AAAA est l'annee, MM le mois, JJ le jour, XX le
% code du service, et PN les initiales de l'auteur.
\newcommand*{\rapportnum}[1]{\renewcommand{\@rapportnum}{#1}}
\newcommand{\@rapportnum}{%
  \ClassError{suprapint}{Pas de num\'ero de rapport}{%
Utilisez \string\rapportnum\space pour d\'efinir le num\'ero du rapport
  }%
}

% \copyrightowner donne le nom a placer apres Supelec dans le copyright.
% on en profite pour y mettre aussi la date.
\newcommand*{\copyrightowner}[1]{\renewcommand{\@copyrightowner}{#1}}
\newcommand{\@copyrightowner}{%
, \expandafter\@getyearfromrapnum\@rapportnum\relax
}

\def\@getyearfromrapnum#1-#2-#3-#4-#5\relax{#1}

\newcommand{\resume}[1]{\renewcommand{\@resume}{#1}}
\newcommand{\@resume}{%
  \centering\Large\bfseries
  Alerte rouge !!!\par
  Rapport interne sans r\'esum\'e !!!
}

% Hauteur et profondeur du strut utilisé pour élargir les lignes 
% des tableaux
\newlength{\@strut@raise}
\newlength{\@strut@height}
\newcommand{\@strut}[1][0pt]{%
  \setlength{\@strut@raise}{0.9ex}%
  \addtolength{\@strut@raise}{#1}%
  \setlength{\@strut@height}{2.9ex}%
  \addtolength{\@strut@height}{#1}%
  \addtolength{\@strut@height}{#1}%
  \rule[-\@strut@raise]{0pt}{\@strut@height}%
}

%% Ajout de l'historique et de la liste d'auteurs
% \version{<date>}{<version>}{<détails>}{<auteur>} indique une 
% nouvelle version du document. La version du document est la version 
% de la dernière commande \version utilisée.
\newcommand{\version}[4]{%
  \stepcounter{histnum}%
  \expandafter\def\csname @hist@date@\roman{histnum}\endcsname{#1}%
  \expandafter\def\csname @hist@vers@\roman{histnum}\endcsname{#2}%
  \expandafter\def\csname @hist@detl@\roman{histnum}\endcsname{#3}%
  \expandafter\def\csname @hist@auth@\roman{histnum}\endcsname{#4}%
  \def\@version{#2}%
}
% Compteur d'entrées de l'historique
\newcounter{histnum}
% strut un peu plus haut pour la table d'historique
\newcommand{\@bstrut}{\@strut[0.5ex]}%

% Valeur par defaut de la version
\newcommand{\@version}{<version ?>}

% Compteur de ligne dans la table d'historique
\newcounter{histidx}
% Traitement d'une version : création d'une ligne dans la table.
\newcommand{\@process@hist}{%
  \ifnum\thehistidx<\thehistnum
    \stepcounter{histidx}%
    \@bstrut\csname @hist@date@\roman{histidx}\endcsname &
    \@bstrut\csname @hist@vers@\roman{histidx}\endcsname &
    \@bstrut\csname @hist@detl@\roman{histidx}\endcsname &
    \@bstrut\csname @hist@auth@\roman{histidx}\endcsname \\
    \ifnum\thehistidx<\thehistnum
      \hhline{|:=::=::=::=:|}
      \@process@hist
    \fi
  \fi
}

% Affiche l'historique du document
\newcommand{\@historique}{%
  \ifnum\thehistnum=0\else
  \section*{\history@name}
  \noindent
  \doublerulesepcolor{white}%
%%   \hspace*{-\@marge@interne}%
%%  \begin{tabularx}{\linewidth+\@marge@interne}{%
  \begin{tabularx}{\linewidth}{%
    ||>{\centering}p{0.12\linewidth}||>{\centering}p{0.08\linewidth}
    ||X||p{0.3\linewidth}||}
    \hhline{|t:=:t:=:t:=:t:=:t|}
    \rowcolor[gray]{0.8}%
      \textbf{\@bstrut Date}%
    & \textbf{Version}%
    & \hfill\textbf{Description}\hfill\null%
    & \hfill\textbf{\author@name}\hfill\null\\
    \hhline{|:=::=::=::=:|}
    \ifnum\thehistnum=0
      \@bstrut & \@bstrut & \@bstrut & \@bstrut \\
    \else
      \@process@hist
    \fi
    \hhline{|b:=:b:=:b:=:b:=:b|}
  \end{tabularx}
  \pagebreak[3]
  \fi
}

% \auteur{<nom>}[<organisation>]{<role>} indique que <nom> est un 
% auteur du document en tant que <role> (rédacteur principal, 
% contributeur etc.)
\newcommand{\auteur}[1]{%
  \@ifnextchar[{\@auteur{#1}}{\@auteur{#1}[]}%
}
\def\@auteur#1[#2]#3{%
  \stepcounter{auteursnum}%
  \expandafter\def\csname @auteur@name@\roman{auteursnum}\endcsname{#1}%
  \expandafter\def\csname @auteur@org@\roman{auteursnum}\endcsname{#2}%
  \expandafter\def\csname @auteur@role@\roman{auteursnum}\endcsname{#3}%
}
%%%%%%%%
% Compteur d'entrées de la table des auteurs
\newcounter{auteursnum}

% Compteur de ligne dans la table des auteurs
\newcounter{auteuridx}
% Traitement d'un auteur : création d'une ligne dans la table.
\newcommand{\@process@auteurs}{%
  \ifnum\theauteuridx<\theauteursnum
    \stepcounter{auteuridx}%
    \@bstrut\csname @auteur@name@\roman{auteuridx}\endcsname &
    \@bstrut\csname @auteur@org@\roman{auteuridx}\endcsname &
    \@bstrut\csname @auteur@role@\roman{auteuridx}\endcsname \\
    \ifnum\theauteuridx<\theauteursnum
      \hhline{|:=::=::=:|}
      \@process@auteurs
    \fi
  \fi
}

% Affiche les auteurs du document
\newcommand{\@auteurs}{%
  \ifnum\theauteursnum=0\else
  \section*{\authors@name}
  \noindent
  \doublerulesepcolor{white}%
%%  \hspace*{-\@marge@interne}%
%%  \begin{tabularx}{\linewidth+\@marge@interne}{||X||X||X||}
  \begin{tabularx}{\linewidth}{||X||X||X||}
    \hhline{|t:=:t:=:t:=:t|}
    \multicolumn{1}{||c||}{\cellcolor[gray]{0.8}\textbf{\@bstrut \author@name}}%
    & \multicolumn{1}{c||}{\cellcolor[gray]{0.8}\textbf{Institution}}%
    & \cellcolor[gray]{0.8}\\
    \hhline{|:=::=::=:|}
    \ifnum\theauteursnum=0
      \@bstrut & \@bstrut & \@bstrut \\
    \else
      \@process@auteurs
    \fi
    \hhline{|b:=:b:=:b:=:b|}
  \end{tabularx}
  \cleardoublepage
  \fi
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\renewcommand{\maketitle}{
  \ifx\hypersetup\undefined
  \else
    \hypersetup{%
      pdfauthor={\@author},
      pdftitle={\rapport@name\ Sup\'elec \@rapportnum}%
    }
  \fi
  \begin{titlepage}
    \noindent\parbox[c]{3in}{\includegraphics[width=1in]{logo_supelec_dark}}
    \hspace{\fill}
    \mbox {\large\sffamily\bfseries\rapport@name\ \@rapportnum}
    \vspace*{0pt plus 2fill}
    \begin{center}
    \fbox{\parbox[t]{0.9\textwidth}{%
      \centering
      \vspace{0.5cm}
      {\Large\@title}\par
      \vspace{2cm}
      {\large\@author}\par
      \vspace{0.5cm}
    }}\par
    \vspace{0.5cm plus 0.5fill}
    {\large\sffamily\bfseries\resume@name}\par
    \fbox{\parbox[t]{0.9\textwidth}{%
      \centering
      \vspace{0.1cm}
      \parbox[t]{0.9\textwidth-2mm}{\@resume}
      \vspace{0.1cm}
    }}
    \end{center}
    \vspace*{0pt plus 2fill}
    \parbox[b]{\textwidth}{\textsf{%
      Copyright Sup\'elec\@copyrightowner\\
      \allrights@name
    }}
    \vspace*{\fill}
  \end{titlepage}
  \thispagestyle{empty}                % sauter une page non num\'erot\'ee 
  \mbox{}\newpage                      % apr\`es le titre en recto-verso
  \pagestyle{headings}
  \pagenumbering{roman}
  \@historique
  \@auteurs
  \tableofcontents
  \newpage
  \pagenumbering{arabic}
}
\endinput
%%
