%%%
% Bande numérique
%%%
\def\filedateBandeNumerique{2025/09/26}%
\def\fileversionBandeNumerique{0.1e}%
\message{-- \filedateBandeNumerique\space v\fileversionBandeNumerique}%
%
\setKVdefault[BandeNum]{Elements={1,1,10},Largeur=\mpdim{2em},Hauteur=\mpdim{1.5em},Invisibles={0},CouleurCible=LightGray,Dys=false,CouleurSolution={},Cible={},Logo={},Traces={},VideInterieur=false}%

\makeatletter
\NewDocumentCommand\BandeNumerique{o}{%
  \useKVdefault[BandeNum]%
  \setKV[BandeNum]{#1}%
  \ifPfCPfMScratchDys\relax\setKV[BandeNum]{Dys}\fi%
  \edef\PfC@BandeNumElementsAv{\useKV[BandeNum]{Elements}}%
  \setsepchar{,}\ignoreemptyitems%
  \readlist*\PfCListeBandeNumElmts{\PfC@BandeNumElementsAv}%
  \reademptyitems%
  \ifemptyKV[BandeNum]{Cible}{\edef\PfCBandeNumCible{-1}}{\edef\PfCBandeNumCible{\useKV[BandeNum]{Cible}}}%
  \edef\PfCRetiensListeInvisible{\useKV[BandeNum]{Invisibles}}%
  \PfC@BandeNum{\PfCRetiensListeInvisible}%
}%

\NewDocumentCommand\PfC@BandeNum{m}{%
  \mplibforcehmode%
  \begin{mplibcode}
    Depart=\PfCListeBandeNumElmts[1];
    Pas=\PfCListeBandeNumElmts[2];
    Longueur=\PfCListeBandeNumElmts[3];
    LargeurCase=\useKV[BandeNum]{Largeur};
    HauteurCase=\useKV[BandeNum]{Hauteur};
    color CouleurCible,CouleurSolution;
    CouleurCible=\useKV[BandeNum]{CouleurCible};
    boolean Solution,Cibles,Logos,Dys,VideInterieur;
    VideInterieur=\useKV[BandeNum]{VideInterieur};
    Dys=\useKV[BandeNum]{Dys};
    if Dys:
      LargeurCase:=1.25*LargeurCase;
      HauteurCase:=1.25*HauteurCase;
    fi;
    \ifemptyKV[BandeNum]{CouleurSolution}{Solution:=false;}{%
      Solution:=true;
      CouleurSolution=\useKV[BandeNum]{CouleurSolution};
    }%
    \ifemptyKV[BandeNum]{Cible}{Cibles=false;}{%
      Cibles=true;
      Cible=\PfCBandeNumCible;
    }%
    \ifemptyKV[BandeNum]{Logo}{Logos=false;}{%
      Logos=true;
    }%
    vardef AffichageBande(text t)=
      path case[];
      case[0]=(unitsquare xscaled LargeurCase yscaled HauteurCase) shifted (0*(LargeurCase,0));
      for k=1 upto Longueur:
        case[k]=(unitsquare xscaled LargeurCase yscaled HauteurCase) shifted (k*(LargeurCase,0));
        label(TEX(decimal(Depart+(k-1)*Pas)),center case[k]);
      endfor;
      if Cibles:
        if Logos:
          fill case[Cible] withcolor white;
          if Solution:
            drawoptions(withcolor CouleurSolution);
            label(TEX(decimal(Depart+(Cible-1)*Pas)),center case[Cible]);
            drawoptions();
          else:
            label(TEX(\useKV[BandeNum]{Logo}),center case[Cible]);
          fi;
        else:
          fill case[Cible] withcolor CouleurCible;
          if Solution:
            drawoptions(withcolor CouleurSolution);
            label(TEX(decimal(Depart+(Cible-1)*Pas)),center case[Cible]);
            drawoptions();
          fi;
        fi;
        for p_=t:
          if p_>0:
            fill case[p_] withcolor white;
            if Solution:
              drawoptions(withcolor CouleurSolution);
              label(TEX(decimal(Depart+(p_-1)*Pas)),center case[p_]);
              drawoptions();
            fi;
          fi;
        endfor;
      else:
        for p_=t:
          if p_>0:
            fill case[p_] withcolor white;
            if Solution:
              drawoptions(withcolor CouleurSolution);
              label(TEX(decimal(Depart+(p_-1)*Pas)),center case[p_]);
              drawoptions();
            else:
              label.bot(TEX("$\ldots$"),center case[p_]);
            fi;
          fi;
        endfor;
      fi;
      if VideInterieur:
        fill polygone(llcorner case[2],lrcorner case[Longueur-1],urcorner case[Longueur-1],ulcorner case[2]) withcolor LightGray;
        trace case[1]; trace case[Longueur];
        trace polygone(llcorner case[1],lrcorner case[Longueur],urcorner case[Longueur],ulcorner case[1]);
      else:
        for k=1 upto Longueur:
          trace case[k] withpen pencircle scaled 1.05;
        endfor;
      fi;  
    enddef;

    AffichageBande(#1);
    \ifemptyKV[BandeNum]{Traces}{}{\useKV[BandeNum]{Traces};}
  \end{mplibcode}
}%
\makeatother