% proflycee-tools-pythontex.tex
% Copyright 2023-2024  Cédric Pierquet
% Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt

%2.7.5	Argument optionnel pour commencer la numérotation à une autre ligne que 1
%2.7.3	Correction de la couleur des bordures
%2.5.8	Style alternatif + Modification marges + Modification arguments

%%------CONSOLEPYTHON
\defKV[envpythonconsole]{%
	Largeur=\def\CSPYlargeur{#1},%
	Centre=\testboolKV{#1}
		{\def\hookcenterpre{\begin{center}}\def\hookcenterpost{\end{center}}}
		{\def\hookcenterpre{\begin{flushleft}}\def\hookcenterpost{\end{flushleft}}},%
	TaillePolice=\def\CSPYfonte{#1},%
	EspacementVertical=\def\CSPYstretch{#1}
}

\setKVdefault[envpythonconsole]{%
	Largeur=\linewidth,%
	Centre=false,%
	Label=true,%
	TaillePolice=\footnotesize,%
	EspacementVertical=1
}

\newlength{\PythontexCodeXLeft}
\setlength{\PythontexCodeXLeft}{14pt}

\newenvironment{ConsolePythontex}[2][]
{%
	\useKVdefault[envpythonconsole]%
	\setKV[envpythonconsole]{#1}% on paramètres les nouvelles clés et on les simplifie
	\VerbatimEnvironment
	\hookcenterpre
	\begin{minipage}{\CSPYlargeur}
		\ifboolKV[envpythonconsole]{Label}%si label
			{\begin{pyconsole}[][%
				framesep=3mm,frame=single,fontsize=\CSPYfonte,framerule=1pt,rulecolor=\color{CouleurVertForet},label={[\scriptsize Début de la console python]\scriptsize Fin de la console python},baselinestretch=\CSPYstretch]}%
			{\begin{pyconsole}[][%
				framesep=3mm,frame=single,fontsize=\CSPYfonte,framerule=1pt,rulecolor=\color{CouleurVertForet},baselinestretch=\CSPYstretch]}
}%
{%
		\end{pyconsole}
	\end{minipage}
	\hookcenterpost
}

%=========CODEPYTHONTEX=========== OK!!
\defKV[envpythonverb]{%
	Largeur=\def\CODPYlargeur{#1},%
	PremLigne=\def\CODPYpremligne{#1},%
	TaillePolice=\def\CODPYfonte{#1},%
	EspacementVertical=\def\CODPYstretch{#1}
%	Centre=\testboolKV{#1}
%		{\def\verbcenterpre{\begin{center}}\def\verbcenterpost{\end{center}}}
%		{\def\verbcenterpre{}\def\verbcenterpost{}}
}

\setKVdefault[envpythonverb]{%
	Largeur=\linewidth,%
	PremLigne=1,%
%	Centre=false,%
	Lignes=true,%
	TaillePolice=\footnotesize,%
	EspacementVertical=1
}

%v1

\tcbset{stylepythontex/.style={%
	enhanced,boxrule=1.25pt,%
	sharp corners=downhill,arc=12pt,
	before skip=0.5\baselineskip,after skip=0.5\baselineskip,%
	top=\baselineskip,bottom=1mm,right=5mm,left=0.6em,
	attach boxed title to top right={yshift=-\tcboxedtitleheight},
	boxed title style={
		size=small,colback=CouleurVertForet!25,boxrule=1.25pt,
		colframe=CouleurVertForet,boxsep=1.25pt,
		sharp corners=downhill,
		arc=12pt,
		top=2pt,bottom=1pt,left=6pt,right=6pt
		},
	fonttitle=\color{CouleurVertForet}\itshape\ttfamily\footnotesize,
	title={\scriptsize\faPython}\:Code Python\vphantom{p},
	watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50,
	colframe=CouleurVertForet,colback=CouleurVertForet!5,%
	before upper=\renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{darkgray}\arabic{FancyVerbLine}}
	}
}

\tcbset{stylepythonnolineos/.style={%
	stylepythontex,leftupper=1em
	}
}

\tcbset{stylepythonlineos/.style={%
	stylepythontex,leftupper=2em
	}
}

\newtcolorbox{tcpythontexcode}[2][\linewidth]{%
	width=#1,stylepythonlineos,#2
}

\newtcolorbox{tcpythontexcodeno}[2][\linewidth]{%
	width=#1,stylepythonnolineos,#2
}

\NewDocumentEnvironment{CodePythontex}{ O{} m }
{%
	\useKVdefault[envpythonverb]%
	\setKV[envpythonverb]{#1}% on paramètres les nouvelles clés et on les simplifie
	\VerbatimEnvironment
%	\verbcenterpre
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\begin{tcpythontexcode}[\CODPYlargeur]{#2}}
		{\begin{tcpythontexcodeno}[\CODPYlargeur]{#2}}
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\begin{pyverbatim}[][fontsize=\CODPYfonte,numbers=left,firstnumber=\CODPYpremligne,numbersep=0.75em,commandchars=\\\{\},mathescape,baselinestretch=\CODPYstretch]}
		{\begin{pyverbatim}[][numbers=none,numbersep=0pt,fontsize=\CODPYfonte,commandchars=\\\{\},mathescape,baselinestretch=\CODPYstretch]}
}%
{%
	\end{pyverbatim}
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\end{tcpythontexcode}}
		{\end{tcpythontexcodeno}}
%	\verbcenterpost
}

%v2
\tcbset{stylepythontexalt/.style={%
	enhanced,boxrule=0.75pt,colframe=darkgray!50!black,%
	sharp corners,top=0mm,bottom=0mm,left=0.2em,right=5mm,%
	before skip=0.5\baselineskip,after skip=0.5\baselineskip,%
	colback=white,
	fontupper=\footnotesize,fontlower=\footnotesize,%
	title={{\scriptsize\faCode} Code Python},
	lefttitle=0.4em,
	watermark text={\faPython},watermark opacity=0.25,watermark zoom=0.50,
	fonttitle=\bfseries\footnotesize\sffamily,colbacktitle=darkgray!50!black,
	before upper=\renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{darkgray}\arabic{FancyVerbLine}}
	}
}

\tcbset{stylepythonnolineosalt/.style={%
	stylepythontexalt,leftupper=0.2em,
	}
}

\tcbset{stylepythonlineosalt/.style={%
	stylepythontexalt,leftupper=1.35em,
	underlay={%
		\begin{tcbclipinterior}
			\draw[draw=none,fill=lightgray!25] (interior.south west) rectangle ([xshift=1.3em]interior.north west) ;
		\end{tcbclipinterior}%
		}
	}
}

\newtcolorbox{tcpythontexcodealt}[2][\linewidth]{%
	width=#1,stylepythonlineosalt,#2
}

\newtcolorbox{tcpythontexcodenoalt}[2][\linewidth]{%
	width=#1,stylepythonnolineosalt,#2
}
\NewDocumentEnvironment{CodePythontexAlt}{ O{} m }
{%
	\useKVdefault[envpythonverb]%
	\setKV[envpythonverb]{#1}% on paramètres les nouvelles clés et on les simplifie
	\VerbatimEnvironment
%	\verbcenterpre
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\begin{tcpythontexcodealt}[\CODPYlargeur]{#2}}
		{\begin{tcpythontexcodenoalt}[\CODPYlargeur]{#2}}
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\begin{pyverbatim}[][fontsize=\CODPYfonte,numbers=left,firstnumber=\CODPYpremligne,numbersep=0.75em,commandchars=\\\{\},mathescape,baselinestretch=\CODPYstretch]}
		{\begin{pyverbatim}[][numbers=none,numbersep=0pt,fontsize=\CODPYfonte,commandchars=\\\{\},mathescape,baselinestretch=\CODPYstretch]}
}%
{%
	\end{pyverbatim}
	\ifboolKV[envpythonverb]{Lignes}%si lignes=true
		{\end{tcpythontexcodealt}}
		{\end{tcpythontexcodenoalt}}
%	\verbcenterpost
}

\endinput