\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\definecolor{darkgray}{rgb}{.4,.4,.4}
\definecolor{purple}{rgb}{0.65, 0.12, 0.82}

% === Customize a bit the look ===
\lstset{ %
	backgroundcolor=\color{white}, 		% choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
	basicstyle=\footnotesize, 			% the size of the fonts that are used for the code
	breakatwhitespace=false, 			% sets if automatic breaks should only happen at whitespace
	breaklines=true, 					% sets automatic line breaking
	captionpos=b, 						% sets the caption-position to bottom
	commentstyle=\color{mygreen},		% comment style
	deletekeywords={...}, 				% if you want to delete keywords from the given language
	escapeinside={\%*}{*)}, 			% if you want to add LaTeX within your code
	extendedchars=true, 				% lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
	frame=single, 						% adds a frame around the code
	keepspaces=true, 					% keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
	keywordstyle=\color{blue}, 			% keyword style
	% language=Octave, 					% the language of the code
	morekeywords={*,...}, 				% if you want to add more keywords to the set
	numbers=left, 						% where to put the line-numbers; possible values are (none, left, right)
	numbersep=5pt, 						% how far the line-numbers are from the code
	numberstyle=\tiny\color{mygray}, 	% the style that is used for the line-numbers
	rulecolor=\color{black}, 			% if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
	showspaces=false, 					% show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
	showstringspaces=false, 			% underline spaces within strings only
	showtabs=false, 					% show tabs within strings adding particular underscores
	stepnumber=1, 						% the step between two line-numbers. If it's 1, each line will be numbered
	stringstyle=\color{mymauve}, 		% string literal style
	tabsize=2, 							% sets default tabsize to 2 spaces
	title=\lstname,						% show the filename of files included with \lstinputlisting; also try caption instead of title
	aboveskip=1em,
	belowskip=1em
}
% END of listing package

% === define Javascript language ===
\lstdefinelanguage{JavaScript}{
	keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
	keywordstyle=\color{blue}\bfseries,
	ndkeywords={class, export, boolean, throw, implements, import, this},
	ndkeywordstyle=\color{darkgray}\bfseries,
	identifierstyle=\color{black},
	sensitive=false,
	comment=[l]{//},
	morecomment=[s]{/*}{*/},
	commentstyle=\color{purple}\ttfamily,
	stringstyle=\color{red}\ttfamily,
	morestring=[b]',
	morestring=[b]"
}

\lstset{
	language=JavaScript,
	extendedchars=true,
	basicstyle=\footnotesize\ttfamily,
	showstringspaces=false,
	showspaces=false,
	numbers=left,
	numberstyle=\footnotesize,
	numbersep=9pt,
	tabsize=2,
	breaklines=true,
	showtabs=false,
	captionpos=b
}

% === define diff ===

\lstdefinelanguage{diff}{
	sensitive=true,
	% diff command line
	morecomment=[f][\color{gray}][0]{diff},
	% commit identifiers for git diff
	morecomment=[f][\color{gray}][0]{index},
	% hunk location/line numbers for unified format
	morecomment=[f][\color{blue}][0]{@@},
	% hunk location/line numbers for context format
	morecomment=[f][\color{magenta}][0]{***},
	% changed line for context format
	morecomment=[f][\color{violet}][0]{!},
	% deleted lines for unified format
	morecomment=[f][\color{red!60!black}][0]-,
	% added lines for unified format
	morecomment=[f][\color{green!60!black}][0]+,
	% file name and time stamp old file
	morecomment=[f][\color{magenta}][0]{---},
	% file name and time stamp new file
	morecomment=[f][\color{magenta}][0]{+++},
	% Binary files ... differ
	morecomment=[f][\color{gray}][0]{Binary},
	% Only in ...: file.txt
	morecomment=[f][\color{gray}][0]{Only},
	% old mode ...
	morecomment=[f][\color{gray}][0]{old},
	% new mode ...
	morecomment=[f][\color{gray}][0]{new},
	% rename from/to ...
	morecomment=[f][\color{gray}][0]{rename},
	% similarity index ...%
	morecomment=[f][\color{gray}][0]{similarity},
	% deleted file mode ...%
	morecomment=[f][\color{gray}][0]{deleted},
	% hunk separator for context format
	morecomment=[f][\color{magenta}][0]{***************},
	% deleted lines for normal format
	morecomment=[f][\color{red!60!black}][0]<,
	% added lines for normal format
	morecomment=[f][\color{green!60!black}][0]>,
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{0},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{1},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{2},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{3},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{4},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{5},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{6},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{7},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{8},
	% line number specifier for normal format
	morecomment=[f][\color{blue}][0]{9},
}[comments]

\lstdefinelanguage{diff2}{
	morecomment=[f][\color{blue}]{@@},     % group identifier
	morecomment=[f][\color{red}]-,         % deleted lines 
	morecomment=[f][\color{green}]+,       % added lines
	morecomment=[f][\color{magenta}]{---}, % Diff header lines (must appear after +,-)
	morecomment=[f][\color{magenta}]{+++},
}
