%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{circledsteps}[2023/08/11 v1.3.3 Circled steps that you can reference]
\def\cstepsversion{v1.3.3}
%    \end{macrocode}
%
% Copyright (c) 2019-2023 Romano Giannetti
% Heavily helped by @marmot and other on
% https://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers
% License: LPPL 1.3c
%
%    \begin{macrocode}
\RequirePackage{xcolor}
\RequirePackage{pict2e}
\RequirePackage{picture}
\RequirePackage{pgfkeys} % for the pgfkeys
\pgfkeys{/csteps/.is family}
\pgfkeys{/csteps/inner ysep/.initial=4pt,
    /csteps/inner xsep/.initial=4pt,
    /csteps/inner color/.initial=none,
    /csteps/outer color/.initial=none,
    /csteps/fill color/.initial=none,
}
\DeclareOption{redblue}{
    \pgfkeys{/csteps/inner color=red, /csteps/outer color=blue}%
}
\DeclareOption{legacy}{
    \pgfkeys{/csteps/inner color=red, /csteps/outer color=blue}%
}

% end of options definitions
\ProcessOptions\relax
% thanks @egreg https://tex.stackexchange.com/a/523450/38080
\RequirePackage{etoolbox}
% patch either picture.sty or pict2e.sty to add the possibility
% to fill oval shapes. Will break as soon as that option is added
% to either package...
\newif\ifcstepsfilledovals\cstepsfilledovalsfalse
\@ifpackageloaded{picture}{\patchcmd\PcOrg@@oval}{\patchcmd\@oval}
  {\pIIe@strokeGraph}
  {\ifcstepsfilledovals\pIIe@fillGraph\else\pIIe@strokeGraph\fi}
  {}{%
  \PackageWarningNoLine{circledsteps}{%
      Failed to patch either picture.sty or pict2e.sty:\MessageBreak
      \space\space oval shapes will not be filled.
  }%
}


\newsavebox\csteps@CBox
\newlength\csteps@XLength \newlength\csteps@YLength \newlength\csteps@YDepth \newlength\csteps@tmplen
\def\csteps@CircledParam#1#2{\sbox\csteps@CBox{#2}%
    \edef\csteps@none{none}%
    \edef\csteps@outercolor{\pgfkeysvalueof{/csteps/outer color}}%
    \edef\csteps@innercolor{\pgfkeysvalueof{/csteps/inner color}}%
    \edef\csteps@fillcolor{\pgfkeysvalueof{/csteps/fill color}}%
    \csteps@XLength=\wd\csteps@CBox\advance\csteps@XLength by\pgfkeysvalueof{/csteps/inner xsep}\relax
    \csteps@tmplen=\pgfkeysvalueof{/csteps/inner ysep}\relax
    \csteps@YDepth=\dp\csteps@CBox\advance\csteps@YDepth by 0.5\csteps@tmplen\relax
    \csteps@YLength=\ht\csteps@CBox\advance\csteps@YLength by\dp\csteps@CBox\advance\csteps@YLength by\pgfkeysvalueof{/csteps/inner ysep}\relax
    % \typeout{DBG:#2\space X:\the\csteps@XLength\space Y:\the\csteps@YLength\space D:\the\csteps@YDepth}%
    % \typeout{DBG\space inner:\csteps@innercolor\space outer:\csteps@outercolor\space ARG2:#2}%
    \raisebox{-#1\csteps@YDepth}{%
    \ifdim\csteps@XLength>\csteps@YLength
    \makebox[\csteps@XLength]{% X bigger than Y
        \makebox(0,\csteps@YLength){%
            \ifx\csteps@fillcolor\csteps@none\else
                {\color{\csteps@fillcolor}%
                \cstepsfilledovalstrue\put(0,0){\oval(\csteps@XLength,\csteps@YLength)}}%
            \fi
            \ifx\csteps@outercolor\csteps@none\else
                \color{\csteps@outercolor}%
            \fi
            \put(0,0){\oval(\csteps@XLength,\csteps@YLength)}%
        }%
    \makebox(0,\csteps@YLength){%
        \put(-.5\wd\csteps@CBox,0){%
            \ifx\csteps@innercolor\csteps@none
                #2\relax%
            \else
                \textcolor{\csteps@innercolor}{#2}%
            \fi
        }%
    }}%
    \else
    \makebox[\csteps@YLength]{%
        \makebox(0,\csteps@YLength){%
            \ifx\csteps@fillcolor\csteps@none\else
                {\color{\csteps@fillcolor}%
                \put(0,0){\circle*{\csteps@YLength}}}%
            \fi
            \ifx\csteps@outercolor\csteps@none\else
                \color{\csteps@outercolor}%
            \fi
            \put(0,0){\circle{\csteps@YLength}}%
        }%
    \makebox(0,\csteps@YLength){%
        \put(-.5\wd\csteps@CBox,0){%
            \ifx\csteps@innercolor\csteps@none
                #2\relax%
            \else
                \textcolor{\csteps@innercolor}{#2}%
            \fi
        }%
     }}%
    \fi
    }%
}
%    \end{macrocode}
% Main commands:
%    \begin{macrocode}
\newcommand{\CircledParamOpts}[3]{%
    \begingroup
        \pgfkeys{/csteps/.cd, #1}%
        \ifmmode
            \mathchoice{%
            \csteps@CircledParam{#2}{$\displaystyle #3$}%
            }%
            {%
            \csteps@CircledParam{#2}{$\textstyle #3$}%
            }%
            {%
            \csteps@CircledParam{#2}{$\scriptstyle #3$}%
            }%
            {%
            \csteps@CircledParam{#2}{$\scriptscriptstyle #3$}%
            }%
        \else
            \csteps@CircledParam{#2}{#3}%
        \fi
    \endgroup
}

\newcommand{\Circled}[2][]{\CircledParamOpts{#1}{1}{#2}}
\newcommand{\CircledTop}[2][]{\CircledParamOpts{#1}{0}{#2}}
\newcommand{\CircledText}[2][]{%
    \CircledParamOpts{inner color=none, outer color=none, #1}{1}{#2}%
}
%    \end{macrocode}
% Automatic counters code
%    \begin{macrocode}
\newcounter{cstepcnt}
\newcommand{\startcstep}{\setcounter{cstepcnt}{0}}
\newcommand{\resetcstep}{\setcounter{cstepcnt}{0}}
\newcommand{\cstep}{%
    \refstepcounter{cstepcnt}%
    \Circled{\scriptsize\arabic{cstepcnt}}%
}
\renewcommand{\thecstepcnt}{\arabic{cstepcnt}}
%    \end{macrocode}
%
%
