%
% Code listing support, in particular, for the SageMath interactive
% prompt. You can create a box thingy for displaying code like,
%
%   \begin{tcblisting}{listing only,
%                      colback=codebg,
%                      coltext=codefg,
%                      listing options={language=sage,style=sage}}
%   sage: x
%   x
%   \end{tcblisting}
%
\ifx\havemjolisting\undefined
\def\havemjolisting{1}


\ifx\lstset\undefined
  \usepackage{listings}
\fi

\ifx\tcbuselibrary\undefined
  \usepackage{tcolorbox}
\fi

% Tell tcolorbox to use ``listings'' within the boxes.
\tcbuselibrary{listings}

% Define the colors that we'll use in our listings.
\definecolor{codefg}{rgb}{0.9, 0.9, 0.9}
\definecolor{codebg}{rgb}{0.16, 0.16, 0.16}
\definecolor{brilliantlavender}{rgb}{0.96, 0.73, 1.0}
\definecolor{brilliantgreen}{rgb}{0.7, 0.9, 0.7}
\definecolor{brown}{rgb}{0.75, 0.4, 0.4}

% General listing settings.
\lstset{%
  basicstyle=\ttfamily\small,
  columns=fullflexible,
  keepspaces=true,
  showstringspaces=false
}

% Define a style for interactive sage prompt listings.
\lstdefinelanguage{sage}{ keywords={sage} }
\lstdefinestyle{sage}{
  commentstyle=\color{brown},
  keywordstyle=\color{brilliantlavender},
  stringstyle=\color{brilliantgreen}
}


% Input a SageMath example code listing from a file. You generally
% want these to be in separate files so that the build system can test
% them automatically.
%
% The sole argument is the "name" of the listing, which ultimately
% just identifies a file named "sage_listings/<name>.listing".
\newcommand*{\sagelisting}[1]{\tcbinputlisting{listing only,%
               colback=codebg,%
               coltext=codefg,%
               enlarge bottom finally by=\baselineskip,%
               enlarge top initially by=\baselineskip,%
               left=2em,%
               listing options={language=sage,style=sage},%
               listing file=sage_listings/#1.listing}}


\fi
