% !TeX root = ./examples/tikzlings.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This is the main part of the TikZlings package
% A package to bring cute little animals and other beings into tikz
% Maintained by samcarter
%
% Project repository and bug tracker:
% https://github.com/samcarter/tikzlings
%
% Released under the LaTeX Project Public License v1.3c or later
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesPackage{tikzlings}[2022/06/17 version v1.0 Collection of packages to draw animals and other beings in TikZ]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% List of all TikZlings
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{tikzlings-list}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% load sub-packages
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{tikz}

\ExplSyntaxOn
\cs_new_eq:NN \tikzlings@clistMapInlineNn \clist_map_inline:Nn
\ExplSyntaxOff

\tikzlings@clistMapInlineNn{\tikzlings@packages@clist}{%
  \RequirePackage{tikzlings-#1}}

\RequirePackage{tikzlings-addons}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Drawing a random tikzling
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{expl3}
\ExplSyntaxOn
\ifdefined\sys_rand_seed:
  \pgfmathsetseed {\sys_rand_seed:}
\else
  \ifdefined\pdfrandomseed % pdflatex
  \else
      \ifdefined\randomseed 
        \let\pdfrandomseed\randomseed % post TL19 xelatex and lualatex
      \else
          \let\pdfrandomseed\time % pre TL19 xelatex
      \fi
  \fi
  \pgfmathsetseed{\number\pdfrandomseed} 
\fi

% #1: tikzling name.
% The second argument of \__tikzlings_show_tikzling:nn will be provided
% by \tikzling.
\cs_new:Npn \__tikzlings_brace_item:n #1
  { { \__tikzlings_show_tikzling:nn {#1} } }

% #1: tikzling name
% #2: options passed to its command
\cs_new_protected:Npn \__tikzlings_show_tikzling:nn #1#2
  {
    \group_begin:
      \pgfkeys
        {
          /#1/.search~also/.expanded =
            { /tikz, /pgf, /thing, \tikzlings@search@paths@clist }
        }
      \use:c {#1} [{#2}]
    \group_end:
  }

\cs_new_protected:Npn \__tikzlings_declare_pgfmath_random_list:n #1
  {
    \pgfmathdeclarerandomlist { tikzlings } {#1}
  }

% Variant that uses \edef on the argument, then passes the result to
% \__tikzlings_declare_pgfmath_random_list:n
\cs_generate_variant:Nn \__tikzlings_declare_pgfmath_random_list:n { x }

% Works because \clist_map_function:NN is expandable
\__tikzlings_declare_pgfmath_random_list:x
  {
    \clist_map_function:NN \g__tikzlings_names_clist \__tikzlings_brace_item:n
  }
\ExplSyntaxOff

\newcommand{\tikzling}[1][]{%
  \pgfmathrandomitem{\tikzlings@random}{tikzlings}%
  % #1 is passed as second argument to \__tikzlings_show_tikzling:nn
  \tikzlings@random{#1}%
}
