\usepackage{listings}
\usepackage{etoolbox}
\setmonofont[Scale=.95]{Consolas}
\newfontfamily{\consolas}{Consolas}
\definecolor{codered}{rgb}{0.6,0,0} % for strings
\definecolor{codegreen}{rgb}{0.25,0.5,0.35} % comments
\definecolor{codepurple}{rgb}{0.5,0,0.35} % keywords
\definecolor{codedocblue}{rgb}{0.25,0.35,0.75} % doc
\definecolor{codeblue}{rgb}{0.25,0.35,0.75} % types
\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}}
\AfterEndEnvironment{lstlisting}{\end{minipage}\par}
\lstdefinelanguage{Scala}{
morekeywords={abstract,case,catch,class,def,%
do,else,extends,false,final,finally,%
for,if,implicit,import,match,mixin,%
new,null,object,override,package,%
private,protected,requires,return,sealed,%
super,this,throw,trait,true,try,%
type,val,var,while,with,yield},%
otherkeywords={=>,<-,<\%,<:,>:,\#,@},%
sensitive=true,%
%directives={Int,Char,Rexp,String,Boolean,BigInt,Unit,List,Set},%
%moredelim=*[directive]:,%
morecomment=[l]{//},%
morecomment=[n]{/*}{*/},
morestring=[b]",
morestring=[b]',
morestring=[b]"""
}[keywords,comments,strings]
\lstdefinelanguage{While}{
morekeywords={if,then,else,while,do,true,false,write,upto,for,skip},
otherkeywords={=,!=,:=,<,>,;},
sensitive=true,
morecomment=[n]{/*}{*/},
}
\lstdefinestyle{mystyle}
{basicstyle=\ttfamily,
keywordstyle=\color{codepurple}\bfseries,
%directivestyle=\color{codeblue}\bfseries,
stringstyle=\color{codegreen},
commentstyle=\color{codegreen},
morecomment=[s][\color{codedocblue}]{/**}{*/},
numbers=left,
numberstyle=\tiny\color{black},
stepnumber=1,
numbersep=10pt,
tabsize=2,
showspaces=false,
showstringspaces=false,
xleftmargin=8mm,
emphstyle=\color{codeblue}\bfseries,
keepspaces}
\lstset{language=Scala,
style=mystyle}
\newcommand{\code}[1]{{\lstinline{#1}}}
\newcommand{\pcode}[1]{{\lstset{language={},keywordstyle=\color{black}}\lstinline{#1}}}