% Time-stamp: <2019-08-28 08:02:26 administrateur>
% Création : 2019-08-05T10:18:51+0200
%%%%% ---------------------------------------------------------------------
%%%%% © Yvon Henel, 2019
%%%%% ---------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\RequirePackage{l3keys2e,xparse}
\ProvidesExplPackage
{dun19codepres} {2019/08/05} {1} {pour article dun19expl3}
\RequirePackage{xspace}
\RequirePackage{hologo}
\RequirePackage[dvipsnames]{xcolor}
%%%%% ---------------------------------------------------------------------
%%%%% outils
%%%%% ---------------------------------------------------------------------
\def\makeunderlineletter{\catcode`\_=11\relax}
\makeatletter
\newcommand\TdSfrCP@CODE{\texttt}
\let\CODE=\TdSfrCP@CODE
\newcommand\TdSfrCP@ENCODE{\ttfamily}
\newcommand\TdSfrCP@PRESENTATIONMETA{\TdSfrCP@ENCODE\itshape}
\DeclareRobustCommand\0{\discretionary{}{}{}}
\DeclareRobustCommand\1{\0\TdSfrCP@CODE{\_}\0}
\DeclareRobustCommand\2{\TdSfrCP@CODE{:}\0}
\DeclareRobustCommand\3{\discretionary{.}{}{.}}
\DeclareRobustCommand\6{\0\TdSfrCP@CODE{@}\0}
\DeclareRobustCommand\7{\0\TdSfrCP@CODE{/}\0}
\DeclareRobustCommand\9{%
\hspace{0pt plus 1pt}\discretionary{}{}{}\hspace{0pt plus 1pt}}
\DeclareRobustCommand\8{\0\TdSfrCP@CODE{-}\0}
\newcommand{\Meta}[1]{%
\ensuremath{\langle}{\TdSfrCP@PRESENTATIONMETA #1\/}\ensuremath{\rangle}}
\let\M=\Meta
%%%%% ---------------------------------------------------------------------
%%%%% Présentation extensions, etc.
%%%%% ---------------------------------------------------------------------
\newcommand{\Pkg}[1]{\texttt{#1}}
\newcommand{\Mdl}[1]{\textsf{#1}}
\newcommand*{\Expliii}{Expl3\xspace}
\newcommand*{\TdS}{TdS\xspace}
%%%%% ---------------------------------------------------------------------
%%%%% Présentation macros et arguments
%%%%% ---------------------------------------------------------------------
\DeclareRobustCommand\Cs[1]{\TdSfrCP@CODE{\char`\\#1}}
\newcommand\Accolades[1]{\TdSfrCP@CODE{\{\0#1\}}}
\newcommand{\Crochets}[1]{\TdSfrCP@CODE{[\0#1]}}
\newcommand{\Parentheses}[1]{\TdSfrCP@CODE{(\0#1)}}
\newcommand{\Inegalites}[1]{\TdSfrCP@CODE{\string<\0#1\string>}}
\DeclareRobustCommand\MargAux[1]{\TdSfrCP@CODE{\{\0\M{#1}\}}}
\DeclareRobustCommand\OargAux[1]{\TdSfrCP@CODE{[\0\M{#1}]}}
\DeclareRobustCommand\ParargAux[1]{\TdSfrCP@CODE{(\0\M{#1})}}
\DeclareRobustCommand\INEGargAux[1]{\TdSfrCP@CODE{\string<\0\M{#1}\string>}}
\newcounter{codefragment}[section]
\makeatother
% -------------------------------------------------------------------------
% Déclaration et présentation des macros et de leurs arguments
% -------------------------------------------------------------------------
\str_new:N \__CMD_vedette_str
\NewDocumentCommand{\MacroPresentation}{ m }{
\textcolor{MidnightBlue}{\Cs{#1}}
}
\NewDocumentCommand{\FausseMacroPresentation}{ m }{
\textcolor{RedOrange}{\Cs{#1}}
}
\NewDocumentCommand{\Macro}{s o v}{
\IfBooleanTF{#1}
{\FausseMacroPresentation{#3}}
{
\str_set:Nn \__CMD_vedette_str {#3}
\str_replace_all:Nnn \__CMD_vedette_str {:} {+}
\gls{\str_use:N \__CMD_vedette_str}
}
}
\NewDocumentCommand{\Code}{s t+ v}{
\IfBooleanTF{#1}
{ \Crochets{#3} }
{ \IfBooleanTF{#2}
{ \Parentheses{#3} }
{ \Accolades{#3} }
}
}
\NewDocumentCommand{\Marg}{ s }{
\IfBooleanTF{#1}
{ \Accolades }
{ \MargAux }
}
\NewDocumentCommand{\Oarg}{ s }{
\IfBooleanTF{#1}
{ \Crochets }
{ \OargAux }
}
\NewDocumentCommand{\Parg}{ s }{
\IfBooleanTF{#1}
{ \Parentheses }
{ \ParargAux }
}
\NewDocumentCommand{\Iarg}{ s }{
\IfBooleanTF{#1}
{ \Inegalites }
{ \INEGargAux }
}
\NewDocumentCommand{\SyntaxeMacro}{ s o }{
\IfBooleanF{#1}{\par}
\IfNoValueTF{#2}
{ \SyntaxeMacro_Package_Courant }
{ \SyntaxeMacro_Autre_Package {#2} }
}
\NewDocumentCommand{\SyntaxeMacro_Package_Courant}{ m m }
{
\Macro{#1} \TraiterListeArguments{#2}
}
\NewDocumentCommand{\SyntaxeMacro_Autre_Package}{ m m m }
{
\Macro[#1]{#2} \TraiterListeArguments{#3}
}
\NewDocumentCommand {\TraiterListeArguments}
{ > { \SplitList{ , } } m } {
\ProcessList {#1} { \Traiter_un_argument }
}
\NewDocumentCommand {\Traiter_un_argument} { >{ \SplitArgument{1}{/} } m }
{
\Traiter_un_argument_aux #1
}
\NewDocumentCommand {\Traiter_un_argument_aux} { m m }{
\use:c {#1arg}{#2}\9
}
%%%%% ---------------------------------------------------------------------
%%%%% Termes techniques, etc.
%%%%% ---------------------------------------------------------------------
\NewDocumentCommand{\VRAI}{ }{ \textsc{vrai}\xspace }
\NewDocumentCommand{\FAUX}{ }{ \textsc{faux}\xspace }
\NewDocumentCommand{\TANTQUE}{ }{
\index{tant~que}\index{boucle}\index{boucle!tant~que}
\textsc{tant~que}\xspace
}
\NewDocumentCommand{\JUSQUA}{}{
\index{jusqu'à}\index{boucle}\index{boucle!jusqu'à}
\textsc{jusqu'à}\xspace
}
\NewDocumentCommand{\POUR}{}{
\index{pour}\index{boucle}\index{boucle!pour}
\textsc{pour}\xspace
}
\NewDocumentCommand{\SIALORSSINON}{}{
\index{si}\index{saut}\index{si!si~alors~sinon}
\textsc{si}\dots{}~\textsc{alors}\dots{}~\textsc{sinon}\xspace
}
\NewDocumentCommand{\SIALORS}{}{
\index{si}\index{saut}\index{si!si~alors}
\textsc{si}\dots{}~\textsc{alors}\xspace
}
\NewDocumentCommand{\SISINON}{}{
\index{si}\index{saut}\index{si!si~sinon}
\textsc{si}\dots{}~\textsc{sinon}\xspace
}
\NewDocumentCommand{\Ligne}{m}{
ligne\nobreakspace\(#1\)
}
%%%%% ---------------------------------------------------------------------
%%%%% Traduction, francisation
%%%%% ---------------------------------------------------------------------
%%% -----------------------------------------------------------------------
%%% tirets ouvrant et fermant:
%%% -----------------------------------------------------------------------
\cs_new:Nn \TDS_tiret: { \textemdash }
\cs_new:Nn \TDS_tiret_espace_int: { \ }
\NewDocumentCommand {\TO} { } {
\TDS_tiret: \TDS_tiret_espace_int: \ignorespaces }
\NewDocumentCommand {\TF} {t.} {
\IfBooleanTF {#1} {
\string.} {
\unskip \TDS_tiret_espace_int: \TDS_tiret:\xspace}
}
%%% -----------------------------------------------------------------------
%%% abbréviations: c'est-à-dire, par exemple,
%%% -----------------------------------------------------------------------
\cs_new:Nn \TDS_pex_abrev: { p.\nobreakspace ex.\xspace }
\cs_new:Nn \TDS_Pex_abrev: { P.\nobreakspace ex.\xspace }
\NewDocumentCommand {\PX} { s } {
\IfBooleanTF{#1}{\TDS_Pex_abrev:}{\TdS_PX_auxi}
}
\NewDocumentCommand {\TdS_PX_auxi} { t. } {
\IfBooleanTF{#1}{\TDS_pex_abrev:}{\TdS_PX_auxii}
}
\NewDocumentCommand {\TdS_PX_auxii} { t+ } {
\IfBooleanTF{#1}{par~exemple\xspace}{\TDS_pex_abrev:}
}
\NewDocumentCommand {\CAD} { t+ } {
\IfBooleanTF{#1}{c'est-\`a-dire}{c.-\`a-d.}\xspace
}
%%% -----------------------------------------------------------------------
%%% traduction
%%% -----------------------------------------------------------------------
\NewDocumentCommand { \English } { m }{
\emph{\foreignlanguage{english}{#1}}
}
\NewDocumentCommand { \InEnglish } { m }{
\emph{\foreignlanguage{english}{#1}}
}
\NewDocumentCommand { \TdSTrad } { m m }{
\emph{#1}~\TO anglais~\InEnglish{#2}\TF
}
%%% -----------------------------------------------------------------------
%%% notes et remarques
%%% -----------------------------------------------------------------------
\NewDocumentCommand { \NdT } { m }{
\footnote{NdTdS~:~#1}
}
\NewDocumentEnvironment { TdSrem } { }
{
\par\sffamily\footnotesize
}
{
\par\bigbreak
}
\NewDocumentCommand{\Fragment}{O{\TdS{} \textemdash{} \emph{définitions}} m m m}
{
\refstepcounter{codefragment}
\VerbatimInput[frame=lines,
framesep=0.75\baselineskip,
numbers=left,
firstline=#2,
lastline=#3,
label={[#1]fragment
\arabic{codefragment}},
]{#4.tex}
}
% \NewDocumentCommand { \Macro } { s o v } {
% \IfBooleanTF{#1}
% {\textcolor{RedOrange}}
% {\textcolor{MidnightBlue}}
% {\CODE{#3}}
% }
% \NewDocumentCommand{\Macro}{s o v}{
% \IfBooleanTF{#1}
% {\FausseMacroPresentation{#3}}
% {\gls{#3}}
% }