\usepackage{hyperref} % options added via hypersetup below

%\RequirePackage[l2tabu, orthodox]{nag} % checks for deprecated/dodgy syntax

\usepackage{etex}  % increase number of dimension registers, since we now load enough packages to full the default number
\usepackage{soul}
\usepackage{graphicx}
\usepackage{paralist}
\usepackage{multicol}
\usepackage{tabularx}
\usepackage{hhline}
\usepackage{bbding}
\usepackage{xargs}
\usepackage{texpower} % options added via \PassOptionsToPackage in driver files
\usepackage{listings}
\usepackage{todonotes}
\usepackage{booktabs} % better rules for tables (use alone or with tabularx)
\usepackage[sharp]{easylist}  % simple nested lists
\usepackage{tikz}
\usepackage{changepage}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% fonts                                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{fontspec}
\usepackage{microtype}

\setmainfont[Ligatures=NoCommon, Scale=0.95]{Open Sans Light}
\setsansfont[Ligatures=NoCommon, Scale=MatchLowercase]{Roboto Condensed}
\setmonofont[Scale=MatchLowercase]{Inconsolata}

% make \emph do italics (just in case other environments change it)
\renewcommand{\emph}[1]{\textit{#1}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\definecolor{SectionColor}{rgb}{0.32,0.32,0.32}

%
% PDF tex graphics extensions {graphicx}
\DeclareGraphicsExtensions{.jpg,.jpeg,.pdf,.png,.mps}

% slidemargins {seminar,powersem}
\setlength{\slidewidth}{280mm}
\setlength{\slideheight}{190mm}

\renewcommand{\slidetopmargin}{15mm}
\renewcommand{\slidebottommargin}{25mm} % 'correct' the bottom margin
\renewcommand{\slideleftmargin}{20mm}
\renewcommand{\sliderightmargin}{20mm}

\slidepagestyle{empty}

% don't frame the slides
\slideframe[\setlength{}{}]{none}

%%% source code highlighting %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}          % syntax highlighting
\usepackage{lstautogobble}     % add-on for listings that auto-gobbles leading spaces in code

% first param is font size, second is baselineskip
\newcommand\codesize{\fontsize{8}{0.8em}\selectfont}
\newcommand{\codefont}{\ttfamily}
\newcommand\smallcodesize{\fontsize{7}{0.95em}\selectfont}

% define the colors for code highlighting (based on NetBeans colors)
\definecolor{KeywordColor}{rgb}{0.0,0,0.9}
\definecolor{CommentColor}{rgb}{0.45,0.45,0.45} % a bit darker than NetBeans
\definecolor{StringColor}{rgb}{0.81,0.48,0.0}

% create the fonts for code highlighting
\newcommand{\commentfont}{\sffamily\itshape}

% create a new environment for source code blocks
\lstnewenvironment{codeblock}[1][]
{
\lstset{
	language=Java,
	upquote=true,
	autogobble=true,
	basicstyle=\color{black}\codefont\codesize,
	keywordstyle=\color{KeywordColor}\codefont\codesize,
	commentstyle=\color{CommentColor}\commentfont\codesize,
	stringstyle=\color{StringColor}\codefont\codesize,
	aboveskip=0pt,
	belowskip=0pt,
	lineskip=-5pt,
	showstringspaces=false,
	tabsize=3,
	showtabs=false,
	columns=fullflexible,
	flexiblecolumns=true,
	xleftmargin=0pt,
	breaklines=true
}\lstset{#1}}
{}

% create a new environment for source code blocks
\lstnewenvironment{smallcodeblock}[1][]
{% set up source code highlighting environment {listings}
\lstset{
	language=Java,
	upquote=true,
	autogobble=true,
	basicstyle=\color{black}\codefont\smallcodesize,
	keywordstyle=\color{KeywordColor}\codefont\smallcodesize,
	commentstyle=\color{CommentColor}\commentfont\codesize,
	stringstyle=\color{StringColor}\codefont\smallcodesize,
	aboveskip=0pt,
	belowskip=0pt,
	lineskip=-9pt,
	showstringspaces=false,
	tabsize=2,
	showtabs=false,
	columns=fullflexible,
	flexiblecolumns=true,
	xleftmargin=0pt,
	breaklines=true
}\lstset{#1}}
{}

\lstdefinelanguage{JavaScript}{
  keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, this},
  sensitive=false,
  comment=[l]{//},
  morecomment=[s]{/*}{*/},
  morestring=[b]',
  morestring=[b]"
}

% command for typesetting inline code
\renewcommand{\code}[2][language=java]{%
\lstset{%
	language=Java,
	upquote=true,
	basicstyle=\color{emcolor}\codefont\bfseries\normalsize,
	keywordstyle=\color{emcolor}\codefont\bfseries\normalsize,
	stringstyle=\color{emcolor}\codefont\bfseries\normalsize,
	showstringspaces=false,
	showtabs=false
}%
\mbox{\lstinline[#1]!#2!}}


\usepackage[skins]{tcolorbox}

% inline highlighting of code
\newcommand{\hilightchar}[1]{\colorbox{yellow!75}{\makebox[0pt]{\strut{#1}}}}
\newcommand{\hilight}[1]{\setlength{\fboxsep}{1pt}\colorbox{yellow!75}{#1}}

% uses the same spacing as \hilight, but does no highlighting.  Use on the
% original code when using incremental highlighting.
\newcommand{\nohilight}[1]{\setlength{\fboxsep}{1pt}\fboxrule0pt\fbox{#1}}

\newcommand{\error}[1]{\colorbox{red!75}{#1}}

\tcbset{enhanced,boxsep=0pt,top=6pt,bottom=6pt,left=8pt,right=0pt,drop fuzzy shadow}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% command for figures - first param is scale, second is file
\newcommand{\fig}[2] {
  \begin{figure}[H]
		 \centering{\includegraphics[scale=#1,draft=false]{#2}}
  \end{figure}
  \vspace{-0.75\baselineskip}
}

% command for figures rotated 90 degrees left - first param is scale.
\newcommand{\rotatedfig}[2] {
  \begin{figure}[H]
	  \centering{\includegraphics[scale=#1,draft=false, angle=90]{#2}}
  \end{figure}
}

% command for figures - first param is scale, second is file
\newcommand{\capfig}[3] {
  \begin{figure}[H]%
	  \centering{\includegraphics[scale=#1,draft=false]{#2}%
		\\ %
		{\footnotesize #3} %
		}
  \end{figure} %
  \vspace{-0.75\baselineskip}
}

% command for figures that fit the page width
\newcommand{\fittedfig}[1] {
  \begin{figure}[H]
    \begin{center}
      \resizebox{\textwidth}{!}{\includegraphics[draft=false]{#1}}
		\vspace{-25pt}
    \end{center}
  \end{figure}
}

% suppress section numbers
\setcounter{secnumdepth}{-2}

% scale factors used by seminar/powersem package to make over/under full slides fit a bit better
\renewcommand{\slideshrink}{1.0}
\renewcommand{\slideskip}{0.25}
\renewcommand{\slidestretch}{1.05}

% increase paragraph spacing a little bit so slides don't look so crowded
\renewcommand{\slideparskip}{1.5ex}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% sections                                                                  %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage[sf,bf]{titlesec}

\titlespacing{\section}{0pt}{0pt}{0pt}
\titlespacing{\subsection}{0pt}{0pt}{0pt}
\titlespacing{\subsubsection}{0pt}{0pt}{0pt}
\titlespacing{\paragraph}{0pt}{0pt}{-0.5\parskip}

\newcommand\mysectionstyle{\huge\sffamily}
\newcommand\mysubsectionstyle{\LARGE\sffamily}
\newcommand\mysubsubsectionstyle{\Large\sffamily}
\newcommand\mysubsubsubsectionstyle{\sffamily\bfseries}

\titleformat{\section}{\mysectionstyle\filcenter}{\theparagraph}{1em}{}
\titleformat{\subsection}{\mysubsubsubsectionstyle}{\theparagraph}{1em}{}
\titleformat{\subsubsection}{\mysubsubsectionstyle}{\theparagraph}{1em}{}
\titleformat{\paragraph}{\mysubsubsubsectionstyle}{\theparagraph}{1em}{}

% repurpose \paragraph as \subsubsubsection (which it sort of is already)
\newcommand{\subsubsubsection}[1]{\paragraph{#1}}

%%%%
% shrinkable sections - shrink to \textwidth if too long
%%%%

%section
\let\oldsection\section
\newsavebox{\secbox}
\newlength{\secboxlength}
\renewcommand{\section}[1]{%
\sbox{\secbox}{\mbox{\mysectionstyle#1}}\settowidth{\secboxlength}{\usebox{\secbox}}%
\oldsection{\ifdim\secboxlength>\textwidth\protect\resizebox{\textwidth}{!}{\usebox{\secbox}}\else{\usebox{\secbox}}\fi}}

%subsection
\let\oldsubsection\subsection
\newsavebox{\subsecbox}
\newlength{\subsecboxlength}
\renewcommand{\subsection}[1]{%
\sbox{\subsecbox}{\mbox{\mysubsectionstyle#1}}\settowidth{\subsecboxlength}{\usebox{\subsecbox}}%
\oldsubsection{\ifdim\subsecboxlength>\textwidth\protect\resizebox{\textwidth}{!}{\usebox{\subsecbox}}\else{\usebox{\subsecbox}}\fi}}

%subsubsection
\let\oldsubsubsection\subsubsection
\newsavebox{\subsubsecbox}
\newlength{\subsubsecboxlength}
\renewcommand{\subsubsection}[1]{%
\sbox{\subsubsecbox}{\mbox{\mysubsubsectionstyle#1}}\settowidth{\subsubsecboxlength}{\usebox{\subsubsecbox}}%
\oldsubsubsection{\ifdim\subsubsecboxlength>\textwidth\protect\resizebox{\textwidth}{!}{\usebox{\subsubsecbox}}\else{\usebox{\subsubsecbox}}\fi}}

%subsubsubsection
\let\oldsubsubsubsection\subsubsubsection
\newsavebox{\subsubsubsecbox}
\newlength{\subsubsubsecboxlength}
\renewcommand{\subsubsubsection}[1]{%
\sbox{\subsubsubsecbox}{\mbox{\mysubsubsubsectionstyle#1}}\settowidth{\subsubsubsecboxlength}{\usebox{\subsubsubsecbox}}%
\oldsubsubsubsection{\ifdim\subsubsubsecboxlength>\textwidth\protect\resizebox{\textwidth}{!}{\usebox{\subsubsubsecbox}}\else{\usebox{\subsubsubsecbox}}\fi}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% miscellaneous stuff                                                       %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% suppress built in slide centering (which buggers up incremental uncovering,
% and makes things jump around a lot)
\centerslidesfalse

% options for hyperef
\hypersetup{
  final={true},
  colorlinks={true},
  urlcolor={blue},
  filecolor={blue},
  linkcolor={blue},
  bookmarks={true},
  bookmarksopen={true},
  pdfpagemode={None}
} % title/subject/author attributes are set in lecturedetails.tex

% command for continuing slides - moves the content down a bit
\newcommand{\continued}{\strong{continued...}}

\newcommand{\ra}[0]{$\rightarrow$~}




\newcommand{\point}[2]{\textbf{#1}\\#2}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% lists                                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% fix the extra spacing that itemize/enumerate has when you put have an blank
% line prior to the environment (paralist).
\setlength{\pltopsep}{0.2\baselineskip}
\setlength{\plpartopsep}{-0.2\baselineskip}
\setlength{\plitemsep}{0.2\baselineskip}
\setlength{\plparsep}{0.2\baselineskip}

% rationalise the bullet points
\def\labelitemi{\footnotesize\raisebox{0.175em}{$\bullet$}\normalsize}
\def\labelitemii{\footnotesize\raisebox{0.175em}{$\circ$}\normalsize}
\def\labelitemiii{\footnotesize\raisebox{0.175em}{$\diamond$}\normalsize}
\def\labelitemiv{\footnotesize\raisebox{0.175em}{$\triangleright$}\normalsize}
\def\labelitemv{\footnotesize\raisebox{0.175em}{$\star$}\normalsize}

% easylist configuration
\ListProperties(%
	Hang=true, % hanging indent
	Space=0pt, % additional space between different nest levels
	Space*=0pt, % additional space between same levels
	Hide=1000, % hide all numbering
	Margin=1em, Align=move,
	Margin1=1em, Style1*=\labelitemi\hskip.5em, Space1*=0.2em, %  level 1
	Margin2=2em, Style2*=\labelitemii\hskip .5em, Space2*=0.1em, %  level 2
	Margin3=3em, Style3*=\labelitemiii\hskip .5em, %  level 3
	Margin4=4em, Style4*=\labelitemiv\hskip .5em, %  level 4
	Margin5=5em, Style5*=\labelitemv\hskip .5em % level 5
)

% my attempt at creating a configurable easylist environment for controlling
% spacing

\newenvironment{nest}[1][0pt]%
{%
\ListProperties(%
	Space=#1, % additional space between different nest levels
	Space*=#1, % additional space between same levels
)

\begin{easylist}%
}%
{%
\end{easylist}
% reset easylist spacing
\ListProperties(%
	Space=0pt, % additional space between different nest levels
	Space*=0pt, % additional space between same levels
)
}%

