% Author        : C. Pierquet
% licence       : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
% licence svg   : CC BY-SA 3.0 https://commons.wikimedia.org/wiki/File:Judo_yellow_belt.svg
%               : Tks to Sascha Christmann for "in betweeen" colors

\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{coloredbelts}{2025-08-25}{0.1.5}{Colored Judo's belts}

%====HISTORIQUE
% v 0.1.5	Passage en LaTeX3
% v 0.1.4	Option strut
% v 0.1.3	Uniformisation des fichiers
% v 0.1.2	Amélioration de la gestion des longueurs
% v 0.1.1	Couleurs duo
% v 0.1.0	Version initiale

%====BASE
\RequirePackage{graphicx}

%====DIMENSIONS
\dim_new:N \g_judobelt_totheight_dim
\dim_new:N \g_judobelt_depth_dim
\dim_new:N \g_judobeltraise_dim

%====VARIABLES
\tl_new:N \l_judobeltheight_tl
\tl_new:N \l_judobeltstrut_tl
\tl_new:N \l_judobeltcolor_tl

%====CLÉS (version française)
\keys_define:nn { ceinturejudo }
  {
    Hauteur .tl_set:N = \l_judobeltheight_tl,
    Hauteur .initial:n = {auto},
    DecalV .dim_set:N = \l_judobeltraise_dim,
    DecalV .initial:n = {0pt},
    Strut .tl_set:N = \l_judobeltstrut_tl,
    Strut .initial:n = {abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ}
  }

%====COMMANDE FR
\NewDocumentCommand\CeintureCouleur{ s O{} m }
  {
    \group_begin:
    % Gestion des couleurs
    \str_case:enF { #3 }
      {
        {white}{\def\tmp@ceinture@couleur{white}}
        {blanc}{\def\tmp@ceinture@couleur{white}}
        {jaune}{\def\tmp@ceinture@couleur{yellow}}
        {yellow}{\def\tmp@ceinture@couleur{yellow}}
        {orange}{\def\tmp@ceinture@couleur{orange}}
        {red}{\def\tmp@ceinture@couleur{red}}
        {rouge}{\def\tmp@ceinture@couleur{red}}
        {bleu}{\def\tmp@ceinture@couleur{blue}}
        {blue}{\def\tmp@ceinture@couleur{blue}}
        {purple}{\def\tmp@ceinture@couleur{purple}}
        {violet}{\def\tmp@ceinture@couleur{purple}}
        {marron}{\def\tmp@ceinture@couleur{brown}}
        {brown}{\def\tmp@ceinture@couleur{brown}}
        {green}{\def\tmp@ceinture@couleur{green}}
        {vert}{\def\tmp@ceinture@couleur{green}}
        {rose}{\def\tmp@ceinture@couleur{pink}}
        {pink}{\def\tmp@ceinture@couleur{pink}}
        {gris}{\def\tmp@ceinture@couleur{gray}}
        {gray}{\def\tmp@ceinture@couleur{gray}}
        {noir}{\def\tmp@ceinture@couleur{black}}
        {black}{\def\tmp@ceinture@couleur{black}}
        {white-yellow}{\def\tmp@ceinture@couleur{white-yellow}}
        {blanc-jaune}{\def\tmp@ceinture@couleur{white-yellow}}
        {yellow-orange}{\def\tmp@ceinture@couleur{yellow-orange}}
        {jaune-orange}{\def\tmp@ceinture@couleur{yellow-orange}}
        {orange-green}{\def\tmp@ceinture@couleur{orange-green}}
        {orange-vert}{\def\tmp@ceinture@couleur{orange-green}}
        {green-blue}{\def\tmp@ceinture@couleur{green-blue}}
        {vert-bleu}{\def\tmp@ceinture@couleur{green-blue}}
        {purple-brown}{\def\tmp@ceinture@couleur{purple-brown}}
        {violet-marron}{\def\tmp@ceinture@couleur{purple-brown}}
        {blue-brown}{\def\tmp@ceinture@couleur{blue-brown}}
        {bleu-marron}{\def\tmp@ceinture@couleur{blue-brown}}
        {blue-purple}{\def\tmp@ceinture@couleur{blue-purple}}
        {bleu-violet}{\def\tmp@ceinture@couleur{blue-purple}}
        {brown-black}{\def\tmp@ceinture@couleur{brown-black}}
        {marron-noir}{\def\tmp@ceinture@couleur{brown-black}}
      }
      {\def\tmp@ceinture@couleur{yellow}}
    
    % Étoilée := includegraphics simple
    \bool_if:NTF #1
      {
        \includegraphics[#2]{judobelt-\tmp@ceinture@couleur.pdf}
      }
      {
        \keys_set:nn { ceinturejudo } { #2 }
        \str_if_eq:eeTF { \tl_to_str:N \l_judobeltheight_tl } { auto }
          {
            % hauteur auto
            \hbox_set:Nn \l_tmpa_box { \tl_use:N \l_judobeltstrut_tl }
            \dim_set:Nn \g_judobelt_totheight_dim { \box_dp:N \l_tmpa_box + \box_ht:N \l_tmpa_box }
            \dim_set:Nn \g_judobelt_depth_dim { \box_dp:N \l_tmpa_box }
            \dim_set:Nn \g_judobeltraise_dim
              {
                -\g_judobelt_depth_dim + \fp_eval:n { 0.025 * \dim_to_decimal_in_unit:nn { \g_judobelt_totheight_dim } { 1pt } } pt
              }
            \raisebox{ \dim_use:N \g_judobeltraise_dim }
            {
              \includegraphics[height={\dim_eval:n { 0.95\g_judobelt_totheight_dim }}]{judobelt-\tmp@ceinture@couleur.pdf}
            }
          }
          {
            \raisebox{\dim_use:N \l_judobeltraise_dim}{\includegraphics[height={\l_judobeltheight_tl}]{judobelt-\tmp@ceinture@couleur.pdf}}
          }
      }
    \group_end:
  }

%====KEYS (version anglaise)
\keys_define:nn { judobelt }
  {
    Height .tl_set:N = \l_judobeltheight_tl,
    Height .initial:n = {auto},
    OffsetV .dim_set:N = \l_judobeltraise_dim,
    OffsetV .initial:n = {0pt},
    Strut .tl_set:N = \l_judobeltstrut_tl,
    Strut .initial:n = {abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ}
  }

%====COMMANDE EN
\NewDocumentCommand\ColorBelt{ s O{} m }
  {
    \group_begin:
    % Color gest
    \str_case:enF { #3 }
      {
        {white}{\def\tmp@ceinture@couleur{white}}
        {blanc}{\def\tmp@ceinture@couleur{white}}
        {jaune}{\def\tmp@ceinture@couleur{yellow}}
        {yellow}{\def\tmp@ceinture@couleur{yellow}}
        {orange}{\def\tmp@ceinture@couleur{orange}}
        {red}{\def\tmp@ceinture@couleur{red}}
        {rouge}{\def\tmp@ceinture@couleur{red}}
        {bleu}{\def\tmp@ceinture@couleur{blue}}
        {blue}{\def\tmp@ceinture@couleur{blue}}
        {purple}{\def\tmp@ceinture@couleur{purple}}
        {violet}{\def\tmp@ceinture@couleur{purple}}
        {marron}{\def\tmp@ceinture@couleur{brown}}
        {brown}{\def\tmp@ceinture@couleur{brown}}
        {green}{\def\tmp@ceinture@couleur{green}}
        {vert}{\def\tmp@ceinture@couleur{green}}
        {rose}{\def\tmp@ceinture@couleur{pink}}
        {pink}{\def\tmp@ceinture@couleur{pink}}
        {gris}{\def\tmp@ceinture@couleur{gray}}
        {gray}{\def\tmp@ceinture@couleur{gray}}
        {noir}{\def\tmp@ceinture@couleur{black}}
        {black}{\def\tmp@ceinture@couleur{black}}
        {white-yellow}{\def\tmp@ceinture@couleur{white-yellow}}
        {blanc-jaune}{\def\tmp@ceinture@couleur{white-yellow}}
        {yellow-orange}{\def\tmp@ceinture@couleur{yellow-orange}}
        {jaune-orange}{\def\tmp@ceinture@couleur{yellow-orange}}
        {orange-green}{\def\tmp@ceinture@couleur{orange-green}}
        {orange-vert}{\def\tmp@ceinture@couleur{orange-green}}
        {green-blue}{\def\tmp@ceinture@couleur{green-blue}}
        {vert-bleu}{\def\tmp@ceinture@couleur{green-blue}}
        {purple-brown}{\def\tmp@ceinture@couleur{purple-brown}}
        {violet-marron}{\def\tmp@ceinture@couleur{purple-brown}}
        {blue-brown}{\def\tmp@ceinture@couleur{blue-brown}}
        {bleu-marron}{\def\tmp@ceinture@couleur{blue-brown}}
        {blue-purple}{\def\tmp@ceinture@couleur{blue-purple}}
        {bleu-violet}{\def\tmp@ceinture@couleur{blue-purple}}
        {brown-black}{\def\tmp@ceinture@couleur{brown-black}}
        {marron-noir}{\def\tmp@ceinture@couleur{brown-black}}
      }
      {\def\tmp@ceinture@couleur{yellow}}
    
    % Starred := simple includegraphics
    \bool_if:NTF #1
      {
        \includegraphics[#2]{judobelt-\tmp@ceinture@couleur.pdf}
      }
      {
        \keys_set:nn { judobelt } { #2 }
        \str_if_eq:eeTF { \tl_to_str:N \l_judobeltheight_tl } { auto }
          {
            % hauteur auto
            \hbox_set:Nn \l_tmpa_box { \tl_use:N \l_judobeltstrut_tl }
            \dim_set:Nn \g_judobelt_totheight_dim { \box_dp:N \l_tmpa_box + \box_ht:N \l_tmpa_box }
            \dim_set:Nn \g_judobelt_depth_dim { \box_dp:N \l_tmpa_box }
            \dim_set:Nn \g_judobeltraise_dim
              {
                -\g_judobelt_depth_dim + \fp_eval:n { 0.025 * \dim_to_decimal_in_unit:nn { \g_judobelt_totheight_dim } { 1pt } } pt
              }
            \raisebox{ \dim_use:N \g_judobeltraise_dim }
            {
              \includegraphics[height={\dim_eval:n { 0.95\g_judobelt_totheight_dim }}]{judobelt-\tmp@ceinture@couleur.pdf}
            }
          }
          {
            \raisebox{\dim_use:N \l_judobeltraise_dim}{\includegraphics[height={\l_judobeltheight_tl}]{judobelt-\tmp@ceinture@couleur.pdf}}
          }
      }
    \group_end:
  }

\endinput