% -----------------------------------------------------------------------
%%% tblr-extras: Extra libraries for tabularray package.
%%% Version    : 1.3 - 2024-06-25
%%% Copyright  : 2024 (c) Manuel E. Merino <manuel.merino.pe@gmail.com>
%%% License    : The LaTeX Project Public License 1.3c
% -----------------------------------------------------------------------
%%% LPPL 1.3c Notice: ---------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%   https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Manuel E. Merino
% -----------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}[2018-04-01]
\ProvidesPackage{tblr-extras}[2024/06/25 package tblr-extras]
\RequirePackage{tabularray}
%% ----------------------------------------------------------------------
%% TblrLibrary caption - Use caption package to typeset tabularray tall
%% and long tabulars captions.
%% This stuff needs to be ported to expl3 soon.
\ExplSyntaxOn
\prg_generate_conditional_variant:Nnn \tl_if_empty:n { e } { TF }
\let \IfTokenListEmpty = \tl_if_empty:eTF
\let \IfBoolFalse = \bool_if:NF
\let \IfBoolTF = \bool_if:NTF
\bool_new:N \l__tblrextras_table_title_below_bool
\bool_set_false:N \l__tblrextras_table_title_below_bool
\NewTblrLibrary{caption}
{%
	\RequirePackage{caption}
	%% Check if a KomaClass is loaded and issue a warning for caption position setup
	\@ifundefined{KOMAClassName}
	{}
	{\PackageWarningNoLine{tblr-extras}{KOMAScript class detected. Setup caption position using 'captions=option'}}
	%%% Presetup
	\NewDocumentCommand{\TblrCaptionBelow}{}{\bool_set_true:N \l__tblrextras_table_title_below_bool}
	\NewDocumentCommand{\TblrCaptionAbove}{}{\bool_set_false:N \l__tblrextras_table_title_below_bool}
	\SetTblrOuter[talltblr,longtblr]{headsep=0pt}
	%%%%%%%%%% TEMPLATES
	\DefTblrTemplate{firsthead}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{ }
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{ }
			% Cap Above (default)
			{
			\addtocounter{table}{-1}
			\captionsetup{type=table}
			\IfTokenListEmpty{\InsertTblrText{entry}}{
				\caption{\InsertTblrText{caption}}
				}{
				\caption[\InsertTblrText{entry}]{\InsertTblrText{caption}}
				}
			}
		}
	} % END FIRSTHEAD
	\DefTblrTemplate{middlehead}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{ \UseTblrTemplate{conthead}{default} \vspace{4pt} }
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{ \UseTblrTemplate{conthead}{default} \vspace{4pt} }
			% Cap Above (default)
			{
			\addtocounter{table}{-1}
			\captionsetup{type=table}
			\caption[]{\InsertTblrText{caption}~			\UseTblrTemplate{conthead-text}{default}}
			}
		}
	}% END MIDDLEHEAD
	\DefTblrTemplate{lasthead}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{ \UseTblrTemplate{conthead}{default} \vspace{4pt} }
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{ \UseTblrTemplate{conthead}{default} \vspace{4pt} }
			% Cap Above (default)
			{
			\addtocounter{table}{-1}
			\captionsetup{type=table}
			\caption[]{\InsertTblrText{caption}~			\UseTblrTemplate{conthead-text}{default}}
			}
		}
	}% END LASTHEAD
	\DefTblrTemplate{firstfoot}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{ \UseTblrTemplate{contfoot}{default} }
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{
			\addtocounter{table}{-1}
			\captionsetup{type=table}
			\caption[]{\InsertTblrText{caption}}
			\UseTblrTemplate{contfoot}{default}
			}
			% Cap Above (default)
			{
			\UseTblrTemplate{contfoot}{default}
			}
		}
	}% END FIRSTFOOT
	\DefTblrTemplate{middlefoot}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{ \UseTblrTemplate{contfoot}{default} }
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{
			\addtocounter{table}{-1}
			\captionsetup{type=table}
			\caption[]{\InsertTblrText{caption}}
			\UseTblrTemplate{contfoot}{default}
			}
			% Cap Above (default)
			{
				\UseTblrTemplate{contfoot}{default}
			}
		}
	}% END MIDDLEFOOT
	\DefTblrTemplate{lastfoot}{default}{
		\IfBoolTF \l__tblr_table_no_label_bool
		% True NoLabel
		{
			\UseTblrTemplate{note}{default}
			\UseTblrTemplate{remark}{default}
		}
		% False NoLabel
		{
		\IfBoolTF \l__tblrextras_table_title_below_bool
			% Cap Below
			{
				\UseTblrTemplate{note}{default}
				\UseTblrTemplate{remark}{default}
				\addtocounter{table}{-1}
				\captionsetup{type=table}	\IfTokenListEmpty{\InsertTblrText{entry}}{
					\caption{\InsertTblrText{caption}}
				}{
					\caption[\InsertTblrText{entry}]{\InsertTblrText{caption}}
				}
			}
			% Cap Above (default)
			{
				\UseTblrTemplate{note}{default}
				\UseTblrTemplate{remark}{default}
			}
		}
	}% END LASTFOOT
	\SetTblrTemplate{caption-lot}{empty}
}
\ExplSyntaxOff
%% ----------------------------------------------------------------------
%% TblrLibrary babel - Translate contfoot and conthead to current babel/polyglossia
%% language.
% Supports: ngerman, french, spanish, russian, romanian, galician, esperanto, danish, catalan, danish, afrikaans, italian, portuguese and ukrainian translations.
%%%%%
%% Check engine
\newif\if@unicode@engine
\ifdefined\luatexversion
	\@unicode@enginetrue
