%% $Id: scaladoc.sty 12156 2007-06-28 12:33:22Z michelou $

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{scaladoc}[2003/08/27 v0.1 Scala style customization]
\RequirePackage{fourier}
\RequirePackage[scaled=0.8]{luximono}
\RequirePackage{helvet}
\RequirePackage{color}
\RequirePackage{colortbl}

% produce an acceptable typing area
\RequirePackage{a4}
\setlength{\textheight}{22.5cm}

% support for generating PDF files
\newif\ifpdf
    \ifx\pdfoutput\undefined
    \pdffalse
\else
    \pdftrue
    \pdfoutput=1
\fi

% produce nice captions
\RequirePackage[hang,small,bf]{caption2}

% include titlesec
\RequirePackage[clearempty]{titlesec}
\newcommand{\mytitlerule}{\titlerule[.5pt]}
\newcommand{\mychaptername}{Chapter}
\newcommand{\setupBookStyle}{%
        \titleformat{name=\part}%
                [block]%
                {\thispagestyle{empty}\centering\scshape\huge}%
                {\Roman{part}}%
                {1ex}%
                {}%
                [\vspace*{0.5\textheight}]%
        \titleformat{name=\chapter}%
                [display]%
                {\sffamily\bfseries\huge}%
                {\textnormal{\sffamily\LARGE\mychaptername{} \thechapter}}%
                {0pt}%
                {\vspace*{2.5mm}}%
                [\vspace*{8mm}]%
        \titleformat{name=\chapter,numberless}%
                [display]%
                {\vspace*{-30mm}\sffamily\bfseries\huge}%
                {}%
                {0pt}%
                {}%
                [\vspace*{2mm}]%
}
\@ifundefined{part}{}{\setupBookStyle}
\titleformat{name=\section}
   {\sffamily\bfseries\large}
   {\thesection}
   {1em}
   {}
\titlespacing{\section}{0pt}{*4}{*2}
\titleformat{name=\subsection}
   {\sffamily\bfseries\normalsize}
   {\thesubsection}
   {0.666em}
   {}
\titlespacing{\subsection}{0pt}{*2}{*1}
\titleformat{name=\subsubsection}
   {\sffamily\bfseries\normalsize}
   {\thesubsubsection}
   {0.55em}
   {}
\titleformat{name=\paragraph}
   [runin]
   {\rmfamily\normalsize\bfseries}
   {}
   {opt}
   {}
   [.\ ]
\titleformat{name=\subparagraph}
   [runin]
   {\itshape}
   {}
   {0pt}
   {}
   [.\ ]
\addtocounter{secnumdepth}{1}

% produce nice footers
\RequirePackage[bottom,multiple,stable]{footmisc} % flushmargin,norule removed

% produce nice headings
\RequirePackage{fancyhdr}
\pagestyle{fancy}
\fancypagestyle{plain}{\fancyhf{}%
   \renewcommand{\headrulewidth}{0pt}%
   \renewcommand{\footrulewidth}{0pt}}

%%% required on Fedora Core 2 (why?!)
%%% (hint found at http://www.opennet.ru/docs/FAQ/soft/tex-faq.html)
\makeatletter
%%%
\@ifundefined{chaptermark}{}{\renewcommand{\chaptermark}[1]{\markboth{#1}{}}}
%%%
\makeatother
%%%
\renewcommand{\sectionmark}[1]{\markright{\thesection\ \ #1}}
\fancyhf{}
\fancyhead[LE,RO]{\sffamily\footnotesize\thepage}
\fancyhead[RE]{\sffamily\footnotesize\leftmark}
\fancyhead[LO]{\sffamily\footnotesize\rightmark}
\renewcommand{\headrulewidth}{0.5pt}

% tweak list environments to customize the spacing between items
\RequirePackage{tweaklist}
\renewcommand{\enumhooki}{\addtolength{\itemsep}{-0.32\baselineskip}}
\renewcommand{\enumhookii}{\addtolength{\itemsep}{-0.13\baselineskip}}
\renewcommand{\enumhookiii}{\addtolength{\itemsep}{-0.1\baselineskip}}
\renewcommand{\enumhookiv}{\addtolength{\itemsep}{-0.08\baselineskip}}
\renewcommand{\itemhooki}{\addtolength{\itemsep}{-0.32\baselineskip}}
\renewcommand{\itemhookii}{\addtolength{\itemsep}{-0.13\baselineskip}}
\renewcommand{\itemhookiii}{\addtolength{\itemsep}{-0.1\baselineskip}}
\renewcommand{\itemhookiv}{\addtolength{\itemsep}{-0.08\baselineskip}}

%% set latex/pdflatex specific stuff
\ifpdf
    \RequirePackage[pdftex,
                hyperindex,
                plainpages=false,
                breaklinks,
                colorlinks,
                citecolor=black,
                filecolor=black,
                linkcolor=black,
                pagecolor=black,
                urlcolor=blue]{hyperref}
    \RequirePackage[pdftex]{graphicx}
    \DeclareGraphicsExtensions{.jpg,.pdf}
    \pdfcatalog {
        /PageMode (/UseNone)
    }
    \RequirePackage{thumbpdf}
\else
    \RequirePackage[ps2pdf]{hyperref}
    \RequirePackage{graphicx}
    \DeclareGraphicsExtensions{.eps,.jpg}
\fi

\RequirePackage{listings}

% scala language description
\lstdefinelanguage{Scala}{
    morekeywords={%
        abstract,case,catch,class,def,do,else,extends,%
        false,final,finally,for,forSome,if,implicit,import,lazy,%
        match,new,null,object,override,package,private,protected,%
        return,sealed,super,this,throw,trait,true,try,type,%
        val,var,while,with,yield},%
    sensitive,%
    morecomment=[l]//,%
    morecomment=[s]{/*}{*/},%
}[keywords,comments]%

% activate the language and predefine settings
\lstset{
    language=Scala,%
    xleftmargin=4mm,%
    aboveskip=3mm,%
    belowskip=3mm,%
    fontadjust=true,%
    columns=[c]fixed,%
    keepspaces=true,%
    basewidth={0.58em, 0.53em},%
    tabsize=2,%
    basicstyle=\renewcommand{\baselinestretch}{0.95}\ttfamily,%
    commentstyle=\itshape,%
    keywordstyle=\bfseries,%
    mathescape=true,%
    escapechar=¤,%
    captionpos=b,%
    framerule=0.3pt,%
    firstnumber=0,%
    numbersep=1.5mm,%
    numberstyle=\tiny,%
}

\lstdefinestyle{floating}{%
    xleftmargin=10pt,%
    xrightmargin=5pt,%
    aboveskip=4mm,%
    belowskip=4mm,%
    fontadjust=true,%
    columns=[c]flexible,%
    keepspaces=true,%
    basewidth={0.5em, 0.425em},%
    tabsize=2,%
    basicstyle=\renewcommand{\baselinestretch}{0.95}\ttfamily,%
    commentstyle=\rm,%
    keywordstyle=\bfseries,%
    mathescape=true,%
    captionpos=b,%
    framerule=0.3pt,%
    firstnumber=0,%
    numbersep=1.5mm,%
    numberstyle=\tiny,%
    float=tbp,%
    frame=tblr,%
    framesep=5pt,%
    framexleftmargin=3pt,%
    abovecaptionskip=\smallskipamount,%
    belowcaptionskip=\smallskipamount,%
} % to define: caption, label

\newcommand{\code}[1]{%
    \lstinline[%keywordstyle=,%
               flexiblecolumns=true,%
               basicstyle=\ttfamily]£#1£}




\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}

\newcommand{\docauthor}{Author}
\newcommand{\doctitle}{Title}
\newcommand{\docsubtitle}{DRAFT}
\newcommand{\docdate}{\today}
\newcommand{\makedoctitle}{%
  \begin{titlepage}%
  \begin{center}%
  \begin{tabular}{p{0.6\textwidth}>{\columncolor[gray]{.82}[\tabcolsep]}p{0.327\textwidth}}%
  \rowcolor[gray]{.82}\ & \  \\%
  \  & \  \\[35mm]%
  \hspace*{4mm}{\sffamily\LARGE\bfseries\parbox{0.55\textwidth}{\doctitle}} & \  \\[42mm]%
  \  & {\sffamily\normalsize \docsubtitle} \\[.5ex]%
  \  & {\sffamily\normalsize \docdate} \\[16mm]%
  \  & {\sffamily\normalsize\bfseries\parbox{0.31\textwidth}{\docauthor}} \\%
  \rowcolor[gray]{.82} \  & \  \\%
  \multicolumn{2}{>{\columncolor[gray]{.82}[\tabcolsep]}r}{%
    \small\sc Programming Methods Laboratory}\\[-.2ex]%
  \multicolumn{2}{>{\columncolor[gray]{.82}[\tabcolsep]}r}{%
    \small\sc EPFL}\\[-.2ex]%
  \multicolumn{2}{>{\columncolor[gray]{.82}[\tabcolsep]}r}{%
    \small\sc Switzerland}\\[-.6ex]%
  \rowcolor[gray]{.82} \  & \  %
  \end{tabular}%
  \end{center}%
  \end{titlepage}}

\endinput
