summaryrefslogtreecommitdiff
path: root/latexHeaders/code.sty
blob: 987f43df16bc0843166ba77c3783cd039cd67c54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
\usepackage{ocgx2}
\usepackage{fontawesome}

% Colors, used for syntax highlighting.
% To print this document, set all colors to black!
\usepackage{xcolor}
\definecolor{safeRed}{HTML}{D7191C}
\definecolor{safeOrange}{HTML}{FFDE71}
\definecolor{safeYellow}{HTML}{FFFFBF}
\definecolor{safeGreen}{HTML}{99CF8F}
\definecolor{safeBlue}{HTML}{2B83BA}

%try printer friendly colors?
%\colorlet{keyword}{safeBlue}
%\colorlet{string}{safeRed}
%\colorlet{comment}{safeGreen}
%\colorlet{identifier}{black}
\definecolor{type}{HTML}{2750A0}
\definecolor{string}{HTML}{7B3294}
\definecolor{comment}{HTML}{1A9641}
\definecolor{identifier}{HTML}{000000}
\definecolor{keyword}{HTML}{900000}

% Source code listings.
\usepackage[scaled=0.80]{beramono}

\usepackage{listings}
\lstset{
	language={[11]C++},
	numbers=left,
	stepnumber=1,
	numbersep=6pt,
	numberstyle=\small,
	breaklines=true,
	breakautoindent=true,
	breakatwhitespace=false,
	numberblanklines=true,
	postbreak=\space,
	tabsize=2,
	upquote=true,
	basicstyle=\ttfamily\normalsize,
	showspaces=false,
	showstringspaces=false,
	extendedchars=true,
	keywordstyle=\color{keyword}\bfseries,
	stringstyle=\color{string}\bfseries,
	commentstyle=\color{comment}\bfseries\itshape,
	identifierstyle=\color{identifier},
	directivestyle=\color{keyword}\bfseries,
	emph={auto, int, long, long long, float, double, long double, char, bool, void, ll, ld, pt, lll, __int128, __float128, true, false, this, nullptr, INF, inf, EPS, eps},
	emphstyle=\color{type}\bfseries,
	frame=trbl,
	aboveskip=3pt,
	belowskip=3pt,
	deletestring=[b]{'},%fix digit separator but break char highlighting (fixed again with literate)
	escapechar=@
	%moredelim=**[is][{\btHL[fill=green!30,draw=red,dashed,thin]}]{@}{@}	
}

\newcommand{\formatChar}[1]{{\color{string}\bfseries\textquotesingle{}#1\textquotesingle{}}}

% Listings doesn't support UTF8. This is just enough for German umlauts. and commonly used chars
\lstset{literate=%
  {'a'}{{\formatChar{a}}}3
  {'z'}{{\formatChar{z}}}3
  {'A'}{{\formatChar{A}}}3
  {'Z'}{{\formatChar{Z}}}3
  {'0'}{{\formatChar{0}}}3
  {'1'}{{\formatChar{1}}}3
  {'\$'}{{\formatChar{\$}}}3
  {'\#'}{{\formatChar{\#}}}3
  {Ö}{{\"O}}1
  {Ä}{{\"A}}1
  {Ü}{{\"U}}1
  {ß}{{\ss}}1
  {ü}{{\"u}}1
  {ä}{{\"a}}1
  {ö}{{\"o}}1
  {~}{{\textasciitilde}}1
}

\makeatletter
\let\orig@lstnumber=\thelstnumber
\newcommand\lstresetnumber{\global\let\thelstnumber=\orig@lstnumber}
\let\orig@placelstnumber=\lst@PlaceNumber
\gdef\lst@PlaceNumber{\orig@placelstnumber\lstresetnumber}
\newcommand\lstsettmpnumber[1]{\gdef\thelstnumber{#1}}

\lst@AddToHook{OnEmptyLine}{%
	\ifnum\value{lstnumber}>99
		\lstsettmpnumber{\_\_\_}
	\else\ifnum\value{lstnumber}>9
		\lstsettmpnumber{\_\_}
	\else
		\lstsettmpnumber{\_}
	\fi\fi
%	\lstsettmpnumber{\_\_\kern-6pt}%
	\vspace{-1.75ex}%
	\addtocounter{lstnumber}{-1}%
}
% old: (change numberblanklines=false!)
%\lst@AddToHook{OnEmptyLine}{%
%	\vspace{\dimexpr\baselineskip+0.5em}%
%	\addtocounter{lstnumber}{-1}%
%}

\ifthenelse{\isundefined{\srclink}}{}{
	\lst@AddToHook{Init}{%
		\ifthenelse{\equal{\lst@name}{}}{}{%
			\begin{minipage}[t][0pt]{\linewidth}%
				\vspace{0pt}%
				\hfill%
				\begin{ocg}[printocg=never]{Source links}{srclinks}{1}%
					\hfill\href{\srclink{\lst@name}}{\faExternalLink}%
				\end{ocg}%
			\end{minipage}%
		}%
	}
}

\newenvironment{btHighlight}[1][]
{\begingroup\tikzset{bt@Highlight@par/.style={#1}}\begin{lrbox}{\@tempboxa}}
{\end{lrbox}\bt@HL@box[bt@Highlight@par]{\@tempboxa}\endgroup}

\newcommand\btHL[1][]{%
	\begin{btHighlight}[#1]\bgroup\aftergroup\bt@HL@endenv%
	}
	\def\bt@HL@endenv{%
	\end{btHighlight}%
	\egroup%
}
\newcommand{\bt@HL@box}[2][]{%
	\tikz[#1]{%
		\pgfpathrectangle{\pgfpoint{1pt}{0pt}}{\pgfpoint{\wd #2}{\ht #2}}%
		\pgfusepath{use as bounding box}%
		\node[anchor=base west, fill=orange!30,outer sep=0pt,inner xsep=2.2pt, inner ysep=0pt, rounded corners=3pt, minimum height=\ht\strutbox+1pt,#1]{\raisebox{1pt}{\strut}\strut\usebox{#2}};
	}%
}
\makeatother

\newcommand{\hl}[1]{\btHL[fill=safeOrange,draw=black,thin]{#1}}