\else\ifdefined\XeTeXrevision
	\@unicode@enginetrue
\fi\fi
\NewTblrLibrary{babel}
{%
	\AddToHook{begindocument/before}{%
		\@ifpackageloaded{babel}{}{%
			\@ifpackageloaded{polyglossia}{}{%
				\RequirePackage{babel}
			}
		}
		\ifdefined\captionsromanian
			\addto\captionsromanian{%
			\renewcommand{\tblrcontfootname}{Continuare pe pagina următoare}%
			\renewcommand{\tblrcontheadname}{(Continuare)}%
			}
		\fi
		\ifdefined\captionsgalician
			\addto\captionsgalician{%
			\renewcommand{\tblrcontfootname}{Continuación na seguinte páxina}%
			\renewcommand{\tblrcontheadname}{(Continuación)}%
			}
		\fi
		\ifdefined\captionsesperanto
			\addto\captionsesperanto{%
			\renewcommand{\tblrcontfootname}{Daŭrigo sur la sekva paĝo}%
			\renewcommand{\tblrcontheadname}{(Daŭrigo)}%
			}
		\fi
		\ifdefined\captionsdanish
			\addto\captionsdanish{%
			\renewcommand{\tblrcontfootname}{Fortsættelse på næste side}%
			\renewcommand{\tblrcontheadname}{(Fortsættelse)}%
			}
		\fi
		\ifdefined\captionscatalan
			\addto\captionscatalan{%
			\renewcommand{\tblrcontfootname}{Continuació a la pàgina següent}%
			\renewcommand{\tblrcontheadname}{(Continuació)}%
			}
		\fi
		\ifdefined\captionsdutch
		\addto\captionsdutch{%
			\renewcommand{\tblrcontfootname}{Vervolg op de volgende pagina}%
			\renewcommand{\tblrcontheadname}{(Vervolg)}%
		}
		\fi
		\ifdefined\captionsafrikaans
			\addto\captionsafrikaans{%
			\renewcommand{\tblrcontfootname}{Vervolg op die volgende bladsy}%
			\renewcommand{\tblrcontheadname}{(Vervolg)}%
		}
		\fi
		\ifdefined\captionsitalian
			\addto\captionsitalian{%
				\renewcommand{\tblrcontfootname}{Continua alla pagina successiva}%
				\renewcommand{\tblrcontheadname}{(Continuazione)}%
			}
		\fi
		\ifdefined\captionsportuguese
			\addto\captionsportuguese{%
				\renewcommand{\tblrcontfootname}{Continua na próxima página}%
				\renewcommand{\tblrcontheadname}{(Continuação)}%
			}
		\fi
		\ifdefined\captionsspanish
			\addto\captionsspanish{%
				\renewcommand{\tblrcontfootname}{Continúa en la siguiente página}%
				\renewcommand{\tblrcontheadname}{(Continuación)}%
			}
		\fi
		\ifdefined\captionsngerman
			\addto\captionsngerman{%
				\renewcommand{\tblrcontfootname}{Fortsetzung auf der nächsten Seite}%
				\renewcommand{\tblrcontheadname}{(Fortsetzung)}%
			}
		\fi
		\ifdefined\captionsfrench
			\addto\captionsfrench{%
				\renewcommand{\tblrcontfootname}{Suite à la page suivante}%
				\renewcommand{\tblrcontheadname}{(Suite)}%
			}
		\fi
		\ifdefined\captionsrussian
			\if@unicode@engine
				\addto\captionsrussian{%
					\renewcommand{\tblrcontfootname}{Продолжение на следующей странице}%
					\renewcommand{\tblrcontheadname}{(продолжение)}%
				}
			\else
				\addto\captionsrussian{%
					\renewcommand{\tblrcontfootname}{\cyr\CYRP\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyre\cyrn\cyri\cyre\ \cyrn\cyra\ \cyrs\cyrl\cyre\cyrd\cyru\cyryu\cyrshch\cyre\cyrishrt\ \cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyre}%
					\renewcommand{\tblrcontheadname}{(\cyr\cyrp\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyre\cyrn\cyri\cyre)}%
				}
			\fi
		\fi
		\ifdefined\captionsukrainian
			\if@unicode@engine
				\addto\captionsukrainian{%
					\renewcommand{\tblrcontfootname}{Продовження на наступній сторінці}%
					\renewcommand{\tblrcontheadname}{(продовження)}%
				}
			\else
				\addto\captionsukrainian{%
					\renewcommand{\tblrcontfootname}{\cyr\CYRP\cyrr\cyro\cyrd\cyro\cyrv\cyrzh\cyre\cyrn\cyrn\cyrya\ \cyrn\cyra\ \cyrn\cyra\cyrs\cyrt\cyru\cyrp\cyrn\cyrii\cyrishrt\ \cyrs\cyrt\cyro\cyrr\cyrii\cyrn\cyrc\cyrii}%
					\renewcommand{\tblrcontheadname}{(\cyr\cyrp\cyrr\cyro\cyrd\cyro\cyrv\cyrzh\cyre\cyrn\cyrn\cyrya)}%
				}
			\fi
		\fi
	}
}
