% Copyright (c) 2009-26 Stephane GALLAND <galland@arakhne.org>
% 
% This program is free library; you can redistribute it and/or modify
% it under the terms of the GNU Lesser General Public License as
% published by the Free Software Foundation; either version 3 of the
% License, or any later version.
%
% This library is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
% Lesser General Public License for more details.
%
% You should have received a copy of the GNU Lesser General Public
% License along with this library; see the file COPYING.  If not,
% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
% 330, Boston, MA 02111-1307, USA.
%

\global\edef\upm@package@private@doctype@ver{2026/04/06}

\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{upmethodology-p-common}[\upm@package@private@doctype@ver]

\RequirePackage{ifthen}
\RequirePackage{xspace}
\RequirePackage{xcolor}
\RequirePackage{ifpdf}

%----------------------------------------
% UPMVERSION MACRO
%----------------------------------------
\input UPMVERSION.def
\def\upm@common@parseversion@to@tex#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4/#5#6/#7#8}
\def\upm@common@parseversion@major#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4#5#6#7#8}
\edef\ver@UPMVERSION@major{\expandafter\upm@common@parseversion@major\UPMVERSION-\relax\@nil}
\edef\ver@UPMVERSION{\expandafter\upm@common@parseversion@to@tex\UPMVERSION\@nil}
\expandafter\let\csname ver@UPMVERSION.sty\endcsname\ver@UPMVERSION
\expandafter\let\csname ver@UPMVERSION.cls\endcsname\ver@UPMVERSION

\gdef\UPMVERSIONTEST{\ver@UPMVERSION\\\ver@UPMVERSION@major}

%----------------------------------------
% ARAKHNE.ORG MACRO
%----------------------------------------
\providecommand{\arakhneorg}{{\begingroup%
	{\usefont{T1}{pzc}{m}{it}\selectfont Arakhn\^e}%
	{\usefont{T1}{phv}{bc}{sc}\selectfont\tiny.org}\endgroup}\xspace}

%----------------------------------------
% CURRENT LANGUAGE
%----------------------------------------
\def\upmcurrentlang{english}
\def\ifupmlang#1{\ifthenelse{\equal{#1}{\upmcurrentlang}}}

%----------------------------------------
% TEST MACROS
%----------------------------------------
\long\def\Ifnotempty#1{\ifthenelse{\equal{#1}{\@empty}}{}}
\long\def\Ifempty#1#2{\ifthenelse{\equal{#1}{\@empty}}{#2}{}}
\long\def\Ifelseempty#1#2#3{\ifthenelse{\equal{#1}{\@empty}}{#2}{#3}}

%----------------------------------------
% TOC MACROS
%----------------------------------------
\newcommand{\newpageintoc}{\addtocontents{toc}{\protect\newpage}}

%----------------------------------------
% DOCUMENT TYPE
%----------------------------------------
\newif\ifupmbookformat
\newif\ifupmreportformat
\newif\ifupmarticleformat

\upmbookformatfalse
\upmreportformattrue
\upmarticleformatfalse

%----------------------------------------
% PDF COLORS
%----------------------------------------
\newcommand{\setpdfcolor}[1]{}

%----------------------------------------
% CREATE COMMAND WITH ID AS NAME
%----------------------------------------
\def\upm@protect#1{\upm@p@protect #1\relax}
\def\upm@p@protect#1#2\relax{%
	\ifx\relax #1%
		\relax
	\else%
		\string #1%
		\ifx\relax #2%
			\relax
		\else
			\upm@p@protect #2\relax%
		\fi
	\fi}

\def\upm@namedef#1#2{%
	\@namedef{\upm@protect{#1}}{#2}%
}

\def\upm@nameuse#1{%
	\@nameuse{\upm@protect{#1}}%
}

\def\upm@nameundef#1{%
	\expandafter\let\csname\upm@protect{#1}\endcsname\relax%
}

\def\upm@namelet@ext#1#2{%
	\expandafter\expandafter\let\expandafter\upm@tmp\csname#2\endcsname%
	\global\expandafter\let\csname#1\endcsname\upm@tmp%
}

\def\upm@ifdefinedname#1#2#3{%
	\expandafter\ifx\csname\upm@protect{#1}\endcsname\relax%
		#3%
	\else%
		#2%
	\fi%
}

\newcommand{\upm@column@char}{\ifupmlang{french}{ :}{:}}

%----------------------------------------
% GET THE REFERENCE ID WITHOUT \REF
%----------------------------------------
\gdef\upm@getref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    \nfss@text{\reset@font\bfseries ??}%
  \else
    \expandafter\expandafter\expandafter\@car\csname r@#1\endcsname\@nil
  \fi
}

\gdef\upm@getpageref@filter#1#2#3#4#5{#2}

\gdef\upm@getpageref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    \nfss@text{\reset@font\bfseries ??}%
  \else%
    \protected@xdef\upm@p@tmp@tmp{\protect\upm@getpageref@filter\csname r@#1\endcsname}%
    \upm@p@tmp@tmp%
    \global\let\upm@p@tmp@tmp\relax%
  \fi
}

%----------------------------------------
% INTERNAL COMMAND FOR TEXT SUPPER/SUB SCRIPT
%----------------------------------------

\let\upm@textsuperscript\textsuperscript

\def\upm@textsubscript#1{%
  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}


%----------------------------------------
% MACRO THAT PERMITS TO LOOP ON A SEPARATOR
%----------------------------------------

\newif\ifupm@foreach@hasseparator
\newif\ifupm@foreach@oneseparator

\let\upm@foreach@end\relax

\def\upm@foreach@rec#1{%
	{\upm@foreach@searchseparator#1\upm@foreach@end\@nil}%
	\ifupm@foreach@hasseparator%
		\protected@xdef\upm@foreach@continue{\protect\upm@foreach@rec{\upm@foreach@rest}}%
		\upm@foreach@body%
		\upm@foreach@continue%
	\else%
		\ifupm@foreach@oneseparator\else%
			\upm@foreach@lastbody%
		\fi%
	\fi%
}

% Loop on parts of a text given a specific separator.
% In the bodies, the macros \upm@foreach@term is the current data.
% #1: is the separator to consider
% #2: is the data set
% #3: is the body to run for each loop, except the last.
% #4: is the body to run for the last loop.
\def\upm@foreach#1\in#2\do#3#4{%
	\global\upm@foreach@oneseparatorfalse%
	\gdef\upm@foreach@searchseparator##1#1##2\@nil{%
		\gdef\upm@foreach@term{##1}%
		\ifx\upm@foreach@end##2%
			\global\upm@foreach@hasseparatorfalse%
		\else%
			\gdef\upm@foreach@rest{##2}%
			\global\upm@foreach@hasseparatortrue%
			\global\upm@foreach@oneseparatortrue%
		\fi%
	}%
	\gdef\upm@foreach@body{#3}%
	\gdef\upm@foreach@lastbody{#4}%
	\upm@foreach@rec{#2#1}%
}

%----------------------------------------
% MACRO THAT PERMITS TO FIND A STRING
%----------------------------------------
\def\upm@ifin#1#2{\begingroup\edef\upm@tmp{\endgroup\noexpand\in@{#1}{#2}}\upm@tmp\ifin@}

%-----------------------------------------
% Option parameters
\newif\ifupm@common@optlist@needdefault
\gdef\upm@common@optlist@parseparams#1=#2\@nil{%
	\ifthenelse{\equal{#2}{===}}{%
		\global\upm@common@optlist@needdefaulttrue%
	}{%
		\global\upm@common@optlist@needdefaultfalse%
	}%
}
\DeclareRobustCommand{\upm@common@optlist}[1]{%
	{\upm@common@optlist@parseparams #1====\@nil}%
}
\newcommand{\upm@setkeys}[3]{%
	\upm@common@optlist{#3}%
	\ifupm@common@optlist@needdefault%
		\expandafter\setkeys{#1}{#2=#3}%
	\else%
		\expandafter\setkeys{#1}{#3}%
	\fi%
}

\endinput